From BMAD Planning & Orchestrator
Emits and maintains sprint-status.yaml as a sequencing system-of-record. Orders stories by epic and dependency, assigns parallel-set waves, and drives status lifecycle.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bmad-planning-orchestrator:bmad-sprint-planningThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Role:** Sequencing & Handoff Bridge — Phase 4 orchestration
Role: Sequencing & Handoff Bridge — Phase 4 orchestration
System-of-record: bmad-output/sprint-status.yaml
bmad-output/.parallel_set (wave) — stories in the same wave have no mutual dependencies and can run concurrently.bmad-output/sprint-status.yaml using the canonical template.ready-for-dev; all others remain backlog.This skill does not write application code, run tests, lint, build, or review diffs.
| Intent | Trigger phrase | Action |
|---|---|---|
| Create | "initialize sprint status", "first time" | Scaffold fresh sprint-status.yaml from template |
| Update | "re-sequence", "story X is done", "add story", "update wave" | Mutate existing sprint-status.yaml in-place |
| Validate | "check sequencing", "are dependencies correct", "show wave plan" | Read and report without writing |
Load planning artifacts
Glob: bmad-output/**/*.md, bmad-output/**/*.yaml
Priority order: epics.md → prd.md → architecture.md → individual story files.
Extract epics and stories
{epic}.{story}.{slug}.story.md (e.g., 2.1.stripe-integration.story.md)epics.md or prd.mdBuild dependency graph
dependencies[] from each story's frontmatter or Dev Notes sectionInitialize sprint-status.yaml
bash ${CLAUDE_PLUGIN_ROOT}/skills/bmad-sprint-planning/scripts/init-sprint-status.sh
Then populate with sequenced data (see template).
Sequence stories
bash ${CLAUDE_PLUGIN_ROOT}/skills/bmad-sprint-planning/scripts/sequence-stories.sh
Set initial statuses
status: ready-for-devstatus: backlogstatus: in-progress if any child story is ready-for-dev; else backlogEmit handoff summary — list wave 1 stories by owned_scope for conflict-free parallel dispatch
When a story moves to done:
dependencies[] lists where it appearsready-for-devsprint-status.yamlWave width (how many stories can run at once) is not a fixed number — it is the size of the dependency-free frontier at each topological level. There is no points budget or velocity ceiling.
Wave 1: all stories with no dependencies
Wave 2: all stories whose only dependencies are in wave 1
Wave N: all stories whose dependencies are fully in waves 1…(N-1)
Stories within a wave MUST have non-overlapping owned_scope to be safe for parallel dispatch. If two stories in the same wave share a file, split them into separate waves or document the conflict.
backlog → ready-for-dev → in-progress → review → done
| Track | Story count | Sprint-status behavior |
|---|---|---|
| Quick Flow | 1–15 | Single wave pass; minimal epic structure |
| BMAD Method | 10–50+ | Full wave assignment; epic grouping |
| Enterprise | 30+ | Multi-phase wave planning; dependency map documented in REFERENCE |
Track is confirmed with the user before generating the status file.
Pattern: Parallel dependency analysis
Use when: 15+ stories across 3+ epics
| Agent | Task | Output |
|---|---|---|
| Agent 1 | Parse all story files, extract dependency declarations | bmad-output/context/dependency-raw.yaml |
| Agent 2 | Parse epic ordering from PRD/epics.md | bmad-output/context/epic-order.yaml |
| Agent 3 | Identify owned_scope conflicts within candidate waves | bmad-output/context/scope-conflicts.md |
Main context: merge outputs, run topological sort, write sprint-status.yaml.
Task: Extract dependencies from all story files
Context: Read all *.story.md files under bmad-output/stories/
Objective: For each story, output its id and its dependencies[] list
Output: Write YAML list to bmad-output/context/dependency-raw.yaml
Format:
- id: "2.1.stripe-integration"
dependencies: ["1.3.user-auth"]
- id: "2.2.payment-webhook"
dependencies: ["2.1.stripe-integration"]
init-sprint-status.shScaffolds bmad-output/sprint-status.yaml from the template if it does not exist.
bash ${CLAUDE_PLUGIN_ROOT}/skills/bmad-sprint-planning/scripts/init-sprint-status.sh \
[project-name] [output-dir]
sequence-stories.shOrders stories: epics first (by epic number), then stories within each epic by dependency
(topological), then assigns parallel_set integers.
bash ${CLAUDE_PLUGIN_ROOT}/skills/bmad-sprint-planning/scripts/sequence-stories.sh \
[sprint-status-file]
${CLAUDE_PLUGIN_ROOT}/skills/bmad-sprint-planning/templates/sprint-status.template.yaml
Fields: epics[], stories[] (with id, title, status, dependencies, parallel_set,
owned_scope). The template contains no velocity, burndown, or points fields.
sprint-status.yaml before writingready-for-dev stories and their owned_scopebmad-output/decision-log.md
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-sprint-planning. All methodology credit belongs to the BMAD Code Organization.
npx claudepluginhub aj-geddes/claude-code-bmad-skills --plugin bmad-planning-orchestratorConverts a linear story backlog into conflict-free parallel waves using dependency DAG analysis and topological sorting. Use after stories are ready-for-dev and architecture exists.
Generates sprint status tracking from epics. Useful when users request sprint planning via 'run sprint planning' or 'generate sprint plan'.
Executes configurable BMAD story delivery pipeline using subagents: create story, ATDD tests, development, code review, trace coverage. Auto-selects next todo story from sprint-status.yaml.