代理

配置和使用专门的代理。

代理是可以为特定任务和工作流程配置的专门 AI 助手。它们允许你创建具有自定义提示、模型和工具访问权限的专用工具。

提示: 使用 plan 代理分析代码和审查建议,而不进行任何代码更改。

你可以在会话期间切换代理,或使用 @ 提及来调用它们。


# 类型#

OpenCode 中有两种类型的代理:主代理和子代理。


## 主代理#

主代理是你直接与之交互的主要助手。你可以使用 Tab 键或配置的 switch_agent 快捷键在它们之间循环切换。这些代理处理你的主要对话,可以访问所有配置的工具。

提示: 你可以在会话期间使用 Tab 键在主代理之间切换。

OpenCode 带有两个内置的主代理,Build 和 Plan。我们将在下面介绍它们。


## 子代理#

子代理是主代理可以为特定任务调用的专门助手。你也可以通过在消息中 @ 提及 它们来手动调用。

OpenCode 带有两个内置的子代理,General 和 Explore。我们将在下面介绍它们。


# 内置代理#

OpenCode 带有两个内置的主代理和两个内置的子代理。


## Build#

模式:primary

Build 是默认的主代理,启用了所有工具。这是需要完全访问文件操作和系统命令的开发工作的标准代理。


## Plan#

模式:primary

一个为规划和分析设计的受限代理。我们使用权限系统给你更多控制权并防止意外更改。默认情况下,以下所有内容都设置为 ask:

  • file edits:所有写入、补丁和编辑
  • bash:所有 bash 命令

当你希望 LLM 分析代码、建议更改或创建计划而不对代码库进行任何实际修改时,此代理很有用。


## General#

模式:subagent

一个通用代理,拥有除 todo 之外的所有工具的完整访问权限(包括文件修改)。适用于研究复杂问题、搜索代码、执行多步骤任务或并行运行多个工作单元。


## Explore#

模式:subagent

一个专门用于探索代码库的快速只读代理。它无法修改文件。当你需要快速通过模式查找文件、搜索代码中的关键字或回答关于代码库的问题时使用。


# 使用方法#

  1. 对于主代理,在会话期间使用 Tab 键在它们之间循环切换。你也可以使用配置的 switch_agent 快捷键。

  2. 子代理可以被调用:

    • 自动地 - 主代理根据描述为专门任务调用。
    • 通过在消息中 @ 提及 子代理来手动调用。例如:
      @general 帮我搜索这个函数
      
  3. 会话之间导航:当子代理创建自己的子会话时,你可以使用以下方式在父会话和所有子会话之间导航:

    • <Leader>+Right(或配置的 session_child_cycle 快捷键)向前循环:父 → 子1 → 子2 → … → 父
    • <Leader>+Left(或配置的 session_child_cycle_reverse 快捷键)向后循环:父 ← 子1 ← 子2 ← … ← 父

    这允许你在主对话和专门的子代理工作之间无缝切换。


# 配置#

你可以通过配置自定义内置代理或创建自己的代理。代理可以通过两种方式配置:


## JSON#

在 opencode.json 配置文件中配置代理:

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "agent": {
4    "build": {
5      "mode": "primary",
6      "model": "anthropic/claude-sonnet-4-20250514",
7      "prompt": "{file:./prompts/build.txt}",
8      "tools": {
9        "write": true,
10        "edit": true,
11        "bash": true
12      }
13    },
14    "plan": {
15      "mode": "primary",
16      "model": "anthropic/claude-haiku-4-20250514",
17      "tools": {
18        "write": false,
19        "edit": false,
20        "bash": false
21      }
22    },
23    "code-reviewer": {
24      "description": "审查代码的最佳实践和潜在问题",
25      "mode": "subagent",
26      "model": "anthropic/claude-sonnet-4-20250514",
27      "prompt": "你是一个代码审查员。专注于安全性、性能和可维护性。",
28      "tools": {
29        "write": false,
30        "edit": false
31      }
32    }
33  }
34}

## Markdown#

你也可以使用 markdown 文件定义代理。将它们放在:

  • 全局:~/.config/opencode/agents/
  • 项目级:.opencode/agents/
markdown
1<!-- ~/.config/opencode/agents/review.md -->
2---
3description: 审查代码质量和最佳实践
4mode: subagent
5model: anthropic/claude-sonnet-4-20250514
6temperature: 0.1
7tools:
8  write: false
9  edit: false
10  bash: false
11---
12
13你处于代码审查模式。专注于:
14
15- 代码质量和最佳实践
16- 潜在的错误和边缘情况
17- 性能影响
18- 安全考虑
19
20提供建设性反馈,但不直接进行更改。

markdown 文件名成为代理名称。例如,review.md 创建一个 review 代理。


# 选项#

让我们详细了解这些配置选项。


## Description#

使用 description 选项提供代理功能和使用时机的简要描述。

json
1{
2  "agent": {
3    "review": {
4      "description": "审查代码的最佳实践和潜在问题"
5    }
6  }
7}

这是一个必需的配置选项。


## Temperature#

使用 temperature 配置控制 LLM 响应的随机性和创造性。

较低的值使响应更集中和确定性,而较高的值增加创造性和变化性。

json
1{
2  "agent": {
3    "plan": {
4      "temperature": 0.1
5    },
6    "creative": {
7      "temperature": 0.8
8    }
9  }
10}

温度值通常在 0.0 到 1.0 之间:

  • 0.0-0.2:非常集中和确定性的响应,适合代码分析和规划
  • 0.3-0.5:具有一定创造性的平衡响应,适合一般开发任务
  • 0.6-1.0:更具创造性和变化的响应,适合头脑风暴和探索

如果未指定温度,OpenCode 使用模型特定的默认值;大多数模型通常为 0,Qwen 模型为 0.55。


## Max steps#

控制代理在被迫仅以文本响应之前可以执行的最大代理迭代次数。这允许希望控制成本的用户对代理操作设置限制。

如果未设置,代理将继续迭代,直到模型选择停止或用户中断会话。

json
1{
2  "agent": {
3    "quick-thinker": {
4      "description": "有限迭代的快速推理",
5      "prompt": "你是一个快速思考者。用最少的步骤解决问题。",
6      "maxSteps": 5
7    }
8  }
9}

当达到限制时,代理会收到一个特殊的系统提示,指示它以工作总结和推荐的剩余任务进行响应。


## Disable#

设置为 true 以禁用代理。

json
1{
2  "agent": {
3    "review": {
4      "disable": true
5    }
6  }
7}

## Prompt#

使用 prompt 配置为此代理指定自定义系统提示文件。提示文件应包含特定于代理目的的指令。

json
1{
2  "agent": {
3    "review": {
4      "prompt": "{file:./prompts/code-review.txt}"
5    }
6  }
7}

此路径相对于配置文件所在位置。因此这适用于全局 OpenCode 配置和项目特定配置。


## Model#

使用 model 配置覆盖此代理的模型。适用于为不同任务使用优化的不同模型。例如,用于规划的较快模型,用于实现的更强大模型。

提示: 如果你不指定模型,主代理使用全局配置的模型,而子代理将使用调用子代理的主代理的模型。

json
1{
2  "agent": {
3    "plan": {
4      "model": "anthropic/claude-haiku-4-20250514"
5    }
6  }
7}

OpenCode 配置中的模型 ID 使用格式 provider/model-id。例如,如果你使用 OpenCode Zen,你可以使用 opencode/gpt-5.1-codex 来使用 GPT 5.1 Codex。


## Tools#

使用 tools 配置控制此代理中可用的工具。你可以通过将特定工具设置为 true 或 false 来启用或禁用它们。

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "tools": {
4    "write": true,
5    "bash": true
6  },
7  "agent": {
8    "plan": {
9      "tools": {
10        "write": false,
11        "bash": false
12      }
13    }
14  }
15}

注意: 代理特定的配置会覆盖全局配置。

你也可以使用通配符一次控制多个工具。例如,要禁用 MCP 服务器的所有工具:

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "agent": {
4    "readonly": {
5      "tools": {
6        "mymcp_*": false,
7        "write": false,
8        "edit": false
9      }
10    }
11  }
12}

了解更多关于工具。


## Permissions#

你可以配置权限来管理代理可以执行的操作。OpenCode 支持简单的字符串权限("ask" / "allow" / "deny")或细粒度的对象权限。

支持的权限类型包括 edit、bash、webfetch 以及 task(控制子代理调用)等。

简单配置

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "permission": {
4    "edit": "deny"
5  }
6}

细粒度配置

你可以使用 glob 模式对特定命令或任务进行控制:

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "agent": {
4    "build": {
5      "permission": {
6        "bash": {
7          "git push": "ask",
8          "git *": "allow",
9          "*": "deny"
10        },
11        "task": {
12          "orchestrator-*": "allow",
13          "*": "ask"
14        }
15      }
16    }
17  }
18}

了解更多关于权限。


## Additional Options#

除了上述标准配置外,任何未定义的选项都会直接传递给模型提供商。这允许你使用特定于提供商的功能。

json
1{
2  "agent": {
3    "reasoning": {
4      "model": "openai/o3-mini",
5      "reasoningEffort": "high"
6    }
7  }
8}

## Mode#

使用 mode 配置控制代理的模式。mode 选项用于确定代理如何使用。

json
1{
2  "agent": {
3    "review": {
4      "mode": "subagent"
5    }
6  }
7}

mode 选项可以设置为 primary、subagent 或 all。如果未指定 mode,默认为 all。


## Hidden#

使用 hidden: true 从 @ 自动完成菜单中隐藏子代理。适用于只应由其他代理通过 Task 工具以编程方式调用的内部子代理。

json
1{
2  "agent": {
3    "internal-helper": {
4      "mode": "subagent",
5      "hidden": true
6    }
7  }
8}

这只影响自动完成菜单中的用户可见性。如果权限允许,隐藏的代理仍然可以被模型通过 Task 工具调用。

注意: 仅适用于 mode: subagent 代理。


# 创建代理#

你可以使用以下命令创建新代理:

bash
opencode agent create

此交互式命令将:

  1. 询问保存代理的位置;全局或项目特定。
  2. 代理应该做什么的描述。
  3. 生成适当的系统提示和标识符。
  4. 让你选择代理可以访问的工具。
  5. 最后,使用代理配置创建一个 markdown 文件。

# 用例#

以下是不同代理的一些常见用例。

  • Build 代理:启用所有工具的完整开发工作
  • Plan 代理:分析和规划而不进行更改
  • Review 代理:具有只读访问权限和文档工具的代码审查
  • Debug 代理:专注于启用 bash 和 read 工具的调查
  • Docs 代理:具有文件操作但没有系统命令的文档编写

# 示例#

以下是你可能会发现有用的一些示例代理。

提示: 你有想分享的代理吗?提交 PR↗。


## 文档代理#

markdown
1<!-- ~/.config/opencode/agents/docs-writer.md -->
2---
3description: 编写和维护项目文档
4mode: subagent
5tools:
6  bash: false
7---
8
9你是一名技术作家。创建清晰、全面的文档。
10
11专注于:
12
13- 清晰的解释
14- 适当的结构
15- 代码示例
16- 用户友好的语言

## 安全审计员#

markdown
1<!-- ~/.config/opencode/agents/security-auditor.md -->
2---
3description: 执行安全审计并识别漏洞
4mode: subagent
5tools:
6  write: false
7  edit: false
8---
9
10你是安全专家。专注于识别潜在的安全问题。
11
12寻找:
13
14- 输入验证漏洞
15- 身份验证和授权缺陷
16- 数据暴露风险
17- 依赖项漏洞
18- 配置安全问题