| name | plan |
| description | Create an implementation plan in the knowledge store. Researches the codebase first, then creates a structured phased plan with success criteria. Use when starting a new feature, refactor, or multi-step task. |
| argument-hint | <description of what to plan> |
Create Plan: $ARGUMENTS
User input > Skill constraints > Trained defaults
For universal orchestration discipline (background spawning, signal routing,
reviewer gate semantics, auto-revise threshold, user touch points, drift
detection), reference .claude/skills/orchestrate/SKILL.md — already loaded
in your context when you reach this skill.
This skill is plan-specific. Don't duplicate universal patterns here; reference them.
brainstorm = WHY, ticket = WHAT, plan = HOW, implement = WORK.
Plan translates ticket's WHAT into sequenced HOW (files, names, ordering, criteria).
Plan does NOT decide WHAT (brainstorm's job).
Plan does NOT do the work (implementer's job).
If planner finds itself making architectural calls, ticket was inadequate — route back upstream.
Verify ticket completeness BEFORE spawning the planner. Thin tickets produce
thin plans, which produce re-plan cycles.
manage({ "operation": "status" }) — if behind HEAD, offer to reindex.
Planner needs accurate search results.
<check id="clarify-goal">
If $ARGUMENTS is ambiguous, ask before spawning. Don't guess the end state.
(This IS a legitimate touch point — architectural clarification, not workflow permission.)
</check>
<check id="find-parent-ticket">
query({ "type": "ticket" }) or current project's ticket list.
Pass ticket_id to planner so create_plan links under it.
</check>
<check id="pattern-context">
assemble({ id: ticket_id }) — check ## Patterns section.
If NEITHER pattern_ids NOR no_patterns_reason set, prompt user with options:
(a) Run /brainstorm to pick patterns
(b) Add no_patterns_reason via mutate (escape hatch for trivial work)
(c) Cancel
Do NOT auto-invoke /brainstorm — user picks.
</check>
<check id="ticket-thoroughness" severity="gate">
Verify ticket has:
- In Scope enumerating concrete code surfaces (files, packages, functions)
- Out of Scope explicitly naming temptations + adjacent work deliberately excluded
- Success criteria with testable invariants (grep predicates, named assertions)
If ticket is thin, STOP:
"The ticket is too thin for direct planning — the architectural surface needs
to be enumerated first. Run /brainstorm against the ticket to do the
architectural walk + populate In Scope / Out of Scope concretely, then
re-run /plan."
Do NOT spawn planner against thin ticket.
</check>
See orchestrate constraint id="background-spawning" — every spawn is background.
Agent(
subagent_type: "planner",
prompt: "Create an implementation plan for: $ARGUMENTS\n\nParent ticket: <ticket_id or 'none'>",
description: "Plan: <brief topic>",
run_in_background: true
)
After planner returns, check for ## Warnings section (unresolved pattern_ids).
If present, this is a legitimate user touch point — surface verbatim, do NOT auto-advance.
Surface warnings verbatim to user.
Ask user to choose:
(a) revise pattern_ids and re-plan
(b) accept warnings and proceed to /implement (implementer's own warning check re-prompts)
(c) cancel
This gate MUST NOT be stripped from this skill — future maintainers can't remove it.
Apply signal routing from orchestrate constraint id="signal-routing":
- TICKET-GAP → re-engage /brainstorm
- open_questions → honest-answer test → re-brief OR re-engage brainstorm
- plan-size → CEO direct
Warnings gate (constraint above).
Present plan structure (phases, steps, criteria, file links) to user as summary.
This is informational, not a permission-ask. Do NOT end with "ready to spawn reviewer?"
Spawn the plan-reviewer. Per orchestrate constraint id="reviewer-gate" — universal pattern.
Plan-reviewer spawn:
Agent(
subagent_type: "plan-reviewer",
prompt: "Audit plan <plan_id>. Fresh audit — you have no memory of any prior audit of this plan. Phases already implemented (skip these): <list or 'none'>. User-locked decisions that are out of scope for critique: <list or 'none'>. Produce the structured four-tier audit report.",
description: "Audit plan: reuse + architecture + optimization + can-kicking",
run_in_background: true
)
No implementer spawns on unreviewed plan version (orchestrate blocking-discipline).
On revise: spawn planner again with reviewer report as input. FRESH reviewer for re-audit.
Auto-revise per locked threshold — do NOT ask user permission.
For non-revise changes: mutate(operation:"update", ...) in place.
The reviewer gate and the auto-revise threshold MUST NOT be stripped from this skill — both are locked by user direction.