mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-23 10:44:21 +01:00
584 lines
13 KiB
Plaintext
584 lines
13 KiB
Plaintext
---
|
|
title: Agents
|
|
description: Configure and use specialized agents.
|
|
---
|
|
|
|
Agents are specialized AI assistants that can be configured for specific tasks and workflows. They allow you to create focused tools with custom prompts, models, and tool access.
|
|
|
|
:::tip
|
|
Use the plan agent to analyze code and review suggestions without making any code changes.
|
|
:::
|
|
|
|
You can switch between agents during a session or invoke them with the `@` mention.
|
|
|
|
---
|
|
|
|
## Types
|
|
|
|
There are two types of agents in OpenCode; primary agents and subagents.
|
|
|
|
---
|
|
|
|
### Primary agents
|
|
|
|
Primary agents are the main assistants you interact with directly. You can cycle through them using the **Tab** key, or your configured `switch_agent` keybind. These agents handle your main conversation and can access all configured tools.
|
|
|
|
:::tip
|
|
You can use the **Tab** key to switch between primary agents during a session.
|
|
:::
|
|
|
|
OpenCode comes with two built-in primary agents, **Build** and **Plan**. We'll
|
|
look at these below.
|
|
|
|
---
|
|
|
|
### Subagents
|
|
|
|
Subagents are specialized assistants that primary agents can invoke for specific tasks. You can also manually invoke them by **@ mentioning** them in your messages.
|
|
|
|
OpenCode comes with one built-in subagent, **General**. We'll look at this below.
|
|
|
|
---
|
|
|
|
## Built-in
|
|
|
|
OpenCode comes with two built-in primary agents and one built-in subagent.
|
|
|
|
---
|
|
|
|
### Build
|
|
|
|
_Mode_: `primary`
|
|
|
|
Build is the **default** primary agent with all tools enabled. This is the standard agent for development work where you need full access to file operations and system commands.
|
|
|
|
---
|
|
|
|
### Plan
|
|
|
|
_Mode_: `primary`
|
|
|
|
A restricted agent designed for planning and analysis. We use a permission system to give you more control and prevent unintended changes.
|
|
By default, all of the following are set to `ask`:
|
|
|
|
- `file edits`: All writes, patches, and edits
|
|
- `bash`: All bash commands
|
|
|
|
This agent is useful when you want the LLM to analyze code, suggest changes, or create plans without making any actual modifications to your codebase.
|
|
|
|
---
|
|
|
|
### General
|
|
|
|
_Mode_: `subagent`
|
|
|
|
A general-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. Use when searching for keywords or files and you're not confident you'll find the right match in the first few tries.
|
|
|
|
---
|
|
|
|
## Usage
|
|
|
|
1. For primary agents, use the **Tab** key to cycle through them during a session. You can also use your configured `switch_agent` keybind.
|
|
|
|
2. Subagents can be invoked:
|
|
- **Automatically** by primary agents for specialized tasks based on their descriptions.
|
|
- Manually by **@ mentioning** a subagent in your message. For example.
|
|
|
|
```txt frame="none"
|
|
@general help me search for this function
|
|
```
|
|
|
|
3. **Navigation between sessions**: When subagents create their own child sessions, you can navigate between the parent session and all child sessions using:
|
|
- **Ctrl+Right** (or your configured `session_child_cycle` keybind) to cycle forward through parent → child1 → child2 → ... → parent
|
|
- **Ctrl+Left** (or your configured `session_child_cycle_reverse` keybind) to cycle backward through parent ← child1 ← child2 ← ... ← parent
|
|
|
|
This allows you to seamlessly switch between the main conversation and specialized subagent work.
|
|
|
|
---
|
|
|
|
## Configure
|
|
|
|
You can customize the built-in agents or create your own through configuration. Agents can be configured in two ways:
|
|
|
|
---
|
|
|
|
### JSON
|
|
|
|
Configure agents in your `opencode.json` config file:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"agent": {
|
|
"build": {
|
|
"mode": "primary",
|
|
"model": "anthropic/claude-sonnet-4-20250514",
|
|
"prompt": "{file:./prompts/build.txt}",
|
|
"tools": {
|
|
"write": true,
|
|
"edit": true,
|
|
"bash": true
|
|
}
|
|
},
|
|
"plan": {
|
|
"mode": "primary",
|
|
"model": "anthropic/claude-haiku-4-20250514",
|
|
"tools": {
|
|
"write": false,
|
|
"edit": false,
|
|
"bash": false
|
|
}
|
|
},
|
|
"code-reviewer": {
|
|
"description": "Reviews code for best practices and potential issues",
|
|
"mode": "subagent",
|
|
"model": "anthropic/claude-sonnet-4-20250514",
|
|
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
|
"tools": {
|
|
"write": false,
|
|
"edit": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Markdown
|
|
|
|
You can also define agents using markdown files. Place them in:
|
|
|
|
- Global: `~/.config/opencode/agent/`
|
|
- Per-project: `.opencode/agent/`
|
|
|
|
```markdown title="~/.config/opencode/agent/review.md"
|
|
---
|
|
description: Reviews code for quality and best practices
|
|
mode: subagent
|
|
model: anthropic/claude-sonnet-4-20250514
|
|
temperature: 0.1
|
|
tools:
|
|
write: false
|
|
edit: false
|
|
bash: false
|
|
---
|
|
|
|
You are in code review mode. Focus on:
|
|
|
|
- Code quality and best practices
|
|
- Potential bugs and edge cases
|
|
- Performance implications
|
|
- Security considerations
|
|
|
|
Provide constructive feedback without making direct changes.
|
|
```
|
|
|
|
The markdown file name becomes the agent name. For example, `review.md` creates a `review` agent.
|
|
|
|
---
|
|
|
|
## Options
|
|
|
|
Let's look at these configuration options in detail.
|
|
|
|
---
|
|
|
|
### Description
|
|
|
|
Use the `description` option to provide a brief description of what the agent does and when to use it.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"review": {
|
|
"description": "Reviews code for best practices and potential issues"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This is a **required** config option.
|
|
|
|
---
|
|
|
|
### Temperature
|
|
|
|
Control the randomness and creativity of the LLM's responses with the `temperature` config.
|
|
|
|
Lower values make responses more focused and deterministic, while higher values increase creativity and variability.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"plan": {
|
|
"temperature": 0.1
|
|
},
|
|
"creative": {
|
|
"temperature": 0.8
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Temperature values typically range from 0.0 to 1.0:
|
|
|
|
- **0.0-0.2**: Very focused and deterministic responses, ideal for code analysis and planning
|
|
- **0.3-0.5**: Balanced responses with some creativity, good for general development tasks
|
|
- **0.6-1.0**: More creative and varied responses, useful for brainstorming and exploration
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"analyze": {
|
|
"temperature": 0.1,
|
|
"prompt": "{file:./prompts/analysis.txt}"
|
|
},
|
|
"build": {
|
|
"temperature": 0.3
|
|
},
|
|
"brainstorm": {
|
|
"temperature": 0.7,
|
|
"prompt": "{file:./prompts/creative.txt}"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
If no temperature is specified, OpenCode uses model-specific defaults; typically 0 for most models, 0.55 for Qwen models.
|
|
|
|
---
|
|
|
|
### Disable
|
|
|
|
Set to `true` to disable the agent.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"review": {
|
|
"disable": true
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Prompt
|
|
|
|
Specify a custom system prompt file for this agent with the `prompt` config. The prompt file should contain instructions specific to the agent's purpose.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"review": {
|
|
"prompt": "{file:./prompts/code-review.txt}"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This path is relative to where the config file is located. So this works for both the global OpenCode config and the project specific config.
|
|
|
|
---
|
|
|
|
### Model
|
|
|
|
Use the `model` config to override the default model for this agent. Useful for using different models optimized for different tasks. For example, a faster model for planning, a more capable model for implementation.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"plan": {
|
|
"model": "anthropic/claude-haiku-4-20250514"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Tools
|
|
|
|
Control which tools are available in this agent with the `tools` config. You can enable or disable specific tools by setting them to `true` or `false`.
|
|
|
|
```json title="opencode.json" {3-6,9-12}
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"tools": {
|
|
"write": true,
|
|
"bash": true
|
|
},
|
|
"agent": {
|
|
"plan": {
|
|
"tools": {
|
|
"write": false,
|
|
"bash": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
:::note
|
|
The agent-specific config overrides the global config.
|
|
:::
|
|
|
|
You can also use wildcards to control multiple tools at once. For example, to disable all tools from an MCP server:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"agent": {
|
|
"readonly": {
|
|
"tools": {
|
|
"mymcp_*": false,
|
|
"write": false,
|
|
"edit": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
[Learn more about tools](/docs/tools).
|
|
|
|
---
|
|
|
|
### Permissions
|
|
|
|
You can configure permissions to manage what actions an agent can take. Currently, the permissions for the `edit`, `bash`, and `webfetch` tools can be configured to:
|
|
|
|
- `"ask"` — Prompt for approval before running the tool
|
|
- `"allow"` — Allow all operations without approval
|
|
- `"deny"` — Disable the tool
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": {
|
|
"edit": "deny"
|
|
}
|
|
}
|
|
```
|
|
|
|
You can override these permissions per agent.
|
|
|
|
```json title="opencode.json" {3-5,8-10}
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": {
|
|
"edit": "deny"
|
|
},
|
|
"agent": {
|
|
"build": {
|
|
"permission": {
|
|
"edit": "ask"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
You can also set permissions in Markdown agents.
|
|
|
|
```markdown title="~/.config/opencode/agent/review.md"
|
|
---
|
|
description: Code review without edits
|
|
mode: subagent
|
|
permission:
|
|
edit: deny
|
|
bash: ask
|
|
webfetch: deny
|
|
---
|
|
|
|
Only analyze code and suggest changes.
|
|
```
|
|
|
|
You can set permissions for specific bash commands.
|
|
|
|
```json title="opencode.json" {7}
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"agent": {
|
|
"build": {
|
|
"permission": {
|
|
"bash": {
|
|
"git push": "ask"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This can take a glob pattern.
|
|
|
|
```json title="opencode.json" {7}
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"agent": {
|
|
"build": {
|
|
"permission": {
|
|
"bash": {
|
|
"git *": "ask"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
And you can also use the `*` wildcard to manage permissions for all commands.
|
|
Where the specific rule can override the `*` wildcard.
|
|
|
|
```json title="opencode.json" {8}
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"agent": {
|
|
"build": {
|
|
"permission": {
|
|
"bash": {
|
|
"git status": "allow",
|
|
"*": "ask"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
[Learn more about permissions](/docs/permissions).
|
|
|
|
---
|
|
|
|
### Mode
|
|
|
|
Control the agent's mode with the `mode` config. The `mode` option is used to determine how the agent can be used.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"agent": {
|
|
"review": {
|
|
"mode": "subagent"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
The `mode` option can be set to `primary`, `subagent`, or `all`. If no `mode` is specified, it defaults to `all`.
|
|
|
|
---
|
|
|
|
### Additional
|
|
|
|
Any other options you specify in your agent configuration will be **passed through directly** to the provider as model options. This allows you to use provider-specific features and parameters.
|
|
|
|
For example, with OpenAI's reasoning models, you can control the reasoning effort:
|
|
|
|
```json title="opencode.json" {6,7}
|
|
{
|
|
"agent": {
|
|
"deep-thinker": {
|
|
"description": "Agent that uses high reasoning effort for complex problems",
|
|
"model": "openai/gpt-5",
|
|
"reasoningEffort": "high",
|
|
"textVerbosity": "low"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
These additional options are model and provider-specific. Check your provider's documentation for available parameters.
|
|
|
|
:::tip
|
|
Run `opencode models` to see a list of the available models.
|
|
:::
|
|
|
|
---
|
|
|
|
## Create agents
|
|
|
|
You can create new agents using the following command:
|
|
|
|
```bash
|
|
opencode agent create
|
|
```
|
|
|
|
This interactive command will:
|
|
|
|
1. Ask where to save the agent; global or project-specific.
|
|
2. Description of what the agent should do.
|
|
3. Generate an appropriate system prompt and identifier.
|
|
4. Let you select which tools the agent can access.
|
|
5. Finally, create a markdown file with the agent configuration.
|
|
|
|
---
|
|
|
|
## Use cases
|
|
|
|
Here are some common use cases for different agents.
|
|
|
|
- **Build agent**: Full development work with all tools enabled
|
|
- **Plan agent**: Analysis and planning without making changes
|
|
- **Review agent**: Code review with read-only access plus documentation tools
|
|
- **Debug agent**: Focused on investigation with bash and read tools enabled
|
|
- **Docs agent**: Documentation writing with file operations but no system commands
|
|
|
|
---
|
|
|
|
## Examples
|
|
|
|
Here are some examples agents you might find useful.
|
|
|
|
:::tip
|
|
Do you have an agent you'd like to share? [Submit a PR](https://github.com/sst/opencode).
|
|
:::
|
|
|
|
---
|
|
|
|
### Documentation agent
|
|
|
|
```markdown title="~/.config/opencode/agent/docs-writer.md"
|
|
---
|
|
description: Writes and maintains project documentation
|
|
mode: subagent
|
|
tools:
|
|
bash: false
|
|
---
|
|
|
|
You are a technical writer. Create clear, comprehensive documentation.
|
|
|
|
Focus on:
|
|
|
|
- Clear explanations
|
|
- Proper structure
|
|
- Code examples
|
|
- User-friendly language
|
|
```
|
|
|
|
---
|
|
|
|
### Security auditor
|
|
|
|
```markdown title="~/.config/opencode/agent/security-auditor.md"
|
|
---
|
|
description: Performs security audits and identifies vulnerabilities
|
|
mode: subagent
|
|
tools:
|
|
write: false
|
|
edit: false
|
|
---
|
|
|
|
You are a security expert. Focus on identifying potential security issues.
|
|
|
|
Look for:
|
|
|
|
- Input validation vulnerabilities
|
|
- Authentication and authorization flaws
|
|
- Data exposure risks
|
|
- Dependency vulnerabilities
|
|
- Configuration security issues
|
|
```
|