# Claude Code × OpenCode × Codex：三强深度对比

> **对比对象**  
> 1. **Claude Code**（Anthropic，闭源产品）——依据本仓库《Claude-Code-工作原理科普-深入版》与 `claude-code/` 树  
> 2. **OpenCode**（`anomalyco/opencode`，MIT）——依据 `项目分析/opencode-源码分析.md`（commit `62e4641`）  
> 3. **OpenAI Codex CLI**（`openai/codex`，Apache-2.0）——依据 `项目分析/openai-codex-源码分析.md`（commit `bb1af23`）  
>
> **日期**：2026-07-28  
> **用途**：选型 + 读源码路线  
> **脚注**：Xiaomi **MiMo-Code** 是 OpenCode 的深度 fork，并焊了 Codex 风格 GPT 工具 ABI——它不是第四个并列产品，而是「OpenCode 骨架 × Codex 工具面」的杂交样本。

---

## 1. 为什么要一张桌子，而不是三份 README

三份 README 都说「终端里的编程 Agent」。真差异藏在：

- 谁拥有模型与商业闭环  
- 循环写在哪个文件、用什么语言约束复杂度  
- 权限是「提示 + 软件闸门」还是「OS 沙箱」  
- 项目说明书叫什么、怎么被装进上下文  
- 开源意味着你能改引擎，还是只能调 API  

把它们放同一张表，是为了避免「用 OpenCode 的预期去开 Codex」或「用 Claude Code 的工具图鉴去找 Codex 的 Grep 工具」。

```mermaid
flowchart TB
  subgraph Same["表面相同"]
    S1["终端 Agent"]
    S2["工具调用循环"]
    S3["项目说明书文件"]
  end
  subgraph Diff["真正分叉"]
    D1["闭源官方 vs 开源社区 vs 开源官方"]
    D2["TS 产品 vs Effect 服务器 vs Rust 机库"]
    D3["软件权限 vs OS 沙箱"]
  end
  Same --> Diff
```

---

## 2. 速览总表

| 维度 | Claude Code | OpenCode | Codex CLI |
|---|---|---|---|
| **许可** | 闭源产品 | MIT | Apache-2.0 |
| **语言 / 运行时** | TypeScript 产品树 | Bun + TS + Effect | Rust workspace（126 crates） |
| **模型绑定** | Anthropic 强绑定 | 多 provider（models.dev） | OpenAI 生态为主（Responses API） |
| **架构形态** | 单产品 Agent 循环 | **服务器即本体**，TUI 是客户端 | **core + 多客户端**（TUI/Exec/App-server/MCP） |
| **主循环锚点** | 深入版第 6 章 `while` 循环 | `packages/opencode/src/session/prompt.ts` | `codex-rs/core/src/session/turn.rs` `run_turn` |
| **工具哲学** | 细分工具全家桶（图鉴级） | 大工具箱；可切 GPT ABI | shell + apply_patch + 托管 web_search |
| **权限** | 多层闸门 + hooks | Permission ruleset（MiMo 另有 hardPermission） | `AskForApproval` × `SandboxType` |
| **沙箱** | 产品权限模型为主 | 规则 / 可选隔离 | **Seatbelt / Landlock / Windows Token** |
| **项目说明书** | CLAUDE.md 多层 | 配置 + memory 等 | **AGENTS.md 链** + override |
| **会话持久化** | 产品会话存储 | 存储层 / SQLite 等 | **rollout** sessions 文件资产 |
| **生态** | 插件/技能/MCP（官方） | 插件/MCP/技能，社区狂奔 | Skills/Plugins/Hooks + app-server |
| **商业** | Anthropic 订阅 | 中立；可接各家 Key | ChatGPT 套餐 / API Key |
| **典型用户** | 要「最好用的官方 CC」 | 要可黑盒可 fork 的厨房 | 要官方开源 + 硬沙箱 |

---

## 3. 五场思路对决

### 3.1 产品主权：闭源极致 vs 社区厨房 vs 官方开源机库

| | Claude Code | OpenCode | Codex |
|---|---|---|---|
| **赌注** | 体验与模型垂直整合 | 引擎可替换、客户端可多 | 官方实现开源，沙箱与协议可审计 |
| **利** | 打磨极致、文档与模型同步 | 自由、可商用 MIT、多模型 | 可读 OS 沙箱与 turn 状态机；Apache-2.0 |
| **弊** | 不能自托管引擎 | 体验碎片化、要自己选模型 | 文档外置；core 巨石；绑定 OpenAI 商业更顺 |

**适合谁**

- 团队已在 Anthropic 生态 → Claude Code  
- 要嵌进自己的产品 / 多模型 → OpenCode  
- 要审计沙箱与 Rust 实现 / 偏 OpenAI → Codex  

```mermaid
flowchart LR
  A["要改引擎源码"] --> B{"要多模型中立?"}
  B -->|是| OC["OpenCode"]
  B -->|否·偏 OpenAI| CX["Codex"]
  A2["不要源码·要体验"] --> CC["Claude Code"]
```

---

### 3.2 权限路线：五道闸门 vs Ruleset vs 审批×OS 沙箱

| | Claude Code | OpenCode | Codex |
|---|---|---|---|
| **机制** | 深入版第 7 章：多关卡权限 + hooks | Effect 路径上的 permission merge | `AskForApproval`（UnlessTrusted/OnRequest/Granular/Never）+ `SandboxType` |
| **硬能力上界** | 产品策略 | 规则文本（MiMo：hardPermission 钉死 plan 禁写） | **内核/框架级沙箱**（seatbelt/landlock/token） |
| **人在回路** | 明确 ask 流 | ask / deny 规则 | 默认可 OnRequest；exec 常用 Never |

**利弊**

- CC：语义丰富，教学友好；但你看不到完整专有实现细节  
- OpenCode：可配置到细；误配风险在用户  
- Codex：即使用户点了允许，OS 沙箱仍可能挡——**两道不同层的墙**

**适合谁**：强合规 / 不可信代码执行 → 优先看 Codex 沙箱；要细粒度「这个命令能不能跑」的产品语义 → CC/OpenCode 规则系统。

---

### 3.3 工具 ABI：全家桶 vs 大工具箱 vs shell+patch

| | Claude Code | OpenCode | Codex |
|---|---|---|---|
| **形状** | Read/Grep/Glob/Edit… 细分 | 同类全家桶；GPT 模型可切微内核 | Shell、ApplyPatch、ViewImage、WebSearch、MCP、多 agent… |
| **补丁** | Edit/Write | edit/write 或 apply_patch | **apply_patch 原教旨**（独立 crate + arg0） |
| **搜索** | Grep/Glob 工具 | Grep/Glob 或 shell | 常落在 shell；另有托管 web_search |

**利弊**

- 全家桶：模型少做梦，权限可按工具打标  
- shell+patch：与部分模型训练分布对齐，实现面更窄，但 **shell 过宽** 要靠沙箱兜  

MiMo 脚注：在 OpenCode 上对 GPT 隐藏 read/edit，露出 bash/apply_patch/exec——是在 **向 Codex ABI 靠拢**。

---

### 3.4 上下文哲学：CLAUDE.md vs Memory/Config vs AGENTS.md+宪法

| | Claude Code | OpenCode | Codex |
|---|---|---|---|
| **说明书** | CLAUDE.md 多来源叠加（深入版第 5 章） | 配置、插件、记忆文件（MiMo：FTS5+checkpoint） | AGENTS.md 从 root→cwd 串联 + override |
| **治理** | 收集规则 + system-reminder | 产品化记忆/压缩 | **AGENTS.md 六条**：不改写历史、cache、有界、≤10K、>1k P0、Fragment 类型 |
| **压缩** | 产品压缩策略 | 压缩/checkpoint | pre_sampling_compact + remote/inline 家族 |

**适合谁**：要「外置长期记忆工作区」→ 看 OpenCode/MiMo；要「历史洁癖 + 类型化注入」→ 看 Codex；要官方 CC 习惯 → CLAUDE.md。

---

### 3.5 架构形态：单产品 vs 服务器即本体 vs Rust 机库

| | Claude Code | OpenCode | Codex |
|---|---|---|---|
| **形态** | 面向终端/IDE 的整合产品 | HTTP/SSE 服务器为本体，TUI 是客户 | core 库 + TUI/Exec/App-server/MCP 多前端 |
| **扩展** | 官方插件/MCP | 天生多客户端 | app-server 给 IDE；自己也可 mcp-server |
| **复杂度管理** | 产品工程 | Effect 分层 | **显式抵制 core 膨胀** + 模块行数纪律 |

```mermaid
flowchart TB
  subgraph CC["Claude Code"]
    C1["产品循环"]
  end
  subgraph OC["OpenCode"]
    O1["Server"] --> O2["TUI/Desktop/Web"]
  end
  subgraph CX["Codex"]
    X1["codex-core"] --> X2["TUI"]
    X1 --> X3["Exec"]
    X1 --> X4["App-server"]
    X1 --> X5["MCP server"]
  end
```

---

## 4. 选型决策图

```mermaid
flowchart TB
  S["起点：我要本地编程 Agent"] --> Q1{"必须开源可改引擎?"}
  Q1 -->|否| CC["Claude Code"]
  Q1 -->|是| Q2{"必须多模型中立?"}
  Q2 -->|是| OC["OpenCode"]
  Q2 -->|否| Q3{"更要 OS 级沙箱与官方 OpenAI 闭环?"}
  Q3 -->|是| CX["Codex CLI"]
  Q3 -->|否| Q4{"更要 Effect/TS 生态与社区插件?"}
  Q4 -->|是| OC
  Q4 -->|否| CX
```

**补充题**

- 已经在用 ChatGPT Team/Enterprise？→ Codex 登录路径最短  
- 已经在用 Claude 订阅？→ Claude Code  
- 要做「宿主」调多个 CLI（设计 Agent）？→ 先看 Open Design，它把 `claude`/`codex`/`opencode` 都当引擎插座  

---

## 5. 学习者的读源码顺序

### 5.1 若你只有一个周末

1. 《Claude-Code-工作原理科普-深入版》第 4–7 章（输入、上下文、循环、权限）——建立概念词典  
2. `opencode` 分析第 2、6、7 章——看开源服务器形态  
3. Codex：`tasks/regular.rs` + `turn.rs` 前 350 行 + `AskForApproval` + `SandboxType`  

### 5.2 若你要写自己的 Agent

| 你想抄的零件 | 去哪看 |
|---|---|
| 输入分拣 / 斜杠命令 | Claude Code 深入版第 4、9 章 |
| 多客户端协议 | OpenCode server / Codex app-server |
| OS 沙箱 | Codex `sandboxing` + `linux-sandbox` |
| 项目说明书加载 | Codex `agents_md.rs` 或 CC CLAUDE.md 规则 |
| 模型无关 provider | OpenCode |
| GPT 微内核工具面 | Codex handlers + MiMo `usesGPTToolset` |

### 5.3 若你要做「对比答辩」

准备三句不败：

1. 「CC 赢在整合体验，输在不可 fork 引擎。」  
2. 「OpenCode 赢在中立与客户端，输在你要自己当整合商。」  
3. 「Codex 赢在开源官方 + OS 沙箱，输在文档外置与 OpenAI 引力。」  

---

## 6. 诚实边界

| 边界 | 说明 |
|---|---|
| Claude Code 可见度 | 本仓库分析基于可得源码树与深入版；与公开产品行为可能有版本差 |
| OpenCode 漂移 | 上游日更；以分析文档钉住的 commit 为准 |
| Codex 文档 | 用户文档多在 developers.openai.com；仓库 `docs/` 常为跳转 |
| 星标数字 | 会变；对比用的是分析当日量级 |
| MiMo | 不要第四列并列；它是 OpenCode fork 的差分样本 |

---

## 7. 结语

三强不是「谁淘汰谁」，而是三种合法的产品方程：

- **Claude Code** = 模型公司 × 闭源体验  
- **OpenCode** = 社区 × 中立引擎 × 多客户端  
- **Codex** = 模型公司 × 开源机库 × OS 沙箱  

把方程看清，再谈抄哪一层——提示词、工具 ABI、权限、还是协议面。

> 配套预览：`openai-codex-解析.html` · `项目分析/openai-codex-源码分析.md`。确认后再决定是否写入总目录。


---

## 8. 场景剧本（把表变成故事）

### 8.1 周末个人项目

你一个人改 side project，已有 Claude Pro：

- **首选 Claude Code**：路径最短，工具图鉴对教学友好  
- 若你想看开源实现练手：Clone Codex，跑 `doctor`，读 `run_turn` 前 350 行  

### 8.2 公司要多模型、要自托管

法务要 MIT、模型要能换国产/第三方：

- **首选 OpenCode**  
- 用 Codex 当「沙箱参考实现」抄 Seatbelt/Landlock 思路，而不是锁死 OpenAI  

### 8.3 要在 CI 里非交互跑 Agent

- Codex：`codex exec` + `AskForApproval::Never` + 紧沙箱  
- OpenCode：headless/serve + 权限规则  
- Claude Code：看官方非交互/CI 指引（产品向）  

### 8.4 要做设计宿主（调多个 CLI）

- 先看 **Open Design**：它把 `claude`/`codex`/`opencode` 都当引擎  
- 本对比帮你理解「插座另一头」三个引擎各自脾气  

### 8.5 已经用 MiMo

你在 OpenCode fork 上看到 GPT ABI——回到 Codex 读 `apply_patch`/`shell`/`view_image`，再回 MiMo 读 `usesGPTToolset`，会形成闭环。

```mermaid
sequenceDiagram
  participant Dev as 你
  participant CC as Claude_Code
  participant OC as OpenCode
  participant CX as Codex
  Dev->>CC: 建立词典（输入/循环/权限）
  Dev->>OC: 看开源服务器形态
  Dev->>CX: 看 OS 沙箱与 turn 工业态
  Dev->>Dev: 决定抄哪一层
```

---

## 9. 对比答辩用的「证据卡」

**卡 A · 开源**  
Codex：`LICENSE` Apache-2.0 · Copyright 2025 OpenAI  
OpenCode：MIT  
Claude Code：闭源产品  

**卡 B · 主循环**  
Codex：`RegularTask` → `run_turn`（`tasks/regular.rs` / `session/turn.rs:153`）  
OpenCode：`session/prompt.ts`  
Claude Code：深入版第 6 章  

**卡 C · 沙箱**  
Codex：`SandboxType` 四值（`sandboxing/src/manager.rs:35`）  
另两家：以产品权限模型为主（细节见各自分析）  

**卡 D · 说明书**  
Codex：`agents_md.rs` 链式 AGENTS.md  
Claude Code：CLAUDE.md 五来源  
OpenCode/MiMo：memory + checkpoint 等  

---

## 10. 版本钉扎

| 项目 | 本文钉扎 |
|---|---|
| Codex | `bb1af235ea2822d7a40f75ef52e4d6a2cde84da2` |
| OpenCode 分析 | commit `62e4641`（见 opencode-源码分析.md 文首） |
| Claude Code | 《深入版》对应本仓库 `claude-code/` 分析快照 |

上游前进后，以文首 commit 为准重核行号。


---

## 11. 逐点对照（加深）：同一用户故事，三套结局

### 11.1 「删掉 build 目录」

| 阶段 | Claude Code | OpenCode | Codex |
|---|---|---|---|
| 工具形态 | Bash 工具 + 权限闸门 | bash + permission ruleset | shell + ExecApprovalRequirement + SandboxType |
| 人审 | 多层 ask | ask/deny 规则 | OnRequest/UnlessTrusted/… |
| 能力上界 | 产品策略 | 规则 | **OS 沙箱仍可能挡** |
| 教学友好 | 高（工具图鉴） | 中 | 中（要懂两层墙） |

### 11.2 「长会话改一周的需求」

| | CC | OpenCode/MiMo | Codex |
|---|---|---|---|
| 记忆 | 产品记忆/压缩 | checkpoint + FTS（MiMo） | 历史洁癖 + compact 家族 + rollout |
| 风险 | 闭源难审计 | fork 漂移 | turn 巨石难读但可审计 |

### 11.3 「嵌进自己的 IDE」

| | CC | OpenCode | Codex |
|---|---|---|---|
| 路径 | 官方扩展 | server SDK 多客户 | app-server 协议簇 |
| 自主权 | 低 | 高 | 中高（开源协议 + 官方引力） |

### 11.4 「必须多模型」

只有 OpenCode（及 fork）把多 provider 当一等；CC/Codex 分别锚定自家模型生态（Codex 有 ollama 等 crate 但主叙事仍是 OpenAI）。

```mermaid
flowchart TB
  S["用户故事"] --> T1["删目录"]
  S --> T2["长会话"]
  S --> T3["嵌 IDE"]
  S --> T4["多模型"]
  T1 --> X1["看权限×沙箱"]
  T2 --> X2["看压缩×记忆"]
  T3 --> X3["看协议面"]
  T4 --> X4["几乎只能 OpenCode"]
```

---

## 12. 抄代码时的「零件清单」

| 零件 | 优先抄谁 | 注意 |
|---|---|---|
| 输入分拣/斜杠 | Claude Code 深入版 | 概念词典 |
| OS 沙箱 | Codex sandboxing/linux-sandbox | 平台差异大 |
| 审批缓存多 key | Codex with_cached_approval | 适合多文件 patch |
| 多 provider | OpenCode | Effect 学习曲线 |
| 项目说明书加载 | Codex agents_md.rs 或 CC CLAUDE.md | 文件名已成行业标准 |
| Stop/质量门 | Codex stop hooks 或 OD Jury | 产品目标不同 |
| GPT 工具 ABI | Codex handlers + MiMo usesGPTToolset | 模型分布耦合 |

---

## 13. 加深后的结论（可直接贴进评审）

1. **三强解的是同一题的不同约束**：体验整合（CC）、中立可嵌（OpenCode）、可审计机库+硬沙箱（Codex）。  
2. **权限不能只比「有没有 ask」**：Codex 把 ask 与 OS 沙箱正交；抄错一层等于裸奔。  
3. **主循环不能只搜 while**：Codex 的停机是 follow-up×compact×stop hook；OpenCode/MiMo 另有 Goal/doom；CC 有终止原因全集。  
4. **说明书文件名在收敛**：CLAUDE.md / AGENTS.md / memory——加载算法比文件名重要。  
5. **MiMo 是杂交脚注**：OpenCode 骨架 × Codex 风格 ABI，不是第四个并列主权产品。

---

*事实依据：《[Claude Code 工作原理科普 · 深入版](../Claude-Code-工作原理科普-深入版.md)》·《[opencode 源码分析](opencode-源码分析.md)》（commit `62e4641`）·《[openai-codex 源码分析](openai-codex-源码分析.md)》（commit `bb1af23`）。三份底稿均已逐文件核对并标注 `文件:行号`。*

**配套** → [Codex 交互解析站](../openai-codex-解析.html) · [总目录](../总目录.md)
