人人都会AI编程

开源AI编程工具OpenCode使用的技术栈是什么?

更新时间:2026-07-03

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 的混合栈设计并非技术堆砌,而是典型的「场景优先」选型思路:

  1. 核心 Agent 用 TypeScript + Bun:AI Agent 生态(MCP、模型 SDK、工具库)以 JS/TS 为绝对主流,生态最完善、迭代最快;Bun 解决了 Node.js 启动慢、性能弱的问题,完美适配本地桌面场景。
  2. 终端 TUI 用 Go:Go 的终端 UI 生态成熟、单二进制分发方便、运行流畅无卡顿,比 Node 生态的 TUI 方案性能更稳定。
  3. 桌面端选 Tauri 而非 Electron:产品定位是轻量终端工具,追求小体积、低内存占用,Tauri 的原生特性比 Electron 更契合;同时复用 SolidJS 前端代码,控制开发成本。

补充说明

早期初代 OpenCode 为纯 Go 实现(基于 Bubble Tea 框架),SST 团队主导迭代后,将核心 Agent 逻辑重构为 TypeScript + Bun 以适配 AI 生态,TUI 层保留 Go 实现,最终形成了现在的多语言混合架构。