架构与运行机制
本章从工程视角说明 OpenCode 如何完成一次任务:配置如何合并、Agent 如何选工具、Plan/Build 如何通过权限分流。
1. Agent 执行循环
OpenCode 的 TUI 会话是典型的 工具增强型 Agent 循环:
与纯 Chat 的区别:状态在工具输出与 LSP 诊断中延续,且每次工具调用都过 permission 闸门。
2. Primary 与 Subagent
Primary Agent
- 用户通过 Tab 直接切换(Build / Plan)
- 承载主对话线程
- 配置在
opencode.json的agent.build、agent.plan等
Subagent
- 由 Primary 通过
task工具自动委派,或用户@explore手动调用 - 可创建 子会话(child session),用方向键在父子会话间导航:
- 进入子会话:默认
Leader+Down - 子会话间切换:
Right/Left - 返回父会话:
Up
- 进入子会话:默认
设计意图: Explore/Scout 只读,避免主线程被大量 glob/grep 输出淹没;General 可并行执行独立子任务。
3. 配置合并优先级
OpenCode 从多处加载配置并浅层合并(冲突键以后者为准):
- Remote config(
.well-known/opencode,组织默认) - Global
~/.config/opencode/opencode.json OPENCODE_CONFIG指向的文件- 项目根
opencode.json(向上找到 Git 根) .opencode/目录(agents、commands、plugins、skills…)OPENCODE_CONFIG_CONTENT内联 JSON- Managed config(企业托管,macOS 等)
- MDM
.mobileconfig(最高优先级,用户不可覆盖)
实践含义:
- 个人偏好放 global
- 团队规范放 项目
opencode.json+ AGENTS.md` - 企业策略走 remote / managed
TUI 外观与快捷键在 tui.json,与 opencode.json 分离。
4. 权限系统(Permission)
权限是 OpenCode 架构的核心,替代旧版单纯的 tools: true/false。
每个 permission key 映射一组工具:
取值:
allow— 静默执行ask— 弹审批deny— 禁用
Plan Agent 默认对 edit、bash 等为 ask 或 deny,从而实现「只说不做」。
支持 bash 命令级规则,例如:
后匹配规则覆盖先匹配的 * 规则。
5. 多会话(Multi-session)
OpenCode 可在同一项目并行多个会话,例如:
- 会话 A:Plan 新功能
- 会话 B:Build 修 bug
- 会话 C:Explore 专用查代码
这在长任务互不干扰时很有用。注意并行 Build 会话可能产生 Git 冲突,建议分分支或串行合并。
6. Headless 模式
适合团队内统一 Agent 网关或 CI 集成。
7. 隐私模型
OpenCode 宣称 不存储用户代码与上下文(见 官方 FAQ)。实际数据仍流经:
- 你所选的 LLM Provider(云 API)
- 本地 LSP / MCP 进程
在合规场景中应:
- 选用允许离线的本地模型
- 禁用不必要的
websearch - 审查 MCP Server 权限