Investigate the codebase, design the change, and write
. No code modification, no command execution.
All output from this skill — conversational replies to the user, status/progress messages, AND the written
— uses the language specified by
's
. Default if config missing or field absent:
. Code, file paths, command syntax, and identifiers stay in their native language regardless.
-
Determine task scope based on Gate's matched re-entry mode:
- Fresh plan: resolve task description from if provided; otherwise the user typed alone and we may need to surface the backlog (see backlog-handling.md).
- Blocked cycle: task is "address the blockers from review.md". Do NOT redesign Background or Phases — preserve them. Only revise (and dependent sections like , ) where review.md says they were wrong.
- Phase advance: task is "design the phase's change list". Inherit and from the previous plan.md as-is. Skip step 3 (scope assessment — phases are already declared).
- Unusual: stop and ask user (per Gate's instruction).
-
Investigate the codebase. Use the convention docs path and project doc index from config to guide what to read. Look at existing patterns the change must match.
-
Assess scope (skip if Gate matched Blocked cycle or Phase advance — scope was already decided in the original plan). If the work has clear, sequentially-dependent stages that are each independently verifiable (e.g., DB migration → API → frontend → cleanup), propose splitting into
. Confirm with user before committing to a multi-phase plan. Otherwise proceed as a single-cycle plan.
-
Design the change list. Match the structure described in plan-template.md: change list, sync commands (if any), test strategy, verification plan.
- Verification scope decision. When filling the section, look at the change list and pick ONLY the commands that actually apply. will run exactly what's listed there. Typecheck is /execute's job — typically don't list it under verification. If the change is docs-only (or otherwise needs no command verification), write
(none — <one-line rationale>)
.
- Compile check opt-out. If the change should NOT trigger /execute's compile check (e.g., docs-only, intentional WIP), add a section with body . Otherwise omit the section entirely (default = run config's typecheck).
-
Risk-tag the change list. For each change list item, decide whether to escalate:
| Signal | Suggested tag |
|---|
| Path: , , , , , security-sensitive areas | medium-high |
| Operations: delete / drop / alter / rotate / rename | medium-high |
| Public API or cross-package signature change (callers in other packages) | medium |
| > 5 files touched in one item, or > 20 in the plan | medium |
| Side effects: DB schema, fs writes, network calls, auth changes, concurrency primitives | medium-high |
| Plain logic edit, single file, no signature change | low / untagged |
Default to leaving items untagged (= low). Suggest escalations to the user; require a one-line reason for any
. Do NOT inflate tags "just to be safe" — every
slows execute and surfaces in review.
Non-interactive flows: when no user input channel is available (scripted invocation, headless agent, CI), default all items to untagged (low) and skip the suggestion step. Do NOT auto-assign
or
without confirmation — auto-tagging would either over-cautiously slow every execute or under-tag missed signals. Keep the safe default and let an interactive re-run upgrade tags when warranted.
-
Identify independent units. Look at the change list: are there subsets of files/changes that can be applied independently (no shared types, no shared sync command, no sequential dependency)? If yes, list them as parallelizable groups in plan.md's optional
section. If everything is sequential or tightly coupled, omit the section.
Do NOT include -risk items in parallelizable groups. Parallel dispatch (handled by /execute) skips per-item compile checks — only the final safety-net check runs.
items are tagged precisely because they need per-item discipline; putting them in a parallel group silently strips that safety. Either keep high items sequential (omit them from
) or — if parallel execution truly outweighs per-item check — downgrade them to medium with a one-line justification.
-
-
If backlog items are being addressed, also mark them 🔄 in
(see backlog-handling.md §3). For multi-phase plans, the marker stays 🔄 across all phases until the final phase passes verify.
-
Print:
✅ Plan written to .handoff/plan.md
<if multi-phase:> Active phase: [N] <title>
Next step: /execute (recommended in a fresh chat to keep context clean)