
Bmad
- 216 installs
- 40 repo stars
- Updated August 4, 2026
- akillness/oh-my-skills
Run BMAD agile AI-driven planning workflows to scope features, define PRDs, and orchestrate analyst/PM/architect personas before implementation.
About
The bmad skill from akillness/oh-my-skills applies the BMAD (Breakthrough Method for Agile AI-Driven Development) framework so Claude can run structured planning sessions with role-based agent personas. It helps teams validate ideas, define scope, draft PRDs, and decompose work before frontend, backend, or integration build starts.
- BMAD agile AI methodology
- Multi-persona planning (analyst, PM, architect)
- PRD and story breakdown support
- Pre-build scope alignment for agent teams
- Structured handoff from idea to implementation
Bmad by the numbers
- 216 all-time installs (skills.sh)
- Ranked #2,775 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/akillness/oh-my-skills --skill bmadAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 216 |
|---|---|
| repo stars | ★ 40 |
| Last updated | August 4, 2026 |
| Repository | akillness/oh-my-skills ↗ |
What it does
Run BMAD agile AI-driven planning workflows to scope features, define PRDs, and orchestrate analyst/PM/architect personas before implementation.
Files
BMAD Packet-First Router
Use bmad as the common-layer BMAD/BMM front door.
The job is not to dump every phase command or runtime setup rule. The job is to: 1. identify the packet the user already has, 2. choose the project level and likely current phase, 3. recommend the single next artifact or gate that reduces ambiguity now, 4. route runtime-, review-, execution-, or game-specific detail outward.
Read references/intake-packets-and-route-outs.md first for the fastest routing model. Use references/core-routing.md, references/status-and-review.md, and references/runtime-and-module-boundaries.md when you need more depth.
When to use this skill
- The user wants to start or resume a BMAD/BMM-style workflow from mixed project state
- The user asks what phase comes next after idea notes, a PRD, a tech spec, architecture work, or partial implementation
- The user has an existing repo, issue, review note, or brownfield status and needs the next artifact chosen truthfully
- The user wants a vendor-neutral BMAD front door before dropping into Claude-, Codex-, or Gemini-specific runtime overlays
- The user needs help deciding whether the next move is ideation, planning, architecture, approval, execution slicing, or runtime handoff
When not to use this skill
- The main need is open-ended concept shaping before project framing exists → use
bmad-idea - The main need is a game-production packet (GDD, playtest notes, build issues, launch beats) → use
bmad-gds - The main need is artifact approval, annotation, or plan review → use
plannotator - The main need is execution-ready backlog slicing after the next artifact is already known → use
task-planning - The main need is runtime-specific orchestration setup for Claude Code → use
omc - The main need is Codex-first workflow runtime behavior → use
omx - The main need is Gemini / Antigravity portable harness setup → use
ohmg
Instructions
Step 1: Normalize the intake as one primary packet
Before talking about phases, choose the single best packet that describes the current ask:
bmad_packet:
packet_type:
- concept-packet
- planning-packet
- architecture-packet
- review-gate-packet
- execution-packet
- runtime-handoff-packet
- brownfield-resume-packet
evidence_in_hand:
- idea-notes
- product-brief
- prd
- tech-spec
- architecture-draft
- review-feedback
- active-repo
- issue-or-bug-link
- sprint-plan
- milestone-or-launch-pressure
project_type: web-app | backend-api | mobile-app | game | library | automation | unknown
project_level: 0 | 1 | 2 | 3 | 4 | unknown
runtime_context: claude | codex | gemini | opencode | mixed | unknown
main_constraint: ambiguity | review-blocker | execution-readiness | runtime-setup | brownfield-drift | unknownRules:
- Pick one primary packet first, even if the user mentions several artifacts.
- If the packet is obviously pre-planning, say so and route to
bmad-ideaearly. - If the packet is mostly game-production coordination, route to
bmad-gdsearly. - If the request starts from an existing repo, issue, or partial implementation, prefer
brownfield-resume-packetover pretending the project is greenfield.
Step 2: Choose project level before artifact depth
Use this scale:
- Level 0 — single atomic change, bug fix, config tweak
- Level 1 — small feature, limited files, low coordination cost
- Level 2 — medium feature set, cross-cutting behavior, clear planning + architecture need
- Level 3 — complex integration, multiple subsystems, API/data contracts, multi-sprint delivery
- Level 4 — major overhaul, platform migration, enterprise-scale coordination
Do not force architecture or heavyweight planning onto level 0–1 work unless the visible packet truly requires it.
Step 3: Infer the likely current phase from the packet
Use the packet to infer the current BMAD phase, not the other way around:
| Packet type | Likely phase | Default next artifact or gate |
|---|---|---|
concept-packet | analysis | product-brief or route to bmad-idea |
planning-packet | planning | prd or tech-spec |
architecture-packet | solutioning | architecture or architecture review gate |
review-gate-packet | boundary between phases | plannotator review before advancing |
execution-packet | implementation | sprint-plan, story packet, or route to task-planning |
runtime-handoff-packet | implementation-ready | runtime route-out to omc, omx, or ohmg |
brownfield-resume-packet | mixed / unknown | workflow-status update, repo-state summary, then the smallest truthful next artifact |
Guiding rules:
- Prefer the smallest truthful next artifact.
- If an artifact already exists but has not been reviewed, the next move is often the review gate, not another new document.
- If the request is really a runtime/setup ask, keep
bmadshort and route outward.
Step 4: Choose one next artifact, not a parallel stack
Pick the single next artifact or gate that best reduces ambiguity now:
| Current state | Preferred next move |
|---|---|
| vague idea, opportunity, user problem | product-brief |
| requirements emerging, implementation shape still unclear | prd or tech-spec |
| planning exists, system shape is still fuzzy | architecture |
| architecture exists but approval is missing | review gate |
| approved architecture exists, execution slicing is weak | sprint-plan or story packet |
| active implementation exists but status is unclear | workflow-status update + next-story recommendation |
| runtime is the real blocker after approval | runtime handoff to omc / omx / ohmg |
Step 5: Route specialist work explicitly
If the front-door decision is made, route the rest clearly:
bmad-idea→ pre-planning concept framing before formal BMAD artifacts existplannotator→ review / approval gate for PRD, architecture, sprint plan, or plan diffstask-planning→ execution-ready slicing after the next artifact is approved or obviousomc→ Claude-first runtime orchestration, hooks, team mode, stop callbacksomx→ Codex-first orchestration, AGENTS.md injection, workflow skills, tmux team runtimeohmg→ Gemini / Antigravity portable harness,.agents/source of truth, generated runtime viewsbmad-gds→ game-specific production routing
Leave a short reason for the route-out. Do not just name the neighboring skill.
Step 6: Keep state and review visible
When a project already uses BMAD state files or helper scripts, keep them in the loop:
- inspect status/config artifacts before recommending a phase leap
- if a required artifact exists but lacks approval, route to
plannotator - prefer script/status awareness over re-deriving the workflow from scratch
- use brownfield evidence honestly instead of pretending the project is still at idea stage
Step 7: Produce a compact BMAD routing brief
Always return this structure:
# BMAD Routing Brief
## Scope
- Packet type: ...
- Project type: ...
- Project level: 0 | 1 | 2 | 3 | 4
- Runtime context: ...
- Confidence: high | medium | low
## Current phase
- analysis | planning | solutioning | implementation | mixed | unknown
- Why: ...
## Recommended next move
- product-brief | prd | tech-spec | architecture | review gate | sprint-plan | story packet | workflow-status update | runtime handoff
## Why this is next
- 2-4 bullets grounded in the packet
## Route-outs
- Skill / module: ...
- Why: ...
- What to pass forward: ...
## What not to do yet
- 1-3 bullets preventing premature detail or the wrong laneStep 8: Push detail into references
Do not inflate the main response with every helper script, command family, or runtime rule. Use the references when needed:
- intake packets and route-outs
- core routing model
- status files, scripts, and review gates
- runtime and module boundaries
Output format
Return a short BMAD routing brief.
Required qualities:
- choose one primary packet before choosing the next artifact
- make the project-level assumption explicit
- keep review-gate visibility before phase advancement
- keep runtime/setup detail separated from the common BMAD layer
- keep the result under roughly 400-700 words unless the user asks for a full workflow packet
Examples
Example 1: brownfield repo, unclear next step
Input
Use bmad. We already have a repo and some product notes, but planning drifted and I don't know whether we need a PRD, architecture, or just sprint planning.
Output sketch
- Packet type:
brownfield-resume-packet - Likely phase:
mixed - Recommended next move:
workflow-statusupdate, then whichever artifact is actually missing - Route-outs only after the missing artifact is identified
Example 2: architecture exists, execution weak
Input
We already wrote the architecture doc for our API migration. What should we do next in BMAD?
Output sketch
- Packet type:
architecture-packet - Current phase:
solutioning - Recommended next move:
review gateif architecture is unreviewed, otherwisesprint-plan - Route-out:
plannotatorfirst,task-planningsecond
Example 3: runtime-specific follow-up
Input
I want BMAD for Codex CLI. What should I actually use?
Output sketch
- Keep
bmadas the packet/phase router - Packet type:
runtime-handoff-packet - Route Codex runtime specifics to
omx - Do not turn
bmadinto a Codex setup guide
Best practices
1. Act like a packet-first router — start from the artifact or evidence the user already has. 2. Choose level before depth — level 0–1 and level 2–4 should not produce the same paperwork. 3. Keep review visible — if approval is the blocker, say so before inventing a new artifact. 4. Keep runtime overlays separate — omc, omx, and ohmg own vendor/runtime specifics. 5. Prefer one clear handoff — one next move plus one or two route-outs beats a giant workflow dump. 6. Use references for deep detail — helper scripts, status rules, and runtime boundaries belong in support docs.
References
- Intake packets and route-outs
- Core routing model
- Status files, scripts, and review gates
- Runtime and module boundaries
./scripts/init-project.sh./scripts/check-status.sh./scripts/phase-gate-review.sh- Upstream BMAD README
../bmad-idea/SKILL.md../plannotator/SKILL.md../task-planning/SKILL.md../omc/SKILL.md../omx/SKILL.md../ohmg/SKILL.md../bmad-gds/SKILL.md
{
"skill_name": "bmad",
"evals": [
{
"id": 1,
"prompt": "Use bmad. We have a vague SaaS feature idea for team billing and audit logs, but no PRD yet. What should come next?",
"expected_output": "Chooses a primary packet, makes a project-level assumption, identifies the likely current phase as analysis or planning, recommends one next artifact such as a product brief or PRD, and routes deeper follow-up rather than dumping every BMAD command.",
"assertions": [
"Output identifies one primary packet or equivalent intake classification",
"Output identifies exactly one primary next artifact or gate",
"Output makes a level assumption explicit",
"Output includes at least one route-out or boundary note"
]
},
{
"id": 2,
"prompt": "We already finished an architecture doc for our backend migration. Use bmad to tell us what to do next.",
"expected_output": "Recognizes that the project is in solutioning or at the solutioning-to-implementation boundary, keeps review-gate visibility, and recommends either plannotator review or a sprint-plan/story-packet handoff.",
"assertions": [
"Output references current phase or boundary explicitly",
"Output does not jump backwards to a vague ideation artifact without justification",
"Output mentions review-gate logic or plannotator when appropriate"
]
},
{
"id": 3,
"prompt": "I want BMAD for Codex CLI. Should I use bmad or omx?",
"expected_output": "Keeps bmad as the core packet/phase router while routing Codex-first runtime specifics to omx.",
"assertions": [
"Output preserves bmad as the common-layer BMAD router",
"Output routes Codex runtime details to omx",
"Output avoids presenting bmad as a Claude-only skill"
]
},
{
"id": 4,
"prompt": "Use bmad. We already have a repo, a half-written architecture doc, and a few review comments. I do not know whether to write a PRD, rewrite the architecture, or start sprint planning.",
"expected_output": "Treats this as a brownfield or review-gate packet, avoids pretending the project is greenfield, recommends the smallest truthful next move such as an architecture review gate or workflow-status update, and names the boundary to plannotator or task-planning.",
"assertions": [
"Output recognizes a brownfield, mixed-state, or review-gate packet",
"Output does not jump straight back to product brief without justification",
"Output recommends one next artifact or gate",
"Output mentions plannotator or task-planning only with a short why"
]
}
]
}
BMAD Orchestrator Reference
This document provides detailed reference information for the BMAD Orchestrator skill.
Table of Contents
- Workflow Routing Logic
- Project Level Guidelines
- Status File Structure
- Configuration Details
- File Operations
- Variable Substitution
Workflow Routing Logic
Determination Algorithm
Input: workflow_status array from docs/bmm-workflow-status.yaml
Output: recommended next workflow command
Step 1: Identify current phase
- Scan workflow_status array
- Find last completed workflow (status = file path)
- Determine phase number of last completion
Step 2: Check for required workflows in current/next phase
- If in Phase 1 (Analysis):
* If no product-brief: Recommend /product-brief
* If product-brief complete: Move to Phase 2
- If in Phase 2 (Planning):
* Level 0-1:
- If no tech-spec: Recommend /tech-spec (required)
- If PRD desired: Suggest /prd (optional)
* Level 2+:
- If no PRD: Recommend /prd (required)
- If tech-spec desired: Suggest /tech-spec (optional)
- If in Phase 3 (Solutioning):
* Level 2+:
- If no architecture: Recommend /architecture (required)
* Level 0-1:
- Skip to Phase 4
- If in Phase 4 (Implementation):
* If no sprint-status.yaml: Recommend /sprint-planning
* If sprint active: Recommend /create-story
* If stories exist: Recommend /dev-story
Step 3: Return recommendation with explanationPhase Transition Rules
Phase 1 → Phase 2:
- Transition when: Product brief complete OR user explicitly skips analysis
- Required before transition: None (Analysis is optional)
Phase 2 → Phase 3:
- Transition when: PRD or Tech Spec complete
- Required before transition:
- Level 0-1: Tech Spec complete
- Level 2+: PRD complete
- Gate rule: if the current phase document already has a terminal plannotator result for the same document hash, do not relaunch review until the document changes
Phase 3 → Phase 4:
- Transition when: Architecture complete (if required)
- Required before transition:
- Level 0-1: None (skip Phase 3)
- Level 2+: Architecture complete
- Gate rule: phase advancement still requires a reviewed artifact; unchanged reviewed architecture should not be re-opened
Phase 4 completion:
- All stories in sprint-status.yaml marked as "done"
- Final review/retrospective complete
Project Level Guidelines
Level 0: Single Atomic Change (1 story)
Characteristics:
- Bug fix
- Small configuration change
- Single file modification
- No breaking changes
Required workflows:
- Tech Spec (brief, 1-2 pages)
- Single story
- Direct implementation
Skip:
- Product brief (unless complex bug)
- PRD
- Architecture
- Sprint planning
Typical timeline: Hours to 1 day
Level 1: Small Feature (1-10 stories)
Characteristics:
- New small feature
- Limited scope
- 1-3 files affected
- Minimal dependencies
Required workflows:
- Tech Spec
- Sprint planning (simple)
Optional but recommended:
- Product brief (if feature requires context)
- PRD (if stakeholder alignment needed)
Skip:
- Architecture (unless significant design needed)
Typical timeline: 1-5 days
Level 2: Medium Feature Set (5-15 stories)
Characteristics:
- Multiple related features
- 5-20 files affected
- Some dependencies
- Database changes likely
Required workflows:
- PRD
- Architecture
- Sprint planning
Optional:
- Product brief (recommended)
- Tech spec (for complex components)
Typical timeline: 1-3 weeks
Level 3: Complex Integration (12-40 stories)
Characteristics:
- System integration
- Multiple subsystems
- 20-50 files affected
- API contracts
- Third-party integrations
Required workflows:
- Product brief (strongly recommended)
- PRD (detailed)
- Architecture (comprehensive)
- Sprint planning (multiple sprints)
Typical timeline: 3-8 weeks
Level 4: Enterprise Expansion (40+ stories)
Characteristics:
- Major system overhaul
- 50+ files affected
- Multiple teams
- Platform changes
- Infrastructure updates
Required workflows:
- Product brief (required)
- PRD (extensive)
- Architecture (system-wide)
- Sprint planning (multiple sprints)
- Gate checks
Typical timeline: 2-6 months
Status File Structure
Workflow Status Schema
# docs/bmm-workflow-status.yaml
project_name: "string"
project_type: "web-app|mobile-app|api|game|library|other"
project_level: 0-4
communication_language: "string"
output_language: "string"
last_updated: "ISO-8601 timestamp"
workflow_status:
- name: "workflow-name"
phase: 1-4
status: "optional|recommended|required|{file-path}|skipped"
description: "Brief description"
# Added by phase-gate-review.sh when plannotator approves the document:
plannotator_review: "approved" # set on plannotator Approve click
reviewed_at: "ISO-8601 timestamp" # timestamp of approvalStatus Values
- "optional" - Workflow can be skipped without impact
- "recommended" - Strongly suggested but not blocking
- "required" - Must be completed to proceed
- "conditional" - Required based on project level (replaced during init)
- "{file-path}" - Completed, shows output file location
- "skipped" - User explicitly chose to skip
plannotator Review Fields
Written by scripts/phase-gate-review.sh when a phase document is approved via plannotator:
- `plannotator_review` -
"approved"when the document passed plannotator gate review - `reviewed_at` - ISO-8601 timestamp of when the review was approved
These fields are optional — they are only present on workflow entries that have been reviewed. Use them to audit which phase documents were human-reviewed before phase transition. If you persist a document hash alongside them, the recommended policy is "same hash, same decision, no re-entry".
Updating Status
When a workflow completes: 1. Read docs/bmm-workflow-status.yaml 2. Find workflow by name 3. Update status to file path: "docs/prd-myapp-2025-01-11.md" 4. Update last_updated timestamp 5. Write updated file
Example Edit operation:
# Before
- name: prd
phase: 2
status: "required"
description: "Product Requirements Document"
# After
- name: prd
phase: 2
status: "docs/prd-myapp-2025-01-11.md"
description: "Product Requirements Document"Configuration Details
Project Config (bmad/config.yaml)
Complete schema:
# Project identification
project_name: "string"
project_type: "web-app|mobile-app|api|game|library|other"
project_level: 0-4
# Output settings
output_folder: "docs" # relative to project root
stories_folder: "docs/stories"
# Language settings
communication_language: "English|Spanish|French|etc"
document_output_language: "English|Spanish|French|etc"
# BMAD version
bmad_version: "6.0.0"
# Optional: Custom overrides
agent_overrides_folder: "bmad/agent-overrides"Global Config (~/.claude/config/bmad/config.yaml)
version: "6.0.0"
ide: "claude-code"
# User defaults
user_name: "string"
user_skill_level: "beginner|intermediate|expert"
# Communication defaults
communication_language: "English"
document_output_language: "English"
# Default paths
default_output_folder: "docs"
# Enabled modules
modules_enabled:
- core
- bmm
# - bmb (optional)
# - cis (optional)
# Advanced settings
auto_update_status: true
verbose_mode: falseConfig Priority
1. Project config (bmad/config.yaml) - highest priority 2. Global config (~/.claude/config/bmad/config.yaml) - default values 3. Built-in defaults - fallback
File Operations
Reading Config Files
Load project config:
Tool: Read
Path: {project-root}/bmad/config.yaml
Parse: YAML
Extract: project_name, project_type, project_level, output_folderLoad global config:
Tool: Read
Path: ~/.claude/config/bmad/config.yaml
Parse: YAML
Extract: user_name, communication_language, default_output_folderMerge configs:
Result = Global config + Project config (project overrides global)Writing Status Files
Create workflow status:
Tool: Write
Path: {project-root}/{output_folder}/bmm-workflow-status.yaml
Content: Processed template with variables substitutedUpdate workflow status:
Tool: Edit
Path: {project-root}/{output_folder}/bmm-workflow-status.yaml
Old: status: "required"
New: status: "docs/prd-myapp-2025-01-11.md"Directory Creation
Initialize project structure:
Tool: Bash
Commands:
mkdir -p bmad/agent-overrides
mkdir -p docs/stories
mkdir -p .claude/commands/bmadVariable Substitution
Standard Variables
Used in templates during initialization:
{{PROJECT_NAME}} → config: project_name
{{PROJECT_TYPE}} → config: project_type
{{PROJECT_LEVEL}} → config: project_level
{{USER_NAME}} → global config: user_name
{{DATE}} → current date (YYYY-MM-DD)
{{TIMESTAMP}} → current timestamp (ISO 8601)
{{OUTPUT_FOLDER}} → config: output_folderConditional Variables
Based on project level:
{{PRD_STATUS}} → "required" if level >= 2
→ "recommended" if level == 1
→ "optional" if level == 0
{{TECH_SPEC_STATUS}} → "required" if level <= 1
→ "optional" if level >= 2
{{ARCHITECTURE_STATUS}} → "required" if level >= 2
→ "optional" if level <= 1Substitution Process
1. Load template file 2. Collect variable values from:
- Project config
- Global config
- Current date/time
- User input
3. Replace all {{VARIABLE}} occurrences 4. Validate no unreplaced variables remain 5. Return processed content
Example:
# Template
project_name: "{{PROJECT_NAME}}"
project_level: {{PROJECT_LEVEL}}
# After substitution with project_name="MyApp", project_level=2
project_name: "MyApp"
project_level: 2File Path Standards
Standard Paths
Project root: {project-root}/
Config: {project-root}/bmad/config.yaml
Status: {project-root}/{output_folder}/bmm-workflow-status.yaml
Sprint: {project-root}/{output_folder}/sprint-status.yaml
Stories: {project-root}/{output_folder}/stories/
Templates: {project-root}/bmad/agent-overrides/ (optional)Output File Naming
Convention: {workflow-name}-{project-name}-{date}.md
Examples:
docs/product-brief-myapp-2025-01-11.md
docs/prd-myapp-2025-01-11.md
docs/architecture-myapp-2025-01-11.md
docs/tech-spec-myapp-2025-01-11.mdStory File Naming
Convention: story-{epic-id}-{story-id}.md
Examples:
docs/stories/story-E001-S001.md
docs/stories/story-E001-S002.md
docs/stories/story-E002-S001.mdError Handling Patterns
Missing Config File
Error: bmad/config.yaml not found
Response:
1. Inform user project not initialized
2. Display: "BMAD not detected in this project."
3. Ask: "Would you like to initialize BMAD with /workflow-init?"
4. Do NOT proceed with operationInvalid YAML
Error: YAML parsing failed
Response:
1. Show error message
2. Display file path
3. Show line number if available
4. Options:
a. "I can try to fix the YAML syntax"
b. "You can manually edit the file"
c. "I can reinitialize with /workflow-init (will overwrite)"Inconsistent Status
Error: Status file doesn't match project level
Example: Level 2 project but PRD marked as "optional"
Response:
1. Explain inconsistency
2. Show expected vs actual
3. Offer: "I can regenerate the status file to match your project level"Missing Template
Error: Template file not found
Response:
1. Log warning (if verbose mode)
2. Use inline fallback template
3. Continue operation
4. Note: "Using default template"Display Formatting
Status Display Format
Project: {project_name} ({project_type}, Level {level})
✓ Phase 1: Analysis
✓ product-brief (docs/product-brief-myapp-2025-01-11.md)
- research (optional)
→ Phase 2: Planning [CURRENT]
⚠ prd (required - NOT STARTED)
- tech-spec (optional)
Phase 3: Solutioning
- architecture (required)
Phase 4: Implementation
- sprint-planning (required)Symbols Used
✓- Completed⚠- Required but not started→- Current phase indicator-- Optional or not applicable
Color Coding (if supported)
- Green: Completed workflows
- Yellow: Required but incomplete
- Gray: Optional workflows
- Blue: Current phase
Best Practices
For Initialization
1. Always collect project info before creating files 2. Validate project level is 0-4 3. Create all directories before files 4. Use absolute paths for file operations 5. Confirm successful creation to user
For Status Checks
1. Load config first to get output_folder path 2. Check if status file exists before reading 3. Parse YAML carefully with error handling 4. Display in clear, hierarchical format 5. Always provide actionable next step
For Routing
1. Check current phase before recommending 2. Consider project level in recommendations 3. Explain why a workflow is recommended 4. Offer to execute recommended workflow 5. Allow user to choose different path
For Updates
1. Read current file before editing 2. Update timestamp when modifying 3. Validate YAML after changes 4. Confirm update to user 5. Update related files if needed (e.g., sprint-status)
Core Routing Model
Use bmad as the common-layer BMAD/BMM router.
Canonical job
1. Determine the primary intake packet the user actually has now 2. Determine project level (0–4) 3. Determine current phase (analysis, planning, solutioning, implementation, mixed, or unknown) 4. Choose the single next artifact or gate 5. Route detailed follow-up to the correct adjacent skill or module
Phase ladder
| Phase | Main question | Typical artifact |
|---|---|---|
| Analysis | What problem/opportunity are we solving? | product brief |
| Planning | What should be built and why? | PRD or tech spec |
| Solutioning | How should the system be shaped? | architecture |
| Implementation | How do we execute safely? | sprint plan / story packet / workflow status |
Level guidance
- Level 0 — minimal paperwork; bug fix or tiny change
- Level 1 — light planning, small feature
- Level 2 — clear PRD + architecture + execution packet
- Level 3 — strong cross-system planning and multi-sprint coordination
- Level 4 — enterprise-scale overhaul with strict gates
Preferred outputs
Good bmad outputs are short and decisive:
- current phase
- next artifact
- why it is next
- route-outs
- what not to do yet
Anti-patterns
Avoid turning bmad into:
- a giant command encyclopedia
- a runtime-specific setup guide
- a replacement for
task-planning - a replacement for
plannotator - a game-production orchestrator (
bmad-gdsowns that lane) - a testing or release-gate specialist (route to TEA references or adjacent skills)
Intake Packets and Route-Outs
Use this file when the request is messy and you need the quickest truthful front-door choice.
Primary packet selector
Choose one packet first.
| Packet | Use when the user already has… | Default next move | Common route-outs |
|---|---|---|---|
concept-packet | raw idea notes, problem framing, audience/value question, pre-PRD ambiguity | product-brief or route to bmad-idea | bmad-idea |
planning-packet | product brief, rough requirements, PRD/tech-spec ambiguity | prd or tech-spec | plannotator after draft, task-planning after approval |
architecture-packet | architecture draft, system-shape uncertainty, design tradeoffs | architecture or architecture review gate | plannotator, then task-planning |
review-gate-packet | existing artifact plus review comments or approval blockage | plannotator review | plannotator |
execution-packet | approved scope, sprint-plan need, story slicing, milestone prep | sprint-plan or story packet | task-planning |
runtime-handoff-packet | approved plan, runtime setup, agent execution handoff | runtime handoff | omc, omx, ohmg |
brownfield-resume-packet | live repo, issue URL, partial implementation, stale docs, unclear current state | workflow-status update, repo-state summary, then smallest missing artifact | task-planning, plannotator, runtime overlays |
Brownfield rule
If the request starts from a real repo, issue, failing implementation, or stale artifacts, do not pretend it is a clean greenfield BMAD start.
Preferred move: 1. acknowledge the brownfield packet, 2. state the likely current phase as mixed or unknown if necessary, 3. recommend the smallest truthful next artifact or status update.
Project-level guardrails
- Level 0–1: prefer lighter artifacts; often
tech-specor direct implementation slice after a quick review. - Level 2+: usually needs stronger planning + architecture visibility.
- Level 3–4: treat approval and handoff discipline as first-class, not optional.
Route-out rules
Route to bmad-idea
Use when the packet is still about concept shaping, positioning, audience, or the core problem rather than execution planning.
Route to plannotator
Use when the correct artifact already exists and the next real blocker is review/approval.
Route to task-planning
Use when the next artifact is already clear and the remaining work is execution slicing, backlog cleanup, sprint prep, or milestone planning.
Route to omc, omx, or ohmg
Use when the plan is ready and the real question is runtime-native execution, settings/rules/hooks, or agent orchestration behavior.
Route to bmad-gds
Use when the packet is mostly game-specific: GDD, playtest synthesis, build issues, demo readiness, launch beats, or milestone pressure.
Anti-patterns
- Do not recommend three parallel artifacts just to sound comprehensive.
- Do not bury a missing review gate under fresh document creation.
- Do not let runtime setup swallow the common BMAD layer.
- Do not treat a brownfield repo like a blank-sheet idea exercise.
Runtime and Module Boundaries
The bmad skill should stay vendor-neutral at the core. Runtime overlays and specialist modules add depth around it.
Runtime overlays
| Need | Use this |
|---|---|
| Claude-first orchestration, hooks, team runtime, stop callbacks | omc |
| Codex-first workflow skills, AGENTS injection, tmux team runtime | omx |
Gemini / Antigravity portable harness with .agents/ source of truth | ohmg |
Rule: let bmad choose the next phase artifact, then route runtime-specific execution/setup to the matching overlay.
Adjacent specialist skills
| Need | Use this |
|---|---|
| Artifact approval / human review gate | plannotator |
| Execution-ready decomposition after the phase decision | task-planning |
| Game-production packet routing | bmad-gds |
| Open-ended ideation before project framing | bmad-idea |
Specialist module depth
Upstream BMAD also favors a core-plus-modules shape:
- TEA — testing, NFR, automation, release-gate depth
- Game Dev Studio — game workflow specialization
- Builder — creating custom BMAD-compatible modules and skills
- Creative modules — fuzzy-front-end ideation and structured creativity
Why this separation matters
A core BMAD entrypoint stays maintainable when it owns:
- project level
- current phase
- next artifact
- route-outs
It becomes noisy when it also tries to own:
- vendor runtime setup
- review UI setup
- testing/release-gate playbooks
- domain-specific production flows
- every command surface from every module
Status Files, Scripts, and Review Gates
bmad works best when it acknowledges project state instead of restarting the workflow from memory every time.
Local helper scripts
scripts/init-project.sh— bootstrap BMAD config/templates for a projectscripts/check-status.sh— inspect current workflow statusscripts/phase-gate-review.sh— submit a phase artifact for review before advancementscripts/validate-config.sh— validate BMAD config/state files
Local templates and state hints
templates/config.template.yamltemplates/workflow-status.template.yamlREFERENCE.mdincludes the historicaldocs/bmm-workflow-status.yamlstructure and transition rules
Review gate policy
Before advancing a phase, ask: 1. Does the required artifact already exist? 2. Has that artifact been reviewed/approved? 3. If the artifact exists but has not been reviewed, should the next move be plannotator rather than another new document?
Recommended handoff to plannotator
Use plannotator when the core BMAD decision is already made and a human-approval surface is the real blocker:
- PRD review before architecture
- architecture review before sprint planning / implementation
- sprint-plan or plan-diff review before execution
Practical rule
When state files or helper scripts are present:
- prefer inspecting/updating them first
- keep recommendations consistent with the visible state
- avoid phase jumps that ignore already-created artifacts
Fabric Patterns for BMAD Workflows
fabric is an AI prompt CLI with 250+ reusable patterns. Use it to analyze, improve, and summarize BMAD phase documents.
Prerequisite: fabric --setup (configure API keys and default model)
---
Per-Phase Fabric Usage
Phase 1: Analysis
# Extract insights from product brief
cat docs/product-brief-*.md | fabric -p analyze_paper --stream
# Extract wisdom, insights, and lessons
cat docs/product-brief-*.md | fabric -p extract_wisdom
# Summarize research findings
cat docs/research-*.md | fabric -p create_summaryPhase 2: Planning
# Deep analysis of PRD
cat docs/prd-*.md | fabric -p analyze_paper --stream
# Check for strong vs weak claims in requirements
cat docs/prd-*.md | fabric -p analyze_claims
# Improve PRD writing quality before plannotator review
cat docs/prd-*.md | fabric -p improve_writing > /tmp/prd-improved.md
# Extract key decisions and risks
cat docs/tech-spec-*.md | fabric -p extract_wisdomPhase 3: Solutioning
# Summarize architecture decisions
cat docs/architecture-*.md | fabric -p create_summary
# Extract wisdom from architecture doc
cat docs/architecture-*.md | fabric -p extract_wisdom
# Security review of architecture
cat docs/architecture-*.md | fabric -p ask_secure_by_design
# Improve architecture doc before review
cat docs/architecture-*.md | fabric -p improve_writing > /tmp/arch-improved.md
# Then submit improved version for gate review
bash scripts/phase-gate-review.sh /tmp/arch-improved.md "Architecture Review"Phase 4: Implementation
# Explain a code diff before code review
git diff HEAD~1 | fabric -p explain_code
# Summarize sprint status
cat docs/sprint-status.yaml | fabric -p create_summary
# Analyze test failures
npm test 2>&1 | fabric -p analyze_logs
# Create PR description from git log
git log --oneline origin/main..HEAD | fabric -p create_summary
# Security check on implementation
cat src/auth.ts | fabric -p ask_secure_by_designIntegration with TEA
# Analyze test coverage summary
cat docs/stories/*.md | fabric -p extract_wisdom | fabric -p create_summary
# Review acceptance criteria quality
cat docs/stories/*.feature | fabric -p analyze_claims
# Extract test insights for release gate
cat test-results/*.xml | fabric -p analyze_logs > /tmp/test-summary.md---
Key Fabric Patterns for BMAD
| Pattern | Best For | BMAD Phase |
|---|---|---|
analyze_paper | Deep analysis of spec documents | Phase 1, 2, 3 |
extract_wisdom | Extract insights, decisions, risks | All phases |
create_summary | Create structured markdown summaries | All phases |
improve_writing | Polish docs before plannotator review | Phase 2, 3 |
analyze_claims | Fact-check technical assumptions | Phase 2, 3 |
explain_code | Understand implementation changes | Phase 4 |
ask_secure_by_design | Security review | Phase 3, 4 |
analyze_logs | Process build/test output | Phase 4 |
create_tags | Generate tags for docs | All phases |
---
Creating Custom BMAD Patterns
Create project-specific patterns in ~/.config/fabric/patterns/:
Pattern: bmad-prd-review
mkdir -p ~/.config/fabric/patterns/bmad-prd-review
cat > ~/.config/fabric/patterns/bmad-prd-review/system.md << 'EOF'
# IDENTITY AND PURPOSE
You are an expert product manager reviewing a PRD for completeness and clarity.
# STEPS
1. Check for: clear problem statement, target users, success metrics, acceptance criteria
2. Identify missing or ambiguous requirements
3. Rate each section: Complete / Needs Work / Missing
4. Provide specific improvement recommendations
# OUTPUT INSTRUCTIONS
- Output in Markdown
- Use ## sections: Summary, Missing Elements, Improvement Suggestions
- Be concise and actionable
EOFPattern: bmad-architecture-check
mkdir -p ~/.config/fabric/patterns/bmad-architecture-check
cat > ~/.config/fabric/patterns/bmad-architecture-check/system.md << 'EOF'
# IDENTITY AND PURPOSE
You are a senior architect reviewing a BMAD architecture document.
# STEPS
1. Verify: system overview, component design, API contracts, security, performance
2. Identify gaps vs requirements (assumes PRD context was provided)
3. Flag scalability, security, and operational risks
# OUTPUT INSTRUCTIONS
- Output in Markdown
- ## sections: Architecture Summary, Gaps, Risks, Recommendations
EOF---
Pro Tips
# Stream output for long documents
cat docs/prd-*.md | fabric -p analyze_paper --stream
# Save analysis to file
cat docs/architecture-*.md | fabric -p extract_wisdom > docs/arch-insights.md
# Chain patterns for richer analysis
cat docs/prd-*.md | fabric -p extract_wisdom | fabric -p create_summary
# Per-pattern model routing (~/.config/fabric/.env)
FABRIC_MODEL_PATTERN_ANALYZE_PAPER=anthropic|claude-opus-4-5
FABRIC_MODEL_PATTERN_EXTRACT_WISDOM=openai|gpt-4o
FABRIC_MODEL_PATTERN_IMPROVE_WRITING=google|gemini-2.5-flashTEA (Test Architect) — BMAD Integration Reference
TEA is an official BMAD v6 external module providing enterprise-grade test strategy. Agent persona: Murat — Master Test Architect focused on risk-based testing, fixture architecture, ATDD, and CI/CD governance.
Source: bmad-code-org/bmad-method-test-architecture-enterprise
---
TEA's 9 Workflows
| Code | Workflow | Command | Description |
|---|---|---|---|
| TMT | Teach Me Testing (TEA Academy) | /tea-teach | Interactive test strategy education for the team |
| TF | Framework Setup | /tea-framework | Configure test framework (Playwright, Cypress, Pact, etc.) |
| CI | CI/CD Integration | /tea-ci | Integrate tests into CI/CD pipeline with quality gates |
| TD | Test Design | /tea-test-design | System-level test design and coverage strategy |
| AT | ATDD / Acceptance TDD | /tea-atdd | Write acceptance tests before implementation (Gherkin BDD) |
| TA | Test Automation | /tea-automate | Automate tests for an epic or sprint |
| RV | Test Review | /tea-review | Review test quality, coverage, and completeness |
| TR | Requirements Tracing | /tea-trace | Map tests to requirements for full traceability |
| NR | NFR Assessment | /tea-nfr | Assess and prioritize non-functional requirements |
---
TEA Per-Phase Integration
Phase 2: Planning
NFR Assessment (`/tea-nfr`)
- Elicits non-functional requirements (performance, security, reliability, scalability)
- Applies risk-based prioritization P0–P3
- Level 3+ required | Level 2 recommended | Level 0-1 optional
- Output:
docs/nfr-assessment-{project}-{date}.md
# Run NFR assessment during planning phase
/tea-nfrPhase 3: Solutioning
Test Design (`/tea-test-design`)
- Designs system-level test strategy based on architecture
- Identifies test boundaries, contract tests, integration points
- Output:
docs/test-design-{project}-{date}.md
Framework Setup (`/tea-framework`)
- Configures Playwright, Cypress, Pact, or custom framework
- Sets up directory structure, config, CI integration hooks
- Supported: Playwright, Cypress, Jest, Pytest, Pact, MCP integrations
CI Integration (`/tea-ci`)
- Configures CI/CD pipeline with test gates
- Adds quality gates: coverage threshold, test pass rate, performance budget
- Output: Updated
.github/workflows/or equivalent
Phase 4: Implementation
Run TEA workflows per epic during sprint execution:
ATDD — Acceptance TDD (`/tea-atdd`)
- Writes Gherkin
.featurefiles BEFORE implementation - Links feature files to story acceptance criteria
- Enables BDD workflow: Red → Green → Refactor
Test Automation (`/tea-automate`)
- Automates acceptance tests for the current epic
- Generates test fixtures, mocks, and helpers
- Integrates with CI gate from Phase 3
Test Review (`/tea-review`)
- Reviews test quality, coverage, and completeness
- Checks for: missing edge cases, duplicate tests, brittle selectors
- Level 2+ required before story close
Requirements Tracing (`/tea-trace`)
- Maps every test to a requirement or acceptance criterion
- Generates traceability matrix
- Level 3+ required before sprint close
Release Gate
`/tea-release-gate`
- Final evidence-backed go/no-go decision before release
- Verifies: all P0-P1 tests pass, coverage thresholds met, NFR criteria satisfied
- Produces: Release Gate Report with explicit PASS/FAIL verdict
- Level 2+ required
---
Risk Prioritization (P0–P3)
| Priority | Risk Level | Criteria | Action |
|---|---|---|---|
| P0 | Critical | High probability + Critical impact | Must test, blocks release |
| P1 | High | High probability + High impact | Must test before release |
| P2 | Medium | Medium probability + Medium impact | Should test, recommend automation |
| P3 | Low | Low probability + Low impact | Optional, document decision |
Formula: Risk = Probability × Impact
---
Project Level Requirements
| Level | NFR Assess | Test Design | ATDD | Test Review | Trace | Release Gate |
|---|---|---|---|---|---|---|
| 0 | Optional | Optional | Optional | Optional | Skip | Skip |
| 1 | Optional | Optional | Recommended | Recommended | Skip | Optional |
| 2 | Recommended | Required | Required | Required | Optional | Required |
| 3 | Required | Required | Required | Required | Required | Required |
| 4 | Required | Required | Required | Required | Required | Required |
---
Supported Test Frameworks
| Framework | Use Case | TEA Workflow |
|---|---|---|
| Playwright | E2E browser tests | TF, TA |
| Cypress | Component/E2E tests | TF, TA |
| Pact | Contract testing | TF, TD |
| Jest/Vitest | Unit tests | TF, TA |
| Pytest | Python unit/integration | TF, TA |
| MCP integrations | AI agent tool testing | TD, TA |
---
Quick Reference
# Phase 2
/tea-nfr # NFR Assessment (Level 3+ required)
# Phase 3
/tea-test-design # Test Design
/tea-framework # Framework Setup
/tea-ci # CI Integration
# Phase 4 (per epic)
/tea-atdd # Write acceptance tests first
/tea-automate # Automate tests
/tea-review # Review test quality
/tea-trace # Requirements tracing (Level 3+)
# Release
/tea-release-gate # Final go/no-goBMAD Workflow Phases Reference
Complete reference for all 4 BMAD phases, workflows, and project levels.
Phase 1: Analysis (Optional)
Purpose: Understand the problem space, research market/competitors, and define product vision.
When to use: Starting new products, major features, or when requirements are unclear.
When to skip: Bug fixes, well-defined features, or urgent implementations.
Phase 1 Workflows
Product Brief (/product-brief)
Purpose: Create comprehensive product vision and high-level requirements.
Output: Product brief document with:
- Problem statement
- Target users
- Value proposition
- Key features
- Success metrics
- Constraints
Duration: 1-2 hours
Recommended for: Level 1+ projects
Required for: Level 3+ projects
Brainstorm (/brainstorm)
Purpose: Structured ideation session for features and solutions.
Output: Brainstorming session notes with:
- Problem exploration
- Solution ideas
- Feature concepts
- Technical approaches
Duration: 30-60 minutes
Optional for: All levels
Research (/research)
Purpose: Market analysis, competitive research, technical investigation.
Output: Research report with:
- Market analysis
- Competitor comparison
- Technical feasibility
- Recommendations
Duration: 2-4 hours
Optional for: All levels (recommended for Level 2+)
---
Phase 2: Planning (Required)
Purpose: Define detailed requirements and technical specifications.
Critical: Every project must complete at least ONE planning workflow (PRD or Tech Spec).
Phase 2 Workflows
PRD - Product Requirements Document (/prd)
Purpose: Comprehensive product requirements for multi-feature projects.
Output: PRD document with:
- Executive summary
- User stories
- Functional requirements
- Non-functional requirements
- Success criteria
- Acceptance criteria
Duration: 2-4 hours
Required for: Level 2+ projects
Recommended for: Level 1 projects
Optional for: Level 0 projects
When to choose PRD over Tech Spec:
- Multiple features
- Stakeholder alignment needed
- Product perspective important
- Business requirements complex
Tech Spec - Technical Specification (/tech-spec)
Purpose: Technical design for single features or components.
Output: Tech spec document with:
- Technical overview
- Implementation approach
- API contracts
- Data models
- Testing strategy
Duration: 1-2 hours
Required for: Level 0-1 projects
Optional for: Level 2+ projects (supplement to PRD)
When to choose Tech Spec over PRD:
- Single feature
- Technical focus
- Limited scope
- Developer-centric work
UX Design (/create-ux-design)
Purpose: Design user interface and user experience.
Output: UX design document with:
- User flows
- Wireframes
- UI mockups
- Interaction patterns
- Design system references
Duration: 2-6 hours
Optional for: Projects with UI components
Recommended for: User-facing features
---
Phase 3: Solutioning (Conditional)
Purpose: Design system architecture for medium+ complexity projects.
Required for: Level 2+ projects
Skip for: Level 0-1 projects (unless significant architectural changes)
Phase 3 Workflows
Architecture (/architecture)
Purpose: Design system architecture, components, and integrations.
Output: Architecture document with:
- System overview
- Component design
- Data flow
- API contracts
- Integration points
- Technology decisions
- Security considerations
- Performance requirements
Duration: 2-6 hours
Required for: Level 2+ projects
Optional for: Level 0-1 with architectural impact
Content varies by level:
- Level 2: Component architecture, basic integrations
- Level 3: Comprehensive system design, multiple integrations
- Level 4: Enterprise architecture, platform design, infrastructure
Solutioning Gate Check (/solutioning-gate-check)
Purpose: Validate architecture against requirements before implementation.
Output: Gate check report with:
- Requirements coverage
- Risk assessment
- Technical debt analysis
- Readiness score
Duration: 30-60 minutes
Optional for: Level 2+ projects
Recommended for: Level 3+ projects
---
Phase 4: Implementation (Required)
Purpose: Execute development through sprints and stories.
Required for: All projects (even Level 0 creates at least 1 story)
Phase 4 Workflows
Sprint Planning (/sprint-planning)
Purpose: Break down requirements into epics and stories, plan sprints.
Output:
- Sprint plan with epics and stories
- sprint-status.yaml tracking file
- Story files in docs/stories/
Duration: 1-3 hours
Required for: Level 1+ projects
Simplified for: Level 0 (single story, no sprint)
Generates:
- Epics (Level 1+)
- User stories with acceptance criteria
- Story point estimates
- Sprint assignments
Create Story (/create-story)
Purpose: Create individual user story with details.
Output: Story file (docs/stories/story-{epic}-{id}.md) with:
- User story format
- Acceptance criteria
- Tasks breakdown
- Estimates
- Dependencies
Duration: 15-30 minutes per story
Required for: All projects
Used when: Adding stories to existing sprint
Dev Story (/dev-story)
Purpose: Implement a specific story with code generation.
Output:
- Code implementation
- Tests
- Documentation
- Story marked complete
Duration: 30 minutes - several hours
Required for: Story implementation
Process: 1. Read story file 2. Implement code 3. Write tests 4. Update documentation 5. Mark story complete
Code Review (/code-review)
Purpose: Review implemented code for quality and standards.
Output: Review findings and recommendations
Duration: 30-60 minutes
Optional for: All implementations
Recommended for: Level 2+ projects
---
Project Level Decision Matrix
Level 0: Single Atomic Change (1 story)
| Phase | Workflow | Status |
|---|---|---|
| 1 | Product Brief | Optional |
| 1 | Research | Optional |
| 2 | PRD | Optional |
| 2 | Tech Spec | Required |
| 3 | Architecture | Skip |
| 4 | Sprint Planning | Simplified (single story) |
| 4 | Dev Story | Required |
Typical flow: Tech Spec → Single Story → Implementation
Example projects:
- Bug fix
- Configuration change
- Small UI tweak
- Single function addition
---
Level 1: Small Feature (1-10 stories)
| Phase | Workflow | Status |
|---|---|---|
| 1 | Product Brief | Recommended |
| 1 | Research | Optional |
| 2 | PRD | Recommended |
| 2 | Tech Spec | Required |
| 2 | UX Design | Optional |
| 3 | Architecture | Optional |
| 4 | Sprint Planning | Required |
| 4 | Create Story | Required (multiple) |
| 4 | Dev Story | Required |
Typical flow: Product Brief → Tech Spec → Sprint Planning → Stories → Implementation
Example projects:
- New API endpoint
- User profile page
- Data export feature
- Email notifications
---
Level 2: Medium Feature Set (5-15 stories)
| Phase | Workflow | Status |
|---|---|---|
| 1 | Product Brief | Recommended |
| 1 | Research | Recommended |
| 2 | PRD | Required |
| 2 | Tech Spec | Optional |
| 2 | UX Design | Recommended |
| 3 | Architecture | Required |
| 3 | Gate Check | Optional |
| 4 | Sprint Planning | Required |
| 4 | Create Story | Required (multiple) |
| 4 | Dev Story | Required |
| 4 | Code Review | Recommended |
Typical flow: Product Brief → PRD → Architecture → Sprint Planning → Stories → Implementation
Example projects:
- User authentication system
- Payment integration
- Dashboard with multiple widgets
- Content management features
---
Level 3: Complex Integration (12-40 stories)
| Phase | Workflow | Status |
|---|---|---|
| 1 | Product Brief | Required |
| 1 | Research | Recommended |
| 2 | PRD | Required (detailed) |
| 2 | UX Design | Recommended |
| 3 | Architecture | Required (comprehensive) |
| 3 | Gate Check | Recommended |
| 4 | Sprint Planning | Required (multiple sprints) |
| 4 | Create Story | Required (many) |
| 4 | Dev Story | Required |
| 4 | Code Review | Required |
Typical flow: Product Brief → Research → PRD → Architecture → Gate Check → Multiple Sprints → Implementation
Example projects:
- Third-party API integration
- Multi-tenant system
- Real-time collaboration features
- Analytics platform
---
Level 4: Enterprise Expansion (40+ stories)
| Phase | Workflow | Status |
|---|---|---|
| 1 | Product Brief | Required (detailed) |
| 1 | Research | Required |
| 2 | PRD | Required (extensive) |
| 2 | UX Design | Required |
| 3 | Architecture | Required (system-wide) |
| 3 | Gate Check | Required |
| 4 | Sprint Planning | Required (many sprints) |
| 4 | Create Story | Required (extensive) |
| 4 | Dev Story | Required |
| 4 | Code Review | Required |
Typical flow: Product Brief → Research → PRD → UX Design → Architecture → Gate Check → Many Sprints → Implementation → Reviews
Example projects:
- Platform migration
- Microservices architecture
- Enterprise SaaS product
- Major system overhaul
---
Phase Transition Criteria
Phase 1 → Phase 2
Can transition when:
- Product brief completed (if created), OR
- User explicitly skips Phase 1
Blocking issues:
- None (Phase 1 is optional)
Recommendation: Complete product brief for Level 2+ projects
---
Phase 2 → Phase 3
Can transition when:
- PRD completed (Level 2+), OR
- Tech Spec completed (Level 0-1)
Blocking issues:
- No planning document created
- Planning document incomplete or invalid
Recommendation: Complete appropriate planning doc before proceeding
---
Phase 3 → Phase 4
Can transition when:
- Architecture completed (Level 2+), OR
- Project is Level 0-1 (skip Phase 3)
Blocking issues:
- Level 2+ project without architecture
- Architecture incomplete or not validated
Recommendation: Complete architecture for medium+ projects
---
Phase 4 Complete
Can transition when:
- All stories marked "done" in sprint-status.yaml
- Code reviewed (if required)
- Tests passing
Blocking issues:
- Incomplete stories
- Failing tests
- Unresolved blockers
Recommendation: Complete all stories before closing project
---
Workflow Dependencies
Must Complete Before
Product Brief → No dependencies (can be first)
Research → No dependencies (can be first)
Brainstorm → No dependencies (can be first)
PRD → Product Brief (recommended, not required)
Tech Spec → Product Brief (recommended, not required)
UX Design → Product Brief or PRD (recommended)
Architecture → PRD or Tech Spec (required)
Gate Check → Architecture (required)
Sprint Planning → PRD or Tech Spec (required), Architecture (if Level 2+)
Create Story → Sprint Planning (required)
Dev Story → Story created (required)
Code Review → Dev Story (required)Can Work in Parallel
Product Brief + Research
PRD + UX Design (with coordination)
Multiple Dev Stories (different epics)Sequential Requirements
Sprint Planning → Create Stories → Dev Stories → Code Review---
Common Workflow Paths
Fast Track (Level 0-1)
Tech Spec → Sprint Planning → Story → Implementation → DoneDuration: Hours to days
Use when: Small, well-defined changes
---
Standard Feature (Level 1-2)
Product Brief → PRD or Tech Spec → Architecture (if Level 2) →
Sprint Planning → Stories → Implementation → Review → DoneDuration: Days to weeks
Use when: Normal feature development
---
Enterprise Project (Level 3-4)
Product Brief → Research → PRD → UX Design → Architecture →
Gate Check → Sprint Planning → Stories → Implementation →
Code Review → Iteration → DoneDuration: Weeks to months
Use when: Complex, multi-team projects
---
Selection Guidance
When unclear about level, ask:
1. How many files will change?
- 1-3 files: Level 0-1
- 3-20 files: Level 1-2
- 20-50 files: Level 2-3
- 50+ files: Level 3-4
2. How many stories estimated?
- 1 story: Level 0
- 1-10 stories: Level 1
- 5-15 stories: Level 2
- 12-40 stories: Level 3
- 40+ stories: Level 4
3. Is architecture design needed?
- No: Level 0-1
- Some: Level 2
- Significant: Level 3
- Extensive: Level 4
4. How long will development take?
- Hours-1 day: Level 0
- 1-5 days: Level 1
- 1-3 weeks: Level 2
- 3-8 weeks: Level 3
- 2+ months: Level 4
When unclear about workflow, ask:
1. Is this a new project or existing codebase?
- New: Start with Product Brief
- Existing: Start with Tech Spec or PRD
2. Do you need stakeholder approval?
- Yes: Use PRD
- No: Use Tech Spec
3. Is this primarily product or technical?
- Product: Use PRD
- Technical: Use Tech Spec
4. Do you have clear requirements?
- Yes: Skip to Planning
- No: Start with Analysis
---
Quick Reference Table
| Project Type | Level | Required Workflows | Duration |
|---|---|---|---|
| Bug fix | 0 | Tech Spec, Story | Hours |
| Small feature | 1 | Tech Spec, Sprint, Stories | 1-5 days |
| Feature set | 2 | PRD, Architecture, Sprint, Stories | 1-3 weeks |
| Integration | 3 | Brief, PRD, Architecture, Sprints | 3-8 weeks |
| Platform | 4 | Brief, Research, PRD, UX, Architecture, Sprints | 2+ months |
---
TEA Integration per Phase
fabric and TEA (Test Architect) integrate at each phase gate. See resources/tea-workflows.md for full TEA workflow reference and resources/fabric-patterns.md for fabric patterns.
Phase 1: Analysis — Foundation
TEA activities: None required (TEA engages from Phase 2) Fabric: cat docs/product-brief-*.md | fabric -p analyze_paper --stream
Phase 2: Planning — Strategy
TEA activities (Level 3+ required, 2+ recommended):
/tea-nfr— NFR (Non-Functional Requirements) assessment → outputs test strategy doc- Defines P0-P3 risk levels for all features
SSD (Level 2+):
/spec-openapi→docs/spec-openapi-*.yaml/spec-schema→docs/spec-schema-*.json- Run plannotator gate on spec before Phase 3
Fabric: cat docs/prd-*.md | fabric -p extract_wisdom --stream
Phase 3: Solutioning — Design
TEA activities (Level 2+ recommended):
/tea-test-design— Design test strategy aligned with architecture/tea-framework— Select and configure test framework/tea-ci— CI/CD test pipeline integration
SSD:
- Architecture document must reference OpenAPI/Schema spec from Phase 2
/spec-bddscenarios drafted per component boundary
Fabric: cat docs/architecture-*.md | fabric -p create_summary
Phase 4: Implementation — Delivery
TEA activities (Level 2+ required):
/tea-atdd— Acceptance Test-Driven Development per epic/tea-automate— Test automation implementation/tea-review— Test review (Level 2+ required)/tea-trace— Requirements tracing (Level 3+ required)
SSD:
- Each dev story implements against
/spec-bddscenarios - Story blockedBy: spec file must be approved
Fabric: git diff HEAD~1 | fabric -p explain_code
Release Gate
TEA: /tea-release-gate — Go/No-Go decision based on P0/P1 test results
- P0 failures → No-Go (block release)
- P1 failures → Conditional (requires sign-off)
- P2/P3 failures → Go with known issues documented
Fabric: cat test-results/*.xml | fabric -p analyze_logs > docs/release-test-summary.md
Risk Prioritization Matrix
| Level | Description | Action |
|---|---|---|
| P0 | Critical — must pass for release | Block release if failing |
| P1 | High — significant user impact | Require sign-off to release |
| P2 | Medium — moderate impact | Document, release with tracking |
| P3 | Low — minimal impact | Log, address in next sprint |
TEA + SSD + Fabric Combined Flow
Phase 2: PRD → /tea-nfr → /spec-openapi → fabric analyze → plannotator gate
Phase 3: Architecture (refs spec) → /tea-test-design → /tea-framework → /tea-ci
Phase 4: Per epic: /tea-atdd → implement → /tea-automate → /tea-review
Release: /tea-release-gate → fabric analyze_logs → Go/No-Go#!/bin/bash
# BMAD Workflow Status Checker
# Reads and displays current workflow status from YAML file
set -e # Exit on error
# Color output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
GRAY='\033[0;37m'
NC='\033[0m' # No Color
# Default paths
CONFIG_FILE="bmad/config.yaml"
STATUS_FILE="docs/bmm-workflow-status.yaml"
# Check if project is initialized
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${RED}Error: BMAD not initialized in this project${NC}"
echo -e "${YELLOW}Run /workflow-init to initialize BMAD${NC}"
exit 1
fi
# Read output folder from config if available
if command -v yq &> /dev/null; then
OUTPUT_FOLDER=$(yq eval '.output_folder' "$CONFIG_FILE" 2>/dev/null || echo "docs")
STATUS_FILE="${OUTPUT_FOLDER}/bmm-workflow-status.yaml"
elif grep -q "output_folder:" "$CONFIG_FILE"; then
OUTPUT_FOLDER=$(grep "output_folder:" "$CONFIG_FILE" | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
STATUS_FILE="${OUTPUT_FOLDER}/bmm-workflow-status.yaml"
fi
# Check if status file exists
if [ ! -f "$STATUS_FILE" ]; then
echo -e "${RED}Error: Workflow status file not found: ${STATUS_FILE}${NC}"
echo -e "${YELLOW}Run /workflow-init to create status file${NC}"
exit 1
fi
# Parse config for project info
PROJECT_NAME="Unknown"
PROJECT_TYPE="Unknown"
PROJECT_LEVEL="Unknown"
if command -v yq &> /dev/null; then
# Use yq if available for proper YAML parsing
PROJECT_NAME=$(yq eval '.project_name' "$STATUS_FILE" 2>/dev/null || echo "Unknown")
PROJECT_TYPE=$(yq eval '.project_type' "$STATUS_FILE" 2>/dev/null || echo "Unknown")
PROJECT_LEVEL=$(yq eval '.project_level' "$STATUS_FILE" 2>/dev/null || echo "Unknown")
else
# Fallback to grep/sed
if grep -q "project_name:" "$STATUS_FILE"; then
PROJECT_NAME=$(grep "project_name:" "$STATUS_FILE" | head -1 | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
fi
if grep -q "project_type:" "$STATUS_FILE"; then
PROJECT_TYPE=$(grep "project_type:" "$STATUS_FILE" | head -1 | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
fi
if grep -q "project_level:" "$STATUS_FILE"; then
PROJECT_LEVEL=$(grep "project_level:" "$STATUS_FILE" | head -1 | sed 's/.*: *//;s/ *#.*//')
fi
fi
# Display header
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ BMAD Workflow Status Report ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}Project:${NC} ${PROJECT_NAME}"
echo -e "${BLUE}Type:${NC} ${PROJECT_TYPE}"
echo -e "${BLUE}Level:${NC} ${PROJECT_LEVEL}"
echo ""
# Function to parse workflow status
parse_workflows() {
local current_phase=0
local phase_complete=true
local recommended_workflow=""
local phase_1_complete=true
local phase_2_complete=false
local phase_3_complete=false
local phase_4_started=false
# Headers
echo -e "${GREEN}Phase 1: Analysis${NC} (Optional)"
# Parse workflows using python3 to avoid nested while loop stdin consumption bug
while IFS='|' read -r name phase status command; do
# Print phase headers
if [ "$phase" != "$current_phase" ]; then
current_phase=$phase
echo ""
case $phase in
2)
echo -e "${GREEN}Phase 2: Planning${NC} (Required)"
;;
3)
echo -e "${GREEN}Phase 3: Solutioning${NC} (Conditional)"
;;
4)
echo -e "${GREEN}Phase 4: Implementation${NC} (Required)"
;;
esac
fi
# Determine status icon and color
if [[ $status == /* ]] || [[ $status == docs/* ]]; then
# Completed - has file path
echo -e " ${GREEN}✓${NC} ${name} ${GRAY}(${status})${NC}"
# Track phase completion
case $phase in
2) phase_2_complete=true ;;
3) phase_3_complete=true ;;
4) phase_4_started=true ;;
esac
elif [[ $status == "required" ]]; then
echo -e " ${YELLOW}⚠${NC} ${name} ${YELLOW}(required - NOT STARTED)${NC}"
if [ -z "$recommended_workflow" ]; then
recommended_workflow="$command"
fi
phase_complete=false
elif [[ $status == "recommended" ]]; then
echo -e " ${BLUE}→${NC} ${name} ${BLUE}(recommended)${NC}"
if [ -z "$recommended_workflow" ]; then
recommended_workflow="$command"
fi
elif [[ $status == "skipped" ]]; then
echo -e " ${GRAY}-${NC} ${name} ${GRAY}(skipped)${NC}"
else
echo -e " ${GRAY}-${NC} ${name} ${GRAY}(${status})${NC}"
fi
done < <(python3 -c "
import sys
with open(sys.argv[1]) as f:
content = f.read()
workflows = []
current = {}
in_workflows = False
for line in content.split('\n'):
stripped = line.strip()
if stripped == 'workflow_status:':
in_workflows = True
continue
if not in_workflows:
continue
if stripped.startswith('- name:'):
if current:
workflows.append(current)
current = {'name': stripped[7:].strip().strip('\"')}
elif current and stripped.startswith('phase:'):
current['phase'] = stripped[6:].strip().strip('\"')
elif current and stripped.startswith('status:'):
current['status'] = stripped[7:].strip().strip('\"')
elif current and stripped.startswith('command:'):
current['command'] = stripped[8:].strip().strip('\"')
elif current and stripped.startswith('description:'):
current['description'] = stripped[12:].strip().strip('\"')
if current:
workflows.append(current)
for wf in workflows:
name = wf.get('name', '')
phase = wf.get('phase', '')
status = wf.get('status', '')
command = wf.get('command', '')
print(f'{name}|{phase}|{status}|{command}')
" "$STATUS_FILE" 2>/dev/null)
# Recommendations
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
if [ -n "$recommended_workflow" ]; then
echo ""
echo -e "${YELLOW}Recommended next step:${NC}"
echo -e " Run ${GREEN}${recommended_workflow}${NC} to continue"
else
echo ""
echo -e "${GREEN}All required workflows complete!${NC}"
if [ "$phase_4_started" = true ]; then
echo -e "Continue with ${GREEN}/dev-story${NC} to implement stories"
else
echo -e "Start implementation with ${GREEN}/sprint-planning${NC}"
fi
fi
echo ""
}
# Parse and display workflows
parse_workflows
# Display legend
echo -e "${GRAY}Legend:${NC}"
echo -e " ${GREEN}✓${NC} Completed ${YELLOW}⚠${NC} Required ${BLUE}→${NC} Recommended ${GRAY}-${NC} Optional"
echo ""
#!/bin/bash
# BMAD Project Initialization Script
# Creates BMAD directory structure and configuration files
set -e # Exit on error
# Color output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Default values
PROJECT_NAME=""
PROJECT_TYPE=""
PROJECT_LEVEL=""
OUTPUT_FOLDER="docs"
SKILL_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--name)
PROJECT_NAME="$2"
shift 2
;;
--type)
PROJECT_TYPE="$2"
shift 2
;;
--level)
PROJECT_LEVEL="$2"
shift 2
;;
--output)
OUTPUT_FOLDER="$2"
shift 2
;;
-h|--help)
echo "Usage: $0 --name <project-name> --type <project-type> --level <0-4> [--output <folder>]"
echo ""
echo "Options:"
echo " --name Project name (required)"
echo " --type Project type: web-app, mobile-app, api, game, library, other (required)"
echo " --level Project level: 0-4 (required)"
echo " --output Output folder for documents (default: docs)"
echo " -h, --help Show this help message"
echo ""
echo "Example:"
echo " $0 --name MyApp --type web-app --level 2"
exit 0
;;
*)
echo -e "${RED}Error: Unknown option $1${NC}"
exit 1
;;
esac
done
# Interactive mode if parameters not provided
if [ -z "$PROJECT_NAME" ]; then
echo -e "${BLUE}Enter project name:${NC}"
read -r PROJECT_NAME
fi
if [ -z "$PROJECT_TYPE" ]; then
echo -e "${BLUE}Enter project type (web-app, mobile-app, api, game, library, other):${NC}"
read -r PROJECT_TYPE
fi
if [ -z "$PROJECT_LEVEL" ]; then
echo -e "${BLUE}Enter project level (0-4):${NC}"
echo " 0 - Single atomic change (1 story)"
echo " 1 - Small feature (1-10 stories)"
echo " 2 - Medium feature set (5-15 stories)"
echo " 3 - Complex integration (12-40 stories)"
echo " 4 - Enterprise expansion (40+ stories)"
read -r PROJECT_LEVEL
fi
# Validate inputs
if [ -z "$PROJECT_NAME" ] || [ -z "$PROJECT_TYPE" ] || [ -z "$PROJECT_LEVEL" ]; then
echo -e "${RED}Error: Project name, type, and level are required${NC}"
exit 1
fi
# Validate project level
if ! [[ "$PROJECT_LEVEL" =~ ^[0-4]$ ]]; then
echo -e "${RED}Error: Project level must be 0-4${NC}"
exit 1
fi
# Validate project type
valid_types=("web-app" "mobile-app" "api" "game" "library" "other")
if [[ ! " ${valid_types[@]} " =~ " ${PROJECT_TYPE} " ]]; then
echo -e "${YELLOW}Warning: Unknown project type '${PROJECT_TYPE}'. Valid types: ${valid_types[*]}${NC}"
echo -e "${YELLOW}Continuing anyway...${NC}"
fi
echo -e "${GREEN}Initializing BMAD for project: ${PROJECT_NAME}${NC}"
echo ""
# Create directory structure
echo -e "${BLUE}Creating directory structure...${NC}"
mkdir -p bmad/agent-overrides
mkdir -p "${OUTPUT_FOLDER}/stories"
mkdir -p .claude/commands/bmad
echo -e "${GREEN}✓ Directories created${NC}"
# Determine conditional workflow statuses based on project level
if [ "$PROJECT_LEVEL" -ge 2 ]; then
PRD_STATUS="required"
else
if [ "$PROJECT_LEVEL" -eq 1 ]; then
PRD_STATUS="recommended"
else
PRD_STATUS="optional"
fi
fi
if [ "$PROJECT_LEVEL" -le 1 ]; then
TECH_SPEC_STATUS="required"
else
TECH_SPEC_STATUS="optional"
fi
if [ "$PROJECT_LEVEL" -ge 2 ]; then
ARCHITECTURE_STATUS="required"
else
ARCHITECTURE_STATUS="optional"
fi
# Generate timestamp
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
# Create project config from template
echo -e "${BLUE}Creating project configuration...${NC}"
CONFIG_TEMPLATE="${SKILL_PATH}/templates/config.template.yaml"
CONFIG_OUTPUT="bmad/config.yaml"
if [ -f "$CONFIG_TEMPLATE" ]; then
# Use template if available
sed -e "s/{{PROJECT_NAME}}/${PROJECT_NAME}/g" \
-e "s/{{PROJECT_TYPE}}/${PROJECT_TYPE}/g" \
-e "s/{{PROJECT_LEVEL}}/${PROJECT_LEVEL}/g" \
-e "s/{{TIMESTAMP}}/${TIMESTAMP}/g" \
"$CONFIG_TEMPLATE" > "$CONFIG_OUTPUT"
else
# Fallback: create minimal config
cat > "$CONFIG_OUTPUT" <<EOF
# BMAD Method v6 - Project Configuration
# Generated: ${TIMESTAMP}
bmad_version: "6.0.0"
project_name: "${PROJECT_NAME}"
project_type: "${PROJECT_TYPE}"
project_level: ${PROJECT_LEVEL}
output_folder: "${OUTPUT_FOLDER}"
stories_folder: "${OUTPUT_FOLDER}/stories"
communication_language: "English"
document_output_language: "English"
EOF
fi
echo -e "${GREEN}✓ Created: ${CONFIG_OUTPUT}${NC}"
# Create workflow status from template
echo -e "${BLUE}Creating workflow status file...${NC}"
STATUS_TEMPLATE="${SKILL_PATH}/templates/workflow-status.template.yaml"
STATUS_OUTPUT="${OUTPUT_FOLDER}/bmm-workflow-status.yaml"
if [ -f "$STATUS_TEMPLATE" ]; then
# Use template if available
sed -e "s/{{PROJECT_NAME}}/${PROJECT_NAME}/g" \
-e "s/{{PROJECT_TYPE}}/${PROJECT_TYPE}/g" \
-e "s/{{PROJECT_LEVEL}}/${PROJECT_LEVEL}/g" \
-e "s/{{TIMESTAMP}}/${TIMESTAMP}/g" \
-e "s/{{PRD_STATUS}}/${PRD_STATUS}/g" \
-e "s/{{TECH_SPEC_STATUS}}/${TECH_SPEC_STATUS}/g" \
-e "s/{{ARCHITECTURE_STATUS}}/${ARCHITECTURE_STATUS}/g" \
"$STATUS_TEMPLATE" > "$STATUS_OUTPUT"
else
# Fallback: create minimal status file
cat > "$STATUS_OUTPUT" <<EOF
# BMAD Method Workflow Status
# Generated: ${TIMESTAMP}
project_name: "${PROJECT_NAME}"
project_type: "${PROJECT_TYPE}"
project_level: ${PROJECT_LEVEL}
last_updated: "${TIMESTAMP}"
workflow_status:
- name: prd
phase: 2
status: "${PRD_STATUS}"
description: "Product Requirements Document"
- name: tech-spec
phase: 2
status: "${TECH_SPEC_STATUS}"
description: "Technical Specification"
- name: architecture
phase: 3
status: "${ARCHITECTURE_STATUS}"
description: "System architecture design"
- name: sprint-planning
phase: 4
status: "required"
description: "Sprint planning and story creation"
EOF
fi
echo -e "${GREEN}✓ Created: ${STATUS_OUTPUT}${NC}"
# Summary
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ BMAD Method Initialized Successfully! ║${NC}"
echo -e "${GREEN}╔════════════════════════════════════════════════╗${NC}"
echo ""
echo -e "${BLUE}Project:${NC} ${PROJECT_NAME}"
echo -e "${BLUE}Type:${NC} ${PROJECT_TYPE}"
echo -e "${BLUE}Level:${NC} ${PROJECT_LEVEL}"
echo ""
echo -e "${BLUE}Configuration:${NC} ${CONFIG_OUTPUT}"
echo -e "${BLUE}Status tracking:${NC} ${STATUS_OUTPUT}"
echo ""
# Recommend next step based on project level
echo -e "${YELLOW}Recommended next step:${NC}"
if [ "$PROJECT_LEVEL" -ge 2 ]; then
echo -e " Start with ${GREEN}/product-brief${NC} to define your product vision"
echo -e " Then create ${GREEN}/prd${NC} for detailed requirements"
else
if [ "$PROJECT_LEVEL" -eq 1 ]; then
echo -e " Start with ${GREEN}/product-brief${NC} (recommended) or ${GREEN}/tech-spec${NC}"
else
echo -e " Start with ${GREEN}/tech-spec${NC} to define your implementation"
fi
fi
echo ""
echo -e "${BLUE}Check status anytime with:${NC} /workflow-status"
echo ""
#!/bin/bash
# BMAD Orchestrator — One-Command Setup
# Installs plannotator CLI and configures BMAD + plannotator integration.
#
# Usage:
# bash scripts/install.sh # Interactive setup
# bash scripts/install.sh --skip-plannotator # BMAD only (no plannotator)
# bash scripts/install.sh --init-project # Also initialize BMAD in current project
# bash scripts/install.sh --dry-run # Preview what would happen
set -e
# ── Colors ────────────────────────────────────────────────────────────────────
BLUE='\033[0;34m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
GRAY='\033[0;37m'
BOLD='\033[1m'
NC='\033[0m'
# ── Flags ─────────────────────────────────────────────────────────────────────
SKIP_PLANNOTATOR=false
INIT_PROJECT=false
DRY_RUN=false
for arg in "$@"; do
case $arg in
--skip-plannotator) SKIP_PLANNOTATOR=true ;;
--init-project) INIT_PROJECT=true ;;
--dry-run) DRY_RUN=true ;;
-h|--help)
echo "Usage: bash scripts/install.sh [options]"
echo ""
echo "Options:"
echo " --skip-plannotator Set up BMAD only, skip plannotator install"
echo " --init-project Also initialize BMAD in the current project"
echo " --dry-run Preview steps without making changes"
echo " -h, --help Show this help"
exit 0
;;
esac
done
# ── Header ────────────────────────────────────────────────────────────────────
echo ""
echo -e "${BLUE}${BOLD}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${BOLD}║ BMAD Orchestrator — Setup ║${NC}"
echo -e "${BLUE}${BOLD}║ BMAD Method v6 + plannotator integration ║${NC}"
echo -e "${BLUE}${BOLD}╚══════════════════════════════════════════════════╝${NC}"
echo ""
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}[DRY RUN] No changes will be made.${NC}"
echo ""
fi
# ── Step 1: Check plannotator ─────────────────────────────────────────────────
echo -e "${BOLD}Step 1: plannotator CLI${NC}"
echo ""
if [ "$SKIP_PLANNOTATOR" = true ]; then
echo -e " ${GRAY}Skipping plannotator (--skip-plannotator)${NC}"
PLANNOTATOR_OK=false
elif command -v plannotator &>/dev/null; then
PLANNOTATOR_VERSION=$(plannotator --version 2>/dev/null || echo "installed")
echo -e " ${GREEN}✓ plannotator already installed${NC} (${PLANNOTATOR_VERSION})"
PLANNOTATOR_OK=true
else
echo -e " ${YELLOW}plannotator not found. Installing...${NC}"
echo ""
if [ "$DRY_RUN" = true ]; then
echo -e " ${GRAY}[DRY RUN] Would run: curl -sSfL https://plannotator.ai/install.sh | sh${NC}"
PLANNOTATOR_OK=false
else
# Install plannotator
if curl -sSfL https://plannotator.ai/install.sh | sh; then
echo ""
echo -e " ${GREEN}✓ plannotator installed${NC}"
PLANNOTATOR_OK=true
# Reload PATH so plannotator is found immediately
export PATH="$HOME/.local/bin:$HOME/bin:$PATH"
else
echo ""
echo -e " ${RED}✗ plannotator install failed.${NC}"
echo -e " ${GRAY} Manual install: https://plannotator.ai${NC}"
PLANNOTATOR_OK=false
fi
fi
fi
echo ""
# ── Resolve skill directory (used in Steps 2 and 3) ──────────────────────────
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ── Step 2: Set up Claude Code hook ──────────────────────────────────────────
echo -e "${BOLD}Step 2: plannotator Hook (Claude Code)${NC}"
echo ""
HOOK_SCRIPT="${SKILL_DIR}/../plannotator/scripts/setup-hook.sh"
if [ "$PLANNOTATOR_OK" = false ]; then
echo -e " ${GRAY}Skipping hook setup (plannotator not installed)${NC}"
elif [ ! -f "$HOOK_SCRIPT" ]; then
echo -e " ${YELLOW}plannotator skill not found at expected path.${NC}"
echo -e " ${GRAY} Install plannotator skill first:${NC}"
echo -e " ${GRAY} npx skills add https://github.com/supercent-io/skills-template --skill plannotator${NC}"
echo ""
echo -e " ${GRAY} Then run hook setup manually:${NC}"
echo -e " ${GRAY} bash .agent-skills/plannotator/scripts/setup-hook.sh${NC}"
else
if [ "$DRY_RUN" = true ]; then
echo -e " ${GRAY}[DRY RUN] Would run: bash $HOOK_SCRIPT${NC}"
else
echo -e " ${BLUE}Configuring Claude Code ExitPlanMode hook...${NC}"
bash "$HOOK_SCRIPT" && echo -e " ${GREEN}✓ Hook configured${NC}" || \
echo -e " ${YELLOW}⚠ Hook setup skipped (may already be configured)${NC}"
fi
fi
echo ""
# ── Step 3: Verify BMAD scripts are executable ────────────────────────────────
echo -e "${BOLD}Step 3: BMAD Scripts${NC}"
echo ""
SCRIPTS=(
"scripts/install.sh"
"scripts/init-project.sh"
"scripts/check-status.sh"
"scripts/phase-gate-review.sh"
"scripts/validate-config.sh"
)
for script in "${SCRIPTS[@]}"; do
SCRIPT_PATH="${SKILL_DIR}/${script}"
if [ -f "$SCRIPT_PATH" ]; then
if [ "$DRY_RUN" = false ]; then
chmod +x "$SCRIPT_PATH"
fi
echo -e " ${GREEN}✓${NC} ${script}"
else
echo -e " ${GRAY}-${NC} ${script} ${GRAY}(not found)${NC}"
fi
done
echo ""
# ── Step 4: Optional project initialization ───────────────────────────────────
if [ "$INIT_PROJECT" = true ]; then
echo -e "${BOLD}Step 4: Initialize BMAD in Current Project${NC}"
echo ""
INIT_SCRIPT="${SKILL_DIR}/scripts/init-project.sh"
if [ -f "$INIT_SCRIPT" ]; then
if [ "$DRY_RUN" = true ]; then
echo -e " ${GRAY}[DRY RUN] Would run: bash $INIT_SCRIPT${NC}"
else
bash "$INIT_SCRIPT"
fi
else
echo -e " ${RED}✗ init-project.sh not found${NC}"
fi
echo ""
fi
# ── Summary ───────────────────────────────────────────────────────────────────
echo -e "${GREEN}${BOLD}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}${BOLD} Setup complete!${NC}"
echo ""
echo -e "${BOLD}What's configured:${NC}"
if [ "$PLANNOTATOR_OK" = true ]; then
echo -e " ${GREEN}✓${NC} plannotator CLI — visual plan review"
echo -e " ${GREEN}✓${NC} Claude Code hook — auto-review on ExitPlanMode"
fi
echo -e " ${GREEN}✓${NC} BMAD scripts — workflow orchestration"
echo ""
echo -e "${BOLD}Next steps:${NC}"
echo ""
if [ "$INIT_PROJECT" = false ]; then
echo -e " ${BLUE}1. Initialize BMAD in your project:${NC}"
echo -e " ${YELLOW}/workflow-init${NC} ← run this in your AI session"
echo ""
fi
echo -e " ${BLUE}$([ "$INIT_PROJECT" = true ] && echo 1 || echo 2). Start your first phase:${NC}"
echo -e " ${YELLOW}/workflow-status${NC} ← see what's recommended next"
echo ""
echo -e " ${BLUE}$([ "$INIT_PROJECT" = true ] && echo 2 || echo 3). Review each phase document before advancing:${NC}"
echo -e " ${GRAY}bash scripts/phase-gate-review.sh docs/prd-*.md${NC}"
echo ""
if [ "$PLANNOTATOR_OK" = true ]; then
echo -e " ${BLUE}$([ "$INIT_PROJECT" = true ] && echo 3 || echo 4). Restart Claude Code${NC} so the hook takes effect."
echo ""
fi
echo -e "${GRAY}Full guide: cat .agent-skills/bmad/SETUP.md${NC}"
echo ""
#!/bin/bash
# BMAD Phase Gate Review
# Submits a phase document to plannotator for review before phase transition.
# On approval, updates bmm-workflow-status.yaml and records Obsidian save path.
#
# Usage:
# bash scripts/phase-gate-review.sh <doc-file> [title]
#
# Examples:
# bash scripts/phase-gate-review.sh docs/prd-myapp-2026-02-22.md "PRD Review: myapp"
# bash scripts/phase-gate-review.sh docs/architecture-myapp-2026-02-22.md
set -e
# ── Args ──────────────────────────────────────────────────────────────────────
DOC_FILE="${1:-}"
TITLE="${2:-}"
if [ -z "$DOC_FILE" ]; then
echo "Usage: bash scripts/phase-gate-review.sh <doc-file> [title]"
echo ""
echo "Examples:"
echo " bash scripts/phase-gate-review.sh docs/prd-myapp-2026-02-22.md \"PRD Review: myapp\""
echo " bash scripts/phase-gate-review.sh docs/architecture-myapp-2026-02-22.md"
exit 1
fi
if [ ! -f "$DOC_FILE" ]; then
echo "Error: Document not found: $DOC_FILE"
exit 1
fi
# ── Defaults ──────────────────────────────────────────────────────────────────
BASENAME=$(basename "$DOC_FILE" .md)
TITLE="${TITLE:-Phase Review: $BASENAME}"
# Detect project name from config or dirname
PROJECT_NAME="project"
if [ -f "bmad/config.yaml" ]; then
if command -v yq &>/dev/null; then
PROJECT_NAME=$(yq eval '.project_name' bmad/config.yaml 2>/dev/null || echo "project")
else
PROJECT_NAME=$(grep "project_name:" bmad/config.yaml 2>/dev/null | head -1 | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"' || echo "project")
fi
fi
# Detect phase from filename
PHASE_TAG="bmad"
if echo "$DOC_FILE" | grep -qi "product-brief\|brainstorm\|research"; then
PHASE_TAG="bmad,phase-1"
elif echo "$DOC_FILE" | grep -qi "prd\|tech-spec\|ux-design"; then
PHASE_TAG="bmad,phase-2"
elif echo "$DOC_FILE" | grep -qi "architecture\|solutioning"; then
PHASE_TAG="bmad,phase-3"
elif echo "$DOC_FILE" | grep -qi "sprint\|story\|dev"; then
PHASE_TAG="bmad,phase-4"
fi
# ── Colors ────────────────────────────────────────────────────────────────────
BLUE='\033[0;34m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ BMAD Phase Gate Review ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}Document:${NC} $DOC_FILE"
echo -e "${BLUE}Title:${NC} $TITLE"
echo -e "${BLUE}Project:${NC} $PROJECT_NAME"
echo -e "${BLUE}Tags:${NC} $PHASE_TAG,$PROJECT_NAME"
echo ""
# ── Check plannotator ─────────────────────────────────────────────────────────
if ! command -v plannotator &>/dev/null; then
echo -e "${YELLOW}Warning: plannotator CLI not found.${NC}"
echo "Install: bash scripts/install.sh (from plannotator skill)"
echo ""
echo -e "${YELLOW}Manual review fallback:${NC}"
echo " Open the document and review manually, then update bmm-workflow-status.yaml"
echo ""
echo " Skipping plannotator gate — proceeding without review."
exit 0
fi
# ── Submit to plannotator ─────────────────────────────────────────────────────
echo -e "${BLUE}Submitting to plannotator...${NC}"
DOC_CONTENT=$(cat "$DOC_FILE")
# Submit via plannotator CLI (opens browser UI)
echo "$DOC_CONTENT" | plannotator submit \
--title "$TITLE" \
--stdin 2>/dev/null || {
# Fallback: use python3 to pipe content
python3 -c "
import sys, subprocess
content = open('$DOC_FILE').read()
proc = subprocess.run(
['plannotator', 'submit', '--title', '$TITLE', '--stdin'],
input=content.encode(),
capture_output=True
)
sys.exit(proc.returncode)
" 2>/dev/null || {
echo -e "${YELLOW}Could not auto-submit. Open plannotator manually:${NC}"
echo " plannotator"
echo " Then paste the content of: $DOC_FILE"
exit 0
}
}
# ── Update workflow status ─────────────────────────────────────────────────────
STATUS_FILE="docs/bmm-workflow-status.yaml"
WORKFLOW_NAME="$BASENAME"
# Extract workflow name by matching filename against bmm-workflow-status.yaml
# Handles hyphenated names like product-brief, tech-spec, ux-design
find_workflow_name() {
local doc_basename
doc_basename=$(basename "$DOC_FILE" .md)
local status_yaml="$STATUS_FILE"
if [ ! -f "$status_yaml" ]; then
echo ""
return
fi
if command -v yq &>/dev/null; then
# yq: find the name whose entry matches any leading segment of the filename
yq eval '.workflow_status[].name' "$status_yaml" 2>/dev/null | while IFS= read -r name; do
if [[ "$doc_basename" == "$name"* ]]; then
echo "$name"
return
fi
done | head -1
else
# python3 fallback: parse YAML names with grep/sed, no external modules needed
python3 - <<PYEOF 2>/dev/null
import os, re
status_yaml = "$status_yaml"
doc_basename = "$doc_basename"
try:
with open(status_yaml) as f:
content = f.read()
names = re.findall(r"""^\s*-\s+name:\s*["']?([^"'\n]+)["']?""", content, re.MULTILINE)
for name in names:
name = name.strip()
if doc_basename.startswith(name):
print(name)
break
except Exception:
pass
PYEOF
fi
}
WORKFLOW_NAME=$(find_workflow_name)
# Fallback: strip trailing date/project suffix (e.g., product-brief-myapp-2026 -> product-brief)
if [[ -z "$WORKFLOW_NAME" ]]; then
WORKFLOW_NAME=$(echo "$BASENAME" | sed 's/-[0-9]\{4\}[^-]*$//' | sed 's/-[a-zA-Z0-9]*$//')
fi
# Final fallback: original single-field cut
if [[ -z "$WORKFLOW_NAME" ]]; then
WORKFLOW_NAME=$(echo "$BASENAME" | cut -d'-' -f1)
fi
if [ -f "$STATUS_FILE" ]; then
echo ""
echo -e "${GREEN}Updating workflow status...${NC}"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
# Update last_updated timestamp
if command -v yq &>/dev/null; then
yq eval ".last_updated = \"$TIMESTAMP\"" -i "$STATUS_FILE" 2>/dev/null || true
yq eval "(.workflow_status[] | select(.name == \"$WORKFLOW_NAME\") | .plannotator_review) = \"approved\"" \
-i "$STATUS_FILE" 2>/dev/null || true
yq eval "(.workflow_status[] | select(.name == \"$WORKFLOW_NAME\") | .reviewed_at) = \"$TIMESTAMP\"" \
-i "$STATUS_FILE" 2>/dev/null || true
else
echo -e "${YELLOW}Note: Install yq for automatic status update${NC}"
echo " brew install yq"
echo ""
echo " Manually update $STATUS_FILE:"
echo " plannotator_review: \"approved\""
echo " reviewed_at: \"$TIMESTAMP\""
fi
fi
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}Phase gate review submitted.${NC}"
echo ""
echo "Next steps:"
echo " 1. Review and annotate in the plannotator UI"
echo " 2. Click Approve (saves to your enabled destination: Obsidian or Bear)"
echo " 3. Proceed to next BMAD phase"
echo ""
#!/bin/bash
# BMAD Configuration Validator
# Validates YAML configuration files for syntax and required fields
set -e # Exit on error
# Color output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Default file to validate
CONFIG_FILE="${1:-bmad/config.yaml}"
# Check if file exists
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${RED}Error: File not found: ${CONFIG_FILE}${NC}"
exit 1
fi
echo -e "${BLUE}Validating YAML configuration: ${CONFIG_FILE}${NC}"
echo ""
# Track validation status
ERRORS=0
WARNINGS=0
# Function to report error
error() {
echo -e "${RED}✗ ERROR:${NC} $1"
((ERRORS++))
}
# Function to report warning
warning() {
echo -e "${YELLOW}⚠ WARNING:${NC} $1"
((WARNINGS++))
}
# Function to report success
success() {
echo -e "${GREEN}✓${NC} $1"
}
# Check if yq is available for proper YAML parsing
HAS_YQ=false
if command -v yq &> /dev/null; then
HAS_YQ=true
echo -e "${GREEN}✓ yq found - using proper YAML parser${NC}"
else
echo -e "${YELLOW}⚠ yq not found - using basic validation${NC}"
echo -e "${GRAY} Install yq for better validation: https://github.com/mikefarah/yq${NC}"
fi
echo ""
# Test 1: YAML Syntax
echo -e "${BLUE}Test 1: YAML Syntax${NC}"
if [ "$HAS_YQ" = true ]; then
if yq eval '.' "$CONFIG_FILE" > /dev/null 2>&1; then
success "Valid YAML syntax"
else
error "Invalid YAML syntax"
yq eval '.' "$CONFIG_FILE" 2>&1 | head -5
fi
else
# Basic syntax check
if grep -q "^[^#]" "$CONFIG_FILE"; then
success "File contains content"
else
error "File appears empty or only contains comments"
fi
fi
echo ""
# Determine config type
CONFIG_TYPE="unknown"
if grep -q "project_name:" "$CONFIG_FILE"; then
CONFIG_TYPE="project"
elif grep -q "user_name:" "$CONFIG_FILE"; then
CONFIG_TYPE="global"
fi
echo -e "${BLUE}Configuration type: ${CONFIG_TYPE}${NC}"
echo ""
# Test 2: Required Fields (Project Config)
if [ "$CONFIG_TYPE" = "project" ]; then
echo -e "${BLUE}Test 2: Required Fields (Project Config)${NC}"
# Check project_name
if grep -q "^project_name:" "$CONFIG_FILE"; then
PROJECT_NAME=$(grep "^project_name:" "$CONFIG_FILE" | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
if [ -n "$PROJECT_NAME" ]; then
success "project_name: ${PROJECT_NAME}"
else
error "project_name is empty"
fi
else
error "Missing required field: project_name"
fi
# Check project_type
if grep -q "^project_type:" "$CONFIG_FILE"; then
PROJECT_TYPE=$(grep "^project_type:" "$CONFIG_FILE" | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
if [ -n "$PROJECT_TYPE" ]; then
success "project_type: ${PROJECT_TYPE}"
# Validate project type
valid_types=("web-app" "mobile-app" "api" "game" "library" "other")
if [[ ! " ${valid_types[@]} " =~ " ${PROJECT_TYPE} " ]]; then
warning "Unknown project_type '${PROJECT_TYPE}'. Valid: ${valid_types[*]}"
fi
else
error "project_type is empty"
fi
else
error "Missing required field: project_type"
fi
# Check project_level
if grep -q "^project_level:" "$CONFIG_FILE"; then
PROJECT_LEVEL=$(grep "^project_level:" "$CONFIG_FILE" | sed 's/.*: *//;s/ *#.*//')
if [ -n "$PROJECT_LEVEL" ]; then
success "project_level: ${PROJECT_LEVEL}"
# Validate level is 0-4
if ! [[ "$PROJECT_LEVEL" =~ ^[0-4]$ ]]; then
error "project_level must be 0-4, got: ${PROJECT_LEVEL}"
fi
else
error "project_level is empty"
fi
else
error "Missing required field: project_level"
fi
echo ""
fi
# Test 3: Optional but Recommended Fields
echo -e "${BLUE}Test 3: Optional Fields${NC}"
# Check output_folder
if grep -q "^output_folder:" "$CONFIG_FILE"; then
OUTPUT_FOLDER=$(grep "^output_folder:" "$CONFIG_FILE" | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
success "output_folder: ${OUTPUT_FOLDER}"
else
warning "output_folder not specified (will default to 'docs')"
fi
# Check communication_language
if grep -q "^communication_language:" "$CONFIG_FILE"; then
COMM_LANG=$(grep "^communication_language:" "$CONFIG_FILE" | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
success "communication_language: ${COMM_LANG}"
else
warning "communication_language not specified (will default to 'English')"
fi
echo ""
# Test 4: BMAD Version
echo -e "${BLUE}Test 4: Version Check${NC}"
if grep -q "^bmad_version:" "$CONFIG_FILE" || grep -q "^version:" "$CONFIG_FILE"; then
VERSION=$(grep -E "^(bmad_version|version):" "$CONFIG_FILE" | head -1 | sed 's/.*: *"\?\([^"]*\)"\?/\1/' | tr -d '"')
success "BMAD version: ${VERSION}"
# Check if version is current
if [[ "$VERSION" == "6.0.0" ]]; then
success "Running latest BMAD version"
else
warning "BMAD version ${VERSION} detected. Current version is 6.0.0"
fi
else
warning "No version specified"
fi
echo ""
# Test 5: File Permissions
echo -e "${BLUE}Test 5: File Permissions${NC}"
if [ -r "$CONFIG_FILE" ]; then
success "File is readable"
else
error "File is not readable"
fi
if [ -w "$CONFIG_FILE" ]; then
success "File is writable"
else
warning "File is not writable (updates may fail)"
fi
echo ""
# Test 6: Referenced Folders (if project config)
if [ "$CONFIG_TYPE" = "project" ]; then
echo -e "${BLUE}Test 6: Referenced Folders${NC}"
# Check if output folder exists
if [ -n "$OUTPUT_FOLDER" ]; then
if [ -d "$OUTPUT_FOLDER" ]; then
success "Output folder exists: ${OUTPUT_FOLDER}"
else
warning "Output folder does not exist: ${OUTPUT_FOLDER}"
echo -e " ${GRAY}Run /workflow-init to create it${NC}"
fi
fi
# Check if bmad folder exists
if [ -d "bmad" ]; then
success "BMAD config folder exists: bmad/"
else
warning "BMAD config folder does not exist: bmad/"
fi
# Check for workflow status file
STATUS_FILE="${OUTPUT_FOLDER:-docs}/bmm-workflow-status.yaml"
if [ -f "$STATUS_FILE" ]; then
success "Workflow status file exists: ${STATUS_FILE}"
else
warning "Workflow status file not found: ${STATUS_FILE}"
echo -e " ${GRAY}Run /workflow-init to create it${NC}"
fi
echo ""
fi
# Summary
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
echo -e "${GREEN}✓ Validation passed with no errors or warnings!${NC}"
exit 0
elif [ $ERRORS -eq 0 ]; then
echo -e "${YELLOW}⚠ Validation passed with ${WARNINGS} warning(s)${NC}"
echo -e "${GRAY} Configuration is valid but has recommendations${NC}"
exit 0
else
echo -e "${RED}✗ Validation failed with ${ERRORS} error(s) and ${WARNINGS} warning(s)${NC}"
echo -e "${GRAY} Please fix errors before proceeding${NC}"
exit 1
fi
BMAD Orchestrator — Setup Guide
BMAD Method v6 + plannotator integration
Structured AI-driven development with visual plan review at every phase gate.
---
What You Get
Your AI Agent
│
▼
/workflow-init ← bootstrap project
│
▼
Phase 1: Analysis ← /product-brief, /research
│
│ [plannotator review] ← approve before advancing
▼
Phase 2: Planning ← /prd or /tech-spec
│
│ [plannotator review]
▼
Phase 3: Solutioning ← /architecture (Level 2+ only)
│
│ [plannotator review]
▼
Phase 4: Implementation ← /sprint-planning → /dev-storyplannotator opens a visual browser UI after each phase document is created. You annotate, approve, or request changes — then your agent continues to the next phase. Use the same cross-platform control model as OMG: settings configure the platform, rules prevent invalid phase transitions, and hooks enforce them.
---
Quick Start (3 steps)
Step 1 — Install
bash scripts/install.shThis installs plannotator CLI and configures the Claude Code ExitPlanMode hook. Restart Claude Code after running this.
Options:
bash scripts/install.sh --init-project # Also initialize BMAD in current directory
bash scripts/install.sh --skip-plannotator # BMAD scripts only, no plannotator
bash scripts/install.sh --dry-run # Preview without making changesStep 2 — Initialize your project
Run this inside your AI session (Claude Code, Gemini CLI, etc.):
/workflow-initYour agent will ask three questions:
- Project name — e.g.
my-app - Project type —
web-app,mobile-app,api,game,library,other - Project level —
0to4(see level guide below)
This creates:
bmad/config.yaml ← project configuration
docs/bmm-workflow-status.yaml ← workflow tracking
docs/stories/ ← story files will go hereStep 3 — Start working
/workflow-statusYour agent shows your current phase, what's done, and exactly what to run next.
---
Project Level Guide
Choose the level that matches your project size:
| Level | Size | Required phases | Typical duration |
|---|---|---|---|
| 0 | Single fix / 1 story | Tech Spec → Story | Hours |
| 1 | Small feature / 1–10 stories | Tech Spec → Sprint | 1–5 days |
| 2 | Feature set / 5–15 stories | PRD → Architecture → Sprint | 1–3 weeks |
| 3 | Complex integration / 12–40 stories | Brief → PRD → Architecture → Sprints | 3–8 weeks |
| 4 | Enterprise / 40+ stories | Brief → Research → PRD → UX → Architecture → Sprints | 2+ months |
Quick decision:
- Bug fix or config change → Level 0
- New API endpoint or small UI feature → Level 1
- User auth system or payment integration → Level 2
- Third-party platform integration → Level 3
- Major system overhaul → Level 4
---
plannotator Phase Gate Review
After each phase document is created, submit it for review before moving on:
# After /prd creates docs/prd-myapp-2026-02-25.md
bash scripts/phase-gate-review.sh docs/prd-myapp-2026-02-25.md "PRD Review: myapp"
# After /architecture creates docs/architecture-myapp-2026-02-25.md
bash scripts/phase-gate-review.sh docs/architecture-myapp-2026-02-25.mdOr trigger it from inside your AI session:
planno — review the PRD before we proceed to Phase 3What happens in the review UI
1. plannotator opens in your browser automatically
- unless the same document hash already has a terminal review result, in which case the gate is skipped
2. Read through the document 3. Annotate specific sections:
delete— remove a risky or unnecessary elementinsert— add something missingreplace— correct an approachcomment— clarify constraints
4. Choose an outcome:
- Approve → your agent advances to the next phase; doc saved to your configured destination (Obsidian or Bear)
- Request Changes → annotations sent back; agent revises and re-submits
Phase gate reference
| Completing phase | Document type | Gate command |
|---|---|---|
| Phase 1 → 2 | Product Brief | bash scripts/phase-gate-review.sh docs/product-brief-*.md |
| Phase 2 → 3 | PRD or Tech Spec | bash scripts/phase-gate-review.sh docs/prd-*.md |
| Phase 3 → 4 | Architecture | bash scripts/phase-gate-review.sh docs/architecture-*.md |
| Phase 4 wrap-up | Sprint summary | bash scripts/phase-gate-review.sh docs/sprint-status.yaml |
---
Common Commands
Check status anytime
/workflow-statusOutput example:
Project: my-app (web-app, Level 2)
✓ Phase 1: Analysis
✓ product-brief (docs/product-brief-my-app-2026-02-25.md)
→ Phase 2: Planning [CURRENT]
⚠ prd (required - NOT STARTED)
Phase 3: Solutioning
- architecture (required)
Phase 4: Implementation
- sprint-planning (required)
Recommended next step: Run /prd to continueValidate your config
bash scripts/validate-config.shCheck BMAD + plannotator status
bash scripts/check-status.sh---
Workflow by Project Level
Level 0–1 (Fast Track)
/workflow-init → /tech-spec
↓
planno review
↓
/sprint-planning → /dev-storyLevel 2 (Standard Feature)
/workflow-init → /product-brief → /prd
↓
planno review (Phase 2 gate)
↓
/architecture
↓
planno review (Phase 3 gate)
↓
/sprint-planning → /dev-storyLevel 3–4 (Enterprise)
/workflow-init → /product-brief → /research
↓
/prd → /create-ux-design
↓
planno review (Phase 2 gate)
↓
/architecture → /solutioning-gate-check
↓
planno review (Phase 3 gate)
↓
/sprint-planning → /create-story → /dev-story
↓
/code-review (per sprint)---
Notes Auto-Save: Obsidian or Bear (Optional)
Approved phase documents can be auto-saved with YAML frontmatter and [[BMAD Plans]] backlinks.
Setup (choose one or both): 1. Open any plannotator review in your browser 2. Click ⚙️ Settings → Saving tab 3. Toggle ON Obsidian Integration and/or Bear Notes 4. For Obsidian: select your vault from the dropdown 5. For Bear: verify callback works first:
open "bear://x-callback-url/create?title=Test&text=OK"Each approved document saves as:
vault/plannotator/PRD Review myapp - Feb 25, 2026 10-30pm.mdWith frontmatter:
---
created: 2026-02-25T22:30:00.000Z
source: plannotator
tags: [bmad, phase-2, prd, my-app]
---
[[BMAD Plans]]
# PRD: my-app
...---
Scripts Reference
| Script | Purpose | Usage |
|---|---|---|
install.sh | Full setup: plannotator + hooks + scripts | bash scripts/install.sh |
init-project.sh | Initialize BMAD in a project | bash scripts/init-project.sh --name MyApp --type web-app --level 2 |
check-status.sh | Display current workflow status | bash scripts/check-status.sh |
phase-gate-review.sh | Submit doc to plannotator for review | bash scripts/phase-gate-review.sh docs/prd-*.md |
validate-config.sh | Validate YAML config files | bash scripts/validate-config.sh |
---
Troubleshooting
BMAD not detected:
# Check if config exists
ls bmad/config.yaml
# Re-initialize if missing
/workflow-initplannotator doesn't open:
# Check installation
plannotator --version
# Re-install
curl -sSfL https://plannotator.ai/install.sh | shHook not firing on plan exit:
# Re-run hook setup (from plannotator skill)
bash .agent-skills/plannotator/scripts/setup-hook.sh
# Restart Claude Code after thisStatus file out of sync:
# Validate config
bash scripts/validate-config.sh
# Manually edit status
# File: docs/bmm-workflow-status.yaml---
Related Skills
| Skill | Purpose | Install |
|---|---|---|
plannotator | Visual plan & diff review | npx skills add ... --skill plannotator |
ralph | Persistence loop until task completes | npx skills add ... --skill ralph |
vibe-kanban | Visual kanban for agent stories | npx skills add ... --skill vibe-kanban |
omg | Full orchestration: plan → execute → track | npx skills add ... --skill omg |
---
Source: BMAD Method · plannotator · skills-template
N:bmad
D:Packet-first BMAD/BMM front door for idea notes, product briefs, PRDs, architecture drafts, review feedback, existing repo state, and milestone pressure. Use when the user wants to know what BMAD phase or artifact comes next, or needs a portable BMAD entrypoint before routing review, execution slicing, runtime setup, or game-production work outward.
G:bmad workflow planning packet-first brownfield architecture prd review-gate sprint-plan runtime-handoff
U[6]:
Start or resume BMAD from the packet already in hand
Decide whether the next move is product-brief, PRD, architecture, review gate, sprint plan, or runtime handoff
Handle existing repo / issue / partial-implementation brownfield BMAD intake
Keep runtime-specific orchestration out of the common BMAD layer
Route pre-planning concept work to bmad-idea and game-production work to bmad-gds
Keep review gates visible before phase advancement
S[8]{n,action,details}:
1,Classify,Choose one primary packet: concept/planning/architecture/review-gate/execution/runtime-handoff/brownfield-resume
2,Level,Choose project level 0-4 before suggesting artifact depth
3,Phase,Infer the likely current phase from the packet instead of assuming a clean phase transition
4,Next,Recommend exactly one next artifact or gate
5,Review,If the artifact exists but is unreviewed → route to plannotator before creating another document
6,Execute,If the artifact is approved and the real blocker is slicing → route to task-planning
7,Runtime,If execution is runtime-native → route to omc/omx/ohmg with a short why
8,Brownfield,If the ask starts from a live repo/issue/partial implementation → prefer workflow-status or smallest missing artifact over greenfield restart
R[6]:
Pick one primary packet before choosing the next artifact
Make the project-level assumption explicit
Prefer the smallest truthful next move over a parallel document stack
Keep plannotator visible when approval is the real blocker
Keep runtime overlays separated from the common BMAD layer
Route game-production packets to bmad-gds and open-ended concept framing to bmad-idea
# BMAD Method v6 - Project Configuration
# Generated: {{TIMESTAMP}}
# Project: {{PROJECT_NAME}}
# BMAD Version
bmad_version: "6.0.0"
# Project Information
project_name: "{{PROJECT_NAME}}"
project_type: "{{PROJECT_TYPE}}" # web-app, mobile-app, api, game, library, other
project_level: {{PROJECT_LEVEL}} # 0-4 (see documentation for level definitions)
# Output Configuration
output_folder: "docs" # Where to store BMAD documents
stories_folder: "docs/stories" # Where to store user stories
# Language Settings
communication_language: "English" # Language for AI communication
document_output_language: "English" # Language for generated documents
# Optional: Override agent behaviors
# Uncomment and customize as needed
# agent_overrides_folder: "bmad/agent-overrides"
# Optional: Custom templates
# template_overrides:
# prd: "bmad/templates/custom-prd.md"
# tech_spec: "bmad/templates/custom-tech-spec.md"
# Optional: Project-specific settings
# auto_update_status: true
# verbose_mode: false
# git_integration: true
# issue_tracker: "github" # github, jira, linear, etc.
# Project Metadata (optional)
# project_description: "Brief description of your project"
# repository_url: "https://github.com/user/repo"
# team_size: 1
# tech_stack:
# - "technology1"
# - "technology2"
# Sprint Configuration (optional)
# sprint_duration_days: 14
# story_point_scale: "fibonacci" # fibonacci, linear, t-shirt
# velocity_target: 20 # target story points per sprint
# BMAD Method Workflow Status
# Generated: {{TIMESTAMP}}
# Project: {{PROJECT_NAME}}
# Project Information
project_name: "{{PROJECT_NAME}}"
project_type: "{{PROJECT_TYPE}}"
project_level: {{PROJECT_LEVEL}}
communication_language: "English"
output_language: "English"
last_updated: "{{TIMESTAMP}}"
# Workflow Status Tracking
# Status values:
# - "required" - Must be completed to proceed
# - "recommended" - Strongly suggested but not blocking
# - "optional" - Can be skipped without impact
# - "{file-path}" - Completed (path to output file)
# - "skipped" - Explicitly skipped by user
workflow_status:
# ============================================================
# Phase 1: Analysis (Optional but recommended)
# ============================================================
- name: product-brief
phase: 1
status: "optional"
description: "Create comprehensive product brief with vision and high-level requirements"
command: "/product-brief"
- name: brainstorm-project
phase: 1
status: "optional"
description: "Structured brainstorming session for features and solutions"
command: "/brainstorm"
- name: research
phase: 1
status: "optional"
description: "Market analysis, competitive research, and technical investigation"
command: "/research"
# ============================================================
# Phase 2: Planning (Required - choose based on project level)
# ============================================================
- name: prd
phase: 2
status: "{{PRD_STATUS}}" # required for level 2+, recommended for level 1, optional for level 0
description: "Product Requirements Document - comprehensive requirements for multi-feature projects"
command: "/prd"
notes: "Use for Level 2+ projects or when stakeholder alignment needed"
- name: tech-spec
phase: 2
status: "{{TECH_SPEC_STATUS}}" # required for level 0-1, optional for level 2+
description: "Technical Specification - detailed technical design for implementation"
command: "/tech-spec"
notes: "Use for Level 0-1 projects or as supplement to PRD"
- name: create-ux-design
phase: 2
status: "optional"
description: "UX/UI design workflow with wireframes and user flows"
command: "/create-ux-design"
notes: "Recommended for user-facing features"
# ============================================================
# Phase 3: Solutioning (Required for Level 2+)
# ============================================================
- name: architecture
phase: 3
status: "{{ARCHITECTURE_STATUS}}" # required for level 2+, optional for level 0-1
description: "System architecture design with components and integrations"
command: "/architecture"
notes: "Required for Level 2+ projects with architectural complexity"
- name: solutioning-gate-check
phase: 3
status: "optional"
description: "Validate architecture against requirements before implementation"
command: "/solutioning-gate-check"
notes: "Recommended for Level 3+ projects"
# ============================================================
# Phase 4: Implementation (Required)
# ============================================================
# Note: Implementation progress is tracked in sprint-status.yaml
# The workflows below are the entry points to Phase 4
- name: sprint-planning
phase: 4
status: "required"
description: "Break down requirements into epics and stories, create sprint plan"
command: "/sprint-planning"
notes: "Creates sprint-status.yaml and story files"
- name: create-story
phase: 4
status: "conditional"
description: "Create individual user story with acceptance criteria"
command: "/create-story"
notes: "Use to add stories to existing sprint"
- name: dev-story
phase: 4
status: "conditional"
description: "Implement specific user story with code generation"
command: "/dev-story"
notes: "Execute story implementation"
- name: code-review
phase: 4
status: "optional"
description: "Review implemented code for quality and standards"
command: "/code-review"
notes: "Recommended for Level 2+ projects"
# ============================================================
# Status Legend
# ============================================================
# required - Must be completed before proceeding to next phase
# recommended - Strongly suggested for project quality
# optional - Can be skipped based on project needs
# conditional - Required based on context (e.g., sprint active)
# {file-path} - Workflow completed, shows output document
# skipped - User explicitly chose to skip this workflow
#
# plannotator_review - "approved" | "pending" | "changes-requested"
# reviewed_at - ISO 8601 timestamp of last plannotator review
#
# Phase Gate Review (optional but recommended):
# After completing any phase document, run:
# bash scripts/phase-gate-review.sh <doc-file> "<title>"
# This opens plannotator for review before transitioning to next phase.