waves-plan — task breakdown & wave scheduling
Preamble (run first)
"${CLAUDE_PLUGIN_ROOT}/scripts/waves-detect"
Read ${CLAUDE_PLUGIN_ROOT}/references/conventions.md (§1, §2, §5) and the
CLAUDE.md + rule files of every repo the plan will touch. If there is no
workspace, run waves-init first.
Input sources
- A goal/spec from the user or workspace docs.
- A
clip-to-planresult: treat its code-traced findings as candidate tasks; re-verify file paths against the actual checkouts before scheduling. - An existing plan needing the next phase.
GATE 1 — open questions before tasks
List every decision the plan depends on that is not locked. For each: state a
proposed default and who must confirm (user now, or the coordinator via
a flagged blurb item). Ask the user's share immediately as decision briefs
(${CLAUDE_PLUGIN_ROOT}/references/decision-briefs.md) — batched, one
recommended option each, honest tradeoffs.
Do not emit a plan whose tasks depend on an unresolved question;
park dependent tasks behind the question in the wave schedule instead
(after decisions status), exactly like Open questions (blocking Wave 1 start)
in the master plan format.
Task breakdown rules
- Every task ≤
task_max_hours(config, default 3–4h). Split anything bigger. - Every task has: id (
<wave><letter>, e.g.2B), repo (ordocs/—for external/human), owner (agent / engineer / coordinator), named deliverable, and an exit check stated up front — the concrete command/URL/observation that proves it done on the running stack (green suites alone never qualify). - Tasks inside one plan are sequential; parallelism happens between tasks of a wave, split by repo first, then by disjoint file ownership.
- Name shared mutable surfaces (spec files, registries, translation indexes) and assign one owner for the duration.
- Deploys and infra/env config edits: one task per site/service, serialised.
- Note kill criteria where a workstream might be cut ("if X fails, ship only Y").
Wave scheduling
Group tasks into waves: each wave = the largest set with no unresolved dependencies or ownership conflicts. Don't trickle; don't let an independent task wait on a slow lane. Mark same-repo concurrency for worktrees. Record gating conditions explicitly ("after 3D", "after coordinator signs off contract").
If agent teams are enabled (waves-detect prints it), size lanes for them:
~5–6 tasks per lane keeps a teammate productive and lets the lead reassign work
(see ${CLAUDE_PLUGIN_ROOT}/references/agent-teams.md); the backend itself is
chosen per wave at execution time by waves-run.
Output
Write/update plans/00-master.md following
${CLAUDE_PLUGIN_ROOT}/templates/00-master.md.tmpl (7-column wave table, locked
decisions, open questions with defaults+confirmers, conventions block). Follow-on
plans get decimal numbers (05.1); numbers are never reused. Then summarize for the
user: wave count, parallelism per wave, open questions blocking Wave 1, and offer
/waves-run to execute.