plan
/plan
Write a plan file for the current task. Requires /orient to have run first.
Sequence
- Check prerequisites. Confirm a worktree exists and /orient has identified the task. If not, stop and tell the user.
- Brainstorm (one round). Invoke
/brainstormingwith the task description. One round only — capture direction, do not iterate. - Read the template. Read
ai-workspace/plans/TEMPLATE.mdfrom the repo root. - Write the plan. Create
ai-workspace/plans/<branch-slug>.mdwith ALL template fields:
| Field | How to fill |
|---|---|
| Branch | Current branch name |
| Target | Branch to merge into. Default: detected via reflog parent (see below), falling back to main. Override only when intentionally retargeting. /ship reads this field. |
| Created | Today's date (YYYY-MM-DD) |
| Status | In Progress |
| Threat model | See selection table below |
| Scope ceiling | Keep template defaults (400/6 soft, 800/10 hard) |
| Task | 1-3 sentences: what and why |
| Steps | Checkbox list of concrete implementation steps |
| Confidence Scaffold | Required for adversarial. Recommended for complex advisory. |
| Outcomes & Learnings | Leave empty — populated by /archive |
-
Commit the plan. Stage and commit the plan file before handing off to
/review:git -C "$WORKTREE" add ai-workspace/plans/<name>.md git -C "$WORKTREE" commit -m "plan: <name>"Required because
/reviewworks against committed state. A session crash or/clearafter writing the plan but before/reviewruns loses the brainstorming work otherwise. See ADR-008 (refs/wip/checkpoints/<branch>Stop-hook backstop) for the recovery path if this step is skipped.
Detecting the Target
The default Target is the branch this branch was cut from, read from the reflog:
TARGET=$(
git reflog show HEAD --pretty=format:'%gs' \
| grep "^branch: Created from" \
| head -1 \
| sed 's/branch: Created from //' \
| sed 's|^origin/||'
)
TARGET=${TARGET:-main}
Falls back to main when the reflog is empty (web sessions, detached-HEAD creation). Use this whenever the user hasn't explicitly named a Target. Pure git — works in any environment without tool installs.
Threat model selection
| Signal | Model |
|---|---|
| Internal tooling, refactor, docs, tests, config | advisory |
| Auth, secrets, input validation, CI, hooks, permissions | adversarial |
| Unsure | adversarial |
Guardrails
- Do NOT review the plan. That is /review (Step 4).
- Do NOT start implementation. The plan is the deliverable.
- Do NOT skip any template field.
- Do NOT proceed to
/reviewwithout committing the plan file first. - If brainstorming reveals the task is one-sentence scope, say so and skip.
- Scope ceiling values are fixed — do not change them.
- Steps must be concrete actions with checkboxes, not vague phases.
- Include test steps explicitly. When tests need a separate author (TDD contract), list them as distinct tasks from implementation so /build dispatches test-writer and implementer separately.
Output
After writing, report:
Plan written: ai-workspace/plans/<name>.md
Threat model: advisory|adversarial
Steps: <count>
Next step: /review
More from camacho/ai-skills
bail
Reflects, updates GitHub Issue, closes PR if open, cleans up worktree/branch.
413plan-review
Auto-assembles review panel using deterministic rules, dispatches agents against plan file, collects verdicts.
396archive
Fills Outcomes & Learnings in a plan file and renames it to .done.md.
388orient
Fetches issue context, auto-detects task type, maps to branch prefix, presents brief.
386capture
Creates a draft GitHub Issue with triage label from natural language description.
384reflect
Use after merging a branch or completing a task to consolidate learnings into memory layers, close out issues, and verify the phase gate.
346