writing-plans
obra/superpowers
Élabore des plans de mise en œuvre détaillés, étape par étape, à partir de spécifications ou d’exigences, comprenant la décomposition des tâches, la structure des fichiers et des instructions relatives au développement piloté par les tests.
...Développer toutPlans de rédaction
Présentation
Rédigez des plans de mise en œuvre exhaustifs en partant du principe que l'ingénieur ne connaît absolument pas notre base de code et a des goûts discutables. Documentez tout ce qu'il doit savoir : les fichiers à modifier pour chaque tâche, le code, les tests, la documentation qu'il devra peut-être consulter, ainsi que la manière de tester le tout. Présentez-lui l’ensemble du plan sous forme de tâches faciles à gérer. DRY. YAGNI. TDD. Commits fréquents.
Partez du principe qu’il s’agit d’un développeur compétent, mais qui ne connaît pratiquement rien à notre ensemble d’outils ni à notre domaine d’activité. Partez du principe qu’il ne maîtrise pas très bien la conception de tests efficaces.
Annoncez dès le début : « J’utilise la compétence « writing-plans » pour créer le plan de mise en œuvre. »
Contexte : si vous travaillez dans un arborescence de travail isolée, celle-ci doit avoir été créée via la compétence « superpowers:using-git-worktrees » au moment de l’exécution.
Enregistrez les plans dans : docs/superpowers/plans/AAAA-MM-JJ-
- (Les préférences de l’utilisateur concernant l’emplacement des plans remplacent cette valeur par défaut)
Vérification de la portée
Si le cahier des charges couvre plusieurs sous-systèmes indépendants, il aurait dû être décomposé en cahiers des charges de sous-projets lors de la phase de brainstorming. Si ce n’est pas le cas, suggérez de le diviser en plans distincts — un par sous-système. Chaque plan doit aboutir à un logiciel fonctionnel et testable en soi.
Structure des fichiers
Avant de définir les tâches, identifiez les fichiers qui seront créés ou modifiés et la fonction de chacun d’entre eux. C’est à ce stade que les décisions de décomposition sont finalisées.
- Concevez des unités aux limites claires et aux interfaces bien définies. Chaque fichier doit avoir une responsabilité bien précise.
- Vous raisonnez mieux sur du code que vous pouvez appréhender dans son contexte d’un seul coup, et vos modifications sont plus fiables lorsque les fichiers sont ciblés. Privilégiez les fichiers plus petits et ciblés aux fichiers volumineux qui en font trop.
- Les fichiers qui évoluent ensemble doivent rester ensemble. Effectuez le découpage en fonction des responsabilités, et non selon les couches techniques.
- Dans les bases de code existantes, respectez les modèles établis. Si la base de code utilise de grands fichiers, ne la restructurez pas de manière unilatérale ; en revanche, si un fichier que vous modifiez est devenu trop lourd à gérer, il est raisonnable d’envisager de le scinder.
Cette structure détermine la décomposition des tâches. Chaque tâche doit produire des modifications autonomes qui ont un sens en elles-mêmes.
Dimensionnement des tâches
Une tâche est la plus petite unité disposant de son propre cycle de test et méritant d’être soumise à un nouveau relecteur. Lorsque vous définissez les limites d’une tâche : intégrez les étapes de mise en place, de configuration, de création d’infrastructure et de documentation dans la tâche dont le livrable en a besoin ; ne divisez que lorsque un relecteur pourrait valablement rejeter une tâche tout en approuvant celle qui la jouxte. Chaque tâche se termine par un livrable testable de manière indépendante.
Granularité des tâches en petites unités
Chaque étape correspond à une action (2 à 5 minutes) :
- « Écrire le test qui échoue » - étape
- « L’exécuter pour s’assurer qu’il échoue » – étape
- « Implémenter le code minimal pour que le test réussisse » – étape
- « Exécuter les tests et s'assurer qu'ils réussissent » – étape
- « Valider » – étape
En-tête du document de plan
Chaque plan DOIT commencer par cet en-tête :
# [Nom de la fonctionnalité] Plan de mise en œuvre
> **Pour les travailleurs agents :** COMPÉTENCE SECONDAIRE OBLIGATOIRE : utilisez les superpouvoirs :subagent-driven-development (recommandé) ou superpouvoirs :executing-plans pour mettre en œuvre ce plan tâche par tâche. Les étapes utilisent la syntaxe des cases à cocher (`- [ ]`) pour le suivi.
**Objectif :** [Une phrase décrivant ce que cela permet de créer]
**Architecture :** [2 à 3 phrases sur l’approche]
**Stack technologique :** [Technologies/bibliothèques clés]
## Contraintes globales
[Les exigences du cahier des charges applicables à l’ensemble du projet — versions minimales, limites de dépendances,
règles de nommage et de rédaction, exigences de plate-forme — une ligne par élément, avec les valeurs exactes
copiées mot pour mot depuis le cahier des charges. Les exigences de chaque tâche incluent implicitement
cette section.]
---
Structure de la tâche
### Tâche N : [Nom du composant]
**Fichiers :**
- Créer : `chemin/exact/vers/fichier.py`
- Modification : `chemin/exact/vers/fichier.py existant:123-145`
- Test : `tests/chemin/exact/vers/test.py`
**Interfaces :**
- Utilise : [ce que cette tâche utilise des tâches précédentes — signatures exactes]
- Produit : [ce dont dépendent les tâches suivantes — noms exacts des fonctions, types de paramètres
et de retour. Le développeur d’une tâche ne voit que sa propre tâche ; ce
bloc lui permet de connaître les noms et les types utilisés par les tâches voisines.]
- [ ] **Étape 1 : Écrire le test qui échoue**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Étape 2 : exécutez le test pour vérifier qu'il échoue**
Exécution : `pytest tests/path/test.py::test_name -v`
Résultat attendu : ÉCHEC avec le message « fonction non définie »
- [ ] **Étape 3 : écrivez une implémentation minimale**
```python
def function(input):
return expected
```
- [ ] **Étape 4 : Exécuter le test pour vérifier qu’il réussit**
Exécution : `pytest tests/path/test.py::test_name -v`
Résultat attendu : PASS
- [ ] **Étape 5 : Valider**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: ajout d'une fonctionnalité spécifique"
```
Pas d’espaces réservés
Chaque étape doit contenir le contenu réel dont un ingénieur a besoin. Voici des erreurs de planification — ne les écrivez jamais :
- « À déterminer », « À faire », « À implémenter plus tard », « Compléter les détails »
- « Ajouter une gestion des erreurs appropriée » / « ajouter une validation » / « gérer les cas limites »
- « Écrire des tests pour ce qui précède » (sans code de test réel)
- « Comme pour la tâche N » (répéter le code — l’ingénieur risque de lire les tâches dans le désordre)
- Étapes décrivant ce qu’il faut faire sans montrer comment (des blocs de code sont requis pour les étapes de programmation)
- Références à des types, fonctions ou méthodes non définis dans aucune tâche
À retenir
- Indiquez toujours les chemins d’accès exacts aux fichiers
- Code complet à chaque étape — si une étape modifie le code, indiquez le code
- Commandes exactes avec le résultat attendu
- DRY, YAGNI, TDD, commits fréquents
Auto-révision
Une fois le plan complet rédigé, relisez le cahier des charges avec un regard neuf et vérifiez que le plan y correspond. Il s’agit d’une liste de contrôle que vous effectuez vous-même — et non d’une tâche confiée à un sous-agent.
1. Couverture du cahier des charges : parcourez rapidement chaque section/exigence du cahier des charges. Pouvez-vous identifier une tâche qui la met en œuvre ? Répertoriez les éventuelles lacunes.
2. Analyse des espaces réservés : recherchez dans votre plan les signaux d’alerte — n’importe lequel des schémas mentionnés dans la section « Pas d’espaces réservés » ci-dessus. Corrigez-les.
3. Cohérence des types : les types, les signatures de méthodes et les noms de propriétés que vous avez utilisés dans les tâches suivantes correspondent-ils à ce que vous avez défini dans les tâches précédentes ? Une fonction appelée clearLayers() dans la tâche 3 mais clearFullLayers() dans la tâche 7 constitue un bug.
Si vous constatez des problèmes, corrigez-les directement dans le code. Inutile de relire le code : corrigez simplement et passez à la suite. Si vous identifiez une exigence du cahier des charges pour laquelle il n’existe pas de tâche, ajoutez la tâche correspondante.
Transfert de l’exécution
Après avoir enregistré le plan, proposez un choix d’exécution :
« Plan terminé et enregistré dans docs/superpowers/plans/. Deux options d’exécution :
1. Pilotée par des sous-agents (recommandée): je lance un nouveau sous-agent par tâche, je vérifie entre chaque tâche, itération rapide
2. Exécution en ligne — Exécuter les tâches dans cette session à l’aide de `executing-plans`, exécution par lots avec points de contrôle
Quelle approche ? »
Si l'option « Pilotée par des sous-agents » est choisie :
- COMPÉTENCE SECONDAIRE REQUISE : Utiliser « superpowers:subagent-driven-development »
- Un sous-agent distinct par tâche + révision en deux étapes
Si l’option « Exécution en ligne » est choisie :
- COMPÉTENCE SECONDAIRE REQUISE : Utiliser les superpouvoirs : exécution-de-plans
- Exécution par lots avec points de contrôle pour révision
---
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
Tous les fichiers
0 fichiersInstaller writing-plans
Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/obra/superpowers/tree/main/skills/writing-plans # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
