Execute a wave-based plan by spawning parallel agents per wave, enforcing merge gates, and building self-contained per-agent prompts from wave document rows. Use when asked to: run the plan, execute the plan, start the waves, launch agents, execute wave N, run wave execution. Reads a wave document produced by wave-execution-planner.
71
88%
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
Execute a wave document by spawning parallel agents per wave, pausing at merge gates, and verifying each wave before advancing.
wave-execution-planner (or follows the same format)wave-execution-planner (Mode A) firstwave-execution-planner (Mode B) insteadAsk for the plan slug if not provided. Load the wave document from the project's plans directory (for example .context/plans/<slug>.md in a repo using that convention):
Read(".context/plans/<slug>.md")Read the full document. Identify all waves in order and their current status. Skip waves already marked — DONE.
Repeat steps 2a–2g for every wave that is not — DONE, in order.
Read the > Gate: blockquote at the top of the wave. If it requires a prior wave to be verified, confirm that wave's Verification: checklist is fully ticked ([x]). If not, stop and report the unmet gate to the user.
Parse the wave table or inline task list. For each row / item capture:
— branch.Model column value, or — model: suffix on inline tasks. Default: standard if absent.Writes column or — writes: annotation is present, capture it. Otherwise derive from the phase file, or leave unspecified and let the agent determine scope from the focus.Read references/model-map.yaml. For each extracted model tier value, look up the
corresponding concrete model ID. If a tier is absent from the map, use the standard entry.
Carry the resolved model ID (not the tier name) forward to step 2d.
Read references/per-agent-template.md.
For each phase, fill the template slots with the values from step 2b. Append the model-tier addition from references/model-tier-guide.md matching the phase's model value.
Do not paraphrase the focus / task description. Copy it verbatim.
If the phase links to a phase file, read that file and include its full content under "Your task" rather than only the Focus cell value.
Send a single response containing one Agent tool call per unblocked phase.
Each call must set:
subagent_type: "general-purpose"model: the resolved model ID from step 2b.5 (e.g. "haiku" for a fast-tier phase)isolation: "worktree" for all phases that commit to a branch (omit for phases that commit directly to main)description: "Wave N: <branch>"prompt: the filled per-agent prompt from step 2cDo not proceed until every agent in the wave has returned.
After all agents complete, report to the user:
"Wave N agents done. Please merge the following branches to
mainbefore I continue: [list branches]Then run the Verification checklist for this wave (copied below) and reply 'verified' when all checks pass."
Copy the wave's Verification: checklist verbatim into your message so the user can run each item.
Wait for the user to reply before continuing.
After the user confirms verification:
wave-execution-planner Mode B on the wave document to tick the verification checkboxes and mark the wave — DONE.After all waves are done:
**Status** field is set to Complete.WHY: Information loss — the verbatim focus or phase file contains constraints, tool names, and scope boundaries that summaries drop.
BAD Summarise "Triage Mem0, Zep, MemoryOS, Letta via tessl__triage-tool" as "triage memory tools".
GOOD Copy the full text verbatim into the per-agent prompt. ALWAYS paste the focus text unedited, even if it looks redundant with the branch name.
model parameter on Agent callsWHY: Omitting it silently defaults to the orchestrator's model. For fast-tier mechanical tasks, this wastes significant cost with no quality benefit.
BAD Agent(subagent_type="general-purpose", prompt=...) with no model.
GOOD Agent(model="haiku", ...) — resolved from the fast tier in model-map.yaml. ALWAYS resolve the tier to a concrete model ID before spawning.
WHY: Consolidation agents read files written by prior waves. Unmerged branches mean stale reads and incorrect output that is hard to detect.
BAD Proceed to Wave N+1 as soon as Wave N agents return their results.
GOOD STOP, ask the user to merge and verify, confirm gate before advancing. ALWAYS treat an un-ticked Verification: checklist item as a blocked gate, never as a formality.
WHY: Defeats the parallelism that wave planning was designed to achieve.
BAD Spawn one agent, wait for it, then spawn the next. GOOD Send a single response with all parallel agents in one message.
WHY: A phase that needs a prior branch merged will read stale state and produce incorrect output.
BAD Spawn feat/synthesis before feat/rubric is merged (it's in the Blocked on note).
GOOD Check each phase's gate / blocked-on annotation; skip and report blocked phases.
WHY: A merge can succeed with no conflicts and still leave the codebase broken — a renamed export, a missing migration, a config drift between branches. git merge exiting 0 only proves the text merged, not that the result runs.
BAD Accept the user's "verified" reply at face value with no build evidence attached.
GOOD Before ticking the gate, ask for (or run) the project's own build/test command on main after the merge:
git checkout main && git pull
make build && make test
# or, in a Node project: npm run build && npm testConsequence: Skipping this means the next wave's agents branch from a main that looks merged but doesn't actually compile, and the failure only surfaces several waves later when it's much harder to trace back.
wave-execution-planner skill (wave-execution-planner/references/wave-format.md)wave-execution-planner skill (wave-execution-planner/references/status-tracking.md); used in step 2ga1083f4
Also appears in
last in sync Aug 28, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.