Rewrite agent-development skill for opencode
- Update SKILL.md with JSON-first approach (agents.json pattern) - Add all opencode config options: mode, temperature, maxSteps, hidden, permission - Document permissions system with granular rules and glob patterns - Add references/opencode-agents-json-example.md with chiron pattern - Rewrite triggering-examples.md for opencode (Tab, @mention, Task tool) - Update agent-creation-system-prompt.md for JSON output format - Rewrite complete-agent-examples.md with JSON examples - Rewrite validate-agent.sh to support both JSON and Markdown validation
This commit is contained in:
@@ -0,0 +1,267 @@
|
||||
# Complete agents.json Example
|
||||
|
||||
This is a production-ready example based on real-world Opencode configurations.
|
||||
|
||||
## Dual-Mode Personal Assistant
|
||||
|
||||
This pattern implements the same assistant in two modes: Plan (read-only analysis) and Forge (full write access).
|
||||
|
||||
```json
|
||||
{
|
||||
"chiron": {
|
||||
"description": "Personal AI assistant (Plan Mode). Read-only analysis, planning, and guidance.",
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/chiron.txt}",
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow",
|
||||
"*/.ssh/*": "deny",
|
||||
"*/.gnupg/*": "deny",
|
||||
"*credentials*": "deny",
|
||||
"*secrets*": "deny",
|
||||
"*.pem": "deny",
|
||||
"*.key": "deny",
|
||||
"*/.aws/*": "deny",
|
||||
"*/.kube/*": "deny"
|
||||
},
|
||||
"edit": "ask",
|
||||
"bash": "ask",
|
||||
"external_directory": "ask",
|
||||
"doom_loop": "ask"
|
||||
}
|
||||
},
|
||||
"chiron-forge": {
|
||||
"description": "Personal AI assistant (Worker Mode). Full write access with safety prompts.",
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/chiron-forge.txt}",
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow",
|
||||
"*/.ssh/*": "deny",
|
||||
"*/.gnupg/*": "deny",
|
||||
"*credentials*": "deny",
|
||||
"*secrets*": "deny",
|
||||
"*.pem": "deny",
|
||||
"*.key": "deny",
|
||||
"*/.aws/*": "deny",
|
||||
"*/.kube/*": "deny"
|
||||
},
|
||||
"edit": "allow",
|
||||
"bash": {
|
||||
"*": "allow",
|
||||
"rm *": "ask",
|
||||
"rmdir *": "ask",
|
||||
"mv *": "ask",
|
||||
"chmod *": "ask",
|
||||
"chown *": "ask",
|
||||
"git *": "ask",
|
||||
"git status*": "allow",
|
||||
"git log*": "allow",
|
||||
"git diff*": "allow",
|
||||
"git branch*": "allow",
|
||||
"git show*": "allow",
|
||||
"git stash list*": "allow",
|
||||
"git remote -v": "allow",
|
||||
"git add *": "allow",
|
||||
"git commit *": "allow",
|
||||
"npm *": "ask",
|
||||
"npx *": "ask",
|
||||
"pip *": "ask",
|
||||
"cargo *": "ask",
|
||||
"dd *": "deny",
|
||||
"mkfs*": "deny",
|
||||
"sudo *": "deny",
|
||||
"su *": "deny",
|
||||
"systemctl *": "deny",
|
||||
"shutdown *": "deny",
|
||||
"reboot*": "deny"
|
||||
},
|
||||
"external_directory": "ask",
|
||||
"doom_loop": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Multi-Agent Development Workflow
|
||||
|
||||
This pattern shows specialized agents for a development workflow.
|
||||
|
||||
```json
|
||||
{
|
||||
"build": {
|
||||
"description": "Full development with all tools enabled",
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-opus-4-20250514",
|
||||
"temperature": 0.3,
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
|
||||
"plan": {
|
||||
"description": "Analysis and planning without making changes",
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-opus-4-20250514",
|
||||
"temperature": 0.1,
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for quality, security, and best practices",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/code-reviewer.txt}",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
|
||||
"test-generator": {
|
||||
"description": "Generates comprehensive unit tests for code",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"temperature": 0.2,
|
||||
"prompt": "{file:./prompts/test-generator.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
|
||||
"security-analyzer": {
|
||||
"description": "Identifies security vulnerabilities and provides remediation",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/security-analyzer.txt}",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
|
||||
"docs-writer": {
|
||||
"description": "Writes and maintains project documentation",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"temperature": 0.3,
|
||||
"prompt": "{file:./prompts/docs-writer.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Orchestrator with Task Permissions
|
||||
|
||||
This pattern shows a primary agent that controls which subagents it can invoke.
|
||||
|
||||
```json
|
||||
{
|
||||
"orchestrator": {
|
||||
"description": "Coordinates development workflow using specialized subagents",
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-opus-4-20250514",
|
||||
"prompt": "{file:./prompts/orchestrator.txt}",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"code-reviewer": "allow",
|
||||
"test-generator": "allow",
|
||||
"security-analyzer": "ask",
|
||||
"docs-writer": "allow"
|
||||
},
|
||||
"edit": "allow",
|
||||
"bash": {
|
||||
"*": "allow",
|
||||
"git push*": "ask",
|
||||
"rm -rf*": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Hidden Internal Subagent
|
||||
|
||||
This pattern shows a subagent hidden from @ autocomplete but still invokable via Task tool.
|
||||
|
||||
```json
|
||||
{
|
||||
"internal-helper": {
|
||||
"description": "Internal helper for data processing tasks",
|
||||
"mode": "subagent",
|
||||
"hidden": true,
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"temperature": 0,
|
||||
"prompt": "You are a data processing helper...",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Key Patterns
|
||||
|
||||
### Permission Inheritance
|
||||
|
||||
- Global `permission` in opencode.json applies to all agents
|
||||
- Agent-specific `permission` overrides global settings
|
||||
- Last matching rule wins for glob patterns
|
||||
|
||||
### Prompt File Organization
|
||||
|
||||
```
|
||||
project/
|
||||
├── opencode.json # or agents.json
|
||||
└── prompts/
|
||||
├── chiron.txt
|
||||
├── chiron-forge.txt
|
||||
├── code-reviewer.txt
|
||||
└── test-generator.txt
|
||||
```
|
||||
|
||||
### Model Strategy
|
||||
|
||||
| Agent Role | Recommended Model | Rationale |
|
||||
|------------|-------------------|-----------|
|
||||
| Complex reasoning | opus | Best quality, expensive |
|
||||
| General tasks | sonnet | Balanced (default) |
|
||||
| Fast/simple | haiku | Cost-effective |
|
||||
| Deterministic | temperature: 0-0.1 | Consistent results |
|
||||
| Creative | temperature: 0.3-0.5 | Varied responses |
|
||||
|
||||
### Tool Access Patterns
|
||||
|
||||
| Agent Type | write | edit | bash |
|
||||
|------------|-------|------|------|
|
||||
| Read-only analyzer | false | false | true (for git) |
|
||||
| Code generator | true | true | true |
|
||||
| Documentation | true | true | false |
|
||||
| Security scanner | false | false | true |
|
||||
Reference in New Issue
Block a user