Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Turns a sequential, ready-for-dev story backlog into conflict-free CONCURRENT WAVES. Builds a dependency DAG from epic order, per-story dependency maps, and Owned File/Module Scope overlaps, then topologically sorts it into parallel waves of mutually disjoint, dependency-satisfied stories (capped by maxParallel), and emits a parallelization-plan.md with per-story git-worktree branch names and an ordered merge sequence. Use when the user says "plan parallel work", "which stories can run in parall
.claude/skills/aj-geddes-bmad-parallel-plan/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 66% | 0% |
Convert a linear backlog into waves of stories that can be developed at the same time without colliding — then describe exactly how to merge them back together. This skill produces a plan. Your external dev tools execute it.
Persona flavor: Winston (Architect) reasons about isolation; the workflow does the math.
application code, runs tests, lints, or runs git.
parallelization-plan.md (plus anoptional dependency-graph.json / waves.json for traceability).
| Artifact | Path (under output folder) | Used for | |----------|---------------------------|----------| | Sprint status | sprint-status.yaml | story ids, epic, status, dependency lists | | Ready stories | stories/{epic}.{story}.{slug}.story.md | Owned File/Module Scope + Dependency Maps | | Architecture | architecture.md | semantic-conflict prevention (boundaries, shared modules) | | Config | userConfig.maxParallel (default 3) | wave width cap |
Only stories at status ready-for-dev (or later) are eligible for a wave.
architecture.md. Architecture iswhat makes parallelism safe — clean module boundaries mean two stories touching different components won't create a hidden semantic conflict even if the files differ. Note any shared/cross-cutting modules (auth, config, DB schema, shared types); stories that touch them are high-conflict and rarely parallelizable.
list of paths it may touch. Collect {story_id -> [paths]}. A missing or empty scope is a planning blocker — flag it; do not guess.
conflict classes (see REFERENCE.md):
each story's explicit Dependency Maps (depends_on).
not share a wave (an undirected conflict, resolved by lower story id first).
Topologically sort: wave N = all stories whose dependencies are already satisfied by waves < N AND that are pairwise file-disjoint AND pairwise semantically safe. Cap each wave at maxParallel; overflow rolls to the next wave (lowest id first).
parallelization-plan.md. For each wave, list the ready-for-dev stories; giveeach an isolated git-worktree branch name and its disjoint file scope. Then give the ordered merge sequence: lowest story id first into an integration branch, an integration review checkpoint, then a single PR integration -> main.
exclude done, re-sort remaining).
dependency-satisfied, and within maxParallel; report drift.
State the intent, then proceed.
Both scripts are deterministic and read-only. Resolve paths via ${CLAUDE_PLUGIN_ROOT}.
bash# 1) Build the dependency DAG (edges + conflict class) from status + story scopes python3 "${CLAUDE_PLUGIN_ROOT}/skills/bmad-parallel-plan/scripts/build-dependency-graph.py" \ --status "<output>/sprint-status.yaml" \ --stories "<output>/stories" \ --out "<output>/dependency-graph.json" # 2) Topologically sort into capped waves python3 "${CLAUDE_PLUGIN_ROOT}/skills/bmad-parallel-plan/scripts/plan-parallel-waves.py" \ --graph "<output>/dependency-graph.json" \ --max-parallel 3 \ --out "<output>/waves.json" # 3) (Optional) cross-check two scope lists for overlap — shared orchestrator helper bash "${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh" \ "<output>/stories/2.1.foo.story.md" "<output>/stories/2.2.bar.story.md"
Then render waves.json into the human-facing plan using templates/parallelization-plan.template.md and write it to <output>/parallelization-plan.md.
story/{epic}.{story}-{slug} (one worktree each, fully isolated).integration/wave-{N}.integration/wave-{N}.integration/wave-{N} -> main. Wave N+1 branches off the merged main.
<output>/parallelization-plan.md — the deliverable.<output>/dependency-graph.json, <output>/waves.json — traceability (optional).<output>/decision-log.md noting maxParallel, wave count,and any stories deferred for missing scope.
depends_on.scrum-master to fix; do not invent paths.
maxParallel; the dev tool enforces real concurrency, the plan must not exceed it.See REFERENCE.md for the wave algorithm, conflict classes, and merge-order rationale.
> --- > Part of the BMAD Planning & Orchestrator plugin — a Claude Code harness for the BMAD Method by the BMAD Code Organization (https://github.com/bmad-code-org/BMAD-METHOD). Implements the spirit of bmad-parallel-plan. All methodology credit belongs to the BMAD Code Organization.
Other measured skills in the registry, with their headline benchmark lift.