OpenCode 源码分析¶
状态:官方 MIT 开源;研究快照:2026-09-26。
它是什么¶
OpenCode 是开源 coding agent,同时提供终端 TUI、桌面应用和 IDE 集成。官方仓库已从早期 sst/opencode 迁移为 anomalyco/opencode,官方文档入口为 opencode.ai/docs。
源码观察点¶
仓库规模较大,本页不虚构不存在的固定目录;以当前仓库的实际目录和文档链接为准,重点观察:
| 入口/能力 | 研究问题 |
|---|---|
packages/ |
provider、agent、tool、server、TUI 的边界是否清楚 |
sdks/vscode |
IDE 是否复用同一 server/session,而不是复制 Agent loop |
.opencode/ 与项目 AGENTS.md |
项目规则如何加载、覆盖和版本化 |
| agents 配置 | build、plan、general 如何分权限和模型 |
| permissions / policies | bash、edit、网络和 MCP 何时允许、询问或拒绝 |
| MCP / plugins / custom tools | 扩展是否通过公共 contract 接入 |
| server / web | TUI、桌面、IDE 和远程调用的会话边界 |
从用户可见的官方行为可以确认:内置 build 是完整权限开发 Agent;plan 默认只读,编辑被拒绝,运行 bash 需询问;general 用于复杂搜索和多步任务。
运行时模型¶
Project + AGENTS.md + config
-> provider/model resolver
-> agent (build / plan / custom)
-> permission / policy
-> read / edit / write / bash / MCP
-> session + server / TUI / IDE
OpenCode 的关键不是“支持多少模型”,而是把 provider、agent、permission、MCP 和规则都作为配置层暴露。它适合作为多供应商 coding 工作台,但生产集成仍应 pin 具体模型 ID 和 OpenCode 版本。
Build 与 Plan 的分工¶
| Agent | 默认能力 | 适用条件 | 代价 | 验证方式 |
|---|---|---|---|---|
| build | 读、写、编辑、bash,面向实现 | 已明确范围,需要改代码并运行检查 | 副作用面大 | 给临时 repo,检查 diff、命令、测试和退出码 |
| plan | 读为主,写入受限,bash 需批准 | 陌生代码库、架构分析、变更计划 | 不能直接完成修改 | 检查是否没有写操作,计划是否可执行 |
| general/subagent | 复杂搜索、多步子任务 | 把调查或局部探索交给专门 worker | 上下文、成本和并发管理更复杂 | 固定任务、记录调用轨迹和合并结果 |
项目指令与 Harness¶
官方文档建议运行 /init 生成项目 AGENTS.md,并将其提交到 Git。对 FDE 来说,AGENTS.md 是 harness 的一部分:
- 定义测试、构建和禁止操作。
- 让同一套规则跨模型和跨会话复用。
- 作为评测条件的一部分,而不是临时提示词。
- 需要审查提示注入、敏感数据和过时规则。
不要把 secrets、生产写命令或只在某台机器成立的路径写进共享规则。
多模型 provider 的边界¶
OpenCode 能配置不同供应商,但模型能力不等价:tool call、reasoning、上下文、输出限制和错误码可能不同。统一 provider 接口只解决调用形状,不解决质量和安全语义。
在本 Wiki 中建议用:
OpenCode agent config
-> stable model alias
-> provider adapter
-> workload-specific eval gate
-> permission policy
FDE 结论¶
OpenCode 最适合作为 多模型、强交互、团队项目级 coding 工作台。它比极简 Agent 更适合日常协作,比长任务 orchestrator 更容易控制。企业落地时优先研究 permission/policy、server/session、MCP 和 AGENTS.md;不要只研究 TUI 或模型选择器。