From BMAD Planning & Orchestrator
Re-enters planning mid-stream when requirements, features, architecture, or constraints change. Re-shards epics/stories, updates sprint-status.yaml, appends to decision-log.md. Routes to downstream planning skills. Changes the plan, never code.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bmad-planning-orchestrator:bmad-correct-courseThis 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:** Cross-phase re-entry point for mid-stream planning changes.
Role: Cross-phase re-entry point for mid-stream planning changes.
When reality diverges from the plan — a stakeholder pivots, a constraint surfaces, a feature is cut — this skill re-enters the planning phase, makes the minimum-necessary plan changes, and routes forward to the appropriate downstream skill. It changes the plan, never the code.
Persona flavor: Mary (Analyst) surfaces the impact; John (PM) scopes the
delta; Winston (Architect) re-shards affected epics.
Lightweight flavor only — this is a workflow.
This skill PLANS. It NEVER writes application code, runs tests, lints, checks coverage, builds, or reviews diffs. If tempted to "fix the code" or "run the suite" — STOP. Plan the change and hand it off.
The latest artifact this skill may produce is a story file marked
ready-for-dev, an updated sprint-status.yaml, or a routing directive
to a downstream planning skill.
Trigger when ANY of the following is true:
decision-log.md
before proceeding.| File | Why |
|---|---|
bmad-output/project-context.md | Project constitution — load every run |
bmad-output/decision-log.md | Threaded decisions; append here |
bmad-output/epics.md | Existing epic map to diff against |
bmad-output/prd.md | Source of truth for requirements |
bmad-output/architecture.md | Tech boundaries (if architecture changed) |
bmad-output/sprint-status.yaml | Current sequencing state |
bmad-output/stories/*.story.md | In-flight and backlog stories |
Output folder default: bmad-output/. Honor any user-configured override
from bmad-output/config.yaml.
| Intent | When to use |
|---|---|
| Scope Change | A feature is added, dropped, or reshaped — re-shard affected epics and re-sequence. |
| Architecture Change | Module boundaries, stack, or integrations shift — update Owned Scope declarations in impacted stories. |
| Record Only | The change is already reflected in planning artifacts; write the decision-log entry and confirm consistency. |
State the intent explicitly before proceeding. When unclear, ask the user which scenario applies rather than assuming.
Use TodoWrite to track progress through these steps.
Identify the minimum blast radius:
in-progress stories touched by
the change need special care — flag them; do not silently move them.)sprint-status.yaml need re-sequencing?Present the triage to the user and confirm before editing.
Apply only the minimum-necessary changes.
# COURSE-CORRECTION annotation and the date.status: cancelled — do not delete; preserve history.For any epic that changed scope, invoke the story-sharding workflow:
Route to
bmad-epics-and-stories(intent: Update or Create)
Provide the updated epic definition and a list of story IDs to add, drop, or revise. The sharding skill owns the story context-object contract; do not reproduce it here.
status: cancelled in the story file header
and in sprint-status.yaml. Do not delete files.status: backlog.decision-log.md.After all story changes are settled, route to bmad-sprint-planning to
re-derive wave assignments:
Route to
bmad-sprint-planning(intent: Update)
Pass the full list of changed story IDs and their new statuses. Ask it to recompute the dependency graph and re-assign parallel sets.
Alternatively, if the change is confined to a single story swap (a
pure add-one / drop-one with no dependency ripple), you may edit
sprint-status.yaml directly:
# Validate current sprint-status.yaml before editing
bash "${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh" bmad-output/stories/
If Owned File/Module Scope declarations changed or new stories were added to the backlog, re-plan the wave assignment:
Route to
bmad-parallel-plan(intent: Update)
Pass the updated story list and note which scopes changed. Ask it to rebuild the dependency DAG and emit a revisedparallelization-plan.md.
Only invoke this if the project was previously using parallel waves. If the project is on Quick Flow or sequential delivery, skip this step.
Every course-correction MUST produce a decision-log entry. Use this format (append newest-first):
### YYYY-MM-DD — Course Correction: <short title>
- **Decision:** <what changed in the plan>
- **Rationale:** <why the change was necessary; alternatives considered>
- **Impact:** <epics added/dropped, stories added/dropped/re-scoped,
status changes in sprint-status.yaml>
- **In-progress stories affected:** <list, or "none">
- **Made by:** bmad-correct-course
- **Supersedes:** <link to prior entry, if any>
Append to bmad-output/decision-log.md using the template at
templates/course-correction.template.md.
After all updates are applied, report:
Course correction applied.
Decision log : entry appended → bmad-output/decision-log.md
Epics changed : <list>
Stories added : <list>
Stories dropped/cancelled : <list>
Stories re-scoped : <list>
sprint-status.yaml : re-sequenced (wave assignments updated)
Next step : <route taken — epics-and-stories / sprint-planning / parallel-plan>
Do NOT implement. The plan is ready; external dev tools pick it up.
in-progress or
review, flag it to the user and wait for explicit confirmation before
altering scope or cancelling it. Do not silently mutate live work.bmad-epics-and-stories. Wave math belongs to bmad-sprint-planning and
bmad-parallel-plan. Route rather than duplicating their logic.| Downstream skill | When to route |
|---|---|
bmad-epics-and-stories (Update or Create) | Epic scope changed; stories need to be re-sharded or new ones compiled |
bmad-sprint-planning (Update) | Dependency graph or wave assignments need recomputation |
bmad-parallel-plan (Update) | Owned File/Module Scope changed; parallel waves need to be rebuilt |
You may route to more than one downstream skill in sequence. Always update
decision-log.md before routing.
backlog → ready-for-dev → in-progress → review → done
↑
cancelled (set here on drop; never deleted) ────
cancelled is a terminal state. Cancelled stories remain in
sprint-status.yaml with status: cancelled so the history is preserved.
Pattern: parallel impact analysis, sequential application.
For large backlogs (15+ stories, 3+ affected epics), fan out analysis:
| Agent | Task | Output |
|---|---|---|
| Agent 1 | Diff epics.md against the change statement; list affected epic IDs | bmad-output/context/affected-epics.md |
| Agent 2 | Scan all story files; identify stories whose Owned Scope or dependencies are invalidated | bmad-output/context/affected-stories.yaml |
| Agent 3 | Read sprint-status.yaml; identify dependency ripple from cancelled/added stories | bmad-output/context/ripple-analysis.yaml |
Coordinator (main context): merge outputs, confirm triage with the user, then apply changes and route to downstream skills.
Example subagent prompt:
Task: Identify stories affected by the scope change.
Context: Read all *.story.md files under bmad-output/stories/.
Change statement: <paste change here>
Objective: For each story, determine if its Owned File/Module Scope,
dependencies, or Acceptance Criteria are invalidated by the change.
Output: Write YAML list to bmad-output/context/affected-stories.yaml
Format:
- id: "2.1.stripe-integration"
affected: true
reason: "owned scope includes src/payments/ which moves to new module"
status: "ready-for-dev"
bmad-output/decision-log.md — append here; never overwrite prior entries.${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh — validate Owned Scope after story changes.bmad-epics-and-stories, bmad-sprint-planning, bmad-parallel-plan.
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-correct-course. All methodology credit belongs to the BMAD Code Organization.
npx claudepluginhub aj-geddes/claude-code-bmad-skills --plugin bmad-planning-orchestratorManages significant changes during sprint execution. Activates on phrases like 'correct course' or 'propose sprint change'.
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.
Processes increment-request.json: orients on project state, elicits incremental EARS requirements with acceptance criteria, classifies changes, updates SRS/design docs, appends to feature-list.json.