OpenCode 源码剖析
目录
本系列文章旨在通过阅读 OpenCode 源码,理解一个开源 AI 编程助手的设计思路与架构,并与 Claude Code 进行横向对比。
系列目录
| 序号 | 文章 | 状态 |
|---|---|---|
| 01 | 导读 | 已完成 |
| 02 | 架构概览 — Turborepo Monorepo 与核心模块 | 已完成 |
| 03 | 工具系统 — Effect 框架与工具注册 | 已完成 |
| 04 | 命令系统 — Slash 命令与动态加载 | 已完成 |
| 05 | 会话与上下文 — 消息流、压缩与记忆 | 已完成 |
| 06 | 多智能体协作 — Task 工具与子 Agent 派生 | 已完成 |
| 07 | 配置系统 — 多层配置合并与路径解析 | 已完成 |
| 08 | IDE 集成 — Zed、VS Code 与 ACP 协议 | 已完成 |
| 09 | MCP 实现 — 协议支持与工具翻译 | 已完成 |
| 10 | 权限与安全 — Ruleset 驱动的细粒度控制 | 已完成 |
为什么要研究 OpenCode 源码
OpenCode 是由 SST 团队开发的开源 AI 编程助手(由 AWS/Anthropic 前员工创建),是当前最接近 Claude Code 设计的开源竞品。研究其源码可以帮助我们:
- 理解基于 Effect 函数式框架构建 AI 应用的方法
- 学习 Turborepo Monorepo 在 AI 工具中的架构实践
- 掌握 MCP (Model Context Protocol) 的完整实现
- 了解 Zed 编辑器深度集成的技术方案
- 与 Claude Code 进行架构层面的横向对比
与 Claude Code 的核心差异速览
| 维度 | Claude Code | OpenCode |
|---|---|---|
| 架构 | 单仓库 | Turborepo Monorepo (30+ packages) |
| 函数式框架 | AsyncLocalStorage | Effect (完整函数式 DI) |
| 多 Agent | Prompt-driven Coordinator | Session-based Task 工具 |
| IDE 集成 | VS Code / JetBrains 扩展 | Zed 深度集成 + VS Code SDK |
| 工具定义 | TypeScript 对象 | Effect Service + Zod Schema |
| 存储 | 文件系统转录本 + SQLite | SQLite + Drizzle ORM |
| 权限模型 | PermissionMode 枚举 | Ruleset 数组 + Pattern 匹配 |
| MCP | 工具级集成 | 独立 packages/mcp/ 完整协议 |
学习路线
建议按照以下方式阅读:
- 先全局后局部 — 先了解整体架构,再深入具体模块
- 结合源码 — 每篇文章都会给出对应的源码位置
- 对比思考 — 与 Claude Code 对应模块对比,理解不同设计选择背后的原因
- 动手实践 — 尝试修改和扩展,加深理解
前置知识
阅读本系列文章前,建议具备以下基础知识:
- TypeScript 基础
- 了解 AI SDK / LLM API 的基本使用
- 对 AI Agent 有初步了解
- 有一定的函数式编程概念会更好(但不强制)
- 对 Turborepo / Monorepo 有基本了解
源码位置
本系列分析的 OpenCode 源码位于:/mnt/e/code/cc/opencode
主要包:
packages/opencode/— 核心 Agent 引擎packages/app/— 前端 / Web UIpackages/sdk/— SDK 层packages/extensions/— Zed 扩展packages/mcp/— MCP 服务器
持续更新中…