| name | subagent-authoring |
| description | Create subagent definitions for Claude Code and OpenCode that delegate to skills. Use when creating new subagents or refactoring existing ones to follow the delegation pattern. |
Subagent Authoring
Create subagents that delegate to skills for Claude Code and OpenCode.
When to Use This Skill
Use this skill when:
- Creating a new subagent definition
- Refactoring an existing agent to delegate to a skill
- Ensuring consistency between Claude Code and OpenCode agent implementations
The Delegation Pattern
Agents should be thin wrappers that delegate all implementation to skills:
Claude Code agent (.claude/agents/<name>.md):
---
name: agent-name
description: Brief description of what the agent does
tools: Read, Grep, Glob, Skill(skill-name), ...
---
Use the `<skill-name>` skill to accomplish this task.
OpenCode agent (.config/opencode/agents/<name>.md):
---
description: Brief description of what the agent does
mode: subagent
tools:
read: true
grep: true
glob: true
skill: true
permission:
bash:
...
---
Use the `<skill-name>` skill to accomplish this task.
Claude Code Agent Structure
Frontmatter Fields
| Field | Required | Description |
|---|
name | Yes | Agent identifier (lowercase, no spaces) |
description | Yes | 1-2 sentence description of what the agent does |
tools | Yes | List of tools and skills the agent can use |
model | No | Specific model to use (e.g., sonnet) |
tools Format
Read, Write, Edit, Grep, Glob, Bash - Core tools
Skill(skill-name) - Load a skill
Bash(command:*) - Allow bash command with any arguments (note the colon)
Bash permission syntax (Claude Code uses colons, not spaces):
Bash(git commit:*)
Bash(git:*)
Bash(~/.agents/skills/my-skill/scripts/helper.py:*)
Example:
tools: Read, Grep, Glob, Bash(git status:*), Bash(git commit:*), Skill(code-linting)
Documentation: https://docs.anthropic.com/en/docs/claude-code/settings#tool-permissions
Naming Conventions
Subagent names should be agent nouns formed with the -er suffix (meaning "one who does X"):
- ✅
git-committer, git-stager, code-linter, test-runner, task-implementer
- ❌
git-commit, commit-helper, committing-agent
The -er suffix creates agent/instrument nouns:
- committer = one who commits
- stager = one who stages
- implementer = one who implements
OpenCode Agent Structure
Frontmatter Fields
| Field | Required | Description |
|---|
description | Yes | 1-2 sentence description |
mode | Yes | Agent mode (subagent, primary) |
tools | Yes | Map of tool names to boolean enablement |
permission | Yes | Map of tool categories to permission rules |
tools Format
tools:
read: true
grep: true
glob: true
bash: true
edit: false
write: false
skill: true
Common tool mappings
| Claude Tool | OpenCode Equivalent |
|---|
Read | read: true |
Write | write: true |
Edit | edit: true |
Grep | grep: true |
Glob | glob: true |
Bash | bash: true |
Skill(x) | skill: true |
Agent Body
The agent body should be 5-20 lines maximum and contain only:
Use the `<skill-name>` skill to accomplish this task.
Do NOT include:
- Full implementation steps
- Duplicated content between Claude and OpenCode
- More than ~20 lines of content
Examples
Minimal Agent (Claude)
---
name: code-linter
description: Code linting specialist
tools: Read, Grep, Glob, Bash, Skill(code-linting)
---
Use the `code-linting` skill to run linters.
Minimal Agent (OpenCode)
---
description: Code linting specialist
mode: subagent
tools:
read: true
grep: true
glob: true
bash: true
skill: true
---
Use the `code-linting` skill to run linters.
Agent with Bash Permissions (OpenCode)
OpenCode uses spaces in permission patterns (unlike Claude Code which uses colons):
---
description: Run tests
mode: subagent
tools:
bash: true
read: true
grep: true
glob: true
skill: true
permission:
bash:
"*": "ask"
"pytest *": "allow"
"npm test": "allow"
"git status": "allow"
"git commit *": "allow"
---
Use the `test-running` skill to run tests.
Documentation: https://opencode.ai/docs/permissions
Primary Mode Agent (OpenCode)
---
description: Orchestrates development workflow
mode: primary
tools:
read: true
write: true
edit: true
bash: true
grep: true
glob: true
todowrite: true
todoread: true
---
Use the `task-orchestration` skill to orchestrate the development workflow.
Mode Selection
| Mode | Use When |
|---|
subagent | Agent is invoked by another agent or command |
primary | Agent is the main agent handling the conversation |
Why This Pattern?
- Single source of truth: Skills contain all implementation content
- Easier maintenance: Changes to skills automatically propagate
- Platform consistency: Agents are thin wrappers with platform-specific config
- Token efficiency: Skills load progressively via progressive disclosure
- No duplication: Implementation lives in one place
Anti-Pattern to Avoid
BAD - Agent with full implementation:
---
name: code-linter
description: Code linting specialist
tools: Read, Grep, Glob, Bash
---
You are a senior code reviewer responsible for ensuring that code changes pass
all linters...
Always use immediately after:
- Creating new source code files
- Modifying existing code...
1. **Discovers** all appropriate linters...
2. **Runs** formatting checks...
3. **Auto-fixes** issues...
4. **Reports** remaining issues...
Run linters according to repository guidelines. First look for linting
commands in the following order:
...
GOOD - Agent that delegates:
---
name: code-linter
description: Code linting specialist
tools: Read, Grep, Glob, Bash, Skill(code-linting)
---
Use the `code-linting` skill to run linters.
Workflow
- Create the skill first (or identify existing skill to use)
- Create/refactor Claude agent with proper frontmatter and delegation
- Create/refactor OpenCode agent with matching content and platform-specific config
- Verify both agents delegate correctly
Related Skills
agent-command-authoring - For creating commands that delegate to skills
skill-authoring - For creating skills themselves