OpenCode(SST 团队出品,当前 GitHub 100k+ Star 的主流开源 AI 编程 Agent)采用分层混合技术栈 + C/S 客户端/服务器架构,并非单一语言实现,不同模块分别选用了最适配场景的技术方案,整体兼顾了 Agent 生态兼容性、终端交互流畅性与桌面端原生体验。
一、整体架构总览
OpenCode 采用「后台常驻 Agent 服务 + 多端交互客户端」的解耦设计:
- 核心 Agent 逻辑、工具调度、模型适配全部下沉到本地后台服务,独立运行,终端断开也不中断任务;
- 前端支持三种交互入口:终端 TUI(主力)、桌面应用、Web 界面,共享同一套后端服务与会话数据;
- 代码仓库为 Monorepo 架构,按模块拆分管理。
二、各模块详细技术栈
1. 核心 Agent 服务层(后台常驻进程)
这是 OpenCode 的大脑,负责 Agent 思考循环、工具调用、文件操作、模型调度,是整个项目的核心。
- 运行时:Bun 1.3+
替代传统 Node.js,原生支持 TypeScript,启动速度更快、IO 性能更优、包体积更小,非常适合本地常驻后台服务场景。
- 开发语言:TypeScript(占代码总量约 59%)
- 核心依赖与框架:
- Effect TS:层级化依赖注入框架(Layer/Context/Service 模式),替代传统 Class 方案,保障复杂 Agent 流程的类型安全与可维护性;
- Zod:运行时 Schema 校验,配合 Effect 实现配置、工具参数、模型返回的全链路类型校验;
- Drizzle ORM:轻量级 ORM,对接本地 SQLite 数据库,持久化会话记录、项目元数据与用户配置;
- MCP 原生支持:内置 Model Context Protocol 协议实现,作为插件工具扩展的标准接口,兼容社区所有 MCP 服务;
- 多模型适配层:通过 models.dev 统一适配 75+ LLM 提供商(Anthropic、OpenAI、Google、本地 Ollama 等),实现模型无绑定切换。
- 核心能力:Agent 多轮思考循环、文件系统读写、终端命令执行、LSP 语言服务集成、Git 操作、项目上下文扫描。
2. 终端交互层(TUI,主力入口)
这是用户最常用的交互形态,对标 Claude Code 的终端体验,追求极致的键盘操作流畅度。
- 开发语言:Go(占代码总量约 12%)
- TUI 渲染框架:基于
tcell+tview(Go 生态主流终端 UI 库,Bubble Tea 风格) - 核心设计:
- 全键盘驱动,符合终端开发者操作习惯;
- 增量渲染机制,仅更新画面变化区域,避免全量重绘卡顿;
- Plan/Build 双模式状态机,规划与执行权限分离;
- 通过 WebSocket 与后台 Agent 服务通信,会话与界面解耦,终端关闭后后台任务继续运行。
3. 桌面应用层
作为终端之外的图形化补充入口,主打轻量原生体验。
- 外壳框架:Tauri 2.x
- 原生后端:Rust,负责系统级能力集成、窗口管理、原生权限调用,安全性与性能优于 Electron;
- 前端渲染:SolidJS + TypeScript
选用细粒度响应式框架,非常适配 AI 对话流式输出、状态实时变更的高频交互场景,性能优于 React;
- 特点:安装包体积仅十几 MB,内存占用低,启动速度接近原生,可深度调用系统文件、全局快捷键等能力。
4. Web 交互层
- 前端框架:SolidJS + TypeScript,与桌面端共享 UI 组件;
- 作用:提供可视化的会话管理、配置面板、项目浏览界面,作为 TUI 的图形化补充。
5. 工程化与基础设施
- 项目架构:Monorepo 多包管理,按职责拆分模块;
- 构建编排:Turbo,负责多包任务调度、构建缓存加速;
- 本地存储:SQLite(嵌入式数据库,无需额外部署,开箱即用);
- 代码质量:全链路 TypeScript 类型安全 + Zod 运行时校验,减少 Agent 场景的边界错误。
三、技术选型的核心逻辑
OpenCode 的混合栈设计并非技术堆砌,而是典型的「场景优先」选型思路:
- 核心 Agent 用 TypeScript + Bun:AI Agent 生态(MCP、模型 SDK、工具库)以 JS/TS 为绝对主流,生态最完善、迭代最快;Bun 解决了 Node.js 启动慢、性能弱的问题,完美适配本地桌面场景。
- 终端 TUI 用 Go:Go 的终端 UI 生态成熟、单二进制分发方便、运行流畅无卡顿,比 Node 生态的 TUI 方案性能更稳定。
- 桌面端选 Tauri 而非 Electron:产品定位是轻量终端工具,追求小体积、低内存占用,Tauri 的原生特性比 Electron 更契合;同时复用 SolidJS 前端代码,控制开发成本。
补充说明
早期初代 OpenCode 为纯 Go 实现(基于 Bubble Tea 框架),SST 团队主导迭代后,将核心 Agent 逻辑重构为 TypeScript + Bun 以适配 AI 生态,TUI 层保留 Go 实现,最终形成了现在的多语言混合架构。