BMad document templates are defined in YAML format to drive interactive document generation and agent interaction. Templates separate structure definition from content generation, making them both human and LLM-agent-friendly.
## Template Structure
```yaml
template:
id: template-identifier
name: Human Readable Template Name
version: 1.0
output:
format: markdown
filename: default-path/to/{{filename}}.md
title: "{{variable}} Document Title"
workflow:
mode: interactive
elicitation: advanced-elicitation
sections:
- id: section-id
title: Section Title
instruction: |
Detailed instructions for the LLM on how to handle this section
# ... additional section properties
```
## Core Fields
### Template Metadata
- **id**: Unique identifier for the template
- **name**: Human-readable name displayed in UI
- **version**: Template version for tracking changes
- **output.format**: Default "markdown" for document templates
- **output.filename**: Default output file path (can include variables)
- **output.title**: Document title (becomes H1 in markdown)
### Workflow Configuration
- **workflow.mode**: Default interaction mode ("interactive" or "yolo")
- **workflow.elicitation**: Elicitation task to use ("advanced-elicitation")
## Section Properties
### Required Fields
- **id**: Unique section identifier
- **title**: Section heading text
- **instruction**: Detailed guidance for LLM on handling this section
### Optional Fields
#### Content Control
- **type**: Content type hint for structured sections
- **template**: Fixed template text for section content
- **item_template**: Template for repeatable items within section
- **prefix**: Prefix for numbered items (e.g., "FR", "NFR")
#### Behavior Flags
- **elicit**: Boolean - Apply elicitation after section rendered
- **repeatable**: Boolean - Section can be repeated multiple times
- **condition**: String - Condition for including section (e.g., "has ui requirements")
When converting from markdown+frontmatter templates:
1. Extract embedded `[[LLM:]]` instructions to `instruction` fields
2. Convert `<<REPEAT>>` blocks to `repeatable: true` sections
3. Extract `^^CONDITIONS^^` to `condition` fields
4. Move `@{examples}` to `examples` arrays
5. Convert `{{placeholders}}` to proper variable syntax
This specification ensures templates are both human-readable and machine-processable while maintaining the flexibility needed for complex document generation.