mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-28 02:23:53 +02:00
175 lines
5.6 KiB
Markdown
175 lines
5.6 KiB
Markdown
|
|
# Expert Agent Validation Checklist
|
||
|
|
|
||
|
|
Validate Expert agents meet BMAD quality standards.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## YAML Structure
|
||
|
|
|
||
|
|
- [ ] YAML parses without errors
|
||
|
|
- [ ] `agent.metadata` includes: `id`, `name`, `title`, `icon`, `module`, `hasSidecar`
|
||
|
|
- [ ] `agent.metadata.hasSidecar` is `true` (Expert agents have sidecars)
|
||
|
|
- [ ] `agent.metadata.module` is `stand-alone` or module code (`bmm`, `cis`, `bmgd`, etc.)
|
||
|
|
- [ ] `agent.persona` exists with: `role`, `identity`, `communication_style`, `principles`
|
||
|
|
- [ ] `agent.critical_actions` exists (MANDATORY for Expert)
|
||
|
|
- [ ] `agent.menu` exists with at least one item
|
||
|
|
- [ ] File named: `{agent-name}.agent.yaml` (lowercase, hyphenated)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Persona Validation
|
||
|
|
|
||
|
|
### Field Separation
|
||
|
|
|
||
|
|
- [ ] **role** contains ONLY knowledge/skills/capabilities (what agent does)
|
||
|
|
- [ ] **identity** contains ONLY background/experience/context (who agent is)
|
||
|
|
- [ ] **communication_style** contains ONLY verbal patterns (tone, voice, mannerisms)
|
||
|
|
- [ ] **communication_style** includes memory reference patterns ("Last time you mentioned...")
|
||
|
|
- [ ] **principles** contains operating philosophy and behavioral guidelines
|
||
|
|
|
||
|
|
### Communication Style Purity
|
||
|
|
|
||
|
|
- [ ] Does NOT contain: "ensures", "makes sure", "always", "never"
|
||
|
|
- [ ] Does NOT contain identity words: "experienced", "expert who", "senior", "seasoned"
|
||
|
|
- [ ] Does NOT contain philosophy words: "believes in", "focused on", "committed to"
|
||
|
|
- [ ] Does NOT contain behavioral descriptions: "who does X", "that does Y"
|
||
|
|
- [ ] Is 1-2 sentences describing HOW they talk
|
||
|
|
- [ ] Reading aloud: sounds like describing someone's voice/speech pattern
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## critical_actions Validation (MANDATORY)
|
||
|
|
|
||
|
|
- [ ] `critical_actions` section exists
|
||
|
|
- [ ] Contains at minimum 3 actions
|
||
|
|
- [ ] **Loads sidecar memories:** `{project-root}/_bmad/_memory/{sidecar-folder}/memories.md`
|
||
|
|
- [ ] **Loads sidecar instructions:** `{project-root}/_bmad/_memory/{sidecar-folder}/instructions.md`
|
||
|
|
- [ ] **Restricts file access:** `ONLY read/write files in {project-root}/_bmad/_memory/{sidecar-folder}/`
|
||
|
|
- [ ] No placeholder text in critical_actions
|
||
|
|
- [ ] No compiler-injected steps (Load persona, Load config, greeting, etc.)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Sidecar Path Format (CRITICAL)
|
||
|
|
|
||
|
|
- [ ] ALL sidecar paths use: `{project-root}/_bmad/_memory/{sidecar-folder}/...`
|
||
|
|
- [ ] `{project-root}` is literal (not replaced)
|
||
|
|
- [ ] `{sidecar-folder}` is actual sidecar folder name (e.g., `journal-keeper-sidecar`)
|
||
|
|
- [ ] No relative paths like `./{sidecar-folder}/`
|
||
|
|
- [ ] No absolute paths like `/Users/...`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Menu Validation
|
||
|
|
|
||
|
|
### Required Fields
|
||
|
|
|
||
|
|
- [ ] All menu items have `trigger` field
|
||
|
|
- [ ] All menu items have `description` field
|
||
|
|
- [ ] All menu items have handler: `action` or `exec` (if module agent)
|
||
|
|
|
||
|
|
### Trigger Format
|
||
|
|
|
||
|
|
- [ ] Format: `XX or fuzzy match on command-name` (XX = 2-letter code)
|
||
|
|
- [ ] Codes are unique within agent
|
||
|
|
- [ ] No reserved codes used: MH, CH, PM, DA (auto-injected)
|
||
|
|
|
||
|
|
### Description Format
|
||
|
|
|
||
|
|
- [ ] Descriptions start with `[XX]` code
|
||
|
|
- [ ] Code in description matches trigger code
|
||
|
|
- [ ] Descriptions are clear and descriptive
|
||
|
|
|
||
|
|
### Action Handlers
|
||
|
|
|
||
|
|
- [ ] If `action: '#prompt-id'`, corresponding prompt exists
|
||
|
|
- [ ] If action references sidecar file, uses correct path format
|
||
|
|
- [ ] Sidecar update actions are clear and complete
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Prompts Validation (if present)
|
||
|
|
|
||
|
|
- [ ] Each prompt has `id` field
|
||
|
|
- [ ] Each prompt has `content` field
|
||
|
|
- [ ] Prompt IDs are unique within agent
|
||
|
|
- [ ] Prompts reference memories naturally when appropriate
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Sidecar Folder Validation
|
||
|
|
|
||
|
|
### Structure
|
||
|
|
|
||
|
|
- [ ] Sidecar folder exists: `{agent-name}-sidecar/`
|
||
|
|
- [ ] Folder name matches agent name
|
||
|
|
- [ ] `instructions.md` exists (recommended)
|
||
|
|
- [ ] `memories.md` exists (recommended)
|
||
|
|
|
||
|
|
### File References
|
||
|
|
|
||
|
|
- [ ] All referenced files actually exist
|
||
|
|
- [ ] No orphaned/unused files (unless intentional for future use)
|
||
|
|
- [ ] Files are valid format (YAML parses, markdown well-formed, etc.)
|
||
|
|
|
||
|
|
### Path Consistency
|
||
|
|
|
||
|
|
- [ ] All YAML references use correct path format
|
||
|
|
- [ ] References between sidecar files (if any) use relative paths
|
||
|
|
- [ ] References from agent YAML to sidecar use `{project-root}/_bmad/_memory/` format
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Expert Agent Specific
|
||
|
|
|
||
|
|
- [ ] Has sidecar folder with supporting files
|
||
|
|
- [ ] Sidecar content is fully customizable (not limited to templates)
|
||
|
|
- [ ] Memory patterns integrated into persona and prompts
|
||
|
|
- [ ] Domain restrictions enforced via critical_actions
|
||
|
|
- [ ] Compare with reference: `journal-keeper.agent.yaml`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Quality Checks
|
||
|
|
|
||
|
|
- [ ] No broken references or missing files
|
||
|
|
- [ ] Indentation is consistent
|
||
|
|
- [ ] Agent purpose is clear from reading persona
|
||
|
|
- [ ] Agent name/title are descriptive
|
||
|
|
- [ ] Icon emoji is appropriate
|
||
|
|
- [ ] Memory reference patterns feel natural
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## What the Compiler Adds (DO NOT validate presence)
|
||
|
|
|
||
|
|
These are auto-injected, don't validate for them:
|
||
|
|
- Frontmatter (`---name/description---`)
|
||
|
|
- XML activation block (your critical_actions become numbered steps)
|
||
|
|
- Menu items: MH (menu/help), CH (chat), PM (party-mode), DA (dismiss/exit)
|
||
|
|
- Rules section
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Common Issues
|
||
|
|
|
||
|
|
### Issue: Wrong Sidecar Path Format
|
||
|
|
|
||
|
|
**Wrong:** `./journal-keeper-sidecar/memories.md`
|
||
|
|
|
||
|
|
**Fix:** `{project-root}/_bmad/_memory/journal-keeper-sidecar/memories.md`
|
||
|
|
|
||
|
|
### Issue: Missing critical_actions
|
||
|
|
|
||
|
|
**Fix:** Add at minimum:
|
||
|
|
```yaml
|
||
|
|
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}/'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: Communication Style Missing Memory References
|
||
|
|
|
||
|
|
**Fix:** Add memory reference patterns: "I reference past naturally: 'Last time you mentioned...'"
|