BMAD-METHOD/samples/sample-custom-modules/cc-agents-commands/commands/epic-dev.md

3.6 KiB

description prerequisites argument-hint
Automates BMAD development cycle BMAD framework <epic-number> [--yolo]

BMAD Epic Development

Execute development cycle for epic: "$ARGUMENTS"


STEP 1: Parse Arguments

Parse "$ARGUMENTS":

  • epic_number (required): First positional argument (e.g., "2")
  • --yolo: Skip confirmation prompts between stories

Validation:

  • If no epic_number: Error "Usage: /epic-dev [--yolo]"

STEP 2: Verify BMAD Project

PROJECT_ROOT=$(pwd)
while [[ ! -d "$PROJECT_ROOT/_bmad" ]] && [[ "$PROJECT_ROOT" != "/" ]]; do
  PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
done

if [[ ! -d "$PROJECT_ROOT/_bmad" ]]; then
  echo "ERROR: Not a BMAD project. Run /bmad:bmm:workflows:workflow-init first."
  exit 1
fi

```text

Load sprint artifacts path from `_bmad/bmm/config.yaml` (default: `docs/sprint-artifacts`)

---

## STEP 3: Load Stories

Read `{sprint_artifacts}/sprint-status.yaml`

If not found:

- Error: "Run /bmad:bmm:workflows:sprint-planning first"

Find stories for epic {epic_number}:

- Pattern: `{epic_num}-{story_num}-{title}`
- Filter: status NOT "done"
- Order by story number

If no pending stories:

- Output: "All stories in Epic {epic_num} complete!"
- HALT

---

## MODEL STRATEGY

| Phase | Model | Rationale |

| ------- | ------- | ----------- |

| create-story | opus | Deep understanding for quality stories |

| dev-story | sonnet | Balanced speed/quality for implementation |

| code-review | opus | Thorough adversarial review |

---

## STEP 4: Process Each Story

FOR each pending story:

### Create (if status == "backlog") - opus

```text

IF status == "backlog":
  Output: "=== Creating story: {story_key} (opus) ==="
  Task(
    subagent_type="general-purpose",
    model="opus",
    description="Create story {story_key}",
    prompt="Execute SlashCommand(command='/bmad:bmm:workflows:create-story').
            When asked which story, provide: {story_key}"
  )

```text

### Develop - sonnet

```text

Output: "=== Developing story: {story_key} (sonnet) ==="
Task(
  subagent_type="general-purpose",
  model="sonnet",
  description="Develop story {story_key}",
  prompt="Execute SlashCommand(command='/bmad:bmm:workflows:dev-story').
          Implement all acceptance criteria."
)

```text

### Review - opus

```text

Output: "=== Reviewing story: {story_key} (opus) ==="
Task(
  subagent_type="general-purpose",
  model="opus",
  description="Review story {story_key}",
  prompt="Execute SlashCommand(command='/bmad:bmm:workflows:code-review').
          Find and fix issues."
)

```text

### Complete

```text

Update sprint-status.yaml: story status → "done"
Output: "Story {story_key} COMPLETE!"

```text

### Confirm Next (unless --yolo)

```text

IF NOT --yolo AND more_stories_remaining:
  decision = AskUserQuestion(
    question="Continue to next story: {next_story_key}?",
    options=[
      {label: "Continue", description: "Process next story"},
      {label: "Stop", description: "Exit (resume later with /epic-dev {epic_num})"}
    ]
  )

  IF decision == "Stop":
    HALT

```text

---

## STEP 5: Epic Complete

```text

Output:
================================================
EPIC {epic_num} COMPLETE!
================================================
Stories completed: {count}

Next steps:

- Retrospective: /bmad:bmm:workflows:retrospective
- Next epic: /epic-dev {next_epic_num}
================================================

```text

---

## ERROR HANDLING

On workflow failure:

1. Display error with context
2. Ask: "Retry / Skip story / Stop"
3. Handle accordingly

---

## EXECUTE NOW

Parse "$ARGUMENTS" and begin processing immediately.