跳转到内容

代理

配置和使用专门的代理。

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

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


类型

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


主代理

主代理是您直接交互的主要助手。您可以使用 Tab 键或配置的 switch_agent 快捷键来循环切换它们。这些代理处理您的主要对话。工具访问通过权限进行配置——例如,Build 启用了所有工具,而 Plan 则受到限制。

OpenCode 内置了两个主代理:BuildPlan。我们将在下面介绍它们。


子代理

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

OpenCode 内置了两个子代理:GeneralExplore。我们将在下面介绍它们。


内置代理

OpenCode 内置了两个主代理和两个子代理。


使用 Build

模式primary

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


使用 Plan

模式primary

一个专为规划和分析设计的受限代理。我们使用权限系统来为您提供更多控制权,并防止意外更改。 默认情况下,以下所有项均设置为 ask

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

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


使用 General

模式subagent

一个用于研究复杂问题和执行多步骤任务的通用代理。拥有完整的工具访问权限(todo 除外),因此可以在需要时修改文件。可用于并行运行多个工作单元。


使用 Explore

模式subagent

一个用于探索代码库的快速只读代理。无法修改文件。当您需要按模式快速查找文件、搜索代码中的关键字或回答有关代码库的问题时,请使用此代理。


使用 Compaction

模式primary

隐藏的系统代理,将长上下文压缩为较小的摘要。它会在需要时自动运行,且无法在 UI 中选择。


使用 Title

模式primary

隐藏的系统代理,用于生成简短的会话标题。它会自动运行,且无法在 UI 中选择。


使用 Summary

模式primary

隐藏的系统代理,用于创建会话摘要。它会自动运行,且无法在 UI 中选择。


用法

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

  2. 子代理可以通过以下方式调用:

    • 由主代理根据其描述自动调用以执行专门任务。

    • 通过在消息中 @ 提及子代理来手动调用。例如:

      @general help me search for this function
  3. 会话间导航:当子代理创建自己的子会话时,您可以使用以下方式在父会话和所有子会话之间导航:

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

    这使您可以在主对话和专门的子代理工作之间无缝切换。


配置

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


JSON

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

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

您还可以使用 Markdown 文件定义代理。将它们放在:

  • 全局:~/.config/opencode/agents/
  • 项目级:.opencode/agents/
~/.config/opencode/agents/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.

Markdown 文件名即为代理名称。例如,review.md 会创建一个名为 review 的代理。


选项

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


描述

使用 description 选项提供代理的功能及使用场景的简要描述。

opencode.json
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}

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


温度

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

较低的值使响应更加集中和确定,而较高的值则增加创造力和多样性。

opencode.json
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}

温度值通常范围为 0.0 到 1.0:

  • 0.0-0.2:非常集中和确定性的响应,适合代码分析和规划
  • 0.3-0.5:平衡的响应,兼顾一定创造力,适合一般开发任务
  • 0.6-1.0:更有创造力和多样性的响应,适合头脑风暴和探索
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}"
}
}
}

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


最大步数

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

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

opencode.json
{
"agent": {
"quick-thinker": {
"description": "Fast reasoning with limited iterations",
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
"steps": 5
}
}
}

当达到限制时,代理会收到一个特殊的系统提示词,指示其回复工作摘要和建议的剩余任务。


禁用

设置为 true 以禁用代理。

opencode.json
{
"agent": {
"review": {
"disable": true
}
}
}

提示词

使用 prompt 配置为代理指定自定义系统提示词文件。提示词文件应包含针对代理用途的具体指令。

opencode.json
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}

此路径相对于配置文件所在位置。因此它同时适用于全局 OpenCode 配置和项目级配置。


模型

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

opencode.json
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}

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


工具

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

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": true,
"bash": true
},
"agent": {
"plan": {
"tools": {
"write": false,
"bash": false
}
}
}
}

您还可以使用通配符同时控制多个工具。例如,要禁用 MCP 服务器中的所有工具:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}

了解更多关于工具的信息


权限

您可以配置权限来管理代理可以执行的操作。目前,editbashwebfetch 工具的权限可以配置为:

  • "ask" — 运行工具前提示审批
  • "allow" — 允许所有操作,无需审批
  • "deny" — 禁用该工具
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}

您可以按代理覆盖这些权限。

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
}
}
}

您还可以在 Markdown 代理中设置权限。

~/.config/opencode/agents/review.md
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash:
"*": ask
"git diff": allow
"git log*": allow
"grep *": allow
webfetch: deny
---
Only analyze code and suggest changes.

您可以为特定的 bash 命令设置权限。

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}

这可以使用 glob 模式。

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}

您还可以使用 * 通配符来管理所有命令的权限。 由于最后匹配的规则优先,请将 * 通配符放在前面,将具体规则放在后面。

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}

了解更多关于权限的信息


模式

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

opencode.json
{
"agent": {
"review": {
"mode": "subagent"
}
}
}

mode 选项可以设置为 primarysubagentall。如果未指定 mode,则默认为 all


隐藏

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

opencode.json
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}

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


任务权限

使用 permission.task 控制代理可以通过 Task 工具调用哪些子代理。使用 glob 模式进行灵活匹配。

opencode.json
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}

当设置为 deny 时,子代理将从 Task 工具描述中完全移除,因此模型不会尝试调用它。


颜色

使用 color 选项自定义代理在 UI 中的视觉外观。这会影响代理在界面中的显示方式。

使用有效的十六进制颜色(例如 #FF5733)或主题颜色:primarysecondaryaccentsuccesswarningerrorinfo

opencode.json
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}

Top P

使用 top_p 选项控制响应多样性。这是控制随机性的温度替代方案。

opencode.json
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}

值范围从 0.0 到 1.0。较低的值更加集中,较高的值更加多样化。


其他选项

您在代理配置中指定的任何其他选项都将作为模型选项直接传递给提供商。这允许您使用提供商特定的功能和参数。

例如,使用 OpenAI 的推理模型时,您可以控制推理力度:

opencode.json
{
"agent": {
"deep-thinker": {
"description": "Agent that uses high reasoning effort for complex problems",
"model": "openai/gpt-5",
"reasoningEffort": "high",
"textVerbosity": "low"
}
}
}

这些附加选项是模型和提供商特定的。请查阅您的提供商文档以获取可用参数。


创建代理

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

Terminal window
opencode agent create

此交互式命令将:

  1. 询问代理的保存位置——全局或项目级。
  2. 描述代理应该做什么。
  3. 生成合适的系统提示词和标识符。
  4. 让您选择代理可以访问哪些工具。
  5. 最后,创建一个包含代理配置的 Markdown 文件。

使用场景

以下是不同代理的一些常见使用场景。

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

示例

以下是一些您可能会觉得有用的示例代理。


文档代理

~/.config/opencode/agents/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

安全审计代理

~/.config/opencode/agents/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