All 6 success criteria now marked as complete. Co-authored-by: Atlas orchestrator <atlas@opencode.dev>
32 KiB
Chiron Personal Agent Framework
TL;DR
Quick Summary: Create an Oh-My-Opencode-style agent framework for personal productivity with Chiron as the orchestrator, 4 specialized subagents (Hermes, Athena, Apollo, Calliope), and 5 tool integration skills (Basecamp, Outline, MS Teams, Outlook, Obsidian).
Deliverables:
- 6 agent definitions in
agents.json- 6 system prompt files in
prompts/- 5 tool integration skills in
skills/- Validation script extension in
scripts/Estimated Effort: Medium Parallel Execution: YES - 3 waves Critical Path: Task 1 (agents.json) → Task 3-7 (prompts) → Task 9-13 (skills) → Task 14 (validation)
Context
Original Request
Create an agent framework similar to Oh-My-Opencode but focused on personal productivity:
- Manage work tasks, appointments, projects via Basecamp, Outline, MS Teams, Outlook
- Manage private tasks and knowledge via Obsidian
- Greek mythology naming convention (avoiding Oh My OpenCode names)
- Main agent named "Chiron"
Interview Summary
Key Discussions:
- Chiron's Role: Main orchestrator that delegates to specialized subagents
- Agent Count: Minimal (3-4 agents initially) + 2 primary agents
- Domain Separation: Separate work vs private agents with clear boundaries
- Tool Priority: All 4 work tools + Obsidian equally important
- Basecamp MCP: User confirmed working MCP at georgeantonopoulos/Basecamp-MCP-Server
Research Findings:
- Oh My OpenCode names to avoid: Sisyphus, Atlas, Prometheus, Hephaestus, Metis, Momus, Oracle, Librarian, Explore, Multimodal-Looker, Sisyphus-Junior
- MCP servers available for all work tools + Obsidian
- Protonmail requires custom IMAP/SMTP (deferred)
- Current repo has established skill patterns with SKILL.md + optional subdirectories
Metis Review
Identified Gaps (addressed in plan):
- Delegation model clarified: Chiron uses Question tool for ambiguous requests
- Behavioral difference between Chiron and Chiron-Forge defined
- Executable acceptance criteria added for all tasks
- Edge cases documented in guardrails section
- MCP authentication assumed pre-configured by NixOS (explicit scope boundary)
Work Objectives
Core Objective
Create a personal productivity agent framework following Oh-My-Opencode patterns, enabling AI-assisted management of work and private life through specialized agents that integrate with existing tools.
Concrete Deliverables
agents/agents.json- 6 agent definitions (2 primary, 4 subagent)prompts/chiron.txt- Chiron (plan mode) system promptprompts/chiron-forge.txt- Chiron-Forge (build mode) system promptprompts/hermes.txt- Work communication agent promptprompts/athena.txt- Work knowledge agent promptprompts/apollo.txt- Private knowledge agent promptprompts/calliope.txt- Writing agent promptskills/basecamp/SKILL.md- Basecamp integration skillskills/outline/SKILL.md- Outline wiki integration skillskills/msteams/SKILL.md- MS Teams integration skillskills/outlook/SKILL.md- Outlook email integration skillskills/obsidian/SKILL.md- Obsidian integration skillscripts/validate-agents.sh- Agent validation script
Definition of Done
python3 -c "import json; json.load(open('agents/agents.json'))"→ Exit 0- All 6 prompt files exist and are non-empty
- All 5 skill directories have valid SKILL.md with YAML frontmatter
./scripts/test-skill.sh --validatepasses for new skills./scripts/validate-agents.shpasses
Must Have
- All agents use Question tool for multi-choice decisions
- External prompt files (not inline in JSON)
- Follow existing skill structure patterns
- Greek naming convention for agents
- Clear separation between plan mode (Chiron) and build mode (Chiron-Forge)
- Skills provide tool-specific knowledge that agents load on demand
Must NOT Have (Guardrails)
- NO MCP server configuration - Managed by NixOS, outside this repo
- NO authentication handling - Assume pre-configured MCP tools
- NO cross-agent state sharing - Each agent operates independently
- NO new opencode commands - Use existing command patterns only
- NO generic "I'm an AI assistant" prompts - Domain-specific responsibilities only
- NO Protonmail integration - Deferred to future phase
- NO duplicate tool knowledge across skills - Each skill focuses on ONE tool
- NO scripts outside scripts/ directory
- NO model configuration changes - Keep current
zai-coding-plan/glm-4.7
Verification Strategy (MANDATORY)
UNIVERSAL RULE: ZERO HUMAN INTERVENTION
ALL tasks in this plan MUST be verifiable WITHOUT any human action. This is NOT conditional - it applies to EVERY task, regardless of test strategy.
Test Decision
- Infrastructure exists: YES (test-skill.sh)
- Automated tests: Tests-after (validation scripts)
- Framework: bash + python for validation
Agent-Executed QA Scenarios (MANDATORY - ALL tasks)
Verification Tool by Deliverable Type:
| Type | Tool | How Agent Verifies |
|---|---|---|
| agents.json | Bash (python/jq) | Parse JSON, validate structure, check required fields |
| Prompt files | Bash (file checks) | File exists, non-empty, contains expected sections |
| SKILL.md files | Bash (test-skill.sh) | YAML frontmatter valid, name matches directory |
| Validation scripts | Bash | Script is executable, runs without error, produces expected output |
Execution Strategy
Parallel Execution Waves
Wave 1 (Start Immediately):
├── Task 1: Create agents.json configuration [no dependencies]
└── Task 2: Create prompts/ directory structure [no dependencies]
Wave 2 (After Wave 1):
├── Task 3: Chiron prompt [depends: 2]
├── Task 4: Chiron-Forge prompt [depends: 2]
├── Task 5: Hermes prompt [depends: 2]
├── Task 6: Athena prompt [depends: 2]
├── Task 7: Apollo prompt [depends: 2]
└── Task 8: Calliope prompt [depends: 2]
Wave 3 (Can parallel with Wave 2):
├── Task 9: Basecamp skill [no dependencies]
├── Task 10: Outline skill [no dependencies]
├── Task 11: MS Teams skill [no dependencies]
├── Task 12: Outlook skill [no dependencies]
└── Task 13: Obsidian skill [no dependencies]
Wave 4 (After Wave 2 + 3):
└── Task 14: Validation script [depends: 1, 3-8]
Critical Path: Task 1 → Task 2 → Tasks 3-8 → Task 14
Parallel Speedup: ~50% faster than sequential
Dependency Matrix
| Task | Depends On | Blocks | Can Parallelize With |
|---|---|---|---|
| 1 | None | 14 | 2, 9-13 |
| 2 | None | 3-8 | 1, 9-13 |
| 3-8 | 2 | 14 | Each other, 9-13 |
| 9-13 | None | None | Each other, 1-2 |
| 14 | 1, 3-8 | None | None (final) |
Agent Dispatch Summary
| Wave | Tasks | Recommended Category |
|---|---|---|
| 1 | 1, 2 | quick |
| 2 | 3-8 | quick (parallel) |
| 3 | 9-13 | quick (parallel) |
| 4 | 14 | quick |
TODOs
Wave 1: Foundation
- 1. Create agents.json with 6 agent definitions
What to do:
- Update existing
agents/agents.jsonto add all 6 agents - Each agent needs: description, mode, model, prompt reference
- Primary agents: chiron, chiron-forge
- Subagents: hermes, athena, apollo, calliope
- All agents should have
question: "allow"permission
Must NOT do:
- Do not add MCP server configuration
- Do not change model from current pattern
- Do not add inline prompts (use file references)
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]agent-development: Provides agent configuration patterns and best practices
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 1 (with Task 2)
- Blocks: Task 14
- Blocked By: None
References:
agents/agents.json:1-7- Current chiron agent configuration patternskills/agent-development/SKILL.md:40-76- JSON agent structure referenceskills/agent-development/SKILL.md:226-277- Permissions system referenceskills/agent-development/references/opencode-agents-json-example.md- Complete examples
Acceptance Criteria:
Scenario: agents.json is valid JSON with all 6 agents
Tool: Bash (python)
Steps:
1. python3 -c "import json; data = json.load(open('agents/agents.json')); print(len(data))"
2. Assert: Output is "6"
3. python3 -c "import json; data = json.load(open('agents/agents.json')); print(sorted(data.keys()))"
4. Assert: Output contains ['apollo', 'athena', 'calliope', 'chiron', 'chiron-forge', 'hermes']
Expected Result: JSON parses, all 6 agents present
Evidence: Command output captured
Scenario: Each agent has required fields
Tool: Bash (python)
Steps:
1. python3 -c "
import json
data = json.load(open('agents/agents.json'))
for name, agent in data.items():
assert 'description' in agent, f'{name}: missing description'
assert 'mode' in agent, f'{name}: missing mode'
assert 'prompt' in agent, f'{name}: missing prompt'
print('All agents valid')
"
2. Assert: Output is "All agents valid"
Expected Result: All required fields present
Evidence: Validation output captured
Scenario: Primary agents have correct mode
Tool: Bash (python)
Steps:
1. python3 -c "
import json
data = json.load(open('agents/agents.json'))
assert data['chiron']['mode'] == 'primary'
assert data['chiron-forge']['mode'] == 'primary'
print('Primary modes correct')
"
Expected Result: Both primary agents have mode=primary
Evidence: Command output
Scenario: Subagents have correct mode
Tool: Bash (python)
Steps:
1. python3 -c "
import json
data = json.load(open('agents/agents.json'))
for name in ['hermes', 'athena', 'apollo', 'calliope']:
assert data[name]['mode'] == 'subagent', f'{name}: wrong mode'
print('Subagent modes correct')
"
Expected Result: All subagents have mode=subagent
Evidence: Command output
Commit: YES
- Message:
feat(agents): add chiron agent framework with 6 agents - Files:
agents/agents.json - Pre-commit:
python3 -c "import json; json.load(open('agents/agents.json'))"
- 2. Create prompts directory structure
What to do:
- Create
prompts/directory if not exists - Directory will hold all agent system prompt files
Must NOT do:
- Do not create prompt files yet (done in Wave 2)
Recommended Agent Profile:
- Category:
quick - Skills: []
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 1 (with Task 1)
- Blocks: Tasks 3-8
- Blocked By: None
References:
skills/agent-development/SKILL.md:148-159- Prompt file conventions
Acceptance Criteria:
Scenario: prompts directory exists
Tool: Bash
Steps:
1. test -d prompts && echo "exists" || echo "missing"
2. Assert: Output is "exists"
Expected Result: Directory created
Evidence: Command output
Commit: NO (groups with Task 1)
Wave 2: Agent Prompts
- 3. Create Chiron (Plan Mode) system prompt
What to do:
- Create
prompts/chiron.txt - Define Chiron as the main orchestrator in plan/analysis mode
- Include delegation logic to subagents (Hermes, Athena, Apollo, Calliope)
- Include Question tool usage for ambiguous requests
- Focus on: planning, analysis, guidance, delegation
- Permissions: read-only, no file modifications
Must NOT do:
- Do not allow write/edit operations
- Do not include execution responsibilities
- Do not overlap with Chiron-Forge's build capabilities
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]agent-development: System prompt design patterns
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2 (with Tasks 4-8)
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:349-386- System prompt design patternsskills/agent-development/SKILL.md:397-415- Prompt best practicesskills/agent-development/references/system-prompt-design.md- Detailed prompt patterns
Acceptance Criteria:
Scenario: Chiron prompt file exists and is substantial
Tool: Bash
Steps:
1. test -f prompts/chiron.txt && echo "exists" || echo "missing"
2. Assert: Output is "exists"
3. wc -c < prompts/chiron.txt
4. Assert: Output is > 500 (substantial content)
Expected Result: File exists with meaningful content
Evidence: File size captured
Scenario: Chiron prompt contains orchestrator role
Tool: Bash (grep)
Steps:
1. grep -qi "orchestrat" prompts/chiron.txt && echo "found" || echo "missing"
2. Assert: Output is "found"
3. grep -qi "delegat" prompts/chiron.txt && echo "found" || echo "missing"
4. Assert: Output is "found"
Expected Result: Prompt describes orchestration and delegation
Evidence: grep output
Scenario: Chiron prompt references subagents
Tool: Bash (grep)
Steps:
1. grep -qi "hermes" prompts/chiron.txt && echo "found" || echo "missing"
2. grep -qi "athena" prompts/chiron.txt && echo "found" || echo "missing"
3. grep -qi "apollo" prompts/chiron.txt && echo "found" || echo "missing"
4. grep -qi "calliope" prompts/chiron.txt && echo "found" || echo "missing"
Expected Result: All 4 subagents mentioned
Evidence: grep outputs
Commit: YES (group with Tasks 4-8)
- Message:
feat(prompts): add chiron and subagent system prompts - Files:
prompts/*.txt - Pre-commit:
for f in prompts/*.txt; do test -s "$f" || exit 1; done
- 4. Create Chiron-Forge (Build Mode) system prompt
What to do:
- Create
prompts/chiron-forge.txt - Define as Chiron's execution/build counterpart
- Full write access for task execution
- Can modify files, run commands, complete tasks
- Still delegates to subagents for specialized domains
- Uses Question tool for destructive operations confirmation
Must NOT do:
- Do not make it a planning-only agent (that's Chiron)
- Do not allow destructive operations without confirmation
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2 (with Tasks 3, 5-8)
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:316-346- Complete agent example with chiron/chiron-forge patternskills/agent-development/SKILL.md:253-277- Permission patterns for bash commands
Acceptance Criteria:
Scenario: Chiron-Forge prompt file exists
Tool: Bash
Steps:
1. test -f prompts/chiron-forge.txt && wc -c < prompts/chiron-forge.txt
2. Assert: Output > 500
Expected Result: File exists with substantial content
Evidence: File size
Scenario: Chiron-Forge prompt emphasizes execution
Tool: Bash (grep)
Steps:
1. grep -qi "execut" prompts/chiron-forge.txt && echo "found" || echo "missing"
2. grep -qi "build" prompts/chiron-forge.txt && echo "found" || echo "missing"
Expected Result: Execution/build terminology present
Evidence: grep output
Commit: YES (groups with Task 3)
- 5. Create Hermes (Work Communication) system prompt
What to do:
- Create
prompts/hermes.txt - Specialization: Basecamp tasks, Outlook email, MS Teams meetings
- Greek god of communication, messengers, quick tasks
- Uses Question tool for: which tool to use, clarifying recipients
- Focus on: task updates, email drafting, meeting scheduling
Must NOT do:
- Do not handle documentation (Athena's domain)
- Do not handle personal/private tools (Apollo's domain)
- Do not write long-form content (Calliope's domain)
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:349-378- Standard prompt structure
Acceptance Criteria:
Scenario: Hermes prompt defines communication domain
Tool: Bash (grep)
Steps:
1. grep -qi "basecamp" prompts/hermes.txt && echo "found" || echo "missing"
2. grep -qi "outlook\|email" prompts/hermes.txt && echo "found" || echo "missing"
3. grep -qi "teams\|meeting" prompts/hermes.txt && echo "found" || echo "missing"
Expected Result: All 3 tools mentioned
Evidence: grep outputs
Commit: YES (groups with Task 3)
- 6. Create Athena (Work Knowledge) system prompt
What to do:
- Create
prompts/athena.txt - Specialization: Outline wiki, documentation, knowledge organization
- Greek goddess of wisdom and strategic warfare
- Focus on: wiki search, knowledge retrieval, documentation updates
- Uses Question tool for: which document to update, clarifying search scope
Must NOT do:
- Do not handle communication (Hermes's domain)
- Do not handle private knowledge (Apollo's domain)
- Do not write creative content (Calliope's domain)
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:349-378- Standard prompt structure
Acceptance Criteria:
Scenario: Athena prompt defines knowledge domain
Tool: Bash (grep)
Steps:
1. grep -qi "outline" prompts/athena.txt && echo "found" || echo "missing"
2. grep -qi "wiki\|knowledge" prompts/athena.txt && echo "found" || echo "missing"
3. grep -qi "document" prompts/athena.txt && echo "found" || echo "missing"
Expected Result: Outline and knowledge terms present
Evidence: grep outputs
Commit: YES (groups with Task 3)
- 7. Create Apollo (Private Knowledge) system prompt
What to do:
- Create
prompts/apollo.txt - Specialization: Obsidian vault, personal notes, private knowledge graph
- Greek god of knowledge, prophecy, and light
- Focus on: note search, personal task management, knowledge retrieval
- Uses Question tool for: clarifying which vault, which note
Must NOT do:
- Do not handle work tools (Hermes/Athena's domain)
- Do not expose personal data to work contexts
- Do not write long-form content (Calliope's domain)
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:349-378- Standard prompt structure
Acceptance Criteria:
Scenario: Apollo prompt defines private knowledge domain
Tool: Bash (grep)
Steps:
1. grep -qi "obsidian" prompts/apollo.txt && echo "found" || echo "missing"
2. grep -qi "personal\|private" prompts/apollo.txt && echo "found" || echo "missing"
3. grep -qi "note\|vault" prompts/apollo.txt && echo "found" || echo "missing"
Expected Result: Obsidian and personal knowledge terms present
Evidence: grep outputs
Commit: YES (groups with Task 3)
- 8. Create Calliope (Writing) system prompt
What to do:
- Create
prompts/calliope.txt - Specialization: documentation writing, reports, meeting notes, prose
- Greek muse of epic poetry and eloquence
- Focus on: drafting documents, summarizing, writing assistance
- Uses Question tool for: clarifying tone, audience, format
Must NOT do:
- Do not manage tools directly (delegates to other agents for tool access)
- Do not handle short communication (Hermes's domain)
- Do not overlap with Athena's wiki management
Recommended Agent Profile:
- Category:
quick - Skills: [
agent-development]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2
- Blocks: Task 14
- Blocked By: Task 2
References:
skills/agent-development/SKILL.md:349-378- Standard prompt structure
Acceptance Criteria:
Scenario: Calliope prompt defines writing domain
Tool: Bash (grep)
Steps:
1. grep -qi "writ" prompts/calliope.txt && echo "found" || echo "missing"
2. grep -qi "document" prompts/calliope.txt && echo "found" || echo "missing"
3. grep -qi "report\|summar" prompts/calliope.txt && echo "found" || echo "missing"
Expected Result: Writing and documentation terms present
Evidence: grep outputs
Commit: YES (groups with Task 3)
Wave 3: Tool Integration Skills
- 9. Create Basecamp integration skill
What to do:
- Create
skills/basecamp/SKILL.md - Document Basecamp MCP capabilities (63 tools from georgeantonopoulos/Basecamp-MCP-Server)
- Include: projects, todos, messages, card tables, campfire, webhooks
- Provide workflow examples for common operations
- Reference MCP tool names for agent use
Must NOT do:
- Do not include MCP server setup instructions (managed by Nix)
- Do not duplicate general project management advice
- Do not include authentication handling
Recommended Agent Profile:
- Category:
quick - Skills: [
skill-creator]skill-creator: Provides skill structure patterns and validation
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3 (with Tasks 10-13)
- Blocks: None
- Blocked By: None
References:
skills/skill-creator/SKILL.md- Skill creation patternsskills/brainstorming/SKILL.md- Example skill structure- https://github.com/georgeantonopoulos/Basecamp-MCP-Server - MCP tool documentation
Acceptance Criteria:
Scenario: Basecamp skill has valid structure
Tool: Bash
Steps:
1. test -d skills/basecamp && echo "dir exists"
2. test -f skills/basecamp/SKILL.md && echo "file exists"
3. ./scripts/test-skill.sh --validate basecamp || echo "validation failed"
Expected Result: Directory and SKILL.md exist, validation passes
Evidence: Command outputs
Scenario: Basecamp skill has valid frontmatter
Tool: Bash (python)
Steps:
1. python3 -c "
import yaml
content = open('skills/basecamp/SKILL.md').read()
front = content.split('---')[1]
data = yaml.safe_load(front)
assert data['name'] == 'basecamp', 'name mismatch'
assert 'description' in data, 'missing description'
print('Valid')
"
Expected Result: YAML frontmatter valid with correct name
Evidence: Python output
Commit: YES
- Message:
feat(skills): add basecamp integration skill - Files:
skills/basecamp/SKILL.md - Pre-commit:
./scripts/test-skill.sh --validate basecamp
- 10. Create Outline wiki integration skill
What to do:
- Create
skills/outline/SKILL.md - Document Outline API capabilities
- Include: document CRUD, search, collections, sharing
- Provide workflow examples for knowledge management
Must NOT do:
- Do not include MCP server setup
- Do not duplicate wiki concepts
Recommended Agent Profile:
- Category:
quick - Skills: [
skill-creator]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3
- Blocks: None
- Blocked By: None
References:
skills/skill-creator/SKILL.md- Skill creation patterns- https://www.getoutline.com/developers - Outline API documentation
Acceptance Criteria:
Scenario: Outline skill has valid structure
Tool: Bash
Steps:
1. test -d skills/outline && test -f skills/outline/SKILL.md && echo "exists"
2. ./scripts/test-skill.sh --validate outline || echo "failed"
Expected Result: Valid skill structure
Evidence: Command output
Commit: YES
- Message:
feat(skills): add outline wiki integration skill - Files:
skills/outline/SKILL.md - Pre-commit:
./scripts/test-skill.sh --validate outline
- 11. Create MS Teams integration skill
What to do:
- Create
skills/msteams/SKILL.md - Document MS Teams Graph API capabilities via MCP
- Include: channels, messages, meetings, chat
- Provide workflow examples for team communication
Must NOT do:
- Do not include Graph API authentication flows
- Do not overlap with Outlook email functionality
Recommended Agent Profile:
- Category:
quick - Skills: [
skill-creator]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3
- Blocks: None
- Blocked By: None
References:
skills/skill-creator/SKILL.md- Skill creation patterns- https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview - Teams API
Acceptance Criteria:
Scenario: MS Teams skill has valid structure
Tool: Bash
Steps:
1. test -d skills/msteams && test -f skills/msteams/SKILL.md && echo "exists"
2. ./scripts/test-skill.sh --validate msteams || echo "failed"
Expected Result: Valid skill structure
Evidence: Command output
Commit: YES
- Message:
feat(skills): add ms teams integration skill - Files:
skills/msteams/SKILL.md - Pre-commit:
./scripts/test-skill.sh --validate msteams
- 12. Create Outlook email integration skill
What to do:
- Create
skills/outlook/SKILL.md - Document Outlook Graph API capabilities via MCP
- Include: mail CRUD, calendar, contacts, folders
- Provide workflow examples for email management
Must NOT do:
- Do not include Graph API authentication
- Do not overlap with Teams functionality
Recommended Agent Profile:
- Category:
quick - Skills: [
skill-creator]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3
- Blocks: None
- Blocked By: None
References:
skills/skill-creator/SKILL.md- Skill creation patterns- https://learn.microsoft.com/en-us/graph/outlook-mail-concept-overview - Outlook API
Acceptance Criteria:
Scenario: Outlook skill has valid structure
Tool: Bash
Steps:
1. test -d skills/outlook && test -f skills/outlook/SKILL.md && echo "exists"
2. ./scripts/test-skill.sh --validate outlook || echo "failed"
Expected Result: Valid skill structure
Evidence: Command output
Commit: YES
- Message:
feat(skills): add outlook email integration skill - Files:
skills/outlook/SKILL.md - Pre-commit:
./scripts/test-skill.sh --validate outlook
- 13. Create Obsidian integration skill
What to do:
- Create
skills/obsidian/SKILL.md - Document Obsidian Local REST API capabilities
- Include: vault operations, note CRUD, search, daily notes
- Reference skills/brainstorming/references/obsidian-workflow.md for patterns
Must NOT do:
- Do not include plugin installation
- Do not duplicate general note-taking advice
Recommended Agent Profile:
- Category:
quick - Skills: [
skill-creator]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3
- Blocks: None
- Blocked By: None
References:
skills/skill-creator/SKILL.md- Skill creation patternsskills/brainstorming/references/obsidian-workflow.md- Existing Obsidian patterns- https://coddingtonbear.github.io/obsidian-local-rest-api/ - Local REST API docs
Acceptance Criteria:
Scenario: Obsidian skill has valid structure
Tool: Bash
Steps:
1. test -d skills/obsidian && test -f skills/obsidian/SKILL.md && echo "exists"
2. ./scripts/test-skill.sh --validate obsidian || echo "failed"
Expected Result: Valid skill structure
Evidence: Command output
Commit: YES
- Message:
feat(skills): add obsidian integration skill - Files:
skills/obsidian/SKILL.md - Pre-commit:
./scripts/test-skill.sh --validate obsidian
Wave 4: Validation
- 14. Create agent validation script
What to do:
- Create
scripts/validate-agents.sh - Validate agents.json structure and required fields
- Verify all referenced prompt files exist
- Check prompt files are non-empty
- Integrate with existing test-skill.sh patterns
Must NOT do:
- Do not require MCP servers for validation
- Do not perform functional agent testing (just structural)
Recommended Agent Profile:
- Category:
quick - Skills: []
Parallelization:
- Can Run In Parallel: NO
- Parallel Group: Sequential (Wave 4)
- Blocks: None
- Blocked By: Tasks 1, 3-8
References:
scripts/test-skill.sh- Existing validation script pattern
Acceptance Criteria:
Scenario: Validation script is executable
Tool: Bash
Steps:
1. test -x scripts/validate-agents.sh && echo "executable" || echo "not executable"
2. Assert: Output is "executable"
Expected Result: Script has execute permission
Evidence: Command output
Scenario: Validation script runs successfully
Tool: Bash
Steps:
1. ./scripts/validate-agents.sh
2. Assert: Exit code is 0
Expected Result: All validations pass
Evidence: Script output
Scenario: Validation script catches missing files
Tool: Bash
Steps:
1. mv prompts/chiron.txt prompts/chiron.txt.bak
2. ./scripts/validate-agents.sh
3. Assert: Exit code is NOT 0
4. mv prompts/chiron.txt.bak prompts/chiron.txt
Expected Result: Script detects missing prompt file
Evidence: Error output
Commit: YES
- Message:
feat(scripts): add agent validation script - Files:
scripts/validate-agents.sh - Pre-commit:
./scripts/validate-agents.sh
Commit Strategy
| After Task | Message | Files | Verification |
|---|---|---|---|
| 1, 2 | feat(agents): add chiron agent framework with 6 agents |
agents/agents.json, prompts/ | python3 -c "import json; json.load(open('agents/agents.json'))" |
| 3-8 | feat(prompts): add chiron and subagent system prompts |
prompts/*.txt | for f in prompts/*.txt; do test -s "$f"; done |
| 9 | feat(skills): add basecamp integration skill |
skills/basecamp/ | ./scripts/test-skill.sh --validate basecamp |
| 10 | feat(skills): add outline wiki integration skill |
skills/outline/ | ./scripts/test-skill.sh --validate outline |
| 11 | feat(skills): add ms teams integration skill |
skills/msteams/ | ./scripts/test-skill.sh --validate msteams |
| 12 | feat(skills): add outlook email integration skill |
skills/outlook/ | ./scripts/test-skill.sh --validate outlook |
| 13 | feat(skills): add obsidian integration skill |
skills/obsidian/ | ./scripts/test-skill.sh --validate obsidian |
| 14 | feat(scripts): add agent validation script |
scripts/validate-agents.sh | ./scripts/validate-agents.sh |
Success Criteria
Verification Commands
# Validate agents.json
python3 -c "import json; json.load(open('agents/agents.json'))" # Expected: exit 0
# Count agents
python3 -c "import json; print(len(json.load(open('agents/agents.json'))))" # Expected: 6
# Validate all prompts exist
for f in chiron chiron-forge hermes athena apollo calliope; do
test -s prompts/$f.txt && echo "$f: OK" || echo "$f: MISSING"
done
# Validate all skills
./scripts/test-skill.sh --validate # Expected: all pass
# Run full validation
./scripts/validate-agents.sh # Expected: exit 0
Final Checklist
- All 6 agents defined in agents.json
- All 6 prompt files exist and are non-empty
- All 5 skills have valid SKILL.md with YAML frontmatter
- validate-agents.sh passes
- test-skill.sh --validate passes
- No MCP configuration in repo
- No inline prompts in agents.json
- All agent names are Greek mythology (not conflicting with Oh My OpenCode)