OpenCode 实现多 Agent 协作主要依赖其插件生态,核心思路是主 Agent 编排 + 多个子 Agent 并行执行。以下是完整的实现路径:


1. OpenCode 多 Agent 简介

1.1. 核心架构:Sisyphus 模式

OpenCode 原生是单 Agent 的终端 AI 助手,多 Agent 能力通过插件(主要是 Oh-My-OpenCode)注入。其架构模仿人类开发团队:

角色职责典型 Agent 名称
主 Agent(编排器)任务拆解、调度、依赖管理、结果汇总Sisyphus / Orchestrator
架构师技术方案设计、数据库 Schema、接口契约Oracle / Architect
开发者核心代码实现(前端/后端)Hephaestus / Developer
探索者存量代码库分析、依赖检索Librarian / Explore
测试/审查代码审查、测试用例、Bug 修复Reviewer / QA
文档技术文档、发布说明Document-Writer

主 Agent 收到需求后,自动拆解任务并分发给子 Agent,子 Agent 之间可通过消息传递直接通信(例如后端 Agent 改完接口后通知前端 Agent)。


1.2. 安装与配置

1. 安装 OpenCode 核心

# 方式一:官方脚本
curl -fsSL https://opencode.ai/install | bash

# 方式二:npm
npm install -g opencode-ai

2. 安装多 Agent 插件(Oh-My-OpenCode)

# 需要 Bun 环境
curl -fsSL https://bun.sh/install | bash

# 交互式安装
bunx oh-my-opencode install
# 或 npx
npx oh-my-opencode install

安装过程中会提示选择启用的模型(Claude / GPT / Gemini),并自动写入配置。

3. 配置文件(~/.config/opencode/opencode.json)

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "name": "openai-compatible",
    "baseURL": "https://api.xxx.com/v1",
    "apiKey": "sk-xxx"
  },
  "model": "gpt-5.2",
  "plugins": ["oh-my-opencode"]
}

4. 项目级配置(AGENTS.md)

在项目根目录创建 AGENTS.md,定义项目规范、技术栈和 Agent 行为边界,所有 Agent 都会读取该文件以保持上下文一致。


1.3. 使用方式

1. @符号调用特定 Agent

安装完成后,直接在对话中使用 @ 调用专业 Agent:

@oracle 请设计整体微服务架构图和数据库 Schema
@librarian 搜索项目中所有与支付相关的代码,总结现有逻辑
@frontend-ui-ux-engineer 实现一个响应式侧边栏,支持折叠和动态路由

2. 主 Agent 自动拆解(推荐)

直接描述需求,让主 Agent(Sisyphus)自动判断是否需要拆分:

给现有 API 端点加输入验证,前端表单报错文案也要统一,同时补上集成测试。

主 Agent 会自动创建团队并分配子任务:

  • Alice:处理用户接口验证(范围:src/api/users/)
  • Bob:处理订单接口验证(范围:src/api/orders/)
  • Carol:补集成测试和前端错误提示(依赖 Alice、Bob 完成后启动)

3. 多模型混合调度

不同 Agent 可配置不同模型,实现成本与性能的平衡:

Agent 角色推荐模型原因
主编排 / 架构GPT-5.2 / Claude Opus逻辑强、上下文长
代码探索 / 检索Claude Sonnet速度快、成本低
前端 / 视觉Gemini 3 Pro多模态能力强
文档 / 简单任务Gemini 3 Flash / 本地模型极低成本

1.4. 实战示例:开发邀请码功能

以"给 SaaS 后台加一套邀请码机制"为例,完整协作流程如下:

阶段执行者产出
设计主 Agent / 用户字段定义、接口契约、验收标准
并行 1Agent A(后端)邀请码生成与校验逻辑
并行 2Agent B(前端)管理后台页面
后置Agent C(测试)集成测试、错误提示检查
收口用户Review diff、跑验证、合并

关键约束——给子 Agent 设硬边界:

处理用户注册接口的输入验证。

只允许修改:
- src/api/users/
- src/validators/user.ts

不要修改:
- package.json
- 数据库迁移文件
- 共享 UI 组件

完成后输出:改动说明、风险点、需要谁继续接手

1.5. 关键机制与最佳实践

1. 消息传递(Agent 间通信)

当两个任务共享规则但不值得合并时,子 Agent 可直接通信:

alice → bob:用户邮箱验证我用了 z.string().email(),订单联系人邮箱也统一吗?
bob → alice:统一,我这边也按这个规则走,避免前后端提示不一致。

2. 依赖管理

  • 先拆依赖,再拆 Agent:接口契约必须先定,否则前后端反复返工
  • 后置任务放在依赖链后面:测试 Agent 等开发 Agent 完成后再启动
  • 避免多个 Agent 同时修改同一批文件(如共享 Schema、通用工具函数)

3. 权限隔离

通过 opencode.json 中的 permissions 字段控制每个 Agent 的文件访问范围,防止越界修改。

4. 人工审查兜底

多 Agent 协作不能自动合并,最后必须人工检查:

  • diff 是否超出任务目录
  • 多个 Agent 是否引入了相似但不一致的实现
  • 前后端字段名、错误码是否对齐
  • lint / test / build 是否通过

1.6. 与 Claude Code Agent Teams 的对比

能力Claude CodeOpenCode + OMO
多 Agent 协作✅✅
跨厂商模型混合❌✅(可同时调用 GPT + Claude + Gemini)
异步并行✅✅
消息传递✅✅
开源免费❌✅

1.7. 总结

OpenCode 实现多 Agent 协作的核心公式是:

OpenCode 核心 + Oh-My-OpenCode 插件 + 多模型配置 + 清晰的任务边界

它解决的不是"AI 会不会写代码",而是一个人如何同时推进多块互相关联、但不必串行的任务。关键记住三点:

  1. 先拆依赖,再拆 Agent——不要看见能并行就全并行
  2. 范围写死——子 Agent 不会自动理解"这个文件最好别碰"
  3. 人工兜底——最后的审查和合并必须你自己来做

2. OpenCode 多 agent 协作示例

先重新梳理 多 agent 协作概念,然后介绍内置 agent、自定义配置,最后实战编排模式。

2.1. 核心概念:两类 Agent

OpenCode 的多 agent 体系只有两种角色 :

类型说明调用方式
Primary agent(主 agent)我们直接对话的助手,按 Tab 键切换人工切换
Subagent(子 agent)被主 agent 通过 Task 工具调用的专项助手,也可以在消息里 @ 提及手动调用自动委派或 @名称

内置 primary agent 有两个 :

  • Build(默认):所有工具全开,日常开发用。
  • Plan:受限的规划 agent,文件编辑和 bash 默认设为 ask,适合只做分析不改代码。

内置 subagent 有三个 :

  • General:通用型,几乎全工具权限,可执行多步任务、并行跑多份工作。
  • Explore:快速只读 agent,用于找文件、搜代码、回答代码库问题,不能改文件。
  • Scout:只读的外部文档/依赖调研 agent,可把依赖仓库克隆到 OpenCode 托管缓存里对照源码。

2.2. 基本协作玩法

1. 会话内切换主 agent:Tab 循环切换 Build / Plan,比如先用 Plan 出方案,再切 Build 执行 。

2. @ 提及子 agent:在输入框直接写:

@explore 帮我找一下认证中间件在哪些文件里被引用

3. 主 agent 自动委派:Build/Plan 会根据子 agent 的 description 自行决定何时把任务拆给 Explore/General 并行执行。多个 @general 可以在一条消息里并行派发 。

4. 查看子会话:子 agent 会创建子会话,默认快捷键 Ctrl+X ↓ 进入子会话,↑ 返回父会话 。

2.3. 自定义 Agent

有两种定义方式,效果等价 :

方式 A:opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "agent": {
    "code-reviewer": {
      "description": "审查代码的最佳实践和潜在问题",
      "mode": "subagent",
      "model": "anthropic/claude-sonnet-4-20250514",
      "prompt": "你是代码审查员,重点关注安全、性能和可维护性。",
      "permission": {
        "edit": "deny"
      }
    }
  }
}

方式 B:Markdown 文件

放在全局 ~/.config/opencode/agents/ 或项目级 .opencode/agents/ 下,文件名即 agent 名 :

---
description: 审查代码质量与最佳实践
mode: subagent
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
permission:
  edit: deny
  bash: deny
---
你处于代码审查模式。重点关注:
- 代码质量与最佳实践
- 潜在 bug 和边界情况
- 性能影响与安全风险
给出建设性反馈,不直接修改代码。

2.4. 进阶编排:真正的"多 agent 协作"

1. 用 permission.task 控制调度权限

用 glob 模式精确规定某个 agent 能调用哪些子 agent——这是构建"编排者"模式的关键 :

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

设为 deny 的子 agent 会从 Task 工具描述中彻底移除,模型根本不会尝试调用它 。

2. 控制嵌套深度 subagent_depth

默认值为 1:主 agent 可以启动子 agent,但子 agent 不能再启动子 agent。设为 2 允许再嵌套一层,设为 0 禁止一切子 agent 调用 :

{
  "$schema": "https://opencode.ai/config.json",
  "subagent_depth": 2
}

3. 隐藏内部 agent

hidden: true 让子 agent 不出现在 @ 补全菜单里,但仍可被其他 agent 通过 Task 工具程序化调用,适合做"纯后台 worker" 。

4. 权限细化

权限支持到命令级 glob,例如 :

"permission": {
  "bash": {
    "git push": "ask",
    "git status *": "allow"
  }
}

权限键包括 read、edit、bash、task、webfetch、websearch 等,取值 allow / ask / deny 。

2.5. 实战示例:审查流水线

一个典型的 Subagent-Driven 工作流——主 agent 负责思考和决策,脏活累活全委派 :

你(对话)
  └─ Build(主 agent:设计、决策、修代码)
       ├─ @explore    → 定位相关代码(只读,快)
       ├─ @scout      → 查第三方库上游实现(只读)
       ├─ @general    → 并行执行多个独立改造任务
       └─ @code-reviewer → 改完后审查 diff(edit: deny)

搭配建议:

  • 给 explore、code-reviewer 配便宜快速的模型(如 haiku 级别)省成本,主 agent 用强模型 。
  • 审查类 agent 一律 edit: deny,从机制上防止"审查员顺手改代码"。
  • 给不同 agent 设 color(如 "color": "accent"),UI 里一眼区分谁在说话 。
  • 想让会话默认从规划开始,设 "default_agent": "plan"(必须是 primary agent)。

2.6. 常见坑

  1. 在 opencode.json 里给 markdown 定义的 subagent 加条目时,记得显式写 "mode": "subagent",否则部分版本会把它错误地当成 primary agent 出现在 Tab 切换列表里 。
  2. 子 agent 的 description 要写清楚——主 agent 是根据它决定何时委派的 。
  3. 生态里还有现成插件可以按主会话模型自动路由子 agent 模型(如 opencode-subagent-model-selector),不想手写配置可以看看 。

3. OpenCode 与 LangGraph 协作

OpenCode 与 LangGraph 属于不同层级、不同定位的工具,二者是互补关系而非竞争关系。简单来说:

OpenCode 是"终端编码 Agent"(应用层工具),LangGraph 是"多 Agent 编排框架"(基础设施层)。


3.1. 生态定位对比

维度OpenCodeLangGraph
类别终端编码 Agent(CLI 工具)多 Agent 编排框架
核心模式Single loop(单 Agent 内循环)Graph composition(图编排)
执行模型Hybrid(混合执行)Stateful(有状态持久化)
主要场景终端代码编写、重构、调试复杂工作流编排、多 Agent 协作
多 Agent 原生支持❌ 无完整多 Agent 团队机制✅ 核心能力
状态管理会话级上下文内置 checkpointing、time-travel

3.2. 核心差异

OpenCode:专注终端编码体验

OpenCode 的核心价值在于统一命令、技能、权限和会话路径,提供精美的 TUI 界面、LSP 深度集成和多模型支持。它是一个"单 Agent"产品,本身没有内置完整的多 Agent 团队机制。

LangGraph:专注工作流编排

LangGraph 将 Agent 工作流建模为有向图,通过节点(LLM 调用、工具、条件判断)和边(条件跳转、循环、分支)实现复杂的多步骤推理。它提供内置的 checkpointing,支持长运行任务在崩溃后恢复,以及 time-travel 调试。


3.3. 两者的关系:互补与组合

关系 1:不同层级的工具

两者都属于"自托管 AI 工具"的大范畴,但关注点完全不同:

  • OpenCode 更偏向代码和执行工具使用
  • LangGraph 更偏向工作流编排和状态管理

选择哪个取决于任务是否需要复杂流程图和多节点状态。

关系 2:LangGraph 编排 + OpenCode 执行(最佳实践)

这是目前业界推荐的组合模式:

用 LangGraph(或 CrewAI)做编排层,驱动多个专用 Coding Agent(如 OpenCode)并行工作,构建端到端工程自动化流水线。

例如:

  • LangGraph 定义整体工作流:需求分析 → 架构设计 → 并行编码(前端/后端)→ 代码审查 → 测试 → 部署
  • OpenCode 作为"执行节点"中的具体工具,负责实际的代码编写和文件操作
  • 通过 MCP(Model Context Protocol)或外部 Agent 迁移机制,让 LangGraph 调用 OpenCode 完成具体编码任务

关系 3:与 Codex 的 AgentGraphStore 对比

有趣的是,Codex CLI 的 AgentGraphStore 被描述为"最接近 LangGraph 的竞品抽象",但两者关注点不同:

  • LangGraph 关心"图怎么执行"(编排运行时)
  • AgentGraphStore 关心"图怎么持久化与查询"(拓扑存储)

Codex 把编排留给 ThreadManager,把拓扑存储独立为 trait——未来甚至可以把 LangGraph 风格的执行器接到 AgentGraphStore 上。这种设计思路也适用于 OpenCode 与 LangGraph 的关系:OpenCode 负责终端执行,LangGraph 负责上层编排。


3.4. 实际使用场景

场景推荐方案
个人日常编码、终端交互单独使用 OpenCode
复杂多步骤工作流(需要分支、循环、人工审批)单独使用 LangGraph
企业级 Multi-Agent 流水线LangGraph 编排 + OpenCode 执行
需要跨厂商模型混合的编码任务OpenCode(原生支持多 provider)
需要审计追踪和状态恢复LangGraph(内置 checkpointing)

3.5. 总结

OpenCode 与 LangGraph 的关系可以概括为:

  1. 不是替代品——OpenCode 不会取代 LangGraph 的编排能力,LangGraph 也不会取代 OpenCode 的终端编码体验
  2. 可以组合使用——LangGraph 作为上层编排器,OpenCode 作为下层执行器,通过 MCP 或 API 集成
  3. 生态分层——OpenCode 属于"Coding Agent Harness"层,LangGraph 属于"Multi-Agent Orchestration Framework"层

如果已经在用 OpenCode 做日常开发,但遇到需要多个 Agent 协作的复杂项目,正确的做法不是放弃 OpenCode,而是在其上叠加 LangGraph(或 CrewAI、AutoGen)作为编排层,让 OpenCode 专注于它最擅长的终端编码执行。

4. OpenCode 与 Harness

OpenCode 对 Harness Engineering(驾驭工程) 的支持程度可以概括为:原生能力扎实、生态扩展丰富、但在深度编排和状态持久化上仍有提升空间。OpenCode 本身就被业界视为一个功能完备的 Agent Harness,同时也有大量第三方项目专门为其增强 harness 能力。


4.1. Harness Engineering 的核心理念

Mitchell Hashimoto 提出的 Harness Engineering 强调:不是优化模型本身,而是设计一个让 Agent 无法越界的环境。每次 Agent 犯错,就增加一条工程约束,让它不会再犯。

这对应三层栈:

  • 上下文工程(Context Engineering):给 Agent 足够且精准的信息
  • 护栏工程(Guardrail Engineering):限制 Agent 的行为边界
  • 编排工程(Orchestration Engineering):多 Agent 协作与任务调度

4.2. OpenCode 原生支持的 Harness 能力

OpenCode 作为终端编码 Agent,本身提供了大量 Harness Engineering 所需的基础设施:

能力维度OpenCode 支持情况说明
多模型支持✅ 12+ 提供商Anthropic、OpenAI、Google、GitHub Copilot、Bedrock、Azure、OpenRouter、本地模型等,无厂商锁定
Skills 系统✅ 可发现、可复用自动发现 SKILL.md,支持本地和远程来源,形成可复用的能力生态
MCP 协议✅ 完整支持stdio / HTTP / SSE 三种传输方式,prompts 和 resources 可作为命令暴露
权限控制✅ per-agent 规则支持按 Agent 设置规则集(如 build 宽松、plan 只读),文件模式拒绝(如 .env)
插件系统✅ 一等公民@opencode-ai/plugin SDK,支持事件钩子、工具注册、Provider 钩子、OpenTUI 组件
Session 管理🟡 部分支持SQLite 持久化消息、工具调用、权限、待办事项和文件 diff,支持快照和回滚,但无显式 checkpoint API
Worktrees✅ 支持隔离的 git worktree 流程,支持并行 Agent 工作和安全的实验
LSP 集成✅ 深度集成自动加载语言服务器,为 LLM 提供精确的工具支持,这在编码 Agent 中很少见
多界面✅ 终端/Web/桌面/IDE同一后端驱动多种前端,还支持 opencode serve 无头模式及 SDK
跨 Harness 协作✅ 通过 Agent Intercom支持与 Pi、Claude Code、Codex 等跨 Harness 的本地消息传递

4.3. 第三方 Harness 增强生态

业界已出现多个专门为 OpenCode 打造的 Harness 增强项目,说明其扩展性得到认可:

1. OpenCode Harness(80+ Agents, 260+ Skills)

提供完整的 Agent 团队体系:

  • 17 个工程工作流 Agent:规划、架构、代码审查、TDD、重构、测试、调试
  • 17 个代码审查 Agent:按语言细分(Python、Rust、Go、Java、TS 等)
  • 11 个构建修复 Agent:覆盖所有主流语言
  • 26+ MCP 服务器配置:GitHub、Jira、Supabase、Vercel、Playwright 等

核心命令:

/plan          # 创建实现计划
/tdd           # 强制 TDD 工作流(80%+ 覆盖率)
/code-review   # 代码质量与安全审查
/security      # 综合安全审查
/orchestrate   # 多 Agent 编排
/learn         # 提取模式与经验

2. OpenCode Agent Team Harness(Orchestrator + 6 子代理)

采用能力自适配设计:Orchestrator 自动发现项目层提供的可选能力,有什么用什么,没有则优雅降级。子代理按模型能力分层:

  • assistant:主力(大范围搜索、多文件分析)
  • architect:架构设计、方案对比
  • reviewer:深度代码审查、安全审计
  • scout:只读搜索(用轻量模型降低成本)
  • worker:极简单修改(用最便宜模型)

3. AI Engineering Harness(跨工具统一配置)

支持用同一套配置同时管理 Claude Code、OpenCode、Gemini CLI、Pi 四个工具,实现跨 Harness 的上下文工程标准化。

4. OpenCode Memory(Harness 工程引导器)

提供本地 RAG 记忆层,并内置 Harness 工程自动引导器,一键创建标准的三层架构和生命周期文件。


4.4. Harness Engineering 实践中的"四护栏"

在 OpenCode 的 Harness Engineering 实践中,社区总结出了四层护栏机制,OpenCode 对其支持度如下:

护栏一:上下文工程(Context Engineering)

  • AGENTS.md:全局注入的系统 prompt,所有 subagent 启动时必读
  • 分层 Spec:按 agent 类型注入规范文件(模板已建,自动化注入尚未完全落地)
  • Codebase Memory MCP:代码知识图谱按需检索,避免 grep 瞎猜或凭记忆编造

⚠️ 教训:过度注入上下文反而有害。有实践者建了 30 个 loop-*.md 命令文件,结果占满 context window,执行质量下降,最终全部删除后 Agent 反而更稳定。

护栏二:权限与沙箱

  • 文件级权限:支持 edit: deny 等规则,防止 Agent 修改关键文件
  • ⚠️ 无真正 OS 级沙箱:权限是 UX 和运行时策略层,不是操作系统隔离

护栏三:多模型路由

  • 静态配置已成熟,自动化模型路由仍在探索中(如前端布局自动用轻量模型,安全关键代码自动升级最强模型)

护栏四:反馈循环

  • Learnings 机制:手动将经验写入 memory,理想状态是让 Agent 在 TDEK(Test-Driven Experience & Knowledge)循环中自动更新规范文件

4.5. 与其他 Harness 的对比定位

特性OpenCodePi Coding AgentClaude CodeCodex
定位Batteries-included 全能型极简可扩展(Lego 式)单 Agent 深度体验OpenAI 原生
资源占用较高极低中等中等
Harness 扩展性高(插件 + Skills + MCP)极高(TypeScript 模块)中等(Skills + MCP)中等(Plugins)
多模型✅ 最广✅ 支持❌ Anthropic 为主❌ OpenAI 为主
跨 Harness 协作✅ Agent Intercom✅ Agent Intercom✅ Agent Intercom✅ Agent Intercom
LSP 支持✅ 深度❌ 无✅ 有🟡 基础
Worktrees✅ 支持❌ 无✅ 支持✅ 支持

4.6. 当前局限与待改进

  1. 无显式 Checkpoint API:虽然 SQLite 持久化丰富,但缺乏 LangGraph 式的 time-travel 和状态恢复机制
  2. 无真正沙箱:权限控制是策略层,非 OS 隔离,敏感操作仍需人工兜底
  3. 多 Agent 原生支持有限:核心仍是单 Agent 产品,多 Agent 需依赖 Oh-My-OpenCode 等插件或外部编排器(如 LangGraph)
  4. 记忆系统待升级:当前主要是项目级记忆,跨项目的个人知识迁移尚未实现
  5. 复杂度较高:后端、TUI、Web、桌面、SDK、协议层叠加,比极简 CLI 更难理解和定制

4.7. 总结

OpenCode 对 Harness Engineering 的支持程度是中上水平,且生态活跃:

层级支持度评价
基础 Harness 能力⭐⭐⭐⭐⭐多模型、Skills、MCP、插件、权限、LSP、Worktrees 一应俱全
Harness 扩展生态⭐⭐⭐⭐⭐第三方项目丰富(80+ Agents、260+ Skills、跨 Harness 协作)
深度编排能力⭐⭐⭐原生多 Agent 有限,需借助 Oh-My-OpenCode 或 LangGraph
状态持久化⭐⭐⭐⭐SQLite 持久化扎实,但缺少 checkpoint/time-travel
安全隔离⭐⭐⭐策略层权限完善,但无 OS 级沙箱

适合场景:

  • 需要多模型混合(同时用 GPT + Claude + Gemini + 本地模型)
  • 需要深度编码集成(LSP、Worktrees、复杂文件操作)
  • 愿意通过插件和第三方 Harness 扩展多 Agent 能力
  • 重视开源和可审计性(MIT 协议,可 fork 和自托管)

不适合场景:

  • 需要原生复杂工作流编排(LangGraph 更适合)
  • 需要严格的 OS 级沙箱隔离
  • 追求极简轻量(Pi 更合适)
  • 需要自动化的跨项目知识迁移(尚在探索中)

更多推荐