OpenCode 的核心设计:主 Agent 与子 Agent 的分层架构

2026 年 1 月,Anthropic 做了一件事:封禁第三方工具调用 Claude Code 服务。

消息传开的那一周,OpenCode 的 GitHub Star 数开始疯长。前五个月攒了 5 万颗星,1 月之后短短几周又多了 3 万。到今天,这个数字已经超过 17 万。

很多人说 OpenCode 是"Claude Code 被封禁的最大受益者"。

但事情没那么简单。

一个开源项目用不到一年时间做到 800 万月活,如果只是因为竞争对手封禁了入口,撑不起这个量级。真正让开发者留下来的,是它背后那套经得起推敲的架构设计。

目录

一、发生了什么

二、本质上是供应商锁定的反弹

三、核心机制拆解:主 Agent 与子 Agent 的分层架构

四、一个真实的对比:同样改代码,差别在哪里

五、工程落地启示

六、最后问一个问题

一、发生了什么

OpenCode 的起点很小。2025 年 6 月在 GitHub 发布,创始团队最开始只有几个人。

真正的转折点在 2026 年 1 月。Anthropic 开始封禁第三方工具通过 Claude Pro / Claude Max 订阅账号调用 Claude 模型的行为。OpenCode 之前支持用户用 Claude 订阅直接登录,原理是伪装成 Claude Code 的客户端身份,发送相同的 OAuth 请求头。

Anthropic 的反应分三步:技术封锁、账号封禁、法律行动。

OpenCode 的回应也很干脆------直接移除了对 Claude Pro/Max 订阅和 Claude API key 的支持。

但社区的反应比这两边都快。开发者开始大量涌入。到 2026 年 3 月,OpenCode 的 GitHub Star 数达到 12.8 万,贡献者超过 800 人。月活跃开发者从 65 万飙到 650 万。

安全博主 Daniel Miessler 做了一个直接对比实验:用 OpenCode 从零写一个完整博客。他的结论是------"OpenCode 和 Claude Code 一样好,至少在这个任务上。"

他原本以为 Claude Code 的优势在于某种"秘密酱汁"------上下文管理、记忆维护、多文件多步骤的编排能力。但实际用下来发现,OpenCode 做得同样好。

他的判断是:Claude Code 并不秘密。可能就是围绕上下文窗口和记忆管理的优秀工程实践。一旦其他工具实现了类似的编排策略,差距就会迅速缩小。

二、本质上是供应商锁定的反弹

这件事的本质不是"Claude 不让用了"。

本质是开发者对"供应商锁定"的集体反弹。

过去两年,AI 编程工具市场被几个巨头瓜分。Cursor 每月 20 美元,绑定了自己的模型套餐。Claude Code 按 Token 计费,只能用 Anthropic 的模型。GitHub Copilot 每月 10 美元,只能用 OpenAI。

每个工具都在努力把用户圈在自己的生态里。

OpenCode 走了一条完全相反的路:模型无关。

它支持 75 种以上的模型提供商------Anthropic、OpenAI、Google Gemini、DeepSeek、本地部署的 Ollama 和 llama.cpp。你用谁的 API Key,就连谁的模型。工具本身不抽成、不锁定、不干预。

一个 Reddit 高赞评论说得更直接:「Anthropic 正在激励用户留在自己的产品生态里,而不是在 API 之上构建外部工具。」

开发者用脚投票的结果是:OpenCode 成了 GitHub 上星标最高的开源编程 Agent。

但模型无关只是"为什么用"的理由。真正让开发者"留下来"的,是它内部那套主 Agent 与子 Agent 的分层架构。

三、核心机制拆解:主 Agent 与子 Agent 的分层架构

OpenCode 采用客户端-服务器架构,基于 TypeScript 和 Bun 运行时构建。整体分为四层:客户端层、核心服务层、扩展层、模型适配层。

但最值得关注的设计,是核心服务层里的 Agent 系统。

OpenCode 的核心设计理念,是以"代理模式工作流"为核心,将复杂编程任务拆分为"主代理 + 子代理"的协作模式。

3.1 主 Agent 与子 Agent 的定位差异

主 Agent 出现在 OpenCode 的 Agent 切换器中,是用户直接交互的对象。子 Agent 通过 Task 工具被主 Agent 生成,不能直接被用户选中。

本质上是这样分工的:

主 Agent 负责理解用户的整体目标、规划执行步骤、统筹全局。子 Agent 负责拆出去干具体的小任务------查文档、改某个模块、写测试、跑命令、整理结果。

你可以把子 Agent 理解成主 Agent 派出去的专项助手。主 Agent 负责整体目标和主线判断,子 Agent 负责一个更明确的小任务。

3.2 为什么需要分层

单个 Agent 处理复杂任务时会遇到三个典型问题:

第一,上下文窗口不够用。一个 Agent 既要理解项目全貌,又要处理具体文件的修改细节,上下文很快就会撑爆。

第二,任务无法并行。主 Agent 处理任务是排队的------先做 A、再做 B、再做 C。但很多任务其实可以并行------审查代码和写测试完全可以同时进行。

第三,职责混杂。同一个 Agent 既要做规划,又要写代码,还要做审查。角色不清晰,决策质量就会下降。

分层的核心价值就在于解决这三个问题。

3.3 四层架构中的 Agent 系统

OpenCode 的四层架构从下到上分别是:

用户交互层提供 CLI、TUI、Web 三种接入方式。AI 引擎层通过统一的模型抽象层实现模型热插拔和智能路由。核心能力层是 Agent 系统的所在地。工具集成层通过标准化接口与外部系统交互。

Agent 系统在核心能力层中包含三个关键组件:

决策中枢:基于 ReAct 框架的思维链推理引擎

记忆管理:短期工作记忆与长期知识库的分层存储

行动规划:动态生成可执行步骤序列的规划器

3.4 主从协作的完整流程

下面这张图展示了主 Agent 与子 Agent 协作的典型流程:

以一个实际的开源插件 Blueprint 为例,它实现了五个专门化的 Agent:

Agent

类型

职责

Planner

主 Agent

调研代码库、访谈用户、生成结构化实施计划

Orchestrator

主 Agent

执行计划、创建 git worktree、委派任务、验证结果

Investigator

子 Agent

深度代码库调研------目录结构、代码模式、依赖关系

Reviewer

子 Agent

审查计划和代码,发现遗漏和范围蔓延

Worker

子 Agent

在隔离的 git worktree 中实现单个原子任务

这里有一个关键的设计约束:只有 Worker Agent 可以写源代码。Planner、Orchestrator、Investigator、Reviewer 被限制为只能在 .blueprint/ 目录内写入文件。

这个约束解决了一个很实际的问题:职责边界清晰。做规划的就做规划,写代码的就写代码,审查的就审查。不会出现一个 Agent 既当运动员又当裁判员的情况。

3.5 Self-Healing 自愈机制

OpenCode 还有一个不太常被提及但很重要的设计:Self-Healing 自愈机制。

核心思想是:任务中断后可以从断点继续。

实际运行中,LLM 的调用可能超时、网络可能闪断、上下文可能溢出。如果没有自愈机制,整个任务就要从头开始。有了断点续传,损失就被控制在了局部。

四、一个真实的对比:同样改代码,差别在哪里

假设你要给一个项目添加用户认证功能,涉及三个文件的修改和一个新文件的创建。

没有分层架构的 Agent:

一个 Agent 从头干到尾。它要先理解项目结构,然后写代码,然后自己审查。过程中它的上下文会越来越臃肿------既要记住项目全局,又要关注每个文件的细节。改到第三个文件的时候,前面两个文件的上下文可能已经被挤出去了。结果就是顾此失彼。

有分层架构的 OpenCode:

主 Agent 先派一个 Investigator 子 Agent 去调研项目结构------目录怎么组织的、用了什么框架、现有的认证方式是什么。调研结果写回主 Agent 的记忆里。

然后主 Agent 基于调研结果生成实施计划,派 Worker 子 Agent 去改代码。每个 Worker 只负责一个原子任务,在隔离的 git worktree 里工作。改完了派 Reviewer 子 Agent 去审查。

每个子 Agent 的上下文是干净的------它只关注自己那一亩三分地。主 Agent 的上下文也是干净的------它只关注整体目标和状态协调。

分层的本质不是"多几个 Agent",而是让每个 Agent 的上下文窗口只装它该装的东西。

五、工程落地启示

说了这么多 OpenCode 的设计,对我们自己有什么启发?

第一,上下文隔离是 Agent 系统稳定运行的前提。

一个 Agent 的上下文窗口再大也是有限的。把任务拆细、把职责拆清,让每个子 Agent 只关注一件事,比训练一个"万能 Agent"要靠谱得多。

第二,主 Agent 不要做具体的事。

主 Agent 的核心职责是规划、调度、决策。具体执行交给子 Agent。如果主 Agent 既要做规划又要写代码,它的决策质量一定会下降。

第三,工具级别的权限控制比提示词约束更可靠。

Blueprint 的做法是在工具层面通过 tool.execute.before 钩子强制执行权限控制,而不是靠提示词告诉 Agent"你不要写源代码"。工程上能用代码保证的事,不要依赖提示词。

第四,自愈机制不是可选项。

在生产环境中,LLM 调用失败是常态,不是异常。设计系统时要假设每一步都可能失败,并且有办法从失败中恢复。

六、最后问一个问题

你的系统里,Agent 的上下文是共享的还是隔离的?

如果是共享的------所有 Agent 共用一个巨大的上下文窗口------那当任务变复杂的时候,上下文污染几乎是必然的。

如果是隔离的------每个子 Agent 有自己的上下文,主 Agent 只负责协调------那你就已经在用分层架构的思路了。

想清楚这个问题,比学会用 OpenCode 本身更重要。

因为工具会变,但架构思想不会。