Features: - BMAD (Build Modular AI-driven Development) framework setup - BMM, BMB, CIS, Core modules configured - Story 1.1: Component trait with error handling - Workspace Cargo.toml with components crate - 31 tests passing (19 unit + 12 doc tests) Technical: - Component trait with compute_residuals, jacobian_entries, n_equations - ComponentError enum with thiserror - JacobianBuilder for sparse matrix construction - Object-safe trait supporting Box<dyn Component> - Comprehensive documentation and examples
3.7 KiB
3.7 KiB
Agent Validation
Common (All Agents)
YAML Structure
- Parses without errors
metadata:id,name,title,icon,module,hasSidecarhasSidecar:true|falsemodule:stand-alone|bmm|cis|bmgd|...persona:role,identity,communication_style,principlesmenu: ≥1 item- Filename:
{name}.agent.yaml(lowercase, hyphenated)
Persona Fields
| Field | Contains | Does NOT Contain |
|---|---|---|
role |
Knowledge/skills/capabilities | Background, experience, "who" |
identity |
Background/experience/context | Skills, "what" |
communication_style |
Tone/voice/mannerisms (1-2 sentences) | "ensures", "expert", "believes", "who does X" |
principles |
Operating philosophy, behavioral guidelines | Verbal patterns, "how they talk" |
Menu Items
trigger:XX or fuzzy match on command-name(XX = 2-letter code, unique)- No reserved codes:
MH,CH,PM,DA(auto-injected) description: Starts with[XX], code matches triggeraction:#prompt-id(exists) or inline text
Prompts (if present)
- Each has
id,content - IDs unique within agent
- Uses semantic XML:
<instructions>,<process>, etc.
Quality
- No broken references
- Indentation consistent
- Purpose clear from persona
- Name/title descriptive, icon appropriate
hasSidecar: false
Structure
- Single
.agent.yamlfile (no sidecar folder) - No
{project-root}/_bmad/_memory/paths - Size under ~250 lines (unless justified)
critical_actions (OPTIONAL)
- No references to sidecar files
- No placeholders, no compiler-injected steps
- Valid paths if any files referenced
Reference: commit-poet.agent.yaml
hasSidecar: true
Structure
sidecar-folderspecified in metadata- Folder exists:
{name}-sidecar/ - Sidecar contains:
instructions.md,memories.md(recommended)
critical_actions (MANDATORY)
critical_actions:
- 'Load COMPLETE file {project-root}/_bmad/_memory/{sidecar-folder}/memories.md'
- 'Load COMPLETE file {project-root}/_bmad/_memory/{sidecar-folder}/instructions.md'
- 'ONLY read/write files in {project-root}/_bmad/_memory/{sidecar-folder}/'
- Exists with ≥3 actions
- Loads memories, loads instructions, restricts file access
- No placeholders, no compiler-injected steps
Path Format (CRITICAL)
- ALL sidecar paths:
{project-root}/_bmad/_memory/{sidecar-folder}/... {project-root}is literal (not replaced){sidecar-folder}= actual folder name- No
./or/Users/paths
Persona Addition
communication_styleincludes memory reference patterns- Natural: "Last time you mentioned..." or "I've noticed patterns..."
Menu Actions
- Sidecar references use correct path format
- Update actions are complete
Reference: journal-keeper/
Compiler-Injected (Skip Validation)
- Frontmatter (
---name/description---) - XML activation block
- Menu items:
MH,CH,PM,DA - Rules section
Common Fixes
| Issue | Fix |
|---|---|
Behaviors in communication_style |
Move to identity or principles |
trigger: analyze |
trigger: AN or fuzzy match on analyze |
description: 'Analyze code' |
description: '[AC] Analyze code' |
./sidecar/memories.md |
{project-root}/_bmad/_memory/sidecar/memories.md |
Missing critical_actions (hasSidecar: true) |
Add load memories, load instructions, restrict access |
| No memory references (hasSidecar: true) | Add to communication_style: "Last time you mentioned..." |