/bmad-parallel-plan
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,
$ npx -y skills add aj-geddes/claude-code-bmad-skills --skill bmad-parallel-plan --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/bmad-parallel-plan
Context preview
The summary Claude sees to decide when to auto-load this skill.
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,
SKILL.md
bmad-parallel-plan.SKILL.mdname: bmad-parallel-plan
description: |
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 parallel",
"parallelize the backlog", "build the wave plan", "parallelization plan",
"conflict-free workstreams", "what can we run concurrently", "split into worktrees",
"dependency graph for the stories", "merge order", or "how do I fan this backlog out
to multiple dev agents". Run AFTER stories are ready-for-dev (scrum-master) and an
architecture exists. This skill PLANS parallelism only — it does NOT run agents, spawn
worktrees, write code, run tests, or perform git operations.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
BMAD Parallel Plan
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.
Scope (read first)
- This skill **plans** concurrency. It NEVER spawns worktrees, runs dev agents, writes
application code, runs tests, lints, or runs `git`.
- Inputs are planning artifacts. The only output is `parallelization-plan.md` (plus an
optional `dependency-graph.json` / `waves.json` for traceability).
- Branch names and merge order are *recommendations* the dev tool/human carries out.
Inputs
| 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.
The four steps
1. **Lean on architecture for semantic safety.** Read `architecture.md`. Architecture is what 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.
2. **Read each story's Owned File/Module Scope.** Every ready story declares the explicit list of paths it may touch. Collect `{story_id -> [paths]}`. A missing or empty scope is a **planning blocker** — flag it; do not guess.
3. **Build the dependency DAG, then topologically sort into waves.** Edges come from three conflict classes (see REFERENCE.md):
- **Ordering edges** — epic order (stories within an epic are usually sequential) and
each story's explicit Dependency Maps (`depends_on`).
- **File-scope edges** — any two stories whose Owned File/Module Scopes intersect must
not share a wave (an undirected conflict, resolved by lower story id first).
- **Semantic edges** — both touch a shared/cross-cutting module from step 1.
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).
4. **Emit `parallelization-plan.md`.** For each wave, list the ready-for-dev stories; give each 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`.
Three intents
- **Create** — first wave plan from the current backlog.
- **Update** — re-plan after stories were added/finished/re-scoped (recompute the DAG;
exclude `done`, re-sort remaining).
- **Validate** — re-check an existing plan: confirm every wave is still file-disjoint,
dependency-satisfied, and within `maxParallel`; report drift.
State the intent, then proceed.
Run the helper scripts
Both scripts are deterministic and read-only. Resolve paths via `${CLAUDE_PLUGIN_ROOT}`.
# 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`](templates/parallelization-plan.template.md) and write it to `<output>/parallelization-plan.md`.
Branch & merge conventions
- Branch per story: `story/{epic}.{story}-{slug}` (one worktree each, fully isolated).
- Integration branch per wave: `integration/wave-{N}`.
- Merge order **inside** a wave: ascending story id into `integration/wave-{N}`.
- After all of a wave's sto
Read more
name: bmad-parallel-plan description: | 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 parallel", "parallelize the backlog", "build the wave plan", "parallelization plan", "conflict-free workstreams", "what can we run concurrently", "split into worktrees", "dependency graph for the stories", "merge order", or "how do I fan this backlog out to multiple dev agents". Run AFTER stories are ready-for-dev (scrum-master) and an architecture exists. This skill PLANS parallelism only — it does NOT run agents, spawn worktrees, write code, run tests, or perform git operations. allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
BMAD Parallel Plan
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.
Scope (read first)
- This skill **plans** concurrency. It NEVER spawns worktrees, runs dev agents, writes
application code, runs tests, lints, or runs `git`.
- Inputs are planning artifacts. The only output is `parallelization-plan.md` (plus an
optional `dependency-graph.json` / `waves.json` for traceability).
- Branch names and merge order are *recommendations* the dev tool/human carries out.
Inputs
| 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.
The four steps
1. **Lean on architecture for semantic safety.** Read `architecture.md`. Architecture is what 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.
2. **Read each story's Owned File/Module Scope.** Every ready story declares the explicit list of paths it may touch. Collect `{story_id -> [paths]}`. A missing or empty scope is a **planning blocker** — flag it; do not guess.
3. **Build the dependency DAG, then topologically sort into waves.** Edges come from three conflict classes (see REFERENCE.md):
- **Ordering edges** — epic order (stories within an epic are usually sequential) and
each story's explicit Dependency Maps (`depends_on`).
- **File-scope edges** — any two stories whose Owned File/Module Scopes intersect must
not share a wave (an undirected conflict, resolved by lower story id first).
- **Semantic edges** — both touch a shared/cross-cutting module from step 1.
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).
4. **Emit `parallelization-plan.md`.** For each wave, list the ready-for-dev stories; give each 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`.
Three intents
- **Create** — first wave plan from the current backlog.
- **Update** — re-plan after stories were added/finished/re-scoped (recompute the DAG;
exclude `done`, re-sort remaining).
- **Validate** — re-check an existing plan: confirm every wave is still file-disjoint,
dependency-satisfied, and within `maxParallel`; report drift.
State the intent, then proceed.
Run the helper scripts
Both scripts are deterministic and read-only. Resolve paths via `${CLAUDE_PLUGIN_ROOT}`.
# 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`](templates/parallelization-plan.template.md) and write it to `<output>/parallelization-plan.md`.
Branch & merge conventions
- Branch per story: `story/{epic}.{story}-{slug}` (one worktree each, fully isolated).
- Integration branch per wave: `integration/wave-{N}`.
- Merge order **inside** a wave: ascending story id into `integration/wave-{N}`.
- After all of a wave's sto
This repository is a Claude Code plugin marketplace. It ships one plugin — BMAD Planning & Orchestrator — that harnesses the BMAD Method to plan, document, and orchestrate software work as conflict-free parallel workstreams, then hands implementation off to
Repo: aj-geddes/claude-code-bmad-skills
Other skills on claude-code-bmad-skills.
- /bmad-architecture
Solutioning skill (Winston, the Architect). Produces architecture.md with ADRs and systematic NFR coverage, mapping every FR/NFR from the PRD to a concrete design decision. ONE architecture forces all future parallel dev agents to share the same API style, data model, state
Open skill - /bmad-brainstorm
Facilitates structured ideation sessions using proven brainstorming techniques (SCAMPER, SWOT, 5 Whys, Mind Mapping, Six Thinking Hats, Reverse Brainstorming, Starbursting, Brainwriting). Produces a brainstorming-report.md of organized ideas and actionable insights. Operates in
Open skill - /bmad-builder
Meta-skill for scaffolding and validating custom PLANNING/ORCHESTRATION skills within the BMAD Planning & Orchestrator plugin. Produces the full skill directory: SKILL.md, scripts, and templates — all pre-targeted at this plugin's path conventions. Includes a scope-violation
Open skill - /bmad-correct-course
CROSS-PHASE mid-stream scope correction. Re-enters planning when requirements, features, architecture, or constraints change after planning has started. Re-shards affected epics/stories, re-sequences sprint-status.yaml, appends rationale to decision-log.md. Routes to
Open skill - /bmad-document-project
BROWNFIELD planning input. Scans an existing codebase READ-ONLY and writes project-documentation.md — ground truth for stack, structure, key flows, conventions, and integration points — so downstream BMAD planning skills start from reality. Does NOT modify code; produces only
Open skill - /bmad-epics-and-stories
Solutioning flagship — shards a PRD + architecture into epics.md and individual {epic}.{story}.{slug}.story.md context objects, the LAST planning artifact before external dev handoff. Each story is a self-contained ~8K-token compiled context object: Dev Notes with SOURCE
Open skill

