Groups plan phases and tasks into dependency-ordered waves for parallel subagent execution via git worktrees. Builds a task dependency DAG, assigns wave numbers via topological sort, emits a living wave document that tracks status as work lands, and updates wave progress when tasks complete. Use when asked to: group tasks into waves, plan parallel execution, schedule worktrees, create a wave breakdown, wave planning, dependency grouping, update wave statuses, parallel subagents, which tasks can run in parallel.
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Groups tasks into dependency-ordered waves so multiple subagents can work concurrently in isolated git worktrees.
.context/plans/<plan-slug>.md| Signal | Mode |
|---|---|
| New requirements / PRD with no existing plan | Mode A |
| Existing flat plan, phase list, or task breakdown | Mode A (from existing plan) |
| Wave document exists; tasks have been completed | Mode B |
| "Which wave is unblocked?" / "Update status" | Mode B |
Input that triggers Mode A:
"Create a wave plan for this refactor. Tasks: extract lib (no deps),
scaffold CLI (needs lib), add commands A/B/C (needs CLI), cleanup (needs all commands)."Expected output skeleton:
Wave 1 (parallel): extract-lib
Wave 2 (sequential): scaffold-cli ← depends on Wave 1
Wave 3 (parallel): command-A, command-B, command-C ← depend on Wave 2
Wave 4 (sequential): cleanup ← depends on Wave 3See references/wave-format.md for output format and full examples.
parallel; a wave with 1 task (or tasks that must run in order) is sequential. Then apply the safe intermediate state check to every wave boundary: "If this wave deploys and the next has not landed yet, does any existing functionality break?" If yes, merge the tasks on both sides of that boundary into a single must land together wave — see references/dependency-analysis.md for patterns and detection guidance.<plan-slug>.md to the plans location shown in Quick Start, using the format in references/wave-format.md.See references/status-tracking.md for the full update protocol.
Verification: checklist:
# example gate for a test-coverage wave
bun run test --coverage
bun run typecheck
git log --oneline main..HEADStatus column cells.— DONE to the wave heading when all verifications pass.Pending → In Progress → Done
↓
Blocked (add a > BLOCKED: note)Each entry gives the rule, WHY it exists, then a BAD and GOOD example.
WHY: agents working in parallel worktrees assume no ordering, so placing dependent tasks together causes undefined behaviour or overwrite conflicts.
BAD: Wave 2 (parallel): scaffold-cli, add-commands where the commands need the scaffold.
GOOD: Wave 2: scaffold-cli, then Wave 3 (parallel): command-A, command-B, command-C.
WHY: parallel signals subagent tooling to spin up worktrees; a single-task wave wastes setup overhead and misleads reviewers.
BAD: Wave 1 (parallel): extract-lib.
GOOD: Wave 1 (sequential): extract-lib.
WHY: a broken merge point in production compounds into every parallel branch; early detection is always cheaper.
BAD: mark Wave 2 in progress while one Wave 1 verification check is still unticked.
GOOD: name the failing check, hold Wave 2 as pending, and tell the user what must pass first.
WHY: distributed status creates stale reads and coordination failures when multiple agents update concurrently.
BAD: add a status: done line to each phase file and treat those as the record.
GOOD: update checkboxes or the Status column in the single wave document.
WHY: fabricated ordering reduces parallelism, slows execution, and breaks the contract between the plan and the actual work.
BAD: serialise two unrelated documentation tasks because they "feel" related.
GOOD: infer only logical ordering (a test task depends on its implementation task) and leave the rest parallel.
WHY: each wave merge is a potential release point. Runtime dependencies (config values, API contracts, schema columns, env vars, permission grants, event topics) are invisible to the code-level DAG but fatal when missequenced. Three failure modes: (1) stranded consumer, a resource is removed before all code that uses it is also removed or updated; (2) premature consumer, code that requires a resource (new env var, schema column, endpoint) deploys before that resource exists; (3) breaking contract change, an interface changes incompatibly before all consumers are updated.
BAD: Wave 1 removes an SDK-backed infrastructure resource and Wave 2 updates the services that still call it.
GOOD: group tasks that must deploy atomically into a single must land together wave, or use explicit expand-contract sequencing across waves. See references/dependency-analysis.md.
WHY: agents editing the same tree overwrite each other and leave no clean merge point per workstream.
BAD: two phases in a parallel wave both commit to the same branch checkout.
GOOD: each phase in a parallel wave gets its own branch and worktree, listed in the Branch Strategy table.
WHY: "it looks right" is not a gate, and an unverified wave hides defects until the next merge.
BAD: append — DONE to the wave heading after reading the diff.
GOOD: run every command in the wave's Verification: list, tick each item, and only then mark the wave done.
WHY: a task absent from every wave is never executed, and one present in two waves is built twice.
BAD: a plan with nine tasks whose waves list eight, or list one task twice.
GOOD: validate that every task appears in exactly one wave before writing the output.
pantheon-org/tekhne
9aa89e5
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.