/plan
This skill is self-contained — follow the steps below instead of delegating to external planning skills (superpowers, etc.).
Research the codebase and create a spec + phased implementation plan. Zero interactive questions — explores the code instead.
When to use
Creates a track for any feature, bug fix, or refactor with a concrete, file-level implementation plan. Works with or without /setup.
MCP Tools (use if available)
session_search(query) — find similar past work in Claude Code chat history
project_code_search(query, project) — find reusable code across projects
codegraph_query(query) — check dependencies of affected files
codegraph_explain(project) — architecture overview: stack, languages, directory layers, key patterns, top dependencies, hub files
kb_search(query) — search knowledge base for relevant methodology
If MCP tools are not available, fall back to Glob + Grep + Read.
Steps
Parse task description from $ARGUMENTS.
- If empty, ask via AskUserQuestion: "What feature, bug, or refactor do you want to plan?"
- This is the ONE question maximum.
Detect context — determine where plan files should be stored:
Project context (normal project with code):
- Detected by:
package.json, pyproject.toml, Cargo.toml, *.xcodeproj, or build.gradle.kts exists in working directory
- Plan path:
docs/plan/{trackId}/
Knowledge base context (documentation-centric project):
- Detected by: NO package manifest found, BUT directories like
docs/, notes/, or structured numbered directories exist
- Plan path:
docs/plan/{shortname}/
- Note: the shortname is derived from the task (kebab-case, no date suffix for the directory)
Set $PLAN_ROOT based on detected context. All subsequent file paths use $PLAN_ROOT.
Load project context (parallel reads):
CLAUDE.md — architecture, constraints, Do/Don't
docs/prd.md — what the product does (if exists)
docs/workflow.md — TDD policy, commit strategy (if exists)
package.json or pyproject.toml — stack, versions, deps
Auto-classify track type from keywords in task description:
- Contains "fix", "bug", "broken", "error", "crash" →
bug
- Contains "refactor", "cleanup", "reorganize", "migrate" →
refactor
- Contains "update", "upgrade", "bump" →
chore
- Default →
feature
Research phase — explore the codebase to understand what needs to change:
a. Get architecture overview (if MCP available — do this FIRST):
codegraph_explain(project="{project name from CLAUDE.md or directory name}")
Gives you: stack, languages, directory layers, key patterns, top dependencies, hub files.
b. Find relevant files — Glob + Grep for patterns related to the task:
- Search for keywords from the task description
- Look at directory structure to understand architecture
- Identify files that will need modification
c. Precedent retrieval (context graph pattern — search past solutions BEFORE planning):
d. Search code across projects (if MCP available):
project_code_search(query="{relevant pattern}")
e. Check dependencies of affected files (if MCP available):
codegraph_query(query="MATCH (f:File {path: '{file}'})-[:IMPORTS]->(dep) RETURN dep.path")
f. Read existing tests in the affected area — understand testing patterns used.
g. Read CLAUDE.md architecture constraints — understand boundaries and conventions.
- Check for harness section: module boundaries, data validation rules, lint configs.
- Read
docs/ARCHITECTURE.md and docs/QUALITY_SCORE.md if they exist.
h. Detect deploy infrastructure — search for deploy scripts/configs to include deploy phase in plan:
find . -maxdepth 3 \( -name 'deploy.sh' -o -name 'Dockerfile' -o -name 'docker-compose.yml' -o -name 'fly.toml' -o -name 'wrangler.toml' \) -type f 2>/dev/null
If found, read them to understand deploy targets. Include a deploy phase in the plan with concrete commands.
Generate track ID:
- Extract a short name (2-3 words, kebab-case) from task description.
- Format:
{shortname}_{YYYYMMDD} (e.g., user-auth_20260209).
Create track directory:
mkdir -p $PLAN_ROOT
- Project context:
docs/plan/{trackId}/
- KB context:
docs/plan/{shortname}/
Generate $PLAN_ROOT/spec.md:
Based on research findings, NOT generic questions.
# Specification: {Title}
**Track ID:** {trackId}
**Type:** {Feature|Bug|Refactor|Chore}
**Created:** {YYYY-MM-DD}
**Status:** Draft
## Summary
{1-2 paragraph description based on research}
## Acceptance Criteria
- [ ] {concrete, testable criterion}
- [ ] {concrete, testable criterion}
{3-8 criteria based on research findings}
## Dependencies
- {external deps, packages, other tracks}
## Out of Scope
- {what this track does NOT cover}
## Technical Notes
- {architecture decisions from research}
- {relevant patterns found in codebase}
- {reusable code from other projects}
Generate $PLAN_ROOT/plan.md:
Concrete, file-level plan from research. Keep it tight: 2-4 phases, 5-15 tasks total.
Critical format rules (parsed by /build):
- Phase headers:
## Phase N: Name
- Tasks:
- [ ] Task N.Y: Description (with period or detailed text)
- Subtasks: indented
- [ ] Subtask description
- All tasks use
[ ] (unchecked), [~] (in progress), [x] (done)
# Implementation Plan: {Title}
**Track ID:** {trackId}
**Spec:** [spec.md](./spec.md)
**Created:** {YYYY-MM-DD}
**Status:** [ ] Not Started
## Overview
{1-2 sentences on approach}
## Phase 1: {Name}
{brief description of phase goal}
### Tasks
- [ ] Task 1.1: {description with concrete file paths}
- [ ] Task 1.2: {description}
### Verification
- [ ] {what to check after this phase}
## Phase 2: {Name}
### Tasks
- [ ] Task 2.1: {description}
- [ ] Task 2.2: {description}
### Verification
- [ ] {verification steps}
{2-4 phases total}
## Phase {N-1}: Deploy (if deploy infrastructure exists)
_Include this phase ONLY if the project has deploy scripts/configs (deploy.sh, Dockerfile, docker-compose.yml, fly.toml, wrangler.toml, vercel.json). Skip if no deploy infra found._
### Tasks
- [ ] Task {N-1}.1: {concrete deploy step — e.g. "Run python/deploy.sh to push Docker image to VPS", "wrangler deploy", etc.}
- [ ] Task {N-1}.2: Verify deployment — health check, logs, HTTP status
### Verification
- [ ] Service is live and healthy
- [ ] No runtime errors in production logs
## Phase {N}: Docs & Cleanup
### Tasks
- [ ] Task {N}.1: Update CLAUDE.md with any new commands, architecture changes, or key files
- [ ] Task {N}.2: Update README.md if public API or setup steps changed
- [ ] Task {N}.3: Remove dead code — unused imports, orphaned files, stale exports
### Verification
- [ ] CLAUDE.md reflects current project state
- [ ] Linter clean, tests pass
## Final Verification
- [ ] All acceptance criteria from spec met
- [ ] Tests pass
- [ ] Linter clean
- [ ] Build succeeds
- [ ] Documentation up to date
---
_Generated by /plan. Tasks marked [~] in progress and [x] complete by /build._
Plan quality rules:
- Every task mentions specific file paths (from research).
- Tasks are atomic — one commit each.
- Phases are independently verifiable.
- Total: 5-15 tasks (not 70).
- Last phase is always "Docs & Cleanup".
- Harness-aware: if the task introduces new patterns, include a task to update lint rules or CLAUDE.md constraints. If it touches module boundaries, include verification of dependency direction. Think: "what harness change prevents future agents from breaking this?"
Create progress task list for pipeline visibility:
After writing plan.md, create TaskCreate entries so progress is trackable:
- One task per phase: "Phase 1: {name}" with task list as description.
- This gives the user and pipeline real-time visibility into what's planned.
/build will update these tasks as it works through them.
If superpowers:writing-plans skill is available, follow its granularity format: bite-sized tasks (2-5 minutes each), complete code in task descriptions, exact file paths, verification steps per task. This enhances the built-in format above.
Show plan for approval via AskUserQuestion:
Present the spec summary + plan overview. Options:
- "Approve and start" — ready for
/build
- "Edit plan" — user wants to modify before implementing
- "Cancel" — discard the track
If "Edit plan": tell user to edit $PLAN_ROOT/plan.md manually, then run /build.
Output
Track created: {trackId}
Type: {Feature|Bug|Refactor|Chore}
Phases: {N}
Tasks: {N}
Spec: $PLAN_ROOT/spec.md
Plan: $PLAN_ROOT/plan.md
Research findings:
- {key finding 1}
- {key finding 2}
- {reusable code found, if any}
Next: /build {trackId}
Rationalizations Catalog
These thoughts mean STOP — you're skipping research:
| Thought |
Reality |
| "I know this codebase" |
You know what you've seen. Search for what you haven't. |
| "The plan is obvious" |
Obvious plans miss edge cases. Research first. |
| "Let me just start coding" |
10 minutes of research prevents 2 hours of rework. |
| "This is a small feature" |
Small features touch many files. Map the blast radius. |
| "I'll figure it out as I go" |
That's not a plan. Write the file paths first. |
| "70 tasks should cover it" |
5-15 tasks. If you need more, split into tracks. |
Compatibility Notes
- Plan format must match what
/build parses: ## Phase N:, - [ ] Task N.Y:.
/build reads docs/workflow.md for TDD policy and commit strategy (if exists).
- If
docs/workflow.md missing, /build uses sensible defaults (moderate TDD, conventional commits).
Common Issues
Plan has too many tasks
Cause: Feature scope too broad or tasks not atomic enough.
Fix: Target 5-15 tasks across 2-4 phases. Split large features into multiple tracks.
Context detection wrong (project vs KB)
Cause: Directory has both code manifests and KB-style directories.
Fix: Project context takes priority if package.json/pyproject.toml exists.
Research phase finds no relevant code
Cause: New project with minimal codebase or MCP tools unavailable.
Fix: Skill falls back to Glob + Grep. For new projects, the plan will rely more on CLAUDE.md architecture and stack conventions.
1---2name: solo-plan3description: Explore codebase and create spec + phased implementation plan with file-level task breakdown. Use when user says "plan this feature", "create implementation plan", "write a spec", "battle plan", or describes a feature/bug/refactor. Zero questions — researches code instead. Do NOT use for idea validation (use /validate) or execution (use /build).4license: MIT5---6
7# /plan
8
9This skill is self-contained — follow the steps below instead of delegating to external planning skills (superpowers, etc.).
10
11Research the codebase and create a spec + phased implementation plan. Zero interactive questions — explores the code instead.
12
13## When to use
14
15Creates a track for any feature, bug fix, or refactor with a concrete, file-level implementation plan. Works with or without `/setup`.
16
17## MCP Tools (use if available)
18
19- `session_search(query)` — find similar past work in Claude Code chat history
20- `project_code_search(query, project)` — find reusable code across projects
21- `codegraph_query(query)` — check dependencies of affected files
22- `codegraph_explain(project)` — architecture overview: stack, languages, directory layers, key patterns, top dependencies, hub files
23- `kb_search(query)` — search knowledge base for relevant methodology
24
25If MCP tools are not available, fall back to Glob + Grep + Read.
26
27## Steps
28
291. **Parse task description** from `$ARGUMENTS`.
30 - If empty, ask via AskUserQuestion: "What feature, bug, or refactor do you want to plan?"
31 - This is the ONE question maximum.
32
332. **Detect context** — determine where plan files should be stored:
34
35 **Project context** (normal project with code):
36 - Detected by: `package.json`, `pyproject.toml`, `Cargo.toml`, `*.xcodeproj`, or `build.gradle.kts` exists in working directory
37 - Plan path: `docs/plan/{trackId}/`
38
39 **Knowledge base context** (documentation-centric project):
40 - Detected by: NO package manifest found, BUT directories like `docs/`, `notes/`, or structured numbered directories exist
41 - Plan path: `docs/plan/{shortname}/`
42 - Note: the shortname is derived from the task (kebab-case, no date suffix for the directory)
43
44 Set `$PLAN_ROOT` based on detected context. All subsequent file paths use `$PLAN_ROOT`.
45
463. **Load project context** (parallel reads):
47 - `CLAUDE.md` — architecture, constraints, Do/Don't
48 - `docs/prd.md` — what the product does (if exists)
49 - `docs/workflow.md` — TDD policy, commit strategy (if exists)
50 - `package.json` or `pyproject.toml` — stack, versions, deps
51
523. **Auto-classify track type** from keywords in task description:
53 - Contains "fix", "bug", "broken", "error", "crash" → `bug`
54 - Contains "refactor", "cleanup", "reorganize", "migrate" → `refactor`
55 - Contains "update", "upgrade", "bump" → `chore`
56 - Default → `feature`
57
584. **Research phase** — explore the codebase to understand what needs to change:
59
60 a. **Get architecture overview** (if MCP available — do this FIRST):
61 ```
62 codegraph_explain(project="{project name from CLAUDE.md or directory name}")
63 ```
64 Gives you: stack, languages, directory layers, key patterns, top dependencies, hub files.
65
66 b. **Find relevant files** — Glob + Grep for patterns related to the task:
67 - Search for keywords from the task description
68 - Look at directory structure to understand architecture
69 - Identify files that will need modification
70
71 c. **Precedent retrieval** (context graph pattern — search past solutions BEFORE planning):
72 - Search past sessions (if MCP available):
73 ```
74 session_search(query="{task description keywords}")
75 ```
76 Look for: how similar tasks were solved, what went wrong, what patterns worked.
77 - Search KB for relevant methodology:
78 ```
79 kb_search(query="{task type}: {keywords}")
80 ```
81 Check for: harness patterns, architectural constraints, quality scores.
82
83 d. **Search code across projects** (if MCP available):
84 ```
85 project_code_search(query="{relevant pattern}")
86 ```
87
88 e. **Check dependencies** of affected files (if MCP available):
89 ```
90 codegraph_query(query="MATCH (f:File {path: '{file}'})-[:IMPORTS]->(dep) RETURN dep.path")
91 ```
92
93 f. **Read existing tests** in the affected area — understand testing patterns used.
94
95 g. **Read CLAUDE.md** architecture constraints — understand boundaries and conventions.
96 - Check for harness section: module boundaries, data validation rules, lint configs.
97 - Read `docs/ARCHITECTURE.md` and `docs/QUALITY_SCORE.md` if they exist.
98
99 h. **Detect deploy infrastructure** — search for deploy scripts/configs to include deploy phase in plan:
100 ```bash
101 find . -maxdepth 3 \( -name 'deploy.sh' -o -name 'Dockerfile' -o -name 'docker-compose.yml' -o -name 'fly.toml' -o -name 'wrangler.toml' \) -type f 2>/dev/null
102 ```
103 If found, read them to understand deploy targets. Include a deploy phase in the plan with concrete commands.
104
1055. **Generate track ID:**
106 - Extract a short name (2-3 words, kebab-case) from task description.
107 - Format: `{shortname}_{YYYYMMDD}` (e.g., `user-auth_20260209`).
108
1096. **Create track directory:**
110 ```bash
111 mkdir -p $PLAN_ROOT
112 ```
113 - Project context: `docs/plan/{trackId}/`
114 - KB context: `docs/plan/{shortname}/`
115
1167. **Generate `$PLAN_ROOT/spec.md`:**
117 Based on research findings, NOT generic questions.
118 ```markdown
119 # Specification: {Title}
120
121 **Track ID:** {trackId}
122 **Type:** {Feature|Bug|Refactor|Chore}
123 **Created:** {YYYY-MM-DD}
124 **Status:** Draft
125
126 ## Summary
127 {1-2 paragraph description based on research}
128
129 ## Acceptance Criteria
130 - [ ] {concrete, testable criterion}
131 - [ ] {concrete, testable criterion}
132 {3-8 criteria based on research findings}
133
134 ## Dependencies
135 - {external deps, packages, other tracks}
136
137 ## Out of Scope
138 - {what this track does NOT cover}
139
140 ## Technical Notes
141 - {architecture decisions from research}
142 - {relevant patterns found in codebase}
143 - {reusable code from other projects}
144 ```
145
1468. **Generate `$PLAN_ROOT/plan.md`:**
147 Concrete, file-level plan from research. Keep it tight: 2-4 phases, 5-15 tasks total.
148
149 **Critical format rules** (parsed by `/build`):
150 - Phase headers: `## Phase N: Name`
151 - Tasks: `- [ ] Task N.Y: Description` (with period or detailed text)
152 - Subtasks: indented ` - [ ] Subtask description`
153 - All tasks use `[ ]` (unchecked), `[~]` (in progress), `[x]` (done)
154
155 ```markdown
156 # Implementation Plan: {Title}
157
158 **Track ID:** {trackId}
159 **Spec:** [spec.md](./spec.md)
160 **Created:** {YYYY-MM-DD}
161 **Status:** [ ] Not Started
162
163 ## Overview
164 {1-2 sentences on approach}
165
166 ## Phase 1: {Name}
167 {brief description of phase goal}
168
169 ### Tasks
170 - [ ] Task 1.1: {description with concrete file paths}
171 - [ ] Task 1.2: {description}
172
173 ### Verification
174 - [ ] {what to check after this phase}
175
176 ## Phase 2: {Name}
177 ### Tasks
178 - [ ] Task 2.1: {description}
179 - [ ] Task 2.2: {description}
180
181 ### Verification
182 - [ ] {verification steps}
183
184 {2-4 phases total}
185
186 ## Phase {N-1}: Deploy (if deploy infrastructure exists)
187 _Include this phase ONLY if the project has deploy scripts/configs (deploy.sh, Dockerfile, docker-compose.yml, fly.toml, wrangler.toml, vercel.json). Skip if no deploy infra found._
188
189 ### Tasks
190 - [ ] Task {N-1}.1: {concrete deploy step — e.g. "Run python/deploy.sh to push Docker image to VPS", "wrangler deploy", etc.}
191 - [ ] Task {N-1}.2: Verify deployment — health check, logs, HTTP status
192
193 ### Verification
194 - [ ] Service is live and healthy
195 - [ ] No runtime errors in production logs
196
197 ## Phase {N}: Docs & Cleanup
198 ### Tasks
199 - [ ] Task {N}.1: Update CLAUDE.md with any new commands, architecture changes, or key files
200 - [ ] Task {N}.2: Update README.md if public API or setup steps changed
201 - [ ] Task {N}.3: Remove dead code — unused imports, orphaned files, stale exports
202
203 ### Verification
204 - [ ] CLAUDE.md reflects current project state
205 - [ ] Linter clean, tests pass
206
207 ## Final Verification
208 - [ ] All acceptance criteria from spec met
209 - [ ] Tests pass
210 - [ ] Linter clean
211 - [ ] Build succeeds
212 - [ ] Documentation up to date
213
214 ---
215 _Generated by /plan. Tasks marked [~] in progress and [x] complete by /build._
216 ```
217
218 **Plan quality rules:**
219 - Every task mentions specific file paths (from research).
220 - Tasks are atomic — one commit each.
221 - Phases are independently verifiable.
222 - Total: 5-15 tasks (not 70).
223 - **Last phase is always "Docs & Cleanup"**.
224 - **Harness-aware:** if the task introduces new patterns, include a task to update lint rules or CLAUDE.md constraints. If it touches module boundaries, include verification of dependency direction. Think: "what harness change prevents future agents from breaking this?"
225
2269. **Create progress task list** for pipeline visibility:
227
228 After writing plan.md, create TaskCreate entries so progress is trackable:
229 - One task per phase: "Phase 1: {name}" with task list as description.
230 - This gives the user and pipeline real-time visibility into what's planned.
231 - `/build` will update these tasks as it works through them.
232
233 If `superpowers:writing-plans` skill is available, follow its granularity format: bite-sized tasks (2-5 minutes each), complete code in task descriptions, exact file paths, verification steps per task. This enhances the built-in format above.
234
23510. **Show plan for approval** via AskUserQuestion:
236 Present the spec summary + plan overview. Options:
237 - "Approve and start" — ready for `/build`
238 - "Edit plan" — user wants to modify before implementing
239 - "Cancel" — discard the track
240
241 If "Edit plan": tell user to edit `$PLAN_ROOT/plan.md` manually, then run `/build`.
242
243## Output
244
245```
246Track created: {trackId}
247
248 Type: {Feature|Bug|Refactor|Chore}
249 Phases: {N}
250 Tasks: {N}
251 Spec: $PLAN_ROOT/spec.md
252 Plan: $PLAN_ROOT/plan.md
253
254Research findings:
255 - {key finding 1}
256 - {key finding 2}
257 - {reusable code found, if any}
258
259Next: /build {trackId}
260```
261
262## Rationalizations Catalog
263
264These thoughts mean STOP — you're skipping research:
265
266| Thought | Reality |
267|---------|---------|
268| "I know this codebase" | You know what you've seen. Search for what you haven't. |
269| "The plan is obvious" | Obvious plans miss edge cases. Research first. |
270| "Let me just start coding" | 10 minutes of research prevents 2 hours of rework. |
271| "This is a small feature" | Small features touch many files. Map the blast radius. |
272| "I'll figure it out as I go" | That's not a plan. Write the file paths first. |
273| "70 tasks should cover it" | 5-15 tasks. If you need more, split into tracks. |
274
275## Compatibility Notes
276
277- Plan format must match what `/build` parses: `## Phase N:`, `- [ ] Task N.Y:`.
278- `/build` reads `docs/workflow.md` for TDD policy and commit strategy (if exists).
279- If `docs/workflow.md` missing, `/build` uses sensible defaults (moderate TDD, conventional commits).
280
281## Common Issues
282
283### Plan has too many tasks
284**Cause:** Feature scope too broad or tasks not atomic enough.
285**Fix:** Target 5-15 tasks across 2-4 phases. Split large features into multiple tracks.
286
287### Context detection wrong (project vs KB)
288**Cause:** Directory has both code manifests and KB-style directories.
289**Fix:** Project context takes priority if `package.json`/`pyproject.toml` exists.
290
291### Research phase finds no relevant code
292**Cause:** New project with minimal codebase or MCP tools unavailable.
293**Fix:** Skill falls back to Glob + Grep. For new projects, the plan will rely more on CLAUDE.md architecture and stack conventions.