From mysuperpowers
Use after creating-prd or brainstorming when the user wants a sequenced implementation plan. Also activates when the user explicitly requests a 'milestone plan', 'implementation plan', or asks how to structure the work. Triggers on update scenarios too: 'update the plan', 'revise the plan', 'add a revision milestone', 'add an additive milestone', 'modify the plan for feature X'. Always confirms intent before producing. Does not activate for trivial one-session tasks.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mysuperpowers:milestone-planningThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<SUBAGENT-STOP>
This skill turns an approved spec or PRD into a sequenced milestone plan. It covers decomposition, drafting, and saving plan.md. It does not touch implementation.
Session boundaries are intentional, not ceremony. Each milestone runs in a fresh session so it gets a clean context window — a session that starts mid-planning carries planning-phase assumptions that can muddle implementation decisions. The plan file contains an execution prompt for each milestone; the user pastes it into a new session when they're ready to execute.
Do NOT produce a plan without explicit user confirmation. Do NOT start implementation. Do NOT chain into execution after saving plan.md. This skill ends when the plan is saved and approved, or when the user declines. No exceptions.When this skill activates, determine which mode applies before doing anything else:
Update Mode — any of these apply:
docs/features/<name>/plan.mdCreate Mode — neither of the above applies and the user is creating a new plan.
If uncertain, ask before proceeding:
"Is this a new plan or an update to an existing one?"
Do not begin either mode's checklist until the mode is confirmed.
You MUST create a task for each of these items and complete them in order:
docs/features/<feature-name>/prd.md if it exists; otherwise the brainstorming spec from the current sessiondocs/features/<kebab-name>/plan.mdFor Update Mode, see the Update Mode section below.
digraph milestone_planning {
"Invoked (Create Mode)" [shape=doublecircle];
"PRD exists at path?" [shape=diamond];
"Read PRD" [shape=box];
"Use spec from session" [shape=box];
"Confirm: want a plan?" [shape=diamond];
"Stop and wait" [shape=box];
"Ask presentation style" [shape=box];
"Determine file path" [shape=box];
"plan.md exists?\n(unexpected)" [shape=diamond];
"Stop: offer Update Mode" [shape=box];
"Decompose into milestones" [shape=box];
"Draft and present\nper chosen style" [shape=box];
"User approves?" [shape=diamond];
"Save plan.md" [shape=box];
"STOP" [shape=doublecircle];
"Invoked (Create Mode)" -> "PRD exists at path?";
"PRD exists at path?" -> "Read PRD" [label="yes"];
"PRD exists at path?" -> "Use spec from session" [label="no"];
"Read PRD" -> "Confirm: want a plan?";
"Use spec from session" -> "Confirm: want a plan?";
"Confirm: want a plan?" -> "Stop and wait" [label="no"];
"Confirm: want a plan?" -> "Ask presentation style" [label="yes"];
"Ask presentation style" -> "Determine file path";
"Determine file path" -> "plan.md exists?\n(unexpected)";
"plan.md exists?\n(unexpected)" -> "Stop: offer Update Mode" [label="yes"];
"plan.md exists?\n(unexpected)" -> "Decompose into milestones" [label="no"];
"Decompose into milestones" -> "Draft and present\nper chosen style";
"Draft and present\nper chosen style" -> "User approves?";
"User approves?" -> "Draft and present\nper chosen style" [label="no, revise"];
"User approves?" -> "Save plan.md" [label="yes"];
"Save plan.md" -> "STOP";
}
Look for docs/features/<feature-name>/prd.md. If it exists, read it — this is the primary input for decomposition. If not, use the brainstorming spec from the current session. If neither is available, ask the user to describe the feature goal before continuing.
Even when invoked explicitly, confirm before producing anything:
"I can create a milestone implementation plan for this. Want me to proceed?"
If no, stop and wait. If yes, continue.
"How would you like to review the plan — milestone by milestone so we can refine each one, or as a complete first draft you review all at once?"
Hold the answer — it determines how Step 7 runs.
Default path: docs/features/<kebab-name>/plan.md
If the feature name isn't obvious from context, ask:
"What should I call this feature? I'll save the plan to
docs/features/<name>/plan.md."
Confirm the path before writing.
Check whether a file already exists at docs/features/<feature-name>/plan.md. A plan at this path is unexpected in Create Mode — it means Mode Detection may have missed an update scenario. If the file exists, stop and tell the user:
"A plan already exists at
docs/features/<feature-name>/plan.md. Did you mean to update it? I can switch to Update Mode."
Break the work into milestones using the rules in Milestone Granularity below. For each milestone, define:
Write the approved plan to the file path from Step 4. Always save to the repo — never leave plan.md as conversation-only output.
Then stop. Do not offer to begin execution. Do not suggest starting milestone 1. The user will open a new session and paste the execution prompt from plan.md when they're ready.
Activates when Mode Detection determines an existing plan is being revised. Three distinct flows handle different states of execution: in-place updates, revision milestones, and additive milestones. The preconditions determine which flow applies before any editing begins.
You MUST create a task for each of these items and complete them in order:
docs/features/<feature-name>/plan.md (required), prd.md (warn if missing), and <feature-name>-design.md (warn if missing)digraph update_plan {
"Invoked (Update Mode)" [shape=doublecircle];
"Determine feature name" [shape=box];
"Read context\n(plan.md required; prd.md, design warn)" [shape=box];
"plan.md missing?" [shape=diamond];
"Fallback: offer Create Mode" [shape=box];
"PRD-alignment check\n(ask once)" [shape=box];
"User wants to\nupdate PRD first?" [shape=diamond];
"Stop: tell user to\ninvoke creating-prd" [shape=box];
"Execution state check:\nany milestone executed?" [shape=diamond];
"Scope check:\nfuture / executed / expansion?" [shape=diamond];
"Flow A:\nIn-place update" [shape=box];
"Flow B:\nRevision milestone" [shape=box];
"Flow C:\nAdditive milestone" [shape=box];
"Save plan.md" [shape=box];
"STOP" [shape=doublecircle];
"Invoked (Update Mode)" -> "Determine feature name";
"Determine feature name" -> "Read context\n(plan.md required; prd.md, design warn)";
"Read context\n(plan.md required; prd.md, design warn)" -> "plan.md missing?";
"plan.md missing?" -> "Fallback: offer Create Mode" [label="yes"];
"plan.md missing?" -> "PRD-alignment check\n(ask once)" [label="no"];
"PRD-alignment check\n(ask once)" -> "User wants to\nupdate PRD first?";
"User wants to\nupdate PRD first?" -> "Stop: tell user to\ninvoke creating-prd" [label="yes"];
"User wants to\nupdate PRD first?" -> "Execution state check:\nany milestone executed?" [label="proceed"];
"Execution state check:\nany milestone executed?" -> "Flow A:\nIn-place update" [label="no"];
"Execution state check:\nany milestone executed?" -> "Scope check:\nfuture / executed / expansion?" [label="yes"];
"Scope check:\nfuture / executed / expansion?" -> "Flow A:\nIn-place update" [label="future work only"];
"Scope check:\nfuture / executed / expansion?" -> "Flow B:\nRevision milestone" [label="affects executed"];
"Scope check:\nfuture / executed / expansion?" -> "Flow C:\nAdditive milestone" [label="pure expansion"];
"Flow A:\nIn-place update" -> "Save plan.md";
"Flow B:\nRevision milestone" -> "Save plan.md";
"Flow C:\nAdditive milestone" -> "Save plan.md";
"Save plan.md" -> "STOP";
}
If Step U2 finds no file at docs/features/<feature-name>/plan.md, stop the update flow:
"I don't find an existing plan at
docs/features/<feature-name>/plan.md. Did you mean to create a new one? If so, I can switch to Create Mode. If not, check the feature name and try again."
Confirm the kebab-case name of the feature. This determines the canonical path docs/features/<feature-name>/. If the name isn't clear from the conversation, ask:
"What's the feature name? I'll look for the plan at
docs/features/<name>/plan.md."
Read docs/features/<feature-name>/plan.md — this is required. If it doesn't exist, see the Fallback above.
Also read docs/features/<feature-name>/prd.md. If it does not exist, warn:
"I don't see a PRD at
docs/features/<feature-name>/prd.md. Plans are usually based on an approved PRD. Without one, this update won't have requirements context as an anchor. Continue anyway?"
Also read docs/features/<feature-name>/<feature-name>-design.md. If it does not exist, warn:
"I don't see a design file at
docs/features/<feature-name>/<feature-name>-design.md. Without one, this update won't have the original design intent as context. Continue anyway?"
If the user declines either warning: stop and wait. If they confirm: continue.
Ask once:
"Has the PRD been updated to reflect this change? Plans should track what's in the PRD. If the PRD hasn't been updated yet, it's often better to update it first before revising the plan."
creating-prd.Ask:
"Has any milestone in this plan been executed yet?"
Only runs if Step U4 confirmed that milestones have been executed. Ask:
"Does your change affect work that's already been executed, or only future work? Or is this a pure scope expansion — adding new work without changing anything that's already been done?"
Based on the answer:
If the answer is ambiguous, ask a follow-up: "Is any of the existing completed work being undone, superseded, or reworked — or is this purely an addition?"
Use when the change affects only milestones that have not yet been executed, or future milestones.
"Milestone N has completed checklist items. Editing it in-place may invalidate committed work from execution. Proceed anyway?" Wait for explicit user confirmation. If they decline: skip this milestone or stop, per their choice.
Use when the change supersedes or reworks something already executed.
"Revision milestone M already exists in the plan. Adding Milestone N (Revision) now — both revisions will coexist. Proceed?" Wait for confirmation.
### Milestone N (Revision): <name>Use when the change is a pure scope expansion — new work without modifying existing milestones.
### Milestone N (Additive): <name>Overwrite docs/features/<feature-name>/plan.md with the updated content. Always save to the repo.
Stop. Do not offer to begin execution. Do not chain into any next step. The same HARD-GATE that applies in Create Mode applies here: this skill ends when the plan is saved. The user starts execution in a fresh session.
The approved plan file must follow this layout exactly. Execution sessions depend on consistent field names and formatting.
Header block:
# Implementation Plan: Feature Name
**Source:** docs/features/feature-name/prd.md (or "brainstorming spec only")
**Created:** YYYY-MM-DD
## Overview
1-2 sentence summary of the plan approach.
## Milestones
Each milestone block (repeat for each milestone, separated by ---):
### Milestone N: Short name
**Goal:** What this milestone achieves.
**Files affected:** list of expected files
**Dependencies:** None (or "Requires Milestone N to be complete — reason")
**Completion checklist:**
- [ ] Tests written and passing
- [ ] Code review requested and addressed
- [ ] All acceptance criteria for this milestone met
- [ ] Plan file updated with completion notes
**Execution prompt:**
[fenced code block containing the generated execution prompt — see Execution Prompt Template]
**Completion notes:** *(filled in after execution)*
**Integration outcome:** *(filled in after execution — e.g., merged to main, PR #123, kept as branch feature-name)*
Completion notes and integration outcome are left blank in the plan — the execution session fills them in after the milestone is complete.
Revision and Additive Milestone Blocks
Revision milestone block (Flow B — append to end of plan.md):
### Milestone N (Revision): Short name
**Goal:** What this revision milestone achieves.
**Files affected:** list of expected files
**Dependencies:** None (or "Requires Milestone N to be complete — reason")
**Supersedes:** Milestone X (optional — only include if there is a direct relationship to a prior milestone)
**Change summary:** 1-2 sentences describing what prior work is being reworked, superseded, or corrected, and why.
**Completion checklist:**
- [ ] Tests written and passing
- [ ] Code review requested and addressed
- [ ] All acceptance criteria for this milestone met
- [ ] Plan file updated with completion notes
**Execution prompt:**
[fenced code block containing the generated execution prompt — see Execution Prompt Template]
**Completion notes:** *(filled in after execution)*
**Integration outcome:** *(filled in after execution)*
Additive milestone block (Flow C — append to end of plan.md):
### Milestone N (Additive): Short name
**Goal:** What this additive milestone achieves.
**Files affected:** list of expected files
**Dependencies:** None (or "Requires Milestone N to be complete — reason")
**Change summary:** 1-2 sentences describing what new scope is being added and why it wasn't in the original plan.
**Completion checklist:**
- [ ] Tests written and passing
- [ ] Code review requested and addressed
- [ ] All acceptance criteria for this milestone met
- [ ] Plan file updated with completion notes
**Execution prompt:**
[fenced code block containing the generated execution prompt — see Execution Prompt Template]
**Completion notes:** *(filled in after execution)*
**Integration outcome:** *(filled in after execution)*
In-place updates (Flow A) do not add a change log to plan.md — the change is reflected in the updated milestone content, and git history preserves the diff. Revision and additive milestones carry their own Change summary field instead.
Every milestone gets an execution prompt generated from this template. Substitute milestone number, milestone name, and feature name. All other text is fixed.
You are executing Milestone N of the feature-name feature in mysuperpowers. The plan was created and approved in a previous session. Do NOT brainstorm. Do NOT create a PRD. Do NOT create a new plan.
## Milestone N: name
Read the following for context:
- Plan: docs/features/feature-name/plan.md (find Milestone N)
- PRD (if it exists): docs/features/feature-name/prd.md
## Before starting
Verify in plan.md that prior milestones' completion checklists are fully checked. If a dependency milestone is incomplete, stop and tell me — do not proceed.
## Execution rules
- Use the standard mysuperpowers execution workflow: test-driven-development commits per TDD cycle; use requesting-code-review and verification-before-completion as appropriate
- Work on the current branch unless I tell you otherwise — do not create a git worktree
- Do NOT start the next milestone — each milestone runs in its own session by design
## When complete
1. Update Milestone N's completion checklist in docs/features/feature-name/plan.md (check all four boxes)
Note on the completion checklist: Complete every item that applies to this milestone honestly. If an item doesn't cleanly apply to this milestone's scope (for example, a foundation milestone may have no meaningful application code to test, a deployment config milestone may have no reviewable business logic), mark it complete with a brief annotation like "✓ N/A — [reason]". Do not invent meaningless work just to check a box. Do not leave items unchecked without explanation.
2. Add a brief completion note to plan.md (1-2 lines: what was done, any deviations from the plan)
3. Use the finishing-a-development-branch skill to present integration options (merge, PR, keep, discard). Wait for my choice before executing.
4. STOP. Do not start the next milestone. Wait for me.
A milestone is a logically coherent unit of work — a set of changes that belong together because they accomplish one focused goal. Use these self-checks when decomposing:
If the user asks to begin implementation during or after planning, politely decline and explain: each milestone runs in its own fresh session by design. The plan file contains an execution prompt they can paste into a new session to begin.
| Thought | Reality |
|---|---|
| "The plan is approved, I'll just start milestone 1 to be helpful" | NO. Planning ends in this session by design. Each milestone runs in a fresh session for context isolation. Stop after saving. |
| "The user said this is urgent, I'll skip planning and just implement" | Only skip if the user EXPLICITLY says to skip. Don't infer urgency from tone and bypass the workflow. |
| "Milestone 1 is small, I might as well chain into milestone 2" | NO. Even small milestones run in their own session. Session boundaries are intentional, not overhead. |
| "I'll batch tiny milestones together to save sessions" | NO. The point of fresh sessions is clean context, not session count. Don't compress. |
| "I should renumber milestones for clarity after inserting one" | NO. Renumbering invalidates execution sessions already in flight. Insertions go at the end. |
| "The user is updating the plan, I'll just run the right flow based on context" | NO. Always run the preconditions in order. Execution state check drives flow selection. Never guess — ask explicitly. |
| "The milestone is already executed, but the change is small — I'll edit it in place and skip the warning" | NO. Executed milestones always get the explicit warning and confirmation. No exceptions, no size threshold. |
| "The PRD hasn't been updated, but the user wants to proceed — I can skip the alignment check next time" | NO. Always ask about PRD alignment. Once per Update Mode session. The user decides whether to update the PRD first, not you. |
| "I'll renumber the milestones to keep things clean after adding a revision" | NO. Renumbering is forbidden. Revision and additive milestones append at the end with the next available integer. |
| "I'll rewrite the whole plan — the structure has gotten messy" | NO. Update in place. Flow A edits only affected milestones. Flows B and C append only. Untouched milestones stay exactly as they are. |
npx claudepluginhub walnashgit/mysuperpowers --plugin mysuperpowersGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.