execute-roadmap
Skill0 starsChanged 7 months agoMITView on GitHub
Use when the user asks to execute, build, or start working through a ROADMAP.md — orchestrates phase-by-phase implementation with sequential or parallel agents, independently validates every task by driving the running app, and checkpoints with the user at milestones
1 other project uses a version of this.
Adopted by
Most recently taken up by
- koruworks/skillstheir own version, first seen Oct 15, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- koruworks/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 repository5 other files it gives its agents.
- analyze-sessionsSkill
- archive-roadmapSkill
- auto-execute-roadmapSkill
- doc-refactor-hookSkill
- generate-roadmapSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
57 rules. About 0 are common, 30 are distinctive, and 27 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈30
Distinctive · estimate
This author's own choices. Worth a look.
27
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
All agents live in ${CLAUDE_PLUGIN_ROOT}/agents/.
- Very specific: line 115
Read ROADMAP.md from project root.
- Distinctive: line 116
Read CLAUDE.md if it exists.
- Distinctive: line 117
Read architecture/design docs referenced in the project.
- Very specific: line 119
Evidence directory: make sure .vibecoding/ is listed in the project's .gitignore (add it and commit chore: ignore vibecoding evidence if it …
- Very specific: line 120
Validate format: check that every task has scope:, AC:, a priority, a size, and a sequential #ID.
- Very specific: line 132
Handle BLOCKED tasks: If any tasks in the phase have the [BLOCKED: reason] flag:
- Distinctive: line 134
Ask: "These tasks are blocked — has anything changed?" For each:
- Very specific: line 135
If the user confirms the blocker is resolved: remove the [BLOCKED] flag and include the task in the dispatch queue
- Distinctive: line 136
If still blocked: skip the task entirely — do not dispatch it.
- Distinctive: line 137
If ALL tasks in a phase are blocked, pause and tell the user: "Phase N is entirely blocked.
- Very specific: line 144
If a task has the [SPIKE] flag:
- Distinctive: line 148
Update the task description, AC (typed), and size in ROADMAP.md based on the findings.
- Very specific: line 149
Remove the [SPIKE] flag and proceed to dispatch the implementation agent.
- Very specific: line 153
Before dispatching, mark the task as IN PROGRESS in ROADMAP.md and commit.
- Distinctive: line 162
Do NOT ask the user for permission — just dispatch in parallel and inform them: "Dispatching N tasks in parallel (non-overlapping scopes)." …
- Distinctive: line 174
If a merge conflict occurs (shouldn't with non-overlapping scopes, but possible): resolve it or fall back to sequential for the conflicting …
- Very specific: line 175
After merging, explicitly call ExitWorktree to clean up the worktree directory and branch.
- Very specific: line 205
every cmd: and invariant: clause passes.
- Very specific: line 211
After each @phase-executor completes, before merging:
- Very specific: line 214
Behavioral validation: If the task has probe: clauses, record git -C <worktree> status --porcelain and HEAD, then dispatch @validator with:
- Distinctive: line 236
When something fails, don't just retry.
- Very specific: line 249
Add depends: #<new> to the original task.
- Very specific: line 250
Commit ROADMAP.md (roadmap: insert harness #<new> for #<orig>), tell the user in one line, and dispatch the harness task immediately, ahead …
- Very specific: line 251
When the harness task is DONE and merged, rebase the original task's branch onto main (keep its worktree alive meanwhile) and re-run Step 5 …
- Very specific: line 255
Rollback: if a phase can't be completed and the user wants to undo, offer to (a) revert all commits from this phase, (b) keep successful …
- Distinctive: line 259
After each task completes successfully:
- Distinctive: line 271
If ALL tasks in the phase are done, collapse using this structured template — later agents lose access to individual task details, so …
- Very specific: line 283
Commit the updated ROADMAP.md with message: roadmap: complete phase N
- Distinctive: line 287
After all tasks in a phase are complete:
- Distinctive: line 317
If a phase has more than ~8 tasks, after completing each batch of ~5 tasks, commit all ROADMAP.md updates and suggest the user start a …
- Distinctive: line 318
When dispatching agents, keep prompts lean — collapsed phase summaries only, not full histories.
- Distinctive: line 319
If you notice the conversation is getting long (many tool calls, large outputs), proactively suggest a session break at the next natural …
- Distinctive: line 323
When starting a new phase, before dispatching any tasks:
- Distinctive: line 326
If a dependency's AC now fails, fix it before proceeding — later work built on a broken foundation will cascade failures
- Distinctive: line 331
If a session is interrupted mid-phase:
- Very specific: line 333
Check git log for commits referencing those task IDs.
- Distinctive: line 335
Ask the user: continue the current phase or restart it?
- Distinctive: line 339
If during execution you discover that future phases are invalidated (e.g., a task reveals the architecture needs to change, a dependency …
- Distinctive: line 345
If re-planning: mark completed phases as DONE, keep them collapsed, and regenerate only the incomplete phases
- Distinctive: line 347
Do NOT silently work around bad task descriptions.
- Distinctive: line 351
Commit ROADMAP.md at these moments to ensure recoverability:
- Very specific: line 352
Task start: After marking a task IN PROGRESS
- Very specific: line 353
Harness insertion: After inserting a [HARNESS] task
- Very specific: line 354
Task end: After marking a task DONE
- Distinctive: line 355
Phase end: After collapsing the completed phase
- Distinctive: line 366
Relevant doc excerpts: Only the sections of architecture/design docs relevant to this task
- Distinctive: line 405
Port collisions: every executor self-probe and validator instance needs its own port pair.
- Distinctive: line 408
Sending too much context to agents: only send relevant doc sections and collapsed phase summaries, not everything.
- Very specific: line 413
Skipping SPIKE research: if a task is flagged [SPIKE], don't jump straight to implementation.
- Very specific: line 414
Parallel dispatch with overlapping scopes: never dispatch tasks in parallel if their scope: values overlap.
- Distinctive: line 415
Forgetting to merge worktrees: after a task validates, merge its worktree branch into main.
- Very specific: line 416
Forgetting to call ExitWorktree: after merging a worktree branch (or after a failed task is abandoned), always call ExitWorktree.
- Distinctive: line 417
Losing architectural context in collapsed summaries: when collapsing a phase, include key decisions, patterns, and harness hooks, not just …
- Very specific: line 419
Hardcoding build commands: always use the commands from the ## Harness section.
- Distinctive: line 421
Exhausting context on large phases: if a phase has 8+ tasks, suggest a session break after ~5 tasks.
- Very specific: line 422
Dispatching BLOCKED tasks: never dispatch an agent for a [BLOCKED] task.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Execute Roadmap
Overview
Reads a ROADMAP.md (produced by generate-roadmap), then builds the project phase-by-phase directly on main. Independent tasks within a phase can run in parallel using git worktrees (merged into main on completion), or sequentially on the working tree. Completed phases are collapsed to save context.
Humans steer, agents execute. Each task is built by one agent and independently validated by another that boots the app and drives it, leaving evidence behind. When an agent fails, the first question is what capability is missing? Missing capabilities become [HARNESS] tasks rather than blind retries. The user is asked to look only at milestones, and they review evidence, not diffs. Background: ${CLAUDE_PLUGIN_ROOT}/docs/harness-engineering.md.
Reusable Agents
This skill dispatches the following named agents (defined in agents/). Address them with @<name> rather than inlining ad-hoc Task prompts. The agent files own the prompt contract, and using named agents keeps dispatch consistent across runs and between execute-roadmap and auto-execute-roadmap.
@phase-executor— implements a single task in the current phase. One per task in parallel mode.@spike-researcher— read-only investigation for[SPIKE]tasks; returns refined scope and approach.@ac-verifier— the mechanical gate: runscmd:/invariant:clauses and the Harness Build/Test/Lint/Invariants commands, plus a Boot→Ready smoke check at integration.@validator— independent behavioral validation: boots the app in the task's worktree, drives it to checkprobe:clauses (and milestoneJOURNEY:lines), writes evidence, and returnsPASS/FAIL/CANNOT_VALIDATE.@phase-reviewer— diff-based quality review of a completed phase, including validation gaps and promote-to-rule candidates.
All agents live in ${CLAUDE_PLUGIN_ROOT}/agents/. See those files for the exact input contract each one expects.
Plugin Options (read at runtime)
Users configure this plugin via plugin.json userConfig. Claude Code exports chosen values as env vars to this skill's subprocesses:
CLAUDE_PLUGIN_OPTION_PARALLELAGENTLIMIT(number, default4) — cap on concurrent@phase-executoragents per phase.CLAUDE_PLUGIN_OPTION_DEFAULTEFFORT(string, defaultmedium) — effort level passed to dispatched agents.xhighrequires an Opus model (@phase-executorand@phase-reviewerrun on Opus).CLAUDE_PLUGIN_OPTION_WORKTREEPARENTDIR(string, default..) — parent directory for parallel worktrees.CLAUDE_PLUGIN_OPTION_AUTOCOMMITONACPASS(boolean, defaulttrue) — whether validated work is merged automatically.CLAUDE_PLUGIN_OPTION_RUNPHASEREVIEWER(boolean, defaulttrue) — whether to dispatch@phase-reviewerafter each phase's integration check.CLAUDE_PLUGIN_OPTION_VALIDATORBASEPORT(number, default4800) — first port handed to app instances booted by executors and validators. Each concurrent instance gets its own pair (base + 2 × slot, and+1).
Respect these values when choosing parallelism, effort, ports, and post-phase actions. If env vars are not set, fall back to the documented defaults.
When to Use
- User says "execute the roadmap", "start building", "work through the phases"
- A
ROADMAP.mdexists in the project root - User wants to automate multi-phase implementation
Process
digraph execute_roadmap {
"Read ROADMAP.md + CLAUDE.md + project docs" [shape=box];
"Validate format + parse Harness" [shape=box];
"Find first incomplete phase" [shape=box];
"Verify dependency ACs" [shape=box];
"Identify unblocked tasks" [shape=box];
"Skip BLOCKED tasks (notify user)" [shape=box];
"Choose dispatch mode" [shape=diamond];
"Dispatch executors in parallel (worktrees)" [shape=box];
"Is task a SPIKE?" [shape=diamond];
"Dispatch research agent" [shape=box];
"Re-scope task from findings" [shape=box];
"Dispatch executor sequentially" [shape=box];
"Gate: cmd + invariant (ac-verifier)" [shape=box];
"Validate: probe (validator, independent)" [shape=box];
"Verdict?" [shape=diamond];
"Classify failure" [shape=diamond];
"Retry with repro (max 2)" [shape=box];
"Insert [HARNESS] task, run it, re-validate" [shape=box];
"Ask user (spec problem)" [shape=box];
"Merge + update ROADMAP.md" [shape=box];
"More tasks in phase?" [shape=diamond];
"Integration check + phase review" [shape=box];
"MILESTONE?" [shape=diamond];
"Journey validation + user checkpoint" [shape=box];
"More phases?" [shape=diamond];
"Done" [shape=doublecircle];
"Read ROADMAP.md + CLAUDE.md + project docs" -> "Validate format + parse Harness";
"Validate format + parse Harness" -> "Find first incomplete phase";
"Find first incomplete phase" -> "Verify dependency ACs";
"Verify dependency ACs" -> "Identify unblocked tasks";
"Identify unblocked tasks" -> "Skip BLOCKED tasks (notify user)";
"Skip BLOCKED tasks (notify user)" -> "Choose dispatch mode";
"Choose dispatch mode" -> "Dispatch executors in parallel (worktrees)" [label="default: non-overlapping scopes"];
"Choose dispatch mode" -> "Is task a SPIKE?" [label="fallback: overlapping scopes or 1 task"];
"Dispatch executors in parallel (worktrees)" -> "Gate: cmd + invariant (ac-verifier)";
"Is task a SPIKE?" -> "Dispatch research agent" [label="yes"];
"Dispatch research agent" -> "Re-scope task from findings";
"Re-scope task from findings" -> "Dispatch executor sequentially";
"Is task a SPIKE?" -> "Dispatch executor sequentially" [label="no"];
"Dispatch executor sequentially" -> "Gate: cmd + invariant (ac-verifier)";
"Gate: cmd + invariant (ac-verifier)" -> "Validate: probe (validator, independent)" [label="pass"];
"Gate: cmd + invariant (ac-verifier)" -> "Classify failure" [label="fail"];
"Validate: probe (validator, independent)" -> "Verdict?";
"Verdict?" -> "Merge + update ROADMAP.md" [label="PASS"];
"Verdict?" -> "Classify failure" [label="FAIL / CANNOT_VALIDATE"];
"Classify failure" -> "Retry with repro (max 2)" [label="implementation bug"];
"Classify failure" -> "Insert [HARNESS] task, run it, re-validate" [label="harness gap"];
"Classify failure" -> "Ask user (spec problem)" [label="spec problem"];
"Retry with repro (max 2)" -> "Gate: cmd + invariant (ac-verifier)";
"Insert [HARNESS] task, run it, re-validate" -> "Validate: probe (validator, independent)";
"Merge + update ROADMAP.md" -> "More tasks in phase?";
"More tasks in phase?" -> "Identify unblocked tasks" [label="yes"];
"More tasks in phase?" -> "Integration check + phase review" [label="no"];
"Integration check + phase review" -> "MILESTONE?";
"MILESTONE?" -> "Journey validation + user checkpoint" [label="yes"];
"MILESTONE?" -> "More phases?" [label="no: auto-continue"];
"Journey validation + user checkpoint" -> "More phases?";
"More phases?" -> "Find first incomplete phase" [label="yes"];
"More phases?" -> "Done" [label="no"];
}Step 1 — Read, Validate, and Parse
- Read
ROADMAP.mdfrom project root. If it does not exist, inform the user and suggest runninggenerate-roadmapto create one. Do not proceed without a roadmap. - Read
CLAUDE.mdif it exists. Extract coding conventions, tech stack, and standards that agents must follow. - Read architecture/design docs referenced in the project.
- Parse the Harness section: extract Build, Test, Lint, Invariants, Boot, Ready, Driver, Observe, Reach. Legacy roadmaps call this section
## Tech Stackand usually have only Build/Test/Lint/Dev. TreatDevasBootand leave the rest unset. - Evidence directory: make sure
.vibecoding/is listed in the project's.gitignore(add it and commitchore: ignore vibecoding evidenceif it isn't). Evidence is local-only. Merge commits point at it. - Validate format: check that every task has
scope:,AC:, a priority, a size, and a sequential#ID. If any are missing, warn the user before proceeding. - Legacy migration (untyped AC): if ACs aren't typed with
cmd:/probe:/invariant:, or a task with user-visible behavior has noprobe:, it can never reachDONE. Before the first dispatch, draft typed ACs for every remainingTODOtask, and add Harness fields and[HARNESS]Phase 0 tasks where Boot/Ready/Observe are missing (same audit asgenerate-roadmapStep 2.5). Show the user the diff once, apply it on approval, and commitroadmap: migrate to typed AC + harness. - Parse phases, task statuses, dependencies.
- Identify the first phase that is not
DONE.
Step 2 — Identify Unblocked Tasks
Within the current phase, find all tasks where:
- Status is
TODO(skipDONEorIN PROGRESS) - Task is NOT flagged
[BLOCKED: ...] - All
depends: #xreferences point to tasks markedDONEor in a completed phase
Handle BLOCKED tasks: If any tasks in the phase have the [BLOCKED: reason] flag:
- List all blocked tasks and their reasons to the user at the start of the phase
- Ask: "These tasks are blocked — has anything changed?" For each:
- If the user confirms the blocker is resolved: remove the
[BLOCKED]flag and include the task in the dispatch queue - If still blocked: skip the task entirely — do not dispatch it. Continue with unblocked tasks.
- If the user confirms the blocker is resolved: remove the
- If ALL tasks in a phase are blocked, pause and tell the user: "Phase N is entirely blocked. Resolve these blockers or adjust the roadmap before continuing." Do not proceed to the next phase — blocked tasks may be prerequisites for later phases.
- At the end of a phase, if blocked tasks remain: report them again and ask whether to (a) wait, (b) skip and move on, or (c) re-plan.
Order unblocked tasks within the phase: [HARNESS] first, then P0, then P1, then P2.
Step 3 — Handle SPIKE Tasks
If a task has the [SPIKE] flag:
- Dispatch the
@spike-researcheragent with the task id, description, scope, and any specific open questions that need to be resolved before implementation. The agent file (agents/spike-researcher.md) defines the full input contract and output format — don't duplicate those instructions inline. - Present the agent's findings to the user.
- Update the task description, AC (typed), and size in ROADMAP.md based on the findings.
- Remove the
[SPIKE]flag and proceed to dispatch the implementation agent.
Step 4 — Mark In Progress and Dispatch Agent
Before dispatching, mark the task as IN PROGRESS in ROADMAP.md and commit. This enables resumability if the session is interrupted.
Choose dispatch mode based on the phase:
Parallel Mode (default — worktrees)
Multiple agents run simultaneously in isolated git worktrees. This is the default when conditions are met. Use when:
- Tasks within the phase have non-overlapping
scope:values - The phase has 2+ independent tasks
Do NOT ask the user for permission — just dispatch in parallel and inform them: "Dispatching N tasks in parallel (non-overlapping scopes)." If the user has explicitly requested sequential execution, respect that.
Sequential Mode (fallback)
One agent at a time on the working tree. Use when:
- Tasks have overlapping scopes (even if in the same phase)
- The phase has only 1 task
- The user has explicitly requested sequential execution
Parallel workflow:
- For each task, dispatch the
@phase-executoragent withisolation: "worktree". Cap concurrent agents atCLAUDE_PLUGIN_OPTION_PARALLELAGENTLIMIT(default 4) — queue any remaining tasks and dispatch them as earlier ones merge. - Each agent works in its own copy of the repo — no conflicts possible.
- As each agent completes, run Step 5 (gate + validate) in its worktree, and merge only on
PASS. Merge in completion order; don't wait for all agents to finish. Completion order is safe because scopes don't overlap. - If a merge conflict occurs (shouldn't with non-overlapping scopes, but possible): resolve it or fall back to sequential for the conflicting task.
- After merging, explicitly call
ExitWorktreeto clean up the worktree directory and branch. Do not rely on automatic cleanup — always callExitWorktreeafter the merge completes (or once a failed task's worktree is no longer needed).
@phase-executor input contract:
Pass these inputs when dispatching (the agent file agents/phase-executor.md documents the full contract):
- Task:
#{id}: {description} - Acceptance criteria: the typed
cmd:/probe:/invariant:clauses, verbatim. - Scope:
{scope from roadmap} - Harness: verbatim from the
## Harnesssection of ROADMAP.md. - Port:
CLAUDE_PLUGIN_OPTION_VALIDATORBASEPORT + 2 × slot— a port pair reserved for this executor's self-probe. - Project conventions: key points from CLAUDE.md (tech stack, naming, patterns).
- Completed dependencies:
depends:task ids + one-line description of what each produced. - Phase context: collapsed summaries of prior completed phases (Built / Patterns / Key files).
- Task type hint:
harness(for[HARNESS]tasks) |infra|ui|api|test| omit for general. - Prior attempt (retries only): the gate's failing output or the validator's repro.
- Effort: set to
CLAUDE_PLUGIN_OPTION_DEFAULTEFFORT(defaultmedium, orxhighfor large/risky tasks).
For tasks sized [L], also instruct the executor to commit intermediate progress with messages like roadmap #{id} (wip): {what was completed}. This preserves progress if the session is interrupted.
Dispatch rules:
[HARNESS]tasks first, then P0, within each phase- Tightly coupled tasks (e.g., a component and its direct wiring) → group into one agent
- In parallel mode, dispatch all independent tasks simultaneously, then gate, validate, and merge each as it completes (completion order, not task-ID order)
- In sequential mode, one task is gated, validated, and committed before the next starts
Step 5 — Gate, Validate, then Merge
A task is DONE only when all three hold:
- every
cmd:andinvariant:clause passes; @validatorreturnsPASSfor itsprobe:clauses;- the worktree is unchanged by validation.
There's no override. If a task has observable behavior but no probe:, it isn't done. Step 1's legacy migration fixes that before dispatch.
After each @phase-executor completes, before merging:
- Mechanical gate. Dispatch
@ac-verifier(check type: task-ac) against the task's worktree (or the working tree in sequential mode), passing thecmd:/invariant:clauses and Harness commands. Any failure → Step 6 with the verifier's output. Don't spend a validator run on code that doesn't build. Behavioral validation. If the task has
probe:clauses, recordgit -C <worktree> status --porcelainandHEAD, then dispatch@validatorwith:- Check type:
task-probe - Task and its probe ACs. Pass only these. Do not pass the executor's report, plan, or reasoning. Independence is the point.
- Harness: verbatim
- Working directory: the worktree path (repo root in sequential mode)
- Port:
CLAUDE_PLUGIN_OPTION_VALIDATORBASEPORT + 2 × slot, a pair not in use by any running executor or validator - Evidence directory:
<repo root>/.vibecoding/evidence/<id>/. This is an absolute path in the main repo, so it survives worktree cleanup. On a re-validation, move the previous contents intoattempt-<n>/first. - Base ref: the commit the executor's branch started from
- Before checkout: the main repo root if its
HEADequals the base ref andgit status --porcelainis clean. Otherwisenone. This is alwaysnonein sequential mode, because the task's changes live in the main working tree. Main already has dependencies installed, so the validator never builds a throwaway worktree for its "before" run.
Validators for different tasks may run in parallel, since each has its own port pair. While a validator holds the main repo as its Before checkout, queue merges into main until it returns. A merge would move
HEADunder its "before" instance.- Check type:
- Integrity check. After the validator returns, confirm the worktree's
status --porcelainandHEADmatch what you recorded. If they changed, restore the recorded state (git -C <worktree> reset --hard <recorded HEAD>only ifHEADmoved;git -C <worktree> checkout -- <changed paths>and remove new untracked files the validator created) and re-run validation once. A verdict from a run that modified the code doesn't count. - Act on the verdict:
PASS→ merge:git merge <worktree-branch> --no-ff -m "roadmap #N: <description>" -m "Validated: PASS — .vibecoding/evidence/N/", then callExitWorktree. In sequential mode the work is already on main, so record the verdict in the ROADMAP update commit body instead. IfCLAUDE_PLUGIN_OPTION_AUTOCOMMITONACPASSisfalse, leave the validated branch unmerged and list it at the next checkpoint.FAIL→ Step 6, classified as an implementation bug, with the validator's repro.CANNOT_VALIDATE→ Step 6, classified as a harness gap, with the validator's missing capability.
- Report progress: "Task #N done, validated (3/5 in Phase 2). Overall: 12/30 tasks complete."
Tasks with no probe: clauses (pure test, internal infra) skip steps 2–3 and merge after the gate.
Step 6 — Classify Failures, then Act
When something fails, don't just retry. Classify it first. The question is always: what capability is missing, and how do we make it legible and enforceable for the agent?
| Class | Signal | Action |
| Implementation bug | @ac-verifier failure, or validator FAIL with a repro | Re-dispatch @phase-executor with the failing output or repro as Prior attempt, then gate and validate again. Max 2 retries. |
| Harness gap | Validator CANNOT_VALIDATE; or executors report the same harness friction twice; or a FAIL whose repro can't reach the state it describes | Insert a [HARNESS] task (below), run it, then re-validate the original task. A re-validation doesn't count as a retry. |
| Spec problem | The executor reports that the AC contradicts the docs or itself; a probe is unachievable as written; the same harness capability is requested twice for one task | Ask the user. This is the only class that interrupts a non-milestone phase. |
Inserting a harness task:
- Append a new task to the current phase with the next free ID:
- TODO [P0] [S] [HARNESS] #<new>: <missing capability, from the validator> — scope: <smallest plausible path>with anAC:block containing aprobe:that demonstrates the capability. - Add
depends: #<new>to the original task. This is the one allowed intra-phase dependency. - Commit ROADMAP.md (
roadmap: insert harness #<new> for #<orig>), tell the user in one line, and dispatch the harness task immediately, ahead of other pending tasks. - When the harness task is
DONEand merged, rebase the original task's branch onto main (keep its worktree alive meanwhile) and re-run Step 5 on it.
After 2 failed implementation retries, the task is blocked. Present the failure details and the latest evidence directory, and ask the user to intervene manually, skip, or re-plan. On skip: leave the task TODO with [FAILED: reason] and call ExitWorktree. Exception: on intervene manually, keep the worktree and give the user its path.
Rollback: if a phase can't be completed and the user wants to undo, offer to (a) revert all commits from this phase, (b) keep successful tasks and retry failed ones, or (c) re-plan the remaining tasks by invoking generate-roadmap on the unfinished portion.
Step 7 — Update ROADMAP.md
After each task completes successfully:
- Mark the task as
DONE:- DONE [P0] [M] #5: Wire columns to IPC list_dir — depends: #2 ✓, #4 ✓ — scope: src/views/ - In subsequent phases, mark newly satisfied dependencies with
✓:- TODO [P0] [M] #7: Quick Look overlay — depends: #5 ✓ — scope: src/overlay/ - If ALL tasks in the phase are done, collapse using this structured template — later agents lose access to individual task details, so anything important must survive in the summary:
Example:## Phase N — DONE Built: {what was created/implemented}. Patterns: {architectural decisions, conventions established, design patterns chosen}. Harness: {capabilities added — boot/observe/reach hooks, lints}. Key files: {important new/modified files or directories}. (X/X tasks, all validated)
What to include: anything a future agent needs in order to build on this phase: naming conventions, API shapes, data flow patterns, important type definitions, and harness hooks it can observe through. What to omit: implementation details that are obvious from reading the code. If the Harness gained a capability, update the## Phase 2 — DONE Built: Tauri IPC scaffolding, single column view with virtualization. Patterns: repository pattern for data layer, IPC commands follow request/response naming (list_dir_request → list_dir_response). Harness: window.__debug.getState().columns exposes visible rows. Key files: src/ipc/, src/views/column.tsx, src/data/repository.ts. (2/2 tasks, all validated)## Harnesssection too. - Commit the updated
ROADMAP.mdwith message:roadmap: complete phase N
Step 8 — Phase Completion: Integration, Review, and Milestone Checkpoints
After all tasks in a phase are complete:
- Integration check: dispatch
@ac-verifierwithcheck type: phase-integration, passing the Harness commands and a free port. It runs Build / Test / Lint / Invariants and a Boot→Ready smoke check. If integration fails: diagnose, fix, commit, and re-run before going further. - Phase review (default on): if
CLAUDE_PLUGIN_OPTION_RUNPHASEREVIEWERistrue, dispatch@phase-reviewerwith the phase number, the task ids, the diff range (the phase's commits), and each task's validator verdict line and evidence dir. Queue its findings for the next milestone checkpoint. If it marks a taskneeds rework, treat that like a validatorFAILfor that task (Step 6) before moving on. Don't carry known-broken work forward. - Non-milestone phase → continue automatically. Report one line ("Phase 3 done: 4/4 validated, integration green, 2 reviewer notes queued for the milestone") and go to Step 9. Don't ask the user anything unless Step 6 raised a spec problem or a task is blocked.
- MILESTONE phase → journey validation, then user checkpoint.
- Dispatch
@validatorwithcheck type: journey, the phase'sJOURNEY:line, the Harness, the repo root as working directory, a free port, and evidence dir<repo root>/.vibecoding/evidence/phase-<N>/. Journey failures are classified like task failures (Step 6), attributed to the most likely task in the phase, and fixed before the checkpoint. If the phase has noJOURNEY:line, derive one from theMILESTONE:title and write it into ROADMAP.md. - Then pause and present a compact checkpoint:
Ask: "Review the evidence, adjust the plan, promote any rules to lints or docs, or continue?" Point the user at the screenshots and verdicts rather than the diff. If they promote a rule, add it as aMILESTONE Phase N: {title} — {X/Y} tasks overall Journey: PASS — .vibecoding/evidence/phase-N/ (see after-*.png) Since last milestone: #a PASS, #b PASS, #c PASS (+1 harness task inserted: #d) Reviewer notes: {top 1–3, across phases since the last milestone} Promote-to-rule candidates: {from phase-reviewer} Skipped / blocked: {list or "none"}[HARNESS]task (a lint whose error message carries the remediation) at the head of the next phase.
- Dispatch
- Proceed past a milestone only after the user confirms. If the roadmap has no milestones, pause after the final phase.
Step 9 — Next Phase
Return to Step 2 with the next incomplete phase. Repeat until all phases are DONE.
Session Budget Awareness
Large phases can exhaust the conversation context. To manage this:
- If a phase has more than ~8 tasks, after completing each batch of ~5 tasks, commit all ROADMAP.md updates and suggest the user start a fresh session to continue. The resumability logic will pick up where things left off.
- When dispatching agents, keep prompts lean — collapsed phase summaries only, not full histories. Validator and verifier reports are compact by contract; don't paste evidence files into the main session.
- If you notice the conversation is getting long (many tool calls, large outputs), proactively suggest a session break at the next natural checkpoint (after a task completes).
Dependency Verification Between Phases
When starting a new phase, before dispatching any tasks:
- Identify all dependency tasks referenced by
depends:in this phase - Re-run the
cmd:/invariant:checks for those dependency tasks (via@ac-verifier) to confirm they still pass after subsequent changes. Re-run theirprobe:checks too if the previous phase touched the same scope. - If a dependency's AC now fails, fix it before proceeding — later work built on a broken foundation will cascade failures
- This is especially important after parallel merges, where one task's changes may subtly affect another's behavior
Resumability
If a session is interrupted mid-phase:
- On resume, read ROADMAP.md and look for
IN PROGRESStasks - Check git log for commits referencing those task IDs. If a merge commit with
Validated: PASSexists, mark the taskDONE. If the work was committed but never validated, run Step 5 on it now. - For tasks marked
IN PROGRESSwith no committed work, reset toTODO - Ask the user: continue the current phase or restart it?
Mid-Execution Re-Planning
If during execution you discover that future phases are invalidated (e.g., a task reveals the architecture needs to change, a dependency was wrong, or scope was significantly off):
- Finish the current task — don't leave work half-done
- Pause before starting the next task
- Present the discovery to the user: what changed and which future tasks/phases are affected
- Offer: (a) continue as-is, (b) re-run
generate-roadmapon the remaining phases with the new context, or (c) manually adjust specific tasks - If re-planning: mark completed phases as DONE, keep them collapsed, and regenerate only the incomplete phases
Do NOT silently work around bad task descriptions. Flag it early — re-planning a few phases is cheaper than building on a bad foundation.
Checkpoint Commits
Commit ROADMAP.md at these moments to ensure recoverability:
- Task start: After marking a task
IN PROGRESS - Harness insertion: After inserting a
[HARNESS]task - Task end: After marking a task
DONE - Phase end: After collapsing the completed phase
These commits create a reliable audit trail. If a session dies, the status markers tell the Resumability section exactly where things stopped.
Agent Context Management
Each dispatched agent receives:
- Current task(s): Full description, scope, and typed AC from roadmap
- Harness: the
## Harnesssection verbatim - Project conventions: Key points from CLAUDE.md (tech stack, naming, patterns)
- Completed phases: One-line collapsed summaries only (NOT full task lists)
- Relevant doc excerpts: Only the sections of architecture/design docs relevant to this task
- Dependency outputs: Brief description of what the dependency tasks produced
@validator gets less: the task line, its probe: clauses, the Harness, the worktree, a port, the evidence path, the base ref, and the Before checkout. Nothing from the executor.
This keeps agent context lean. Do NOT send the entire ROADMAP.md or full doc contents to each agent.
Roadmap Format Reference
The skill expects ROADMAP.md in the format produced by generate-roadmap:
## Harness
- Build: `...` Test: `...` Lint: `...` Invariants: `...`
- Boot: `... --port $PORT` Ready: GET http://localhost:$PORT/healthz → 200
- Driver: browser Observe: window.__debug.getState() Reach: ?scenario=<name>
## Phase N — DONE
Built: ... Patterns: ... Harness: ... Key files: ... (X/X tasks, all validated)
## Phase M — MILESTONE: description
JOURNEY: end-to-end flow the validator drives at the checkpoint
- TODO [P0] [M] #id: Task description — depends: #x ✓, #y — scope: path/
AC: cmd: test passes for path/
probe: action → observable result
invariant: Invariants clean
- IN PROGRESS [P0] [S] [HARNESS] #id: Expose X to the debug bridge — scope: src/debug/
AC: probe: window.__debug.getState().x is defined on loadLegacy ## Tech Stack sections and untyped AC: lines are migrated in Step 1.
Common Mistakes
- Letting the builder grade itself: the executor's "AC verified" is a claim, not a verdict. Every task with observable behavior goes through
@validator, and the validator never sees the executor's report. - Marking DONE without a PASS: no
probe:PASS, noDONE. Not even "just this once" for a small UI task. - Retrying a harness gap:
CANNOT_VALIDATEmeans the environment is missing something. Retrying the implementation won't fix it. Insert a[HARNESS]task. - Validating after merge: validate in the worktree, then merge. Validating on main means broken work has already landed.
- Evidence inside the worktree: evidence must go to the main repo's
.vibecoding/evidence/. A worktree path gets deleted byExitWorktree, and writing inside the worktree trips the integrity check. - Port collisions: every executor self-probe and validator instance needs its own port pair. Never boot on the project's pinned dev port while other instances run.
- Pausing at every phase: checkpoints are at milestones only. Non-milestone phases auto-continue unless there's a spec problem or a blocker.
- Skipping journey validation at milestones: the milestone checkpoint is the only time the human looks. Give them a validated end-to-end run, not a list of commits.
- Sending too much context to agents: only send relevant doc sections and collapsed phase summaries, not everything.
- Skipping the roadmap update: the collapsed phase summaries are critical for context management in later phases. Always update.
- Skipping integration checks: individual tasks may work in isolation but break together. Always run integration after completing a phase.
- No progress reporting: report to the user after each task completes, including overall progress.
- Referencing skills in agent prompts: dispatched agents don't have access to the Skill tool. Inline all instructions directly in the agent prompt.
- Skipping SPIKE research: if a task is flagged
[SPIKE], don't jump straight to implementation. Run the research agent first. - Parallel dispatch with overlapping scopes: never dispatch tasks in parallel if their
scope:values overlap. This causes merge conflicts. Fall back to sequential. - Forgetting to merge worktrees: after a task validates, merge its worktree branch into main. Don't leave orphaned worktree branches.
- Forgetting to call ExitWorktree: after merging a worktree branch (or after a failed task is abandoned), always call
ExitWorktree. Skipping this leaves stale worktrees on disk. - Losing architectural context in collapsed summaries: when collapsing a phase, include key decisions, patterns, and harness hooks, not just "what was built."
- Retrying endlessly: max 2 implementation retries per task. After that, the task is blocked and needs human intervention.
- Hardcoding build commands: always use the commands from the
## Harnesssection. Don't guess or hardcode tool-specific commands. - Not verifying dependencies between phases: re-run AC checks for dependency tasks at the start of each new phase. Later changes may have broken earlier work.
- Exhausting context on large phases: if a phase has 8+ tasks, suggest a session break after ~5 tasks. Commit ROADMAP.md updates so resumability can pick up.
- Dispatching BLOCKED tasks: never dispatch an agent for a
[BLOCKED]task. Always notify the user and confirm the blocker is resolved before unblocking. If all tasks in a phase are blocked, don't skip to the next phase. Blocked tasks may be dependencies.
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
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.

