Create structured, repeatable workflows for human-AI collaboration in BMAD v6.
Create a folder with these files:
# workflow.yaml (REQUIRED)
name: 'my-workflow'
description: 'What this workflow does'
installed_path: '{project-root}/bmad/module/workflows/my-workflow'
template: '{installed_path}/template.md'
instructions: '{installed_path}/instructions.md'
default_output_file: '{output_folder}/output.md'
# template.md
# {{project_name}} Output
{{main_content}}
# instructions.md
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: workflow.yaml</critical>
<workflow>
<step n="1" goal="Generate content">
Create the main content for this document.
<template-output>main_content</template-output>
</step>
</workflow>
That’s it! To execute, tell the BMAD agent: workflow my-workflow
| Aspect | Task | Workflow |
|---|---|---|
| Purpose | Single operation | Multi-step process |
| Format | XML in .md file |
Folder with YAML config |
| Location | /src/core/tasks/ |
/bmad/*/workflows/ |
| User Input | Minimal | Extensive |
| Output | Variable | Usually documents |
my-workflow/
└── workflow.yaml # REQUIRED - Configuration
my-workflow/
├── template.md # Document structure
├── instructions.md # Step-by-step guide
├── checklist.md # Validation criteria
└── [data files] # Supporting resources
# Basic metadata
name: 'workflow-name'
description: 'Clear purpose statement'
# Paths
installed_path: '{project-root}/bmad/module/workflows/name'
template: '{installed_path}/template.md' # or false
instructions: '{installed_path}/instructions.md' # or false
validation: '{installed_path}/checklist.md' # optional
# Output
default_output_file: '{output_folder}/document.md'
# Advanced options
autonomous: true # Skip user checkpoints
recommended_inputs: # Expected input docs
- input_doc: 'path/to/doc.md'
Full Document Workflow (most common)
Action Workflow (no template)
Autonomous Workflow (no interaction)
# instructions.md
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: workflow.yaml</critical>
<workflow>
<step n="1" goal="Clear goal statement">
Instructions for this step.
<template-output>variable_name</template-output>
</step>
<step n="2" goal="Next goal" optional="true">
Optional step instructions.
<template-output>another_variable</template-output>
</step>
</workflow>
n="X" - Step number (required)goal="..." - What the step accomplishes (required)optional="true" - User can skiprepeat="3" - Repeat N timesif="condition" - Conditional executionMarkdown Format (human-friendly):
<step n="1" goal="Define goals">
Write 1-3 bullet points about project success:
- User outcomes
- Business value
- Measurable results
<template-output>goals</template-output>
</step>
XML Format (precise control):
<step n="2" goal="Validate input">
<action>Load validation criteria</action>
<check if="validation fails">
<goto step="1">Return to previous step</goto>
</check>
<template-output>validated_data</template-output>
</step>
# template.md
# {{project_name}} Document
## Section
{{section_content}}
_Generated on {{date}}_
<template-output> tags{{user_requirements}}{{primary_user_journey}} not {{puj}}<step n="3" goal="Process items">
<step n="3a" title="Gather data">
<action>Collect information</action>
</step>
<step n="3b" title="Analyze">
<action>Process collected data</action>
<template-output>analysis</template-output>
</step>
</step>
```xml
Single Action (use action if=""):
<step n="6" goal="Load context">
<action if="file exists">Load existing document</action>
<action if="new project">Initialize from template</action>
</step>
Multiple Actions (use <check if="">...</check>):
<step n="7" goal="Validate">
<action>Check requirements</action>
<check if="incomplete">
<action>Log validation errors</action>
<goto step="2">Return to gathering</goto>
</check>
<check if="complete">
<action>Mark as validated</action>
<continue>Proceed</continue>
</check>
</step>
When to use which:
<action if=""> - Single conditional action (cleaner, more concise)<check if="">...</check> - Multiple items under same condition (explicit scope)<step n="8" goal="Refine">
<loop max="5">
<action>Generate solution</action>
<check if="criteria met">
<break>Exit loop</break>
</check>
</loop>
</step>
Execution:
<action> - Required action<action if="condition"> - Single conditional action (inline)<check if="condition">...</check> - Conditional block for multiple items (requires closing tag)<ask> - User prompt<goto> - Jump to step<invoke-workflow> - Call another workflowOutput:
<template-output> - Save checkpoint<invoke-task halt="true">{project-root}/bmad/core/tasks/adv-elicit.xml</invoke-task> - Trigger AI enhancement<critical> - Important info<example> - Show example# Validation Checklist
## Structure
- [ ] All sections present
- [ ] No placeholders remain
- [ ] Proper formatting
## Content Quality
- [ ] Clear and specific
- [ ] Technically accurate
- [ ] Consistent terminology
## Completeness
- [ ] Ready for next phase
- [ ] Dependencies documented
- [ ] Action items defined
❌ - [ ] Good documentation
✅ - [ ] Each function has JSDoc comments with parameters and return types
<workflow>
<step n="1" goal="Gather context">
Load existing documents and understand project scope.
<template-output>context</template-output>
</step>
<step n="2" goal="Define requirements">
Create functional and non-functional requirements.
<template-output>requirements</template-output>
<invoke-task halt="true">{project-root}/bmad/core/tasks/adv-elicit.xml</invoke-task>
</step>
<step n="3" goal="Validate">
Check requirements against goals.
<template-output>validated_requirements</template-output>
</step>
</workflow>
<workflow>
<step n="1" goal="Analyze codebase">
<action>Find all API endpoints</action>
<action>Identify patterns</action>
</step>
<step n="2" goal="Refactor">
<repeat for-each="endpoint">
<action>Update to new pattern</action>
</repeat>
</step>
<step n="3" goal="Verify">
<action>Run tests</action>
<check if="tests fail">
<goto step="2">Fix issues</goto>
</check>
</step>
</workflow>
<workflow name="greenfield-app">
<step n="1" goal="Discovery">
<invoke-workflow>product-brief</invoke-workflow>
<template-output>brief</template-output>
</step>
<step n="2" goal="Requirements">
<invoke-workflow input="{{brief}}">prd</invoke-workflow>
<template-output>prd</template-output>
</step>
<step n="3" goal="Architecture">
<invoke-workflow input="{{prd}}">architecture</invoke-workflow>
<template-output>architecture</template-output>
</step>
</workflow>
✅ DO:
<action if=""> for single conditional actions<check if="">...</check> for blocks with multiple items<check> tags explicitly❌ DON’T:
<check> blocks (unnecessarily verbose)<check> tagsExamples:
```xml
<template-output> tags<check if="">...</check> blocks<action if=""> for single items, <check if=""> for blocksWeb bundles allow workflows to be deployed as self-contained packages for web environments.
{config_source} referencesbmad/ root paths (no {project-root})Add this section to your workflow.yaml:
web_bundle:
name: 'workflow-name'
description: 'Workflow description'
author: 'Your Name'
# Core files (bmad/-relative paths)
instructions: 'bmad/module/workflows/workflow/instructions.md'
validation: 'bmad/module/workflows/workflow/checklist.md'
template: 'bmad/module/workflows/workflow/template.md'
# Data files (no config_source allowed)
data_file: 'bmad/module/workflows/workflow/data.csv'
# Complete file list - CRITICAL!
web_bundle_files:
- 'bmad/module/workflows/workflow/instructions.md'
- 'bmad/module/workflows/workflow/checklist.md'
- 'bmad/module/workflows/workflow/template.md'
- 'bmad/module/workflows/workflow/data.csv'
# Include ALL referenced files
Remove Config Dependencies:
{config_source}:variable with hardcoded values{project-root}/bmad/ to bmad/Inventory All Files:
Test Completeness:
web_bundle:
name: 'analyze-requirements'
description: 'Requirements analysis workflow'
author: 'BMad Team'
instructions: 'bmad/bmm/workflows/analyze-requirements/instructions.md'
validation: 'bmad/bmm/workflows/analyze-requirements/checklist.md'
template: 'bmad/bmm/workflows/analyze-requirements/template.md'
# Data files
techniques_data: 'bmad/bmm/workflows/analyze-requirements/techniques.csv'
patterns_data: 'bmad/bmm/workflows/analyze-requirements/patterns.json'
# Sub-workflow reference
validation_workflow: 'bmad/bmm/workflows/validate-requirements/workflow.yaml'
web_bundle_files:
# Core workflow files
- 'bmad/bmm/workflows/analyze-requirements/instructions.md'
- 'bmad/bmm/workflows/analyze-requirements/checklist.md'
- 'bmad/bmm/workflows/analyze-requirements/template.md'
# Data files
- 'bmad/bmm/workflows/analyze-requirements/techniques.csv'
- 'bmad/bmm/workflows/analyze-requirements/patterns.json'
# Sub-workflow and its files
- 'bmad/bmm/workflows/validate-requirements/workflow.yaml'
- 'bmad/bmm/workflows/validate-requirements/instructions.md'
- 'bmad/bmm/workflows/validate-requirements/checklist.md'
# Shared templates referenced in instructions
- 'bmad/bmm/templates/requirement-item.md'
- 'bmad/bmm/templates/validation-criteria.md'
<template-output> tag presentFor implementation details, see:
/src/core/tasks/workflow.xml - Execution engine/bmad/bmm/workflows/ - Production examples