OpenCode vs Codex vs Claude Code 全面架构对比矩阵
大约 3 分钟
OpenCode vs Codex vs Claude Code 全面架构对比矩阵
1. 概述与比较视角
为了从全貌上理解当今最优秀的三款 Terminal / CLI AI Code Agent(OpenCode、Codex 与 Claude Code)的架构异同,本对比矩阵围绕 6 大核心维度展开深度剖析:
- 宿主语言与运行环境
- 主循环与消息调度
- 安全沙箱与审批拦截
- 上下文压缩与 Token 管理
- 持久化落盘与 Rollout 追溯
- MCP 与外置能力扩展
2. 三方架构对比大表
| 核心维度 | OpenCode | Codex | Claude Code |
|---|---|---|---|
| 宿主开发语言 | TypeScript (Bun / Node.js) | Rust (codex-rs) + Node.js CLI 桥接 | TypeScript (Node.js 编译混淆产物) |
| 系统架构模式 | Session-First 状态机驱动架构 | Rust 多线程异步 Core + TUI/RPC 双层 | Single Query Loop 过程循环驱动架构 |
| 消息循环实现 | SessionStore + Provider Pipeline | CodexThread + Tokio Task Channels | query.ts Stream Loop + StopHooks |
| 命令沙箱隔离 | 运行时拦截器与配置校验 | 三平台原生系统级硬隔离 (bwrap/Landlock) | 受限 Shell Exec & JS 运行时过滤 |
| 动态 Approval | CLI 交互拦截弹窗 | exec_policy.rs + Guardian 审批流 | Stop Hook + Tool Approval |
| Context 压缩算法 | 动态 Slice 截断 + Part 提取 | compact.rs (Remote v1/v2 + Mid-turn) | Microcompact / SnipCompact 策略 |
| 持久化落盘格式 | SQLite (opencode.db) + Message Parts | SQLite (state_5.sqlite) + JSONL Trace | 本地文件日志与 Session JSON |
| MCP / Skill 扩展 | @modelcontextprotocol/sdk (TS) | rmcp-client (Rust 高性能原生客户端) | 内置 MCP Client Manager |
| 主要定位场景 | 模块化、多 Provider 灵活拓展的开发者 Agent | 极致性能、企业级安全沙箱与深度工程辅助 | 紧密绑定 Claude 模型的原汁原味编码助手 |
3. 核心机制对比详解
3.1 主循环与响应模式
- OpenCode:采用 Session 优先的增量状态流设计,每个消息由
part(文本、Tool Call、Tool Result)组合而成,方便可视化展示与分支回滚。 - Codex:使用 Rust
tokio::sync::mpsc通道驱动,CodexThread内维护显式AgentStatus状态转换。对于多并发交互、中断 (Interrupt) 和 Steer 操作具有极高的抗击穿能力。 - Claude Code:基于
query.ts的单流控制循环。代码高度内聚在响应流控制逻辑中,采用 StopHooks 判断模型输出终止时机。
3.2 安全沙箱与防护边界
- OpenCode:依赖用户环境或外部容器,安全性主要体现在 CLI 层的操作确认。
- Codex:安全性最强。直接在 Rust Core 实现针对 Linux (
bwrap)、macOS (Landlock)、Windows (Restricted Tokens) 的底质物理沙箱,确保无授权命令无法触及宿主系统敏感路径。 - Claude Code:在客户端层解析工具参数并做二次确认,对于高危指令依赖系统拦截。
3.3 持久化与追溯
- OpenCode:使用 SQLite 对会话消息表和 Part 映射表进行直接管理,结构简单透明。
- Codex:采用了高并发场景下首选的双轨制。轻量级元数据存入 SQLite,高频推理过程与 Tool 交互流独立推入
.jsonlTrace 文件,兼顾了快速搜索与全量轨迹重放。 - Claude Code:以本地 Session JSON 存储为主。
4. 本地源码证据索引
为了保持结论的可验证性,以下为各 Agent 在本地源码仓库中的具体落点:
- OpenCode: [
~/fork-code/opencode](file:///Users/util6/fork-code/opencode)- 会话管理:
packages/opencode/src/session/ - 工具定义:
packages/opencode/src/tool/
- 会话管理:
- Codex: [
~/fork-code/codex](file:///Users/util6/fork-code/codex)- 核心循环:[
codex-rs/core/src/codex_thread.rs](file:///Users/util6/fork-code/codex/codex-rs/core/src/codex_thread.rs) - 执行策略与沙箱:[
codex-rs/core/src/exec_policy.rs](file:///Users/util6/fork-code/codex/codex-rs/core/src/exec_policy.rs) & [codex-rs/sandboxing](file:///Users/util6/fork-code/codex/codex-rs/sandboxing) - MCP 客户端:[
codex-rs/rmcp-client](file:///Users/util6/fork-code/codex/codex-rs/rmcp-client)
- 核心循环:[
- Claude Code: [
~/fork-code/claude-code-rev](file:///Users/util6/fork-code/claude-code-rev)- 主循环:
src/query.ts - 动态压缩:
src/services/compact/
- 主循环: