Knowledge

子智能体的速度与安全博弈:四个 AI 编程平台架构对比

子智能体的速度与安全博弈:四个 AI 编程平台架构对比

封面图:四个 AI 编程智能体在同一条跑道上竞速——OpenCode 身披重甲跑 mode: subagent,Claude Code 轻装冲刺做轻量子任务,CodeBuddy 背着「派生预算 200 / 并发 20」的工具箱,TRAE 抱着固定流程文件;中央天平的「低延迟」与「强隔离」两端各挂一个选手

引子

我的日常开发流程里有一条硬规矩:每个任务在 merge 和 push 之前,都得先过一遍本地子智能体的代码审查。跑得多了就发现,同样是一次代码审查委派,OpenCode 跑完的总时间明显比 Claude Code、CodeBuddy 和 TRAE 长。

我没做过计时对比,也说不清差距具体出在哪一步。于是把四家的官方文档摊开逐条比对,想搞清楚子智能体的运行时到底有什么不一样。比出来的结果指向同一个关键分歧:子智能体是跑在一个全新会话里,还是跑在主会话的一个上下文窗口里。

这不是 bug,而是各家文档里明确定义的架构差异。

范围声明

本文只比较官方文档明确定义的行为,不做基准测试,也不涉及价格与总拥有成本对比。文中出现的「更快」「更慢」均指从文档定义推导出的结构性开销,不是实测数字。

一个反常识的事实

你可能以为是 OpenCode 慢、别人快。但翻开文档会发现,四家都承认子智能体本身是「有延迟」的——只是程度不同。

Claude Code 文档在选型建议里写着:

Latency matters. A subagent that isn’t a fork starts fresh and may need time to gather context.

CodeBuddy 文档的「Performance Considerations」一节更直白:

Latency: Sub-agents start from a clean state each invocation and may add latency as they gather context needed to work effectively.

「每次调用都从干净状态重新起步」这个设计,四家都在用,也都被官方写成了成本。OpenCode 只是在这条路上走得更远了一点。

四家的运行时定义

OpenCode:默认重隔离

mode: subagent 的智能体只在子会话中运行,通过 subagent 工具调用,子会话带全新上下文。

权限模型完全独立——自定义子智能体用自己的 permissions 规则,不是父智能体权限的子集。父智能体还需要显式的 subagent 权限才能启动它。

V2 内置可见的 subagent 模式智能体只有 general 和 explore 两个(官方文档明确写了 V2 没有内置的 scout)。其中 general 默认被拒绝再启动子智能体,explore 只保留 read、glob、grep、webfetch、websearch 这几个动作。

Claude Code:同一会话内的独立上下文

子智能体在单一会话内工作,通过 Agent 工具调用。文档说得很清楚:每个子智能体跑在自己的上下文窗口里,但它没有另起一个会话。

权限默认继承父对话(”Each inherits the parent conversation’s permission rules”),可以用 permissionMode 覆盖;完全仓库副本隔离是 opt-in 的 isolation: worktree。

启动负担上它做了不少官方瘦身:内置 Explore 与 Plan 默认不加载 CLAUDE.md 文件和 git 状态快照。这里有个容易踩的坑——omitClaudeMd 只能关掉 CLAUDE.md,关不掉 git 快照,文档明写 “You can’t change which subagents receive git status. Only Explore and Plan skip it.”

CodeBuddy:轻量上下文 + 显式配额

自己的上下文窗口,通过 Agent 工具派生。内置 Explore、general-purpose、Plan,其中 Explore 的出厂模型声明是 lite 档。

配额是四家里写得最细的:嵌套深度上限 5 层,默认 20 并发,单会话派生预算 200 次。MCP 默认延迟加载,模型先经 ToolSearch 发现工具,再用 DeferExecuteTool 调用。

需要注意 tools 字段省略时会继承主线程全部工具(含全部 MCP 工具)——想要真正的最小权限,必须显式写白名单。

TRAE:声明式配置

通过 Markdown 文件定义,运行于独立上下文窗口,中间推理不污染主对话。

两个限制值得注意:只有内置智能体「Agent」可调用 Subagent,编排自由度最低;model 字段只支持 TRAE 提供的内置模型,不支持自定义模型。

横向对照

维度 OpenCode Claude Code CodeBuddy TRAE
运行时模型 独立子会话 主会话内的独立上下文窗口 独立上下文窗口 独立上下文窗口
权限模型 完全独立,非父级子集 继承父对话,可覆盖 省略则继承全部工具 仅工具白名单
嵌套限制 general 默认不能再启动 默认 3 层 上限 5 层 未单列
并发 / 预算 未单列 默认 20 并发 20 并发 / 200 次派生 未单列
强制轻量路径 subagent: false 默认即轻量 内置轻量 Explore 无

表中「未单列」表示该平台文档没有为此单列条目,不代表它没有这个能力——本文只写文档明确写了的。

OpenCode 的 subagent 三态

命令 frontmatter 的 subagent 字段是三态的:

值 行为
true 一定起子会话,即使所选智能体是 mode: primary
false 一定留在当前会话,即使所选智能体是 mode: subagent
省略 所选智能体是 mode: subagent 时才起子会话

这意味着 subagent: true 与 subagent: false 之间,隔着的正是一次完整的子会话创建开销——后台不等于更轻。后台解决的只是「不阻塞父会话」。

配置示例:

{
  "agents": {
    "orchestrator": {
      "permissions": [
        { "action": "subagent", "resource": "*", "effect": "deny" },
        { "action": "subagent", "resource": "general", "effect": "allow" }
      ]
    },
    "auditor": {
      "mode": "subagent",
      "permissions": [{ "action": "edit", "resource": "*", "effect": "deny" }]
    }
  }
}

权限规则是有序匹配、最后命中者胜出,所以「宽规则在前、例外在后」的写法可读且可预测。

落地建议

答案不是二选一,而是按任务风险分级:

几条有文档依据的提速杠杆:按智能体裁剪工具池(MCP 工具本身就占用上下文);探索类任务单独派小模型;能用内置轻量智能体就别自己写;需要重复背景的任务考虑 Claude Code 的 fork 模式(它能复用父会话的 prompt cache)。

总结

  1. 差异来自架构定义,不是实现缺陷。OpenCode 默认每次派生都起全新子会话、用自己的权限规则;Claude Code 把子智能体放在同一会话的独立上下文窗口里,权限继承父级;CodeBuddy 与 TRAE 也是独立上下文窗口,但各自给了更细的上下文与工具瘦身开关。
  2. 四家都承认「每次重新起步」有延迟成本,OpenCode 只是默认走的是重隔离那条路。唯一被官方明确写为「比全新子智能体更便宜」的路径是 Claude Code 的 fork。
  3. 混合是更优解。把子任务分成「快查」和「重活」两类分别选执行模式,往往比整体迁移平台更划算。

参考资料

📖 Read in English

← Back to all articles