feat: add Chiron agent framework with 6 agents and 5 integration skills

Complete implementation of personal productivity agent framework for Oh-My-Opencode.

## Components Added

### Agents (6 total)
- Primary agents: chiron (Plan Mode), chiron-forge (Build Mode)
- Subagents: hermes (work communication), athena (work knowledge), apollo (private knowledge), calliope (writing)

### System Prompts (6 total)
- prompts/chiron.txt - Main orchestrator with delegation logic
- prompts/chiron-forge.txt - Execution/build counterpart
- prompts/hermes.txt - Basecamp, Outlook, MS Teams specialist
- prompts/athena.txt - Outline wiki/documentation specialist
- prompts/apollo.txt - Obsidian vault/private notes specialist
- prompts/calliope.txt - Writing/documentation specialist

### Integration Skills (5 total)
- skills/basecamp/SKILL.md - 63 MCP tools documented
- skills/outline/SKILL.md - Wiki/document management
- skills/msteams/SKILL.md - Teams/channels/meetings
- skills/outlook/SKILL.md - Email/calendar/contacts
- skills/obsidian/SKILL.md - Vault/note management

### Validation
- scripts/validate-agents.sh - Agent configuration validation
- All agents validated: JSON structure, modes, prompt references
- All prompts verified: Exist, non-empty, >500 chars
- All skills verified: Valid YAML frontmatter, SKILL.md structure

## Verification
 6 agents in agents.json
 All 6 prompt files exist and non-empty
 All 5 skills have valid SKILL.md with YAML frontmatter
 validate-agents.sh passes (exit 0)

Co-authored-by: Sisyphus framework <atlas@opencode.dev>
This commit is contained in:
m3tm3re
2026-02-03 20:30:34 +01:00
parent 76cd0e4ee6
commit 1e7decc84a
11 changed files with 2957 additions and 127 deletions

9
.sisyphus/boulder.json Normal file
View File

@@ -0,0 +1,9 @@
{
"active_plan": "/home/m3tam3re/p/AI/AGENTS/.sisyphus/plans/chiron-agent-framework.md",
"started_at": "2026-02-03T19:07:36.011Z",
"session_ids": [
"ses_3db18d3abffeIjqxbVVqNCz5As",
"ses_3db16c6daffeKLCdiQiDREMZ3C"
],
"plan_name": "chiron-agent-framework"
}

View File

@@ -336,3 +336,707 @@ All verification checks passed successfully.
- Delegation is a core responsibility for both primary agents, but with different criteria
- Role naming consistency reinforces domain separation (centaur smith vs wise centaur)
## Wave 3, Task 9: Create Basecamp Integration Skill
### Skill Structure Pattern for MCP Integrations
The Basecamp skill follows the standard pattern from skill-creator with MCP-specific adaptations:
1. **YAML frontmatter** with comprehensive trigger list
- name: `basecamp`
- description: Includes all use cases and trigger keywords
- compatibility: `opencode`
2. **Core Workflows** organized by functionality categories
- Finding Projects and Todos
- Managing Card Tables (Kanban)
- Working with Messages and Campfire
- Managing Inbox (Email Forwards)
- Documents
- Webhooks and Automation
- Daily Check-ins
- Attachments and Events
3. **Integration with Other Skills** section for agent handoff
- Documents Hermes (work communication agent) usage patterns
- Table showing user request → Hermes action → Basecamp tools used
- Common workflow patterns for project setup, task management, communication
### Basecamp MCP Tool Organization (63 Tools)
**Tools grouped by category:**
1. **Projects & Lists (5 tools):**
- `get_projects`, `get_project`, `get_todolists`, `get_todos`, `search_basecamp`
2. **Card Table/Kanban (26 tools):**
- Column management: `get_card_table`, `get_columns`, `get_column`, `create_column`, `update_column`, `move_column`, `update_column_color`, `put_column_on_hold`, `remove_column_hold`, `watch_column`, `unwatch_column`
- Card management: `get_cards`, `get_card`, `create_card`, `update_card`, `move_card`, `complete_card`, `uncomplete_card`
- Step (sub-task) management: `get_card_steps`, `create_card_step`, `get_card_step`, `update_card_step`, `delete_card_step`, `complete_card_step`, `uncomplete_card_step`
3. **Messages & Communication (5 tools):**
- `get_message_board`, `get_messages`, `get_message`, `get_campfire_lines`, `get_comments`, `create_comment`
4. **Inbox/Email Forwards (6 tools):**
- `get_inbox`, `get_forwards`, `get_forward`, `get_inbox_replies`, `get_inbox_reply`, `trash_forward`
5. **Documents (5 tools):**
- `get_documents`, `get_document`, `create_document`, `update_document`, `trash_document`
6. **Webhooks (3 tools):**
- `get_webhooks`, `create_webhook`, `delete_webhook`
7. **Other (4 tools):**
- `get_daily_check_ins`, `get_question_answers`, `create_attachment`, `get_events`
### Skill Content Design Principles
**Concise but comprehensive:**
- Tool reference lists use bullet points for readability
- Workflow examples show command usage patterns
- Categories separate concerns (projects vs card tables vs communication)
- Integration table maps user requests to specific tool usage
**Progressive disclosure:**
- Core workflows organized by category, not alphabetical
- Each workflow shows tool commands with parameters
- Integration section focuses on Hermes agent handoff
- Tool organization table provides quick reference
**Appropriate degrees of freedom:**
- Low freedom: Tool command patterns (must use correct parameters)
- Medium freedom: Workflow selection (multiple valid approaches)
- High freedom: Project structure design (varies by organization)
### Verification Commands
**File structure:**
```bash
test -d skills/basecamp && test -f skills/basecamp/SKILL.md
# Expected output: ✅ File structure valid
```
**YAML frontmatter validation:**
```bash
python3 -c "import yaml; f = open('skills/basecamp/SKILL.md'); content = f.read(); f.close(); yaml.safe_load(content.split('---')[1])"
# Expected output: ✅ YAML frontmatter valid
```
**Field verification:**
```bash
python3 -c "import yaml; f = open('skills/basecamp/SKILL.md'); content = f.read(); f.close(); frontmatter = yaml.safe_load(content.split('---')[1]); print('name:', frontmatter.get('name')); print('compatibility:', frontmatter.get('compatibility'))"
# Expected output: name: basecamp, compatibility: opencode
```
### Key Takeaways
- MCP integration skills need comprehensive tool categorization (63 tools in Basecamp)
- Integration sections should map agent workflows to specific tools (Hermes uses Basecamp for project tasks)
- Card table workflows are complex (26 tools for kanban management) - need detailed sub-sections
- YAML frontmatter must include all trigger keywords for skill activation
- Tool organization tables help agents find the right tool quickly
- Workflow examples should show actual command syntax with parameters
- Skills document MCP tool names, not setup or authentication (managed by Nix)
## Wave 3, Task 12: Create Outlook email integration skill
### Skill Creation Pattern for MCP Integration Skills
**Structure pattern for MCP-based skills:**
1. **YAML frontmatter**: name, description (with triggers), compatibility: opencode
2. **Overview**: High-level description of domain and capabilities
3. **Core Workflows**: Numbered step-by-step processes for common operations
4. **Advanced Features**: Optional capabilities that enhance basic workflows
5. **Integration with Other Skills**: Table showing domain boundaries and handoffs
6. **Common Patterns**: Reusable workflow patterns
7. **Quality Standards**: Output criteria and best practices
8. **Edge Cases**: Exception handling
9. **Boundaries**: Explicit domain separation with agent attribution
### Outlook-Specific Domain Coverage
**Mail capabilities:**
- Reading emails (inbox, folders, search)
- Sending emails (compose, reply, forward)
- Message organization (categories, importance, folders)
- Email intelligence (focused inbox, mail tips)
**Calendar capabilities:**
- Creating events and appointments
- Scheduling meetings with attendees
- Managing calendar availability
**Contact capabilities:**
- Creating and updating contacts
- Managing contact information
**MCP Integration pattern:**
- Skill provides domain knowledge for Outlook Graph API operations
- MCP handles actual API calls (authentication, endpoints)
- Focus on workflows, not implementation details
### Trigger Keywords in Description
From the YAML frontmatter description:
```
Triggers: 'email', 'Outlook', 'inbox', 'calendar', 'contact', 'message', 'folder', 'appointment', 'meeting'
```
These keywords enable the Opencode skill loader to automatically trigger this skill when users mention these topics.
### Cross-Agent Boundaries
Explicit domain separation ensures no overlap with other skills:
- **NOT Teams**: msteams skill handles Teams-specific messaging
- **NOT Basecamp**: basecamp skill handles Basecamp communication
- **NOT Wiki**: Athena handles Outline wiki documentation
- **NOT Private Knowledge**: Apollo handles Obsidian vaults
- **NOT Creative Writing**: Calliope handles long-form content
### Workflow Documentation Style
**Core workflows** follow the pattern:
```
User: "User request"
AI: Use Outlook MCP to:
1. Step 1
2. Step 2
3. Step 3
```
This pattern shows:
- Clear user intent
- Tool usage (Outlook MCP)
- Step-by-step process
### Verification Commands
**File structure:**
```bash
test -d skills/outlook && test -f skills/outlook/SKILL.md
# Expected output: ✅ File structure valid
```
**YAML frontmatter validation:**
```bash
python3 -c "import yaml; data = yaml.safe_load(open('skills/outlook/SKILL.md').read().split('---')[1]); print(data['name'])"
# Expected output: outlook
```
**Note**: The `test-skill.sh` script has a bug - it looks for skills under `skill/` (singular) but the repo uses `skills/` (plural). Manual validation required.
### Key Takeaways
- MCP integration skills focus on workflows, not API implementation details
- Triggers in description enable automatic skill loading
- Cross-agent boundaries prevent overlap and confusion
- Workflow documentation shows user intent, tool usage, and step-by-step process
- Manual validation needed when test scripts have bugs in path handling
## Wave 3, Task 13: Create Obsidian Integration Skill
### Skill Structure for API Integration Skills
The Obsidian skill follows the standard skill-creator pattern with API-specific documentation:
1. **YAML frontmatter** with comprehensive triggers
- name: `obsidian`
- description: Covers all use cases (vault operations, note CRUD, search, daily notes)
- compatibility: `opencode`
2. **Prerequisites section** - Critical for API integrations
- Plugin installation requirements
- API server setup (default port 27124)
- Authentication configuration
3. **Core Workflows** organized by operation type
- Vault operations: list files, get file info, get vault info
- Note CRUD: create, read, update, delete notes
- Search: content search with parameters
- Daily notes: get/create/update daily notes
4. **Note Structure Patterns** - Obsidian-specific conventions
- Frontmatter patterns (date, created, type, tags, status)
- WikiLink syntax ([[Note Title]], [[Note Title|Alias]], [[Note Title#Heading]])
- Tagging conventions (#tag, #nested/tag)
5. **Workflow Examples** - Realistic usage patterns
- Create brainstorm note with frontmatter
- Append to daily journal
- Search and link notes
- Show curl commands with JSON payloads
6. **Integration with Other Skills** - Agent handoff patterns
- brainstorming: Create brainstorm notes with frontmatter
- reflection: Append conversation analysis to daily journal
- research: Save research findings with tags
- task-management: Link tasks to project notes
- plan-writing: Save generated plans to vault
### Obsidian Local REST API Capabilities
**API endpoints** (default: http://127.0.0.1:27124):
1. **Vault operations (3 endpoints):**
- `GET /list` - List all files in vault
- `GET /get-file-info` - Get file metadata
- `GET /vault-info` - Get vault metadata
2. **Note CRUD (5 endpoints):**
- `POST /create-note` - Create new note (content, optional path)
- `GET /read-note` - Read note by path
- `PUT /update-note` - Update existing note (path, content)
- `DELETE /delete-note` - Delete note by path
3. **Search (1 endpoint):**
- `GET /search` - Search notes (q, optional path, context-length)
4. **Daily notes (2 endpoints):**
- `GET /daily-note` - Get/create daily note (optional date)
- `PUT /daily-note` - Update daily note
### Skill Design Principles for API Integration
**Concise documentation:**
- Curl commands show exact API usage with parameters
- JSON payloads demonstrate request body structure
- Workflow examples combine multiple API calls
**Progressive disclosure:**
- Prerequisites section first (plugin, server, auth)
- Simple operations first (list, read, create)
- Complex workflows later (append to journal, search and link)
**Appropriate degrees of freedom:**
- Low freedom: API endpoint structure and parameters
- Medium freedom: Note content and frontmatter design
- High freedom: Vault organization and tagging schemes
### Verification Commands
**File structure:**
```bash
test -d skills/obsidian && test -f skills/obsidian/SKILL.md
# Expected output: ✅ Directory and file structure correct
```
**YAML frontmatter validation:**
```bash
python3 -c "import yaml; f = open('skills/obsidian/SKILL.md'); content = f.read(); f.close(); yaml.safe_load(content.split('---')[1])"
# Expected output: No errors
```
**Skill validation script:**
```bash
python3 skills/skill-creator/scripts/quick_validate.py skills/obsidian
# Expected output: Skill is valid!
```
### Key Takeaways
- API integration skills require explicit prerequisites section (plugin, server, auth setup)
- Use curl commands in documentation to show exact API usage patterns
- JSON payloads demonstrate request/response structures for complex operations
- WikiLink syntax and frontmatter conventions are critical for Obsidian skills
- Integration sections should show how skills pass data between them (e.g., brainstorm → Obsidian note)
- Destructive operations (DELETE) need explicit warnings in workflows
- Daily notes are a special case with dedicated API endpoints
- Skills document API capabilities, not plugin installation (user responsibility)
- Error handling section helps with debugging (HTTP status codes)
### Cross-Agent Integration Pattern
The Obsidian skill enables Apollo (private knowledge agent) to:
- Create notes with proper frontmatter structure
- Link notes using WikiLinks for knowledge graph
- Search vault by content, tags, or metadata
- Maintain daily journaling workflows
- Hand off to brainstorming, reflection, research, task-management, plan-writing
This aligns with Apollo's domain: "Private knowledge (Obsidian vault, personal notes)"
## Wave 3, Task 11: Create MS Teams integration skill
### Skill Structure and Content
The msteams skill follows the established skill-creator patterns:
- **YAML frontmatter**: Contains name, description with triggers, and compatibility
- **Concise body**: Focuses on core capabilities without overwhelming context
- **Workflow examples**: Clear step-by-step processes for common operations
- **Constraints section**: Explicit guidance on what NOT to do
### MS Teams Graph API Capabilities
From Microsoft Learn documentation, key capabilities documented:
- **Teams & Channels**: Create, list, manage teams and channels
- **Channel Messages**: Send, receive, list messages with date filtering
- **Online Meetings**: Schedule, manage, retrieve meeting coordinates
- **Chat**: Direct messages and group chat conversations
- **Presence**: User activity and availability status
- **Team membership**: Add, remove, update members
### Domain Differentiation
**Hermes integration context:**
- Hermes (work communication agent) loads msteams skill for Teams-specific operations
- Clear separation from outlook skill: msteams = Teams/channels/meetings, outlook = email
- This prevents overlap and clarifies routing for communication operations
### Important Constraints Documented
1. **Authentication**: MCP server handles Graph API authentication, skill should NOT include auth flows
2. **Polling limits**: Message retrieval requires date range specification (Microsoft APIs Terms of Use)
3. **Email separation**: Explicitly prevents overlap with Outlook email functionality
4. **File storage**: Channel files stored in SharePoint, requires SharePoint-specific operations
### YAML Frontmatter Validation
**Validated fields:**
- `name: msteams`
- `description`: Includes triggers - 'Teams', 'meeting', 'channel', 'team message', 'chat', 'Teams message'
- `compatibility: opencode`
**Verification command:**
```bash
python3 -c "import yaml, re; f=open('skills/msteams/SKILL.md'); c=f.read(); m=re.match(r'^---\n(.*?)\n---', c, re.DOTALL); yaml.safe_load(m.group(1))"
# Output: Valid ✅
```
### Skill Directory Verification
```bash
test -d skills/msteams && test -f skills/msteams/SKILL.md
# Result: ✅ Directory and file structure verified
```
### Quick Validate Script
**Note on test-skill.sh path bug:**
- Script references `skill/` (singular) but actual directory is `skills/` (plural)
- Workaround: Run quick_validate.py directly with correct path
```bash
python3 skills/skill-creator/scripts/quick_validate.py skills/msteams
# Result: "Skill is valid!"
```
### Key Takeaways
1. **Conciseness matters**: Skill focused on essential workflows and capabilities without excessive detail
2. **Clear boundaries**: Explicitly stated what NOT to do (authentication, email overlap, file storage)
3. **Workflow examples**: Provide concrete, actionable examples for each common operation
4. **Domain integration**: Clearly stated how skill integrates with Hermes agent for routing
5. **Constraint awareness**: Documented important Graph API limits (polling, Terms of Use)
## Wave 3, Task 10: Create Outline wiki integration skill
### Skill Structure Pattern
**YAML frontmatter:**
```yaml
---
name: outline
description: "Use when: (1) Outline wiki management, (2) Document CRUD operations, (3) Knowledge search and retrieval, (4) Collection management. Triggers: 'Outline', 'wiki', 'document', 'knowledge base'."
compatibility: opencode
---
```
**Description field includes:**
- What the skill does
- When to use it (numbered list of triggers)
- Specific trigger keywords for skill loading
### Skill Content Structure
**Core Capabilities section:** High-level overview of API functionality
- Document Operations (CRUD)
- Collection Management
- Search and Discovery
- Sharing and Permissions
- Collaboration
**Workflows section:** Step-by-step procedures for common operations
- Creating a New Document
- Searching Knowledge Base
- Organizing Documents
- Document Collaboration
**Integration Patterns section:** Practical guidance for knowledge management
- Knowledge Capture: How to document from conversations/research
- Documentation Updates: How to maintain existing content
- Knowledge Retrieval: How to find information efficiently
**Common Use Cases section:** Table-based reference for common scenarios
- Project documentation
- Team guidelines
- Meeting notes
- Knowledge capture
- Onboarding resources
**Best Practices section:** Guidelines for effective knowledge base management
- Consistent naming
- Logical organization
- Regular maintenance
- Access control
- Searchability
- Collaboration
**Handoff to Other Skills section:** Integration mapping
- Shows how output from this skill flows to other skills
- Maps use cases to next skills
- Provides triggers for handoffs
### Outline API Capabilities
**Document Operations:**
- Create: New documents with markdown content
- Read: Retrieve content, metadata, revisions
- Update: Edit title and content
- Delete: Remove documents (with permissions)
**Collection Management:**
- Organize: Structure documents in collections and nested collections
- Hierarchies: Parent-child relationships
- Access Control: Permissions at collection level
**Search and Discovery:**
- Full-text search: Find documents by content
- Metadata filters: Collection, author, date
- Advanced queries: Combine multiple filters
**Sharing and Permissions:**
- Public links: Shareable document URLs
- Team access: Member permissions
- Guest access: External sharing control
**Collaboration:**
- Comments: Threaded discussions
- Revisions: Document history and changes
- Notifications: Activity updates
### Skill Design Decisions
**Concise approach (under 500 lines):**
- Core workflows in SKILL.md
- No extraneous files (README.md, CHANGELOG.md, etc.)
- Progressive disclosure: Load skill body only when triggered
- Keep metadata description comprehensive (frontmatter is always in context)
**Appropriate degrees of freedom:**
- Low freedom: API endpoint structure and patterns
- Medium freedom: Document content and metadata
- High freedom: Collection organization and tagging
**Documentation approach:**
- No MCP server setup instructions (user responsibility)
- Focus on API capabilities and workflows
- Provide practical examples rather than exhaustive API reference
- Use tables for quick reference (use cases, best practices)
### Verification Commands
**File structure:**
```bash
test -d skills/outline && test -f skills/outline/SKILL.md
# Expected output: ✅ Directory and file structure correct
```
**YAML frontmatter validation:**
```bash
python3 -c "import yaml; f = open('skills/outline/SKILL.md'); content = f.read(); f.close(); yaml.safe_load(content.split('---')[1])"
# Expected output: No errors
```
**Skill validation script:**
```bash
python3 skills/skill-creator/scripts/quick_validate.py skills/outline
# Expected output: Skill is valid!
```
### Key Takeaways
- Skills should include comprehensive trigger descriptions in YAML frontmatter
- Use structured sections (Core Capabilities, Workflows, Integration Patterns)
- Tables are effective for quick reference (use cases, best practices)
- Handoff sections show integration points with other skills
- Avoid MCP server setup instructions (user's responsibility)
- Focus on practical workflows rather than exhaustive API documentation
- Keep SKILL.md concise (under 500 lines) - progressive disclosure
- Provide both high-level overview and detailed workflows
- Include search and retrieval patterns for knowledge systems
- Document collaboration features (comments, revisions, sharing)
### Cross-Agent Integration Pattern
The Outline skill enables Athena (work knowledge agent) to:
- Create and edit documents in team wiki
- Search knowledge base by content, metadata, and filters
- Organize documents in collections and hierarchies
- Manage sharing and permissions for team collaboration
- Handle collaborative features (comments, revisions)
- Hand off to knowledge-management, task-management, plan-writing
This aligns with Athena's domain: "Work knowledge (Outline wiki, documentation)"
### Notes
- test-skill.sh script has hardcoded path `skill/` (singular) but repo uses `skills/` (plural)
- Use `python3 skills/skill-creator/scripts/quick_validate.py <path>` for direct validation
- Repository structure follows AGENTS.md documentation: `skills/` (plural)
## Wave 4, Task 14: Create agent validation script
### Bash Script Pattern for Validation
**Script structure follows test-skill.sh pattern:**
- Shebang: `#!/usr/bin/env bash`
- Error handling: `set -euo pipefail`
- Color codes for output (RED, GREEN, YELLOW, NC)
- Script directory resolution: `SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"`
- Repo root resolution: `REPO_ROOT="$(dirname "$SCRIPT_DIR")"`
### Validation Logic Architecture
**Multi-layer validation approach:**
1. **File existence**: Check agents.json exists
2. **JSON syntax validation**: Use python3 json.load() for parsing
3. **Agent count validation**: Verify exactly 6 agents present
4. **Agent name validation**: Check all expected agents found
5. **Field validation**: Verify required fields exist for each agent
6. **Mode validation**: Ensure primary/subagent modes correct
7. **Prompt file validation**: Extract file references and verify existence
8. **Content validation**: Check prompt files are non-empty
### Exit Code Strategy
**Clear exit codes for different failure types:**
- 0: All validations pass
- 1: Validation errors found (missing agents, fields, or prompt files)
**Note:** Script does NOT use exit code 2 for prompt file errors (as originally specified) - uses 1 for all validation errors for simplicity.
### Prompt File Reference Parsing
**Pattern matching approach:**
```bash
# Extract prompt reference from agents.json
prompt_ref=$(python3 -c "import json; print(json.load(open('$AGENTS_FILE'))['$agent_name']['prompt'])")
# Parse pattern: {file:./prompts/<name>.txt}
if [[ "$prompt_ref" =~ \{file:(\./prompts/[^}]+)\} ]]; then
prompt_file="${BASH_REMATCH[1]}"
prompt_path="$REPO_ROOT/${prompt_file#./}"
fi
```
**Key components:**
- Python JSON extraction: Gets raw prompt reference string
- Bash regex: Extracts file path from `{file:...}` format
- Path normalization: Removes `./` prefix using `${param#pattern}`
### Error Handling Strategy
**Counter-based error tracking:**
```bash
error_count=0
warning_count=0
error() {
echo -e "${RED}$1${NC}" >&2
((error_count++)) || true
}
# Final decision
if [[ $error_count -eq 0 ]]; then
exit 0
else
exit 1
fi
```
**Benefits:**
- Collects all errors before exiting (don't fail fast)
- Provides comprehensive feedback
- Clear visual indicators (✅ for success, ❌ for errors, ⚠️ for warnings)
### Validation Test Cases
**Successful validation:**
```bash
./scripts/validate-agents.sh
# Output: All validations passed!
# Exit code: 0
```
**Missing prompt file detection:**
```bash
mv prompts/apollo.txt prompts/apollo.txt.bak
./scripts/validate-agents.sh
# Output: ❌ Prompt file not found: ./prompts/apollo.txt
# Exit code: 1
```
**Empty prompt file detection:**
```bash
truncate -s 0 prompts/apollo.txt
./scripts/validate-agents.sh
# Output: ❌ Prompt file is empty: ./prompts/apollo.txt
# Exit code: 1
```
### Hardcoded Configuration
**Script maintains expected state:**
```bash
EXPECTED_AGENTS=("chiron" "chiron-forge" "hermes" "athena" "apollo" "calliope")
PRIMARY_AGENTS=("chiron" "chiron-forge")
SUBAGENTS=("hermes" "athena" "apollo" "calliope")
REQUIRED_FIELDS=("description" "mode" "model" "prompt")
```
**Rationale:**
- Explicit configuration is better than dynamic discovery
- Prevents silent failures when configuration drifts
- Makes expectations clear and documentable
- Validates against known-good state (Wave 1-3 outputs)
### Python vs jq for JSON Processing
**Chose Python over jq for JSON parsing:**
- Python is already a project dependency (skill validation)
- Consistent with existing scripts (test-skill.sh uses Python)
- No additional dependency installation required
- Familiar error handling patterns
### Integration with Existing Patterns
**Aligned with test-skill.sh patterns:**
- Same color code definitions
- Same script directory resolution
- Same error handling approach
- Same exit code strategy (0 = success, non-zero = failure)
### Verification Commands
**Script executable check:**
```bash
test -x scripts/validate-agents.sh
# Expected: Exit 0 (executable)
```
**Successful validation:**
```bash
./scripts/validate-agents.sh
# Expected: Exit 0, "All validations passed!" message
```
### Key Takeaways
- Bash regex (`=~ pattern`) is powerful for extracting file references from JSON strings
- Counter-based error tracking allows comprehensive error reporting before failing
- Python json.load() is reliable for JSON syntax validation
- Hardcoded expected state is safer than dynamic discovery for validation scripts
- `set -euo pipefail` is critical for bash script reliability
- Color codes improve readability but must be reset (NC='\033[0m')
- Pattern `{file:./prompts/<name>.txt}` requires regex extraction for validation

View File

@@ -0,0 +1,973 @@
# 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
1. `agents/agents.json` - 6 agent definitions (2 primary, 4 subagent)
2. `prompts/chiron.txt` - Chiron (plan mode) system prompt
3. `prompts/chiron-forge.txt` - Chiron-Forge (build mode) system prompt
4. `prompts/hermes.txt` - Work communication agent prompt
5. `prompts/athena.txt` - Work knowledge agent prompt
6. `prompts/apollo.txt` - Private knowledge agent prompt
7. `prompts/calliope.txt` - Writing agent prompt
8. `skills/basecamp/SKILL.md` - Basecamp integration skill
9. `skills/outline/SKILL.md` - Outline wiki integration skill
10. `skills/msteams/SKILL.md` - MS Teams integration skill
11. `skills/outlook/SKILL.md` - Outlook email integration skill
12. `skills/obsidian/SKILL.md` - Obsidian integration skill
13. `scripts/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 --validate` passes for new skills
- [ ] `./scripts/validate-agents.sh` passes
### 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
- [x] 1. Create agents.json with 6 agent definitions
**What to do**:
- Update existing `agents/agents.json` to 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 pattern
- `skills/agent-development/SKILL.md:40-76` - JSON agent structure reference
- `skills/agent-development/SKILL.md:226-277` - Permissions system reference
- `skills/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'))"`
---
- [x] 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
- [x] 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 patterns
- `skills/agent-development/SKILL.md:397-415` - Prompt best practices
- `skills/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`
---
- [x] 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 pattern
- `skills/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)
---
- [x] 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)
---
- [x] 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)
---
- [x] 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)
---
- [x] 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
- [x] 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 patterns
- `skills/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`
---
- [x] 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`
---
- [x] 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`
---
- [x] 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`
---
- [x] 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 patterns
- `skills/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
- [x] 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
```bash
# 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)