End-to-end project planning toolkit: converts requirements into structured phased implementation plans, groups phases into dependency-ordered waves for parallel subagent execution, executes wave plans by spawning parallel agents with correct model tiers, and decomposes large branches into focused pull requests.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
An implementation plan is a navigable contract between an agent and a codebase. Each file answers a single question: "What do I need to do next, how do I do it, and how do I prove it is done?"
Two failure modes to avoid:
The sweet spot is a tree where every node either navigates (README) or implements (task file), and every leaf has a runnable verification command.
Mode 1 — Create a new plan from a PRD:
sh scripts/new-plan.sh url-shortener-service
sh scripts/new-phase.sh url-shortener-service 01 workspace-bootstrap
sh scripts/new-task.sh url-shortener-service 01 01 initialise-npm-package
sh scripts/validate-plan.sh url-shortener-serviceMode 2 — Split a monolithic document:
# 1. Create hierarchy manually (steps below) or from JSON:
sh scripts/generate-structure.sh --plan plan.json
# 2. Validate before removing source
sh scripts/validate-structure.sh docs/refactoring/phases| Signal | Mode |
|---|---|
| User provides a PRD, spec, or requirements description | Mode 1 |
| User provides a single large planning document to split | Mode 2 |
| User provides flat phase files to reorganise | Mode 2 |
| User says "add a phase" to an existing plan | Mode 1 (additive) |
| User says "split", "organise", "refactor this plan" | Mode 2 |
Creating a new plan:
Restructuring an existing plan:
These show how to map real user input to the correct mode and expected output:
| User says | Mode | Expected output |
|---|---|---|
| "Here's the PRD — create a phased plan" | Mode 1 | .context/plans/plan-<slug>/ with README, phase READMEs, and task files |
| "Break this spec into tasks" | Mode 1 | Plan with tasks scoped to individual files + runnable verification commands |
| "I need a project roadmap for this feature" | Mode 1 | Plan with phases matching delivery milestones, gate criteria per phase |
| "Here is my big planning doc — split it into files" | Mode 2 | Hierarchical directory under docs/refactoring/phases/ |
| "Organise these phase files into a proper structure" | Mode 2 | Phase directories with READMEs, activities grouped, validate-structure.sh exits 0 |
| "Add phase 4 to the existing plan" | Mode 1 (additive) | New phase-04-<slug>/ directory with tasks; existing files untouched |
| "The PRD has auth, ingestion, pipeline, storage, query, viz, multi-tenancy, ops, DX" | Mode 1 (guardrail) | STOP — 9 phases detected; message user with A/B/C options; zero files created |
| Input | Description |
|---|---|
| PRD / spec | A document, inline description, or file path describing what to build |
| Phase count | Optional — infer from scope if not provided |
| Output path | Optional — defaults to .context/plans/ |
.context/plans/
plan-<slug>/
README.md # root index: goal, all phases, status table
phases/
phase-01-<slug>/
README.md # phase overview: goal, gate, tasks summary
tasks/
task-P01T01-<slug>.md # task: goal, file, implementation, verification
task-P01T02-<slug>.md
phase-02-<slug>/
README.md
tasks/
task-P02T01-<slug>.md
task-P02T02-<slug>.mdEach file is self-contained: an agent can work on a single task file without reading the rest of the plan.
Read the PRD in full. Identify:
FIRST: count the natural phases before designing anything.
Each distinct domain, capability area, or labelled section in the PRD counts as one phase unless two sections share a single atomic deliverable that cannot be tested independently. When in doubt, count them separately — err on the side of a higher count to avoid missing the guardrail.
Scan the PRD, count every distinct section or domain, and record the total. If the count is 9 or more, STOP immediately — do not design phases, do not run any scripts, do not create any files. Instead, message the user with the count and 2–3 concrete options:
I've identified N natural phases from the requirements. Before I create any files,
please choose one of these approaches:
A. Split into two plans: plan-<core-slug> (phases 1–5) and plan-<surface-slug> (phases 6–N)
B. Consolidate to 7 phases by merging [phase X] and [phase Y] into one
C. Proceed with all N phases in a single plan
Which would you prefer?Wait for the user's answer before doing anything else. Do not silently cap at 8 and omit scope. Do not proceed with any number of phases without the user choosing when N ≥ 9.
Once the phase count is confirmed to be ≤ 8 (either naturally or after consolidation), continue designing:
Group work into sequential phases where each phase delivers a testable, deployable increment. Each phase must have:
Typical phase progression for a greenfield project:
Adapt freely — fewer phases for small projects, more for large ones.
Each task must be:
Use the identifier format P{phase_number}T{task_number}, both zero-padded.
Example: P02T03 = phase 2, task 3. Use 1-based numbering (01, 02, …) for
consistent alphabetical sorting.
MUST use the scaffold scripts — never create directories or files manually.
The scripts stamp the correct stubs that validate-plan.sh expects. Using mkdir
or writing files from scratch will produce structures that fail validation.
MUST NOT modify existing files — all operations are additive only. When
appending phases to an existing plan, run new-phase.sh and new-task.sh for
the new content only. Never edit, rename, or delete files that already exist in
the plan. Existing phase directories, task files, and the root README must remain
byte-for-byte identical after the operation, except that the root README may have
new phase entries appended to its phase listing.
# 1. Create the plan root — MUST run first (skip if plan already exists)
sh scripts/new-plan.sh <plan-slug>
# 2. Create each phase directory — MUST use this for every phase
sh scripts/new-phase.sh <plan-slug> <phase-number> <phase-slug>
# 3. Create each task file inside its phase — MUST use this for every task
sh scripts/new-task.sh <plan-slug> <phase-number> <task-number> <task-slug>Slugs are lowercase kebab-case summaries of the title. Examples:
plan-ecommerce-checkout-redesignphase-01-workspace-bootstraptask-P01T02-root-package-json.mdAfter scaffolding, fill in the generated stub files following the structure
defined in references/templates/plan.yaml, references/templates/phase.yaml,
and references/templates/task.yaml.
Do not embed implementation detail in the root
README.md— keep it as a navigation index only. Detail belongs in phase and task files.
MUST run before reporting to the user — no exceptions.
sh scripts/validate-plan.sh <plan-slug>The script checks each file against its schema in references/schemas/:
| File | Schema |
|---|---|
plan-<slug>/README.md | references/schemas/plan.schema.json |
phases/phase-NN-<slug>/README.md | references/schemas/phase.schema.json |
phases/phase-NN-<slug>/tasks/task-*.md | references/schemas/task.schema.json |
If any file fails: fix the violation and re-run validate-plan.sh. Repeat
until exit 0. Do not report completion until exit 0 is confirmed.
Every task file MUST include a verification section with a concrete, runnable shell command. Gates MUST be exit-code-based (exit 0 / non-zero, file exists, URL returns 200). Gates MUST NOT use vague language like "works correctly" or "tests pass" without specifying the exact command.
After writing all files, output a summary:
Created implementation plan at .context/plans/plan-<slug>/
README.md
phases/phase-01-workspace-bootstrap/README.md (N tasks)
phases/phase-01-workspace-bootstrap/tasks/task-P01T01-*.md
...Use this mode when the source is a monolithic document or flat set of phase files that needs to be reorganised into a navigable hierarchy.
| Source type | Approach | Automation |
|---|---|---|
Flat .md phase files | Manual workflow (steps 1–7 below) | Run validate-structure.sh after |
| JSON plan definition | Automated | Run generate-structure.sh, then validate |
| Existing structure | Validation only | Run validate-structure.sh |
Load scripts and templates only when needed:
scripts/validate-structure.sh after completing a manual split or when asked to validatescripts/generate-structure.sh when the user provides a JSON plan file
references/templates/*.yaml only when using automation or customising outputreferences/schemas/*.json only when debugging validation errorsWhen to flatten vs subdivide:
| Signal | Action |
|---|---|
| Item has <3 children | Flatten — merge with sibling or parent |
| All children fit on one README screen (<20 lines) | Flatten |
| Navigation depth would exceed 4 levels | Flatten intermediate level |
| Item has >10 children | Subdivide |
| Children cluster into distinct semantic groups | Subdivide |
| Parallel work streams or different team ownership | Subdivide |
Rule of thumb: 3–7 items per group is the sweet spot.
Naming conventions that scale:
step-1-extract-movement-logic/ # GOOD: survives refactors
step-1-refactor-game-code/ # BAD: vague, becomes meaningless
activity-1-analysis-complete/ # GOOD: outcome-oriented
step-1-initial-setup/ # BAD: "initial" becomes misleading later
step-1-project-bootstrap/ # GOOD: timelessBefore splitting, confirm:
step-1.1, step-1.2 belong together)Ask yourself:
docs/refactoring/phases/
phase-{number}-{name}/
README.md
activities/ # OR steps/
README.md
activity-{number}-{description}/
README.md
activity-{number}.{sub}-*.mdMax depth: 4 levels (phase → activities/steps → group → leaf). Flatten if deeper.
Never use numeric-only directory names (
step-1/,activity-2/) and never use generic names (step-1-stuff/) — contributors cannot navigate without opening every file.
Each leaf file must contain: title, description, checklist, acceptance criteria, status.
See references/templates/step-file.yaml for the exact structure.
Every non-leaf directory needs a README explaining its purpose and listing its
children. Minimum 3 lines. See references/templates/phase-readme.yaml,
references/templates/group-readme.yaml, and references/templates/intermediate-readme.yaml.
Format: {type}-{number}-{kebab-description}. Use naming heuristics above.
Items with the same prefix (1.x, 2.x) go in the same parent directory.
Never mix groups (no step-2.1 inside step-1-extract/).
Update all README links after restructuring. Verify with validate-structure.sh.
Create the new hierarchy first, validate, then remove the old flat files — never delete source before the new structure is confirmed valid.
sh scripts/validate-structure.sh docs/refactoring/phases
# Exit 0 = valid, 1 = invalidBefore marking complete:
README.md1.1, 1.2 together; not 1.x with 2.x)sh scripts/validate-structure.sh <phases-dir>
# Exit 0 = valid, 1 = one or more violations (details printed to stdout)For automation (JSON plan generation), error recovery recipes, and legacy naming conventions see references/mode2-advanced.md.
See references/anti-patterns.md for Mode 1 anti-patterns, Mode 2 anti-patterns, and cross-cutting NEVER rules.
See references/worked-examples.md for URL shortener (Mode 1), scope guardrail, and restructure migration examples.
| Topic | Location |
|---|---|
| Anti-patterns (Mode 1, Mode 2, NEVER rules) | references/anti-patterns.md |
| Worked examples (URL shortener, scope guardrail, restructure) | references/worked-examples.md |
| Mode 2 automation, error recovery, legacy naming | references/mode2-advanced.md |
| Before/after structure transformation example | references/example-transformation.md |
| File format templates and schemas | below |
| Template | Schema | Purpose |
|---|---|---|
references/templates/plan.yaml | references/schemas/plan.schema.json | Root index structure (Mode 1) |
references/templates/phase.yaml | references/schemas/phase.schema.json | Phase overview structure (Mode 1) |
references/templates/task.yaml | references/schemas/task.schema.json | Individual task structure (Mode 1) |
references/templates/phase-readme.yaml | references/schemas/readme-file.schema.json | Phase directory README (Mode 2) |
references/templates/group-readme.yaml | references/schemas/readme-file.schema.json | Group/intermediate README (Mode 2) |
references/templates/intermediate-readme.yaml | references/schemas/readme-file.schema.json | Activities/steps dir README (Mode 2) |
references/templates/step-file.yaml | references/schemas/step-file.schema.json | Leaf step/activity file (Mode 2) |
See references/example-transformation.md for a before/after structure comparison. See references/mode2-advanced.md for automation, error recovery, and legacy naming guidance.
.context/plans/ content is never deleted; new files are additive.