7.3 KiB
BMAD Agent Validation Checklist
Use this checklist to validate agents meet BMAD quality standards, whether creating new agents or editing existing ones.
YAML Structure Validation (Source Files)
- YAML parses without errors
agent.metadataincludes:id,name,title,iconagent.metadata.modulepresent if Module agent (e.g.,bmm,bmgd,cis)agent.personaexists with role, identity, communication_style, principlesagent.menuexists with at least one item- Filename is kebab-case and ends with
.agent.yaml
Agent Structure Validation
- Agent file format is valid (.agent.yaml for source)
- Agent type matches structure: Simple (single YAML), Expert (sidecar files), or Module (ecosystem integration)
- File naming follows convention:
{agent-name}.agent.yaml - If Expert: folder structure with .agent.yaml + sidecar files
- If Module: includes header comment explaining WHY Module Agent (design intent)
Persona Validation (CRITICAL - #1 Quality Issue)
Field Separation Check:
- role contains ONLY knowledge/skills/capabilities (what agent does)
- identity contains ONLY background/experience/context (who agent is)
- communication_style contains ONLY verbal patterns - NO behaviors, NO role statements, NO principles
- principles contains operating philosophy and behavioral guidelines
Communication Style Purity Check:
- Communication style does NOT contain red flag words: "ensures", "makes sure", "always", "never"
- Communication style does NOT contain identity words: "experienced", "expert who", "senior", "seasoned"
- Communication style does NOT contain philosophy words: "believes in", "focused on", "committed to"
- Communication style does NOT contain behavioral descriptions: "who does X", "that does Y"
- Communication style is 1-2 sentences describing HOW they talk (word choice, quirks, verbal patterns)
Quality Benchmarking:
- Compare communication style against {communication_presets} - similarly pure?
- Compare against reference agents (commit-poet, journal-keeper, BMM agents) - similar quality?
- Read communication style aloud - does it sound like describing someone's voice/speech pattern?
Menu Validation
- All menu items have
triggerfield - Triggers do NOT start with
*in YAML (auto-prefixed during compilation) - Each item has
descriptionfield - Each menu item has at least one handler attribute:
workflow,exec,tmpl,data, oraction - Workflow paths are correct (if workflow attribute present)
- Workflow paths use
{project-root}variable for portability - Sidecar file paths are correct (if tmpl or data attributes present - Expert agents)
- No duplicate triggers within same agent
- Menu items are in logical order
Prompts Validation (if present)
- Each prompt has
idfield - Each prompt has
contentfield - Prompt IDs are unique within agent
- If using
action="#prompt-id"in menu, corresponding prompt exists
Critical Actions Validation (if present)
- Critical actions array contains non-empty strings
- Critical actions describe steps that MUST happen during activation
- No placeholder text in critical actions
Type-Specific Validation
Simple Agent (Self-Contained)
- Single .agent.yaml file with complete agent definition
- No sidecar files (all content in YAML)
- Not capability-limited - can be as powerful as Expert or Module
- Compare against reference: commit-poet.agent.yaml
Expert Agent (With Sidecar Files)
- Folder structure: .agent.yaml + sidecar files
- Sidecar files properly referenced in menu items or prompts (tmpl="path", data="path")
- Folder name matches agent purpose
- All sidecar references in YAML resolve to actual files
- All sidecar files are actually used (no orphaned/unused files, unless intentional for future use)
- Sidecar files are valid format (YAML parses, CSV has headers, markdown is well-formed)
- Sidecar file paths use relative paths from agent folder
- Templates contain valid template variables if applicable
- Knowledge base files contain current/accurate information
- Compare against reference: journal-keeper (Expert example)
Module Agent (Ecosystem Integration)
- Designed FOR specific module (BMM, BMGD, CIS, etc.)
- Integrates with module workflows (referenced in menu items)
- Coordinates with other module agents (if applicable)
- Included in module's default bundle (if applicable)
- Header comment explains WHY Module Agent (design intent, not just location)
- Can be Simple OR Expert structurally (Module is about intent, not structure)
- Compare against references: security-engineer, dev, analyst (Module examples)
Compilation Validation (Post-Build)
- Agent compiles without errors to .md format
- Compiled file has proper frontmatter (name, description)
- Compiled XML structure is valid
<agent>tag has id, name, title, icon attributes<activation>section is present with proper steps<persona>section compiled correctly<menu>section includes both user items AND auto-injected *help/*exit- Menu handlers section included (if menu items use workflow/exec/tmpl/data/action)
Quality Checks
- No placeholder text remains ({{AGENT_NAME}}, {ROLE}, TODO, etc.)
- No broken references or missing files
- Syntax is valid (YAML source, XML compiled)
- Indentation is consistent
- Agent purpose is clear from reading persona alone
- Agent name/title are descriptive and clear
- Icon emoji is appropriate and represents agent purpose
Reference Standards
Your agent should meet these quality standards:
✓ Persona fields properly separated (communication_style is pure verbal patterns) ✓ Agent type matches structure (Simple/Expert/Module) ✓ All workflow/sidecar paths resolve correctly ✓ Menu structure is clear and logical ✓ No legacy terminology (full/hybrid/standalone) ✓ Comparable quality to reference agents (commit-poet, journal-keeper, BMM agents) ✓ Communication style has ZERO red flag words ✓ Compiles cleanly to XML without errors
Common Issues and Fixes
Issue: Communication Style Has Behaviors
Problem: "Experienced analyst who ensures all stakeholders are heard" Fix: Extract to proper fields:
- identity: "Senior analyst with 8+ years..."
- communication_style: "Treats analysis like a treasure hunt"
- principles: "Ensure all stakeholder voices heard"
Issue: Broken Sidecar References (Expert agents)
Problem: Menu item references tmpl="templates/daily.md" but file doesn't exist
Fix: Either create the file or fix the path to point to actual file
Issue: Using Legacy Type Names
Problem: Comments refer to "full agent" or "hybrid agent" Fix: Update to Simple/Expert/Module terminology
Issue: Menu Triggers Start With Asterisk
Problem: trigger: "*create" in YAML
Fix: Remove asterisk - compiler auto-adds it: trigger: "create"