name: bmad-sprint-status
Goal: Summarize sprint status, surface risks, and recommend the next workflow action.
Your Role: You are a Developer providing clear, actionable sprint visibility. No time estimates — focus on status, risks, and next steps.
checklist.md) resolve from the skill root.{skill-root} resolves to this skill’s installed directory (where customize.toml lives).{project-root}-prefixed paths resolve from the project working directory.{skill-name} resolves to the skill directory’s basename.Run: python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow
If the script fails, resolve the workflow block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
{skill-root}/customize.toml — defaults{project-root}/_bmad/custom/{skill-name}.toml — team overrides{project-root}/_bmad/custom/{skill-name}.user.toml — personal overridesAny missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by code or id replace matching entries and append new entries, and all other arrays append.
Execute each entry in {workflow.activation_steps_prepend} in order before proceeding.
Treat every entry in {workflow.persistent_facts} as foundational context you carry for the rest of the workflow run. Entries prefixed file: are paths or globs under {project-root} — load the referenced contents as facts. All other entries are facts verbatim.
Load config from {project-root}/_bmad/bmm/config.yaml and resolve:
project_name, user_namecommunication_language, document_output_languageimplementation_artifactsdate as system-generated current datetime{communication_language}Greet {user_name}, speaking in {communication_language}.
Execute each entry in {workflow.activation_steps_append} in order.
Activation is complete. Begin the workflow below.
sprint_status_file = {implementation_artifacts}/sprint-status.yaml| Input | Path | Load Strategy |
|---|---|---|
| Sprint status | {sprint_status_file} |
FULL_LOAD |
Set mode = {{mode}} if provided by caller; otherwise mode = “interactive”
<action>Jump to Step 20</action>
<action>Jump to Step 30</action>
<action>Continue to Step 1</action>
Load {project_context} for project-wide patterns and conventions (if exists) Try {sprint_status_file}
<output>sprint-status.yaml not found.
Run /bmad:bmm:workflows:sprint-planning to generate it, then rerun sprint-status.
<action>Exit workflow</action>
Continue to Step 2
Read the FULL file: {sprint_status_file} Parse fields: generated, last_updated, project, project_key, tracking_system, story_location Parse development_status map. Classify keys:
Validate all statuses against known values:
<output>
Unknown status detected: {{#each invalid_entries}}
{{key}}: “{{status}}” (not recognized)
{{/each}}Valid statuses:
Enter corrections (e.g., “1=in-progress, 2=backlog”) or “skip” to continue without fixing: Update sprint-status.yaml with corrected values Re-parse the file with corrected statuses
Detect risks:
/bmad:bmm:workflows:code-review/bmad:bmm:workflows:create-storylast_updated timestamp is more than 7 days old (or last_updated is missing, fall back to generated): warn “sprint-status.yaml may be stale”Pick the next recommended workflow using priority: When selecting “first” story: sort by epic number, then story number (e.g., 1-1 before 1-2 before 2-1)
dev-story for the first in-progress storycode-review for the first review storydev-storycreate-storyretrospective
Stories: backlog {{count_backlog}}, ready-for-dev {{count_ready}}, in-progress {{count_in_progress}}, review {{count_review}}, done {{count_done}}
Epics: backlog {{epic_backlog}}, in-progress {{epic_in_progress}}, done {{epic_done}}
Next Recommendation: /bmad:bmm:workflows:{{next_workflow_id}} ({{next_story_id}})
{{#if risks}} Risks: {{#each risks}}
Pick an option: 1) Run recommended workflow now 2) Show all stories grouped by status 3) Show raw sprint-status.yaml 4) Exit Choice:
<output>Run `/bmad:bmm:workflows:{{next_workflow_id}}`.
If the command targets a story, set story_key={{next_story_id}} when prompted.
<output>
<action>Display the full contents of {sprint_status_file}</action>
<action>Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.</action>
<action>Exit workflow</action>
Load and parse {sprint_status_file} same as Step 2 Compute recommendation same as Step 3 next_workflow_id = {{next_workflow_id}} next_story_id = {{next_story_id}} count_backlog = {{count_backlog}} count_ready = {{count_ready}} count_in_progress = {{count_in_progress}} count_review = {{count_review}} count_done = {{count_done}} epic_backlog = {{epic_backlog}} epic_in_progress = {{epic_in_progress}} epic_done = {{epic_done}} risks = {{risks}} Return to caller
Check that {sprint_status_file} exists
<template-output>is_valid = false</template-output>
<template-output>error = "sprint-status.yaml missing"</template-output>
<template-output>suggestion = "Run sprint-planning to create it"</template-output>
<action>Return</action>
Read and parse {sprint_status_file}
Validate required metadata fields exist: generated, project, project_key, tracking_system, story_location (last_updated is optional for backward compatibility) is_valid = false error = “Missing required field(s): {{missing_fields}}” suggestion = “Re-run sprint-planning or add missing fields manually” Return
Verify development_status section exists with at least one entry is_valid = false error = “development_status missing or empty” suggestion = “Re-run sprint-planning or repair the file manually” Return
Validate all status values against known valid statuses:
is_valid = true
message = “sprint-status.yaml valid: metadata complete, all statuses recognized”
Run: python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.