Skip to main content

OpenCode 怎么跳进 / 跳出 sub-agent?

· 4 min read

OpenCode 的 sub-agent 机制和 Claude Code 不太一样——sub-agent 是 primary agent 派出去的临时会话,通过 @ 触发,跑起来后开 child session,主对话窗口原地不动。

  1. 触发方式@explore / @scout / @general 派 sub-agent 干活,主对话窗口不动。
  2. 内置三类 sub-agent:Explore(只读扫代码)、Scout(只读研究外部)、General(通用可并行)。
  3. 跳转快捷键<Leader>+down 进 child session,up 回 parent,<Leader>+l 看所有 session。
  4. 关键约束:sub-agent 上下文独立,主对话讨论过的约束必须显式写在 @ 任务里,否则按通用默认来。
  5. 多层嵌套:sub-agent 又调 sub-agent 就多按几下 up 往上爬。

OpenCode 的 sub-agent 机制和 Claude Code 不太一样——很多人第一次用都会困惑"派出去之后怎么切回来"。下面把这套交互讲清楚。

什么是 sub-agent

sub-agent 是 primary agent 派出去干活的临时会话,通过 @ 触发:

@explore 帮我找 src/components 里所有用到 useEffect 的文件
@scout 查一下 zod 的最新版本有没有 breaking change
@general 同时跑两个调研任务

派出去之后 sub-agent 会开一个 child session,主对话窗口还在原地——这就是和 Claude Code 最不一样的地方。

内置的三类 sub-agent

名称权限典型用途
Explore只读快速扫代码库、找文件、查调用链
Scout只读研究外部依赖、查文档、抓 changelog
General通用啥都能干,支持并行(同时跑多个)

<Leader>+m 打开 model list,能看到内置和自定义 sub-agent 的清单。自定义 sub-agent 在 .opencode/agents/*.md 配置,markdown 文件写 instructions 就行,不写代码也能扩展。

跳转快捷键(默认配置)

默认 Leader 键是 ctrl+x,以下快捷键都是基于默认 keybinds:

动作按键
跳进第一个 child session<Leader>+down
在 child session 之间循环right / left
回到 parent(main agent)up
看所有 session 列表<Leader>+l
在 primary agent 之间切(Build / Plan)Tab / Shift+Tab

关键点up 是回到 main agent 的关键,按一下就回到当前 session 的父级。多层嵌套(sub-agent 又调了 sub-agent)就多按几下 up 往上爬。

right / left 只在 child session 之间切,不跨层级。要回 main agent 必须用 up

上下文是独立的——这是最容易踩的坑

sub-agent 的上下文是独立的——它看不到主对话的历史,只能拿到你 @ 时给它的任务和它自己后续的工具调用结果。

关键约束:主对话里之前讨论过的关键约束、命名约定、代码风格,必须显式写在 @ 任务描述里,否则它只会按通用默认来。

❌ 错误(上下文丢失):
@explore 找 src 里所有用 lodash 的地方

✅ 正确(关键约束带上):
@explore 找 src 里所有用 lodash 的地方,注意我们项目里 lodash 必须用 es 模块导入(import { map } from 'lodash-es'),不是默认导入

写代码改 bug 的 sub-agent 同理——命名约定、错误处理风格、必须用的工具函数,主对话说过的 sub-agent 默认不知道,要么重写一遍,要么干脆把任务直接交给 primary agent 干。

什么时候用 sub-agent vs 直接问主对话

最佳实践

  • 调研类任务(找代码、查文档、对比 API)→ sub-agent,主对话不被刷屏
  • 改动类任务(修 bug、改代码)→ primary agent,能看到完整上下文
  • 多个独立任务并行General sub-agent,能同时跑几个 child session

sub-agent 跑完任务结果会回到主对话窗口——但只回最终结论,中间的工具调用、文件读取、错误重试全部在 child session 里,不会污染主对话的上下文。这正是它的核心价值。

References

  1. OpenCode Agents 文档 —— primary / sub-agent 机制
  2. OpenCode Keybinds 文档 —— 默认快捷键全表