mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-29 16:14:59 +00:00
302 lines
6.2 KiB
Markdown
302 lines
6.2 KiB
Markdown
|
|
# Agent Compilation: YAML to XML
|
||
|
|
|
||
|
|
What the compiler auto-injects. **DO NOT duplicate these in your YAML.**
|
||
|
|
|
||
|
|
## Compilation Pipeline
|
||
|
|
|
||
|
|
```
|
||
|
|
agent.yaml → Handlebars processing → XML generation → frontmatter.md
|
||
|
|
```
|
||
|
|
|
||
|
|
Source: `tools/cli/lib/agent/compiler.js`
|
||
|
|
|
||
|
|
## Auto-Injected Components
|
||
|
|
|
||
|
|
### 1. Frontmatter
|
||
|
|
|
||
|
|
**Injected automatically:**
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
---
|
||
|
|
name: '{agent name from filename}'
|
||
|
|
description: '{title from metadata}'
|
||
|
|
---
|
||
|
|
You must fully embody this agent's persona...
|
||
|
|
```
|
||
|
|
|
||
|
|
**DO NOT add** frontmatter to your YAML source.
|
||
|
|
|
||
|
|
### 2. Activation Block
|
||
|
|
|
||
|
|
**Entire activation section is auto-generated:**
|
||
|
|
|
||
|
|
```xml
|
||
|
|
<activation critical="MANDATORY">
|
||
|
|
<step n="1">Load persona from this current agent file</step>
|
||
|
|
<step n="2">Load config to get {user_name}, {communication_language}</step>
|
||
|
|
<step n="3">Remember: user's name is {user_name}</step>
|
||
|
|
|
||
|
|
<!-- YOUR critical_actions inserted here as numbered steps -->
|
||
|
|
|
||
|
|
<step n="N">ALWAYS communicate in {communication_language}</step>
|
||
|
|
<step n="N+1">Show greeting + numbered menu</step>
|
||
|
|
<step n="N+2">STOP and WAIT for user input</step>
|
||
|
|
<step n="N+3">Input resolution rules</step>
|
||
|
|
|
||
|
|
<menu-handlers>
|
||
|
|
<!-- Only handlers used in YOUR menu are included -->
|
||
|
|
</menu-handlers>
|
||
|
|
|
||
|
|
<rules>
|
||
|
|
<!-- Standard agent behavior rules -->
|
||
|
|
</rules>
|
||
|
|
</activation>
|
||
|
|
```
|
||
|
|
|
||
|
|
**DO NOT create** activation sections - compiler builds it from your critical_actions.
|
||
|
|
|
||
|
|
### 3. Menu Enhancements
|
||
|
|
|
||
|
|
**Auto-injected menu items:**
|
||
|
|
|
||
|
|
- `*help` - Always FIRST in compiled menu
|
||
|
|
- `*exit` - Always LAST in compiled menu
|
||
|
|
|
||
|
|
**Trigger prefixing:**
|
||
|
|
|
||
|
|
- Your trigger `analyze` becomes `*analyze`
|
||
|
|
- Don't add `*` prefix - compiler does it
|
||
|
|
|
||
|
|
**DO NOT include:**
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - these are auto-injected
|
||
|
|
menu:
|
||
|
|
- trigger: help
|
||
|
|
description: 'Show help'
|
||
|
|
- trigger: exit
|
||
|
|
description: 'Exit'
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Menu Handlers
|
||
|
|
|
||
|
|
Compiler detects which handlers you use and ONLY includes those:
|
||
|
|
|
||
|
|
```xml
|
||
|
|
<menu-handlers>
|
||
|
|
<handlers>
|
||
|
|
<!-- Only if you use action="#id" or action="text" -->
|
||
|
|
<handler type="action">...</handler>
|
||
|
|
|
||
|
|
<!-- Only if you use workflow="path" -->
|
||
|
|
<handler type="workflow">...</handler>
|
||
|
|
|
||
|
|
<!-- Only if you use exec="path" -->
|
||
|
|
<handler type="exec">...</handler>
|
||
|
|
|
||
|
|
<!-- Only if you use tmpl="path" -->
|
||
|
|
<handler type="tmpl">...</handler>
|
||
|
|
</handlers>
|
||
|
|
</menu-handlers>
|
||
|
|
```
|
||
|
|
|
||
|
|
**DO NOT document** handler behavior - it's injected.
|
||
|
|
|
||
|
|
### 5. Rules Section
|
||
|
|
|
||
|
|
**Auto-injected rules:**
|
||
|
|
|
||
|
|
- Always communicate in {communication_language}
|
||
|
|
- Stay in character until exit
|
||
|
|
- Menu triggers use asterisk (\*) - NOT markdown
|
||
|
|
- Number all lists, use letters for sub-options
|
||
|
|
- Load files ONLY when executing menu items
|
||
|
|
- Written output follows communication style
|
||
|
|
|
||
|
|
**DO NOT add** rules - compiler handles it.
|
||
|
|
|
||
|
|
## What YOU Provide in YAML
|
||
|
|
|
||
|
|
### Required
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
agent:
|
||
|
|
metadata:
|
||
|
|
name: 'Persona Name'
|
||
|
|
title: 'Agent Title'
|
||
|
|
icon: 'emoji'
|
||
|
|
type: 'simple|expert' # or module: "bmm"
|
||
|
|
|
||
|
|
persona:
|
||
|
|
role: '...'
|
||
|
|
identity: '...'
|
||
|
|
communication_style: '...'
|
||
|
|
principles: [...]
|
||
|
|
|
||
|
|
menu:
|
||
|
|
- trigger: your-action
|
||
|
|
action: '#prompt-id'
|
||
|
|
description: 'What it does'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Optional (based on type)
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# Expert agents only
|
||
|
|
critical_actions:
|
||
|
|
- 'Load sidecar files...'
|
||
|
|
- 'Restrict access...'
|
||
|
|
|
||
|
|
# Simple/Expert with embedded logic
|
||
|
|
prompts:
|
||
|
|
- id: prompt-id
|
||
|
|
content: '...'
|
||
|
|
|
||
|
|
# Simple/Expert with customization
|
||
|
|
install_config:
|
||
|
|
questions: [...]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Common Duplication Mistakes
|
||
|
|
|
||
|
|
### Adding Activation Logic
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - compiler builds activation
|
||
|
|
agent:
|
||
|
|
activation:
|
||
|
|
steps: [...]
|
||
|
|
```
|
||
|
|
|
||
|
|
### Including Help/Exit
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - auto-injected
|
||
|
|
menu:
|
||
|
|
- trigger: help
|
||
|
|
- trigger: exit
|
||
|
|
```
|
||
|
|
|
||
|
|
### Prefixing Triggers
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - compiler adds *
|
||
|
|
menu:
|
||
|
|
- trigger: '*analyze' # Should be: analyze
|
||
|
|
```
|
||
|
|
|
||
|
|
### Documenting Handlers
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - don't explain handlers, compiler injects them
|
||
|
|
# When using workflow, load workflow.xml...
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding Rules in YAML
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# BAD - rules are auto-injected
|
||
|
|
agent:
|
||
|
|
rules:
|
||
|
|
- Stay in character...
|
||
|
|
```
|
||
|
|
|
||
|
|
## Compilation Example
|
||
|
|
|
||
|
|
**Your YAML:**
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
agent:
|
||
|
|
metadata:
|
||
|
|
name: 'Rex'
|
||
|
|
title: 'Code Reviewer'
|
||
|
|
icon: '🔍'
|
||
|
|
type: simple
|
||
|
|
|
||
|
|
persona:
|
||
|
|
role: Code Review Expert
|
||
|
|
identity: Systematic reviewer...
|
||
|
|
communication_style: Direct and constructive
|
||
|
|
principles:
|
||
|
|
- Code should be readable
|
||
|
|
|
||
|
|
prompts:
|
||
|
|
- id: review
|
||
|
|
content: |
|
||
|
|
Analyze code for issues...
|
||
|
|
|
||
|
|
menu:
|
||
|
|
- trigger: review
|
||
|
|
action: '#review'
|
||
|
|
description: 'Review code'
|
||
|
|
```
|
||
|
|
|
||
|
|
**Compiled Output (.md):**
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
---
|
||
|
|
name: 'rex'
|
||
|
|
description: 'Code Reviewer'
|
||
|
|
---
|
||
|
|
|
||
|
|
You must fully embody...
|
||
|
|
|
||
|
|
\`\`\`xml
|
||
|
|
<agent id="path" name="Rex" title="Code Reviewer" icon="🔍">
|
||
|
|
<activation critical="MANDATORY">
|
||
|
|
<step n="1">Load persona...</step>
|
||
|
|
<step n="2">Load config...</step>
|
||
|
|
<step n="3">Remember user...</step>
|
||
|
|
<step n="4">Communicate in language...</step>
|
||
|
|
<step n="5">Show greeting + menu...</step>
|
||
|
|
<step n="6">STOP and WAIT...</step>
|
||
|
|
<step n="7">Input resolution...</step>
|
||
|
|
|
||
|
|
<menu-handlers>
|
||
|
|
<handlers>
|
||
|
|
<handler type="action">
|
||
|
|
action="#id" → Find prompt, execute
|
||
|
|
action="text" → Execute directly
|
||
|
|
</handler>
|
||
|
|
</handlers>
|
||
|
|
</menu-handlers>
|
||
|
|
|
||
|
|
<rules>
|
||
|
|
- Stay in character...
|
||
|
|
- Number lists...
|
||
|
|
- Load files when executing...
|
||
|
|
</rules>
|
||
|
|
</activation>
|
||
|
|
<persona>
|
||
|
|
<role>Code Review Expert</role>
|
||
|
|
<identity>Systematic reviewer...</identity>
|
||
|
|
<communication_style>Direct and constructive</communication_style>
|
||
|
|
<principles>Code should be readable</principles>
|
||
|
|
</persona>
|
||
|
|
<prompts>
|
||
|
|
<prompt id="review">
|
||
|
|
<content>
|
||
|
|
Analyze code for issues...
|
||
|
|
</content>
|
||
|
|
</prompt>
|
||
|
|
</prompts>
|
||
|
|
<menu>
|
||
|
|
<item cmd="*help">Show numbered menu</item>
|
||
|
|
<item cmd="*review" action="#review">Review code</item>
|
||
|
|
<item cmd="*exit">Exit with confirmation</item>
|
||
|
|
</menu>
|
||
|
|
</agent>
|
||
|
|
\`\`\`
|
||
|
|
```
|
||
|
|
|
||
|
|
## Key Takeaways
|
||
|
|
|
||
|
|
1. **Compiler handles boilerplate** - Focus on persona and logic
|
||
|
|
2. **Critical_actions become activation steps** - Just list your agent-specific needs
|
||
|
|
3. **Menu items are enhanced** - Help/exit added, triggers prefixed
|
||
|
|
4. **Handlers auto-detected** - Only what you use is included
|
||
|
|
5. **Rules standardized** - Consistent behavior across agents
|
||
|
|
|
||
|
|
**Your job:** Define persona, prompts, menu actions
|
||
|
|
**Compiler's job:** Activation, handlers, rules, help/exit, prefixes
|