writing-plans
obra/superpowers
Erstellt detaillierte, schrittweise Umsetzungspläne auf der Grundlage von Spezifikationen oder Anforderungen, einschließlich einer Aufgliederung der Aufgaben, einer Dateistruktur und Anweisungen zur testgetriebenen Entwicklung.
...Alle erweiternSchreibpläne
Überblick
Erstellen Sie umfassende Implementierungspläne unter der Annahme, dass der Entwickler keinerlei Kontext für unsere Codebasis hat und einen fragwürdigen Geschmack besitzt. Dokumentieren Sie alles, was er wissen muss: welche Dateien für jede Aufgabe bearbeitet werden müssen, Code, Tests, Dokumentation, die er möglicherweise prüfen muss, sowie wie das Ganze getestet wird. Geben Sie ihm den gesamten Plan in Form von überschaubaren Teilaufgaben. DRY. YAGNI. TDD. Häufige Commits.
Gehen Sie davon aus, dass er ein erfahrener Entwickler ist, aber so gut wie nichts über unser Toolset oder unseren Problembereich weiß. Gehen Sie davon aus, dass er sich mit gutem Testdesign nicht besonders gut auskennt.
Kündige zu Beginn an: „Ich nutze die Fähigkeit ‚ writing-plans ‘, um den Implementierungsplan zu erstellen.“
Kontext: Wenn in einem isolierten Arbeitsbaum gearbeitet wird, sollte dieser zur Ausführungszeit über die Fertigkeit „superpowers:using-git-worktrees“ erstellt worden sein.
Pläne speichern unter: docs/superpowers/plans/YYYY-MM-DD-
- (Benutzereinstellungen für den Speicherort des Plans haben Vorrang vor dieser Standardeinstellung)
Umfangsprüfung
Wenn die Spezifikation mehrere unabhängige Teilsysteme abdeckt, hätte sie bereits während des Brainstormings in Teilprojekt-Spezifikationen aufgeteilt werden sollen. Ist dies nicht geschehen, schlage vor, sie in separate Pläne aufzuteilen – einen pro Teilsystem. Jeder Plan sollte für sich allein funktionierende, testbare Software hervorbringen.
Dateistruktur
Bevor Sie Aufgaben definieren, legen Sie fest, welche Dateien erstellt oder geändert werden und wofür jede einzelne zuständig ist. Hier werden die Entscheidungen zur Aufgliederung festgeschrieben.
- Entwerfen Sie Einheiten mit klaren Grenzen und genau definierten Schnittstellen. Jede Datei sollte eine eindeutige Aufgabe haben.
- Man kann Code am besten durchdenken, wenn man den gesamten Kontext auf einen Blick erfassen kann, und Änderungen sind zuverlässiger, wenn Dateien fokussiert sind. Bevorzuge kleinere, fokussierte Dateien gegenüber großen, die zu viele Aufgaben erfüllen.
- Dateien, die gemeinsam geändert werden, sollten zusammenbleiben. Teilen Sie nach Zuständigkeiten auf, nicht nach technischen Schichten.
- Halten Sie sich in bestehenden Codebasen an etablierte Muster. Wenn die Codebase große Dateien verwendet, sollten Sie diese nicht einseitig umstrukturieren – sollte eine Datei, die Sie bearbeiten, jedoch unübersichtlich geworden sein, ist es sinnvoll, eine Aufteilung in den Plan aufzunehmen.
Diese Struktur bestimmt die Aufteilung der Aufgaben. Jede Aufgabe sollte in sich geschlossene Änderungen hervorbringen, die für sich genommen Sinn ergeben.
Richtige Dimensionierung von Aufgaben
Eine Aufgabe ist die kleinste Einheit, die einen eigenen Testzyklus durchläuft und eine Überprüfung durch einen neuen Prüfer rechtfertigt. Beim Festlegen von Aufgabengrenzen: Integrieren Sie Schritte zur Einrichtung, Konfiguration, Strukturierung und Dokumentation in die Aufgabe, deren Ergebnis diese benötigt; teilen Sie nur dort auf, wo ein Prüfer sinnvollerweise eine Aufgabe ablehnen könnte, während er die benachbarte genehmigt. Jede Aufgabe endet mit einem unabhängig testbaren Ergebnis.
Überschaubare Aufgabengranularität
Jeder Schritt ist eine einzelne Aktion (2–5 Minuten):
- „Den fehlgeschlagenen Test schreiben“ – Schritt
- „Führe ihn aus, um sicherzustellen, dass er fehlschlägt“ – Schritt
- „Den minimalen Code implementieren, damit der Test besteht“ – Schritt
- „Führe die Tests aus und stelle sicher, dass sie bestehen“ – Schritt
- „Commit“ – Schritt
Kopfzeile des Planungsdokuments
Jeder Plan MUSS mit dieser Überschrift beginnen:
# [Feature-Name] Implementierungsplan
> **Für agentische Mitarbeiter:** ERFORDERLICHE TEILFÄHIGKEIT: Verwende „superpowers:subagent-driven-development“ (empfohlen) oder „superpowers:executing-plans“, um diesen Plan Aufgabe für Aufgabe umzusetzen. Schritte verwenden die Checkbox-Syntax (`- [ ]`) zur Nachverfolgung.
**Ziel:** [Ein Satz, der beschreibt, was damit erstellt wird]
**Architektur:** [2–3 Sätze zum Ansatz]
**Tech-Stack:** [Wichtige Technologien/Bibliotheken]
## Globale Einschränkungen
[Die projektweiten Anforderungen aus der Spezifikation – Mindestversionen, Abhängigkeitsgrenzen,
Namens- und Textregeln, Plattformanforderungen – jeweils eine Zeile, wobei die genauen
Werte wörtlich aus der Spezifikation übernommen werden. Die Anforderungen jeder Aufgabe
umfassen implizit diesen Abschnitt.]
---
Aufgabenstruktur
### Aufgabe N: [Name der Komponente]
**Dateien:**
- Erstellen: `genauer/Pfad/zu/Datei.py`
- Ändern: `genauer/Pfad/zu/existing.py:123-145`
- Testen: `tests/genauer/Pfad/zu/test.py`
**Schnittstellen:**
- Verwendet: [Was diese Aufgabe aus früheren Aufgaben nutzt – genaue Signaturen]
- Liefert: [worauf sich nachfolgende Aufgaben stützen – genaue Funktionsnamen, Parameter-
und Rückgabetypen. Der Implementierer einer Aufgabe sieht nur seine eigene Aufgabe; über diesen
Block erfährt er die Namen und Typen, die benachbarte Aufgaben verwenden.]
- [ ] **Schritt 1: Den fehlschlagenden Test schreiben**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Schritt 2: Test ausführen, um zu überprüfen, ob er fehlschlägt**
Ausführen: `pytest tests/path/test.py::test_name -v`
Erwartet: FAIL mit „function not defined“
- [ ] **Schritt 3: Minimale Implementierung schreiben**
```python
def function(input):
return expected
```
- [ ] **Schritt 4: Test ausführen, um zu überprüfen, ob er erfolgreich ist**
Ausführen: `pytest tests/path/test.py::test_name -v`
Erwartet: PASS
- [ ] **Schritt 5: Committen**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: bestimmte Funktion hinzufügen"
```
Keine Platzhalter
Jeder Schritt muss den tatsächlichen Inhalt enthalten, den ein Entwickler benötigt. Folgende Formulierungen sind Fehler im Plan – verwende sie niemals:
- „TBD“, „TODO“, „später implementieren“, „Details ergänzen“
- „Entsprechende Fehlerbehandlung hinzufügen“ / „Validierung hinzufügen“ / „Randfälle behandeln“
- „Tests für das Obige schreiben“ (ohne tatsächlichen Testcode)
- „Ähnlich wie Aufgabe N“ (Wiederholung des Codes – der Entwickler liest die Aufgaben möglicherweise nicht in der richtigen Reihenfolge)
- Schritte, die beschreiben, was zu tun ist, ohne zu zeigen, wie (Codeblöcke für Code-Schritte sind erforderlich)
- Verweise auf Typen, Funktionen oder Methoden, die in keiner Aufgabe definiert sind
Beachten Sie
- Immer genaue Dateipfade angeben
- Vollständiger Code in jedem Schritt – wenn ein Schritt den Code ändert, den Code anzeigen
- Genaue Befehle mit erwarteter Ausgabe
- DRY, YAGNI, TDD, häufige Commits
Selbstüberprüfung
Nachdem du den vollständigen Plan geschrieben hast, betrachte die Spezifikation mit frischem Blick und vergleiche den Plan damit. Dies ist eine Checkliste, die du selbst abarbeitest – kein Auftrag an einen Unteragenten.
1. Spezifikationsabdeckung: Überfliege jeden Abschnitt/jede Anforderung in der Spezifikation. Kannst du eine Aufgabe benennen, die diese umsetzt? Liste eventuelle Lücken auf.
2. Platzhalter-Check: Durchsuche deinen Plan nach Warnzeichen – nach Mustern aus dem obigen Abschnitt „Keine Platzhalter“. Behebe sie.
3. Typenkonsistenz: Stimmen die Typen, Methodensignaturen und Eigenschaftsnamen, die du in späteren Aufgaben verwendet hast, mit denen überein, die du in früheren Aufgaben definiert hast? Eine Funktion namens `clearLayers()` in Aufgabe 3, die in Aufgabe 7 jedoch `clearFullLayers()` heißt, ist ein Fehler.
Wenn du Probleme findest, behebe sie direkt im Code. Eine erneute Überprüfung ist nicht nötig – behebe den Fehler einfach und mach weiter. Wenn du eine Anforderung in der Spezifikation findest, zu der es keine Aufgabe gibt, füge die Aufgabe hinzu.
Übergabe zur Ausführung
Bieten Sie nach dem Speichern des Plans eine Auswahl an Ausführungsoptionen an:
„Plan fertiggestellt und gespeichert unter docs/superpowers/plans/. Zwei Ausführungsoptionen:
1. Subagentengesteuert (empfohlen) – Ich setze pro Aufgabe einen neuen Subagenten ein, überprüfe zwischen den Aufgaben, schnelle Iteration
2. Inline-Ausführung – Aufgaben in dieser Sitzung mithilfe von „executing-plans“ ausführen, Batch-Ausführung mit Checkpoints
Welcher Ansatz?“
Wenn „Subagentengesteuert“ gewählt wurde:
- ERFORDERLICHE TEILFÄHIGKEIT: Verwende „superpowers:subagent-driven-development“
- Neuer Subagent pro Aufgabe + zweistufige Überprüfung
Wenn „Inline-Ausführung“ gewählt wurde:
- ERFORDERLICHE TEILFÄHIGKEIT: Superkräfte einsetzen: „Pläne ausführen“
- Batch-Ausführung mit Checkpoints zur Überprüfung
---
name: writing-plans
description: Creates detailed, step-by-step implementation plans from specs or requirements, with task decomposition, file structure, and test-driven development instructions.
---
# Writing Plans
## Overview
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time.
**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
- (User preferences for plan location override this default)
## Scope Check
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.
## File Structure
Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
- Design units with clear boundaries and well-defined interfaces. Each file should have one clear responsibility.
- You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
- Files that change together should live together. Split by responsibility, not by technical layer.
- In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
## Task Right-Sizing
A task is the smallest unit that carries its own test cycle and is worth a
fresh reviewer's gate. When drawing task boundaries: fold setup,
configuration, scaffolding, and documentation steps into the task whose
deliverable needs them; split only where a reviewer could meaningfully
reject one task while approving its neighbor. Each task ends with an
independently testable deliverable.
## Bite-Sized Task Granularity
**Each step is one action (2-5 minutes):**
- "Write the failing test" - step
- "Run it to make sure it fails" - step
- "Implement the minimal code to make the test pass" - step
- "Run the tests and make sure they pass" - step
- "Commit" - step
## Plan Document Header
**Every plan MUST start with this header:**
```markdown
# [Feature Name] Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
## Global Constraints
[The spec's project-wide requirements — version floors, dependency limits,
naming and copy rules, platform requirements — one line each, with exact
values copied verbatim from the spec. Every task's requirements implicitly
include this section.]
---
```
## Task Structure
````markdown
### Task N: [Component Name]
**Files:**
- Create: `exact/path/to/file.py`
- Modify: `exact/path/to/existing.py:123-145`
- Test: `tests/exact/path/to/test.py`
**Interfaces:**
- Consumes: [what this task uses from earlier tasks — exact signatures]
- Produces: [what later tasks rely on — exact function names, parameter
and return types. A task's implementer sees only their own task; this
block is how they learn the names and types neighboring tasks use.]
- [ ] **Step 1: Write the failing test**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Step 2: Run test to verify it fails**
Run: `pytest tests/path/test.py::test_name -v`
Expected: FAIL with "function not defined"
- [ ] **Step 3: Write minimal implementation**
```python
def function(input):
return expected
```
- [ ] **Step 4: Run test to verify it passes**
Run: `pytest tests/path/test.py::test_name -v`
Expected: PASS
- [ ] **Step 5: Commit**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
````
## No Placeholders
Every step must contain the actual content an engineer needs. These are **plan failures** — never write them:
- "TBD", "TODO", "implement later", "fill in details"
- "Add appropriate error handling" / "add validation" / "handle edge cases"
- "Write tests for the above" (without actual test code)
- "Similar to Task N" (repeat the code — the engineer may be reading tasks out of order)
- Steps that describe what to do without showing how (code blocks required for code steps)
- References to types, functions, or methods not defined in any task
## Remember
- Exact file paths always
- Complete code in every step — if a step changes code, show the code
- Exact commands with expected output
- DRY, YAGNI, TDD, frequent commits
## Self-Review
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
**2. Placeholder scan:** Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug.
If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
## Execution Handoff
After saving the plan, offer execution choice:
**"Plan complete and saved to `docs/superpowers/plans/<filename>.md`. Two execution options:**
**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration
**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints
**Which approach?"**
**If Subagent-Driven chosen:**
- **REQUIRED SUB-SKILL:** Use superpowers:subagent-driven-development
- Fresh subagent per task + two-stage review
**If Inline Execution chosen:**
- **REQUIRED SUB-SKILL:** Use superpowers:executing-plans
- Batch execution with checkpoints for review
Alle Dateien
0 Dateienwriting-plans installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/obra/superpowers/tree/main/skills/writing-plans # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
