Documentation
README
plan β implementation plan from a spec
Input: a finalized spec (.ai/specs/{date}-{slug}.md with zero unresolved open
questions) or, for small changes, an explicit user description. Output: a plan at
.ai/plans/{YYYY-MM-DD}-{slug}.md that /execute can follow mechanically.
Write the plan for the weakest plausible executor: an agent with no memory of this session. Every task must be executable from the plan text alone.
Announce at start: "Using the plan skill β turning the spec into an implementation plan."
Step 1: Check prerequisites
- Read the spec. If any Open Question is unchecked β STOP and return to
/spec-writingStep 7. Do not plan around an open question. - Read
.ai/lessons.mdand the moduleAGENTS.mdfor every module the spec touches. - Read the matching guides for the work in the plan (from the root
AGENTS.mdTask Router). At minimum:- migrations β
.claude/rules/workflow-database-migration.md - services β
.claude/rules/conventions-services.md - forms/UI β
.claude/rules/conventions-forms.md+packages/form/AGENTS.md - database access β
.claude/rules/database-patterns.md
- migrations β
Step 2: Decompose into tasks
- One task = one verifiable unit of work (a migration, a service function + its test, a route + form, a UI component). If a task can't be verified by a single command or a single browser check, split it.
- Default order: migration β
pnpm run generate:typesβ models (zod) β service functions (+ unit tests) β routes/actions β UI β browser verification. - For every UI task, name the precedent: the existing Carbon screen or
component to copy from (file path). Do not design UI from concepts β grep
packages/react/src/andapps/erp/app/components/first. - Mark tasks that are independent of each other β
/executemay run them as parallel subagents.
Step 3: Write each task
Every task uses exactly this shape:
## Task N: {imperative title}
**Depends on:** {task numbers, or "none"}
**Files:**
- Create: `{exact path}`
- Modify: `{exact path}` β {what changes}
- Copy from (precedent): `{exact path of the exemplar}`
**Steps:**
1. {exact instruction; include full SQL for migrations, function signatures for
services, and the exemplar to copy for UI}
2. ...
**Verify:**
```bash
{exact command}
# Expected: {what the output must contain}
```
**Out of scope:** {things that look related but must NOT be touched}
Hard rules for task content:
- Migrations: create with
pnpm db:migrate:new <name>(never hand-pick a timestamp; never000000as HHMMSS). SQL must useid('prefix')defaults,companyId+ composite PK("id", "companyId"), audit columns (createdBy/createdAt/updatedBy/updatedAt), RLS policies per.claude/rules/conventions-database.md, and be idempotent (IF NOT EXISTS/DROP ... IF EXISTSguards). Never backdate a timestamp older than the newest migration onmain. The task after any migration is alwayspnpm run generate:types. - Verification is scoped. Typecheck a package with
pnpm exec turbo run typecheck --filter=<pkg>(e.g.--filter=erp,--filter=@carbon/react). Never plan a whole-repopnpm typecheckβ it OOMs. Tests:pnpm --filter <pkg> test. - No placeholders. No "TBD", no "similar to Task 3", no "add appropriate logic". If you can't specify it, the spec is incomplete β go back.
- Escape hatches. Where a task rests on an assumption, add: "If {assumption} turns out false, STOP and report β do not improvise."
Red flags β if you catch yourself writing any of these, the task is under-specified; fix it before moving on:
- "similar to the previous task" / "as appropriate" / "etc."
- a Verify block with no expected output
- a UI task with no precedent file path
- a migration task without a
generate:typesfollow-up
Step 4: Write the plan file
Save to .ai/plans/{YYYY-MM-DD}-{slug}.md (today's date, same slug as the spec):
# {Feature} β implementation plan
**Spec:** .ai/specs/{date}-{slug}.md
**Research:** .ai/research/{slug}.md
**Branch:** {branch name}
## Progress
- [ ] Task 1: {title}
- [ ] Task 2: {title}
## Dependencies
{`Task 2 needs Task 1 (types)`, `Tasks 4β5 independent`}
---
{tasks}
The Progress checklist is the live tracker β /execute checks items off in this
file. Do not create a separate todo file.
Step 5: Self-check, then present
- Every task has exact paths, exact commands, expected output
- Every migration task follows the hard rules above and is followed by a
generate:typesstep - Every UI task names its precedent file
- No whole-repo typecheck anywhere in the plan
- Every acceptance criterion in the spec is covered by at least one task,
and the final task is browser verification via
/testfor user-facing work
Present the plan path and a one-paragraph summary. Wait for approval, then hand
off to /execute.