OpenCode 代理(Agent)配置详解

代理是 OpenCode 中专门化的 AI 助手,每个代理可以配置独立的系统提示词、模型、工具访问权限和行为约束,用于处理特定类型的任务和工作流程。你可以在会话期间随时切换代理,或通过 @代理名称 的方式直接调用特定代理。


代理类型

OpenCode 中的代理分为两种类型,它们的调用方式和职责不同:

类型 说明 切换方式
主代理(primary) 你直接交互的主要助手,处理主要对话流程。工具访问权限通过 permission 配置 Tab 键循环切换,或使用配置的 agent_cycle 快捷键
子代理(subagent) 由主代理调用来执行专门任务的助手,运行在独立的子会话中,不影响主会话上下文 主代理自动调用,或在消息中用 @代理名称 手动调用

内置代理

OpenCode 内置了 4 个开箱即用的代理,以及 3 个自动运行的系统代理:

1、Build(主代理)

默认的主代理,启用了所有工具,适合需要完整文件操作和系统命令访问权限的日常开发工作。这是你最常使用的代理。

2、Plan(主代理)

专为代码分析和规划设计的受限代理。默认情况下,以下操作均会触发审批提示(设为 ask):

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

当你希望 LLM 分析代码、提出建议或创建执行计划,但不希望它对代码库进行任何实际修改时,请切换到 Plan 代理。

3、General(子代理)

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

4、Explore(子代理)

只读子代理,无法修改任何文件。适合快速查找文件、搜索代码关键字或回答关于代码库结构的问题,速度快且不会产生副作用。

5、系统代理(隐藏)

以下三个代理由 OpenCode 自动管理,不会出现在代理切换列表中,无需也无法手动选择:

代理名称 职责 触发时机
Compaction 将过长的上下文压缩为较小的摘要,防止超出模型上下文限制 上下文长度达到阈值时自动运行
Title 为会话生成简短标题 新会话开始后自动运行
Summary 为会话创建摘要 需要会话摘要时自动运行

代理的使用方式

1、切换主代理

在会话期间按 Tab 键可以在所有主代理之间循环切换,按 Shift+Tab 反向切换。也可以使用 <Leader>a 打开代理列表直接选择。

2、调用子代理

子代理有两种调用方式:

  • 自动调用:主代理根据任务性质判断需要某个子代理时,会自动调用并将任务委派给它
  • 手动 @ 调用:在消息中使用 @代理名称 直接指定由哪个子代理处理
@general help me search for this function across the codebase

3、在父子会话间导航

子代理运行时会创建独立的子会话,可以使用快捷键在父会话和各子会话之间导航:

快捷键 操作
<Leader>+→session_child_cycle 向前循环:父会话 → 子会话1 → 子会话2 → … → 父会话
<Leader>+←session_child_cycle_reverse 向后循环:父会话 ← 子会话1 ← 子会话2 ← … ← 父会话
<Leader>+↑session_parent 直接返回父会话

两种配置方式

代理可以通过 JSON 配置或 Markdown 文件两种方式定义,效果相同,按需选择:

方式一:在 opencode.json 中配置

实例

{
  "$schema": "https://opencode.ai/config.json",
  "agent": {
    "build": {                                           // 覆盖内置 build 代理的配置
      "mode": "primary",
      "model": "anthropic/claude-sonnet-4-20250514",
      "prompt": "{file:./prompts/build.txt}",           // 从文件加载系统提示词
      "tools": {
        "write": true,
        "edit": true,
        "bash": true
      }
    },
    "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 文件

在以下路径创建 .md 文件,文件名即为代理名称(如 review.md 对应代理名 review):

  • 全局:~/.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.

配置选项详解

description(描述)

代理的功能说明,在代理列表和 @ 自动补全菜单中显示,帮助使用者和主代理判断何时调用该代理。对于自定义代理,此项为必填

实例

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

mode(模式)

控制代理的使用方式,可以设置为以下三个值:

说明
"primary" 主代理,出现在 Tab 切换列表中,用于主对话
"subagent" 子代理,不在 Tab 切换列表中,由主代理调用或通过 @ 手动调用
"all" 同时作为主代理和子代理使用(未指定 mode 时的默认值)

实例

{
  "agent": {
    "review": {
      "mode": "subagent"    // 只作为子代理使用,不出现在主代理切换列表中
    }
  }
}

model(模型)

为代理指定特定的模型,覆盖全局配置的默认模型。格式为 provider/model-id。适合针对不同任务使用不同的模型,例如规划任务用较快的小模型,代码生成用较强大的大模型:

实例

{
  "agent": {
    "plan": {
      "model": "anthropic/claude-haiku-4-20250514"    // 规划任务使用速度更快的 Haiku 模型
    },
    "build": {
      "model": "anthropic/claude-sonnet-4-20250514"   // 开发任务使用能力更强的 Sonnet 模型
    }
  }
}

如果未指定 model,主代理会使用全局配置的默认模型,子代理会继承调用它的主代理所使用的模型。运行 opencode models 可查看所有可用模型列表。

prompt(系统提示词)

为代理指定自定义系统提示词,可以直接写字符串,也可以通过 {file:./路径} 语法从外部文件加载。路径相对于配置文件所在位置:

实例

{
  "agent": {
    "review": {
      "prompt": "{file:./prompts/code-review.txt}"
      // 从 opencode.json 同目录下的 prompts/code-review.txt 读取提示词
      // 适合提示词内容较长时,将其单独维护在文本文件中
    }
  }
}

temperature(温度)

控制模型输出的随机性。值越低输出越确定,适合需要精确结果的任务;值越高输出越多样,适合创意类任务:

温度范围 输出特点 适用场景
0.0 – 0.2 高度集中、确定性强 代码分析、规划、调试、审查
0.3 – 0.5 平衡,兼顾准确与灵活 一般开发任务、文档编写
0.6 – 1.0 较有创意和多样性 头脑风暴、方案探索、创意写作

实例

{
  "agent": {
    "analyze": {
      "temperature": 0.1,                          // 分析任务:高确定性
      "prompt": "{file:./prompts/analysis.txt}"
    },
    "build": {
      "temperature": 0.3                           // 开发任务:平衡
    },
    "brainstorm": {
      "temperature": 0.7,                          // 头脑风暴:更有创意
      "prompt": "{file:./prompts/creative.txt}"
    }
  }
}

未指定 temperature 时,OpenCode 使用模型的默认值——大多数模型默认为 0,Qwen 系列模型默认为 0.55

steps(最大步数)

控制代理在被强制以纯文本响应之前,最多可以执行的迭代次数(即调用工具的轮数)。适合需要控制成本或防止代理无限循环的场景:

实例

{
  "agent": {
    "quick-thinker": {
      "description": "Fast reasoning with limited iterations",
      "prompt": "You are a quick thinker. Solve problems with minimal steps.",
      "steps": 5    // 最多执行 5 次迭代,超出后代理会输出当前进度摘要和剩余建议任务
    }
  }
}

未设置 steps 时,代理会持续迭代直到模型主动停止,或用户手动中断。

旧版 maxSteps 字段已弃用,请统一使用 steps

tools(工具访问)

控制该代理可以使用哪些工具,将工具名设为 truefalse。代理级配置会覆盖全局配置

实例

{
  "$schema": "https://opencode.ai/config.json",
  "tools": {
    "write": true,     // 全局:允许写文件
    "bash": true       // 全局:允许 bash 命令
  },
  "agent": {
    "plan": {
      "tools": {
        "write": false,    // plan 代理:覆盖全局设置,禁用写文件
        "bash": false      // plan 代理:覆盖全局设置,禁用 bash
      }
    }
  }
}

也可以使用通配符批量控制工具,例如禁用某个 MCP 服务器的所有工具:

实例

{
  "agent": {
    "readonly": {
      "tools": {
        "mymcp_*": false,    // 禁用 mymcp 服务器的所有工具(Glob 匹配)
        "write": false,
        "edit": false
      }
    }
  }
}

permission(权限)

为代理配置更细粒度的权限控制,可以针对每种操作设置 "allow"(允许)、"ask"(询问)或 "deny"(拒绝):

实例

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "deny"         // 全局:默认禁止所有文件编辑
  },
  "agent": {
    "build": {
      "permission": {
        "edit": "ask"      // build 代理:覆盖全局设置,编辑前需要审批
      }
    }
  }
}

对于 bash 工具,还可以精细到具体命令,支持 Glob 通配符,且最后匹配的规则优先(建议将 * 通配规则放前面,具体规则放后面):

实例

{
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",             // 兜底:所有 bash 命令默认需要审批
          "git status *": "allow",// git status 相关命令直接允许(更具体,优先匹配)
          "grep *": "allow"       // grep 搜索命令直接允许
        }
      }
    }
  }
}

在 Markdown 代理文件中,也可以在 frontmatter 中配置权限:

实例

# 文件路径:~/.config/opencode/agents/review.md
---
description
: Code review without edits
mode
: subagent
permission
:
  edit
: deny          # 禁止所有文件编辑
  bash
:
    "*"
: ask          # bash 命令默认需要审批
    "git diff"
: allow # 允许 git diff
    "git log*"
: allow # 允许 git log 及其变体
    "grep *"
: allow   # 允许 grep 搜索
  webfetch
: deny      # 禁止访问外部 URL
---

Only analyze code and suggest changes.

permission.task(任务权限)

控制该代理可以通过 Task 工具调用哪些子代理,支持 Glob 匹配。设为 "deny" 时,子代理会从 Task 工具描述中完全移除,模型不会尝试调用它:

实例

{
  "agent": {
    "orchestrator": {
      "mode": "primary",
      "permission": {
        "task": {
          "*": "deny",                  // 兜底:默认禁止调用所有子代理
          "orchestrator-*": "allow",   // 允许调用 orchestrator- 开头的子代理
          "code-reviewer": "ask"        // 调用 code-reviewer 前需要用户确认
          // 最后匹配的规则优先:orchestrator-planner 同时匹配 * 和 orchestrator-*,
          // 因为 orchestrator-* 在后面,所以结果为 allow
        }
      }
    }
  }
}

hidden(隐藏)

将子代理从 @ 自动补全菜单中隐藏,仅允许通过 Task 工具以编程方式调用,适合只应由其他代理内部调用的工具代理:

实例

{
  "agent": {
    "internal-helper": {
      "mode": "subagent",    // hidden 仅对 subagent 有效
      "hidden": true         // 隐藏后,用户的 @ 补全菜单中不会出现此代理,
                             // 但权限允许时,模型仍可通过 Task 工具调用它
    }
  }
}

color(颜色)

自定义代理在 UI 中的显示颜色。支持十六进制颜色值或主题颜色关键字(primarysecondaryaccentsuccesswarningerrorinfo):

实例

{
  "agent": {
    "creative": {
      "color": "#ff6b6b"      // 使用十六进制颜色
    },
    "code-reviewer": {
      "color": "accent"       // 使用主题颜色关键字
    }
  }
}

top_p(采样多样性)

top_ptemperature 之外的另一种控制输出多样性的参数,值范围 0.0 – 1.0,值越低输出越集中,值越高输出越多样:

实例

{
  "agent": {
    "brainstorm": {
      "top_p": 0.9    // 较高的 top_p,增加输出多样性
    }
  }
}

disable(禁用)

将代理设为禁用状态,禁用后代理不会出现在选择列表中:

实例

{
  "agent": {
    "review": {
      "disable": true    // 禁用该代理,不影响其他代理
    }
  }
}

其他模型参数

代理配置中任何未被识别的字段,都会作为模型参数直接传递给服务提供商。这允许你使用提供商特定的高级功能:

实例

{
  "agent": {
    "deep-thinker": {
      "description": "Agent that uses high reasoning effort for complex problems",
      "model": "openai/gpt-5",
      "reasoningEffort": "high",    // OpenAI 推理力度参数,直接透传给 OpenAI API
      "textVerbosity": "low"        // OpenAI 响应详细程度参数
    }
  }
}

透传参数因服务提供商和模型而异,请查阅对应提供商的 API 文档确认可用参数名称。


快速创建代理

除了手动编写配置文件,也可以使用交互式命令行工具快速生成代理:

opencode agent create

该命令会依次引导你完成以下步骤:

  1. 选择代理的保存位置(全局 ~/.config/opencode/agents/ 或项目级 .opencode/agents/
  2. 描述代理的职责和目标
  3. 自动生成合适的系统提示词和代理标识符
  4. 选择代理可以访问的工具
  5. 在选定位置生成包含完整配置的 Markdown 文件

代理示例

文档写作代理

实例

# 文件路径:~/.config/opencode/agents/docs-writer.md
---
description
: Writes and maintains project documentation
mode
: subagent
tools
:
  bash
: false    # 禁用 bash,文档写作不需要执行命令
---

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

常见使用场景

场景 推荐代理配置
日常开发,需要完整工具权限 使用内置 Build 代理
分析代码、制定方案,不希望修改文件 切换到内置 Plan 代理
只读查询代码库结构或关键字 通过 @explore 调用内置 Explore 子代理
并行执行多个独立任务 通过 @general 调用多个 General 子代理并行处理
对代码进行安全性或质量审查 自定义只读子代理(禁用 write/edit),设置低温度(0.1)
控制成本,限制 AI 执行步数 配置 steps 参数限制最大迭代次数