agentleFS
trevorbyrumtrevorbyrum/claude-skills-suite/skills/build-plan/SKILL.md

build-plan

Skill1 starsChanged 5 months agoMITView on GitHub

Generates or updates project-plan.md with phases, work units, dependencies, and acceptance criteria. Auto-detects whether to create from scratch, update an existing plan, or produce a lightweight in-session plan. Invoke with /build-plan.

4 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions4 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 4

    1. shawnclybor/clybor-claude-tooling★ 6same name
    2. dabodamjan/app-idea-to-spec★ 0same name
    3. korcekj/skills★ 0same name
    4. myusernameiskey/Claude_skills★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository7 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

20 rules. 0 are common, 10 are distinctive, and 10 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 10

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If yes plan exists and the user cue is ambiguous → AskUserQuestion: "Update existing plan or rewrite from scratch?"

    line 41
  2. Very specific:

    If no plan exists and the user explicitly asks for a "lightweight" or "quick" plan with a small scope → run lightweight mode (this is the …

    line 43
  3. Very specific:

    Write output to /tmp/competitive-landscape.md.

    line 58
  4. Distinctive:

    If either subagent fails, skip and note in the plan's "Risks" section.

    line 65
  5. Distinctive:

    Follow the chosen mode reference for the specific work.

    line 69
  6. Distinctive:

    Sizing rule: If a unit can't be described in 1-3 sentences with clear acceptance criteria, it's too big.

    line 90
  7. Distinctive:

    If a unit can't be fully wired in isolation, split differently or merge with the consumer.

    line 99
  8. Distinctive:

    Every WU that creates an export names the consuming unit(s) by ID.

    line 104
  9. Distinctive:

    Every env var / config key introduced by a unit is consumed within the same wave or explicitly carried forward as a dependency.

    line 105
  10. Distinctive:

    Every resource opened (DB, PTY, event bus, WebSocket) has cleanup specified in acceptance criteria.

    line 106
  11. Very specific:

    Ask via AskUserQuestion if priorities are correct, anything missing, effort feels right.

    line 119
  12. Very specific:

    If the user requests changes, update and re-present.

    line 125
  13. Very specific:

    If a features.md or todo.md exists, update them to reflect plan changes:

    line 129
  14. Very specific:

    First-run path (neither file exists): If neither todo.md nor features.md exists, SEED both from the project context + plan:

    line 133
  15. Very specific:

    Read project-context.md and project-plan.md.

    line 134
  16. Distinctive:

    After the plan is approved, offer:

    line 141
  17. Very specific:

    If yes — spawn a Sonnet subagent (subagent_type: "general-purpose") per WU that creates new files.

    line 145
  18. Distinctive:

    If the user declines, skip.

    line 151
  19. Distinctive:

    After the plan is approved and written (and optionally skeletoned):

    line 155
  20. Very specific:

    Before completing, read and follow ../../references/cross-cutting-rules.md.

    line 198

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Build Plan

Take project context (and research, if available) and produce a comprehensive plan — or update an existing one when work completes and scope shifts. Three sub-modes share a common shape; differences live in references/.

Inputs

InputSourceRequired
project-context.mdProject rootYes (full mode)
Research synthesis at artifacts/research/*/synthesis.mdPrior research runs (if any)Optional (improves accuracy)
Existing project-plan.mdProject rootRequired for update mode
User's scope descriptionPromptRequired for lightweight mode

Outputs

  • project-plan.md in project root (created, updated, or extended)
  • Optional features.md and todo.md updates (update mode only — absorbs former /todo-features)

Instructions

Phase 0: Detect mode

PLAN_EXISTS=$(test -f project-plan.md && echo yes || echo no)
Plan existsUser cueMode
noanyfrom-scratch (read references/from-scratch.md)
yes"update plan", completed WU mentioned, scope changeupdate (read references/update.md)
yes"quick plan", "small plan", or invocation describes <5 file scopelightweight (read references/lightweight.md)
yes"rewrite plan", "redo plan"from-scratch with git mv project-plan.md project-plan.<date>.md archive

If yes plan exists and the user cue is ambiguous → AskUserQuestion: "Update existing plan or rewrite from scratch?"

If no plan exists and the user explicitly asks for a "lightweight" or "quick" plan with a small scope → run lightweight mode (this is the former /quick-plan path).

Phase 1: Read inputs

  1. project-context.md — always.
  2. Research synthesis (if artifacts/research/*/synthesis.md exists) — read the most recent.
  3. Existing project-plan.md — required for update mode.

Phase 2: Pre-checks (from-scratch and update modes)

Two checks in parallel:

  1. Competitive landscape. Spawn a Sonnet subagent (subagent_type: "general-purpose") with WebSearch. Prompt:

    "You have WebSearch. For a project described as: [one-line summary]. List the top 5 competing or similar projects. For each: name, what it does, strengths, weaknesses, and what this project could learn from it. Cite URLs. Bullets only."

    Write output to /tmp/competitive-landscape.md. Read it. Incorporate "lessons" and "differentiation" into the plan.

  2. Technical feasibility. Spawn a second Sonnet subagent with WebSearch. Prompt:

    "Given this tech stack: [stack from context]. And this scope: [scope summary]. Flag technical risks: library maturity, scaling problems, integration pain, missing pieces. Be specific. Cite where possible."

    Capture the risk list for Phase 4.

If either subagent fails, skip and note in the plan's "Risks" section.

Phase 3: Structure the work

Follow the chosen mode reference for the specific work. All modes produce work units with:

FieldDescription
IDWU-<phase>-<seq> (e.g., WU-1-03)
TitleShort descriptive name
DescriptionWhat this unit delivers (1-3 sentences)
DependenciesList of WU IDs that must complete first
Parallelizableyes / no — can it run alongside others?
LOC estimate50-200 LOC across 2-5 files (SWE-bench: success drops 74% → 11% on multi-commit features)
Key filesFiles created or modified, each tagged with access class (see below). Parallel units must NOT both have mutable access on the same file.
Acceptance criteriaVerifiable pass/fail checks

File access classes (tag each Key File entry):

  • read-only — type definitions, constants, schemas. Safe to share freely across parallel units.
  • additive-only — central exports (index.ts), config arrays, route registrations. Parallel units may add to these, but the merge requires a sequential merge lock at wave end (merge one WU's additions at a time to avoid conflicts).
  • mutable — everything else. Exclusive ownership required; only one WU per wave may touch a mutable file.

Example: Key files: src/auth/jwt.ts [mutable], src/types/auth.d.ts [read-only], src/index.ts [additive-only].

Sizing rule. If a unit can't be described in 1-3 sentences with clear acceptance criteria, it's too big. Split. If it touches >5 files, narrow.

No-placeholders rule (MANDATORY). Reject any unit that:

  • Uses "wire up later", "placeholder for now", "TBD"
  • Defers integration without naming the consuming unit by ID
  • Describes output without specifying who consumes it
  • Creates exports, env vars, config keys without stating where they're read
  • Acquires resources (DB, PTY, WebSocket) without specifying cleanup

If a unit can't be fully wired in isolation, split differently or merge with the consumer.

Phase 4: Integration wiring audit

Before presenting:

  • Every WU that creates an export names the consuming unit(s) by ID.
  • Every env var / config key introduced by a unit is consumed within the same wave or explicitly carried forward as a dependency.
  • Every resource opened (DB, PTY, event bus, WebSocket) has cleanup specified in acceptance criteria.
  • No "placeholder", "TBD", "wire later" language.

Fix violations before presenting.

Phase 5: Present for approval

Show the user the plan summary:

  • Phases + milestones
  • Work-unit count
  • Critical path length
  • Top 3 risks

Ask via AskUserQuestion if priorities are correct, anything missing, effort feels right. The user knows their domain — their calibration matters.

HARD GATE — WAIT FOR USER RESPONSE. Do not write project-plan.md until the user explicitly approves. Do not auto-proceed to Phase 6 on silence; treat unanswered AskUserQuestion as "pause until answered."

Phase 6: Revise if needed

If the user requests changes, update and re-present. Re-run the wiring audit (Phase 4) after revisions. Do not write the final project-plan.md until approved.

Phase 7: Update companion docs (update mode only)

If a features.md or todo.md exists, update them to reflect plan changes:

  • features.md: mark features as planned / in-progress / done based on which WUs land in which state
  • todo.md: append new TODO bullets for any newly added WUs that don't have a clear owner

First-run path (neither file exists): If neither todo.md nor features.md exists, SEED both from the project context + plan:

  1. Read project-context.md and project-plan.md.
  2. Derive the initial todo list from the plan's first phase and any prerequisites. Use the Now / Next / Later / Done format (see references/update.md for the spec). Items must reference WU IDs and be actionable.
  3. Derive the initial feature list from the project scope and planned capabilities. Use the Shipped / In Progress / Planned / Deferred format. Write from the user's perspective — describe what the product does, not how the code works.
  4. Write both files.

Phase 7.5: Skeleton generation (optional)

After the plan is approved, offer:

"Plan approved. Want me to scaffold skeleton files (interfaces, types, module stubs, empty function bodies with TODOs) for the work units? This gives implementation a head start without committing to logic."

If yes — spawn a Sonnet subagent (subagent_type: "general-purpose") per WU that creates new files. Each subagent gets:

  • The WU's Description, Key Files (with access class), and Acceptance criteria
  • Project-context.md's tech stack section
  • Instruction to create the file structure with: interfaces, type definitions, function signatures (with TODO: implement bodies), and module exports
  • Explicit: do NOT implement business logic, only structure

If the user declines, skip. If they accept and the subagent fails, log the failure and continue — skeleton gen is convenience, not blocking.

Phase 8: Terminal handoff

After the plan is approved and written (and optionally skeletoned):

  • From-scratch / update mode: suggest /execute (linear) to start building, or /review if you want a sanity check first.
  • Lightweight mode: suggest /iterate to start immediately — the lightweight plan is a checklist, not a build doc.

References (on-demand)

  • references/from-scratch.md — full plan generation, phases, executive summary, plan template
  • references/update.md — incremental plan update, work-unit reconciliation, changelog format
  • references/lightweight.md — small-scope in-session plan (former /quick-plan), no phases, just goal + checklist + risks

Examples

User: /build-plan
→ Phase 0: project-plan.md missing → from-scratch. Reads context + research.
  Pre-checks fan out (Sonnet × 2). Phases, WUs, audit, present, write.
  Handoff: /execute.
User: WU-3 done, add a migration WU
→ Phase 0: plan exists, user mentioned completed WU → update mode.
  Reads existing plan. Marks WU-3 done. Adds new migration WU.
  Updates features.md + todo.md. Re-runs wiring audit on the new WU.
User: quick plan to add a dark mode toggle
→ Phase 0: plan exists, scope small + "quick" cue → lightweight mode.
  Reads lightweight.md. Goal + 3-5 bullet checklist + risks.
  Does NOT modify project-plan.md (lightweight plans live in the iterate
  changelog or as a transient `/tmp/lightweight-plan.md`).
  Handoff: /iterate.
User: rewrite the plan, scope changed completely
→ Phase 0: plan exists + "rewrite" cue. Archive existing as
  project-plan.<date>.md. Run from-scratch flow.

Before completing, read and follow ../../references/cross-cutting-rules.md.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.