Chapter 11
对比:Claude Code vs Codex CLI
同样是让 AI 帮你写代码,一个用 Rust 写了 81 个 crate,靠操作系统内核来保证安全;另一个用 TypeScript 做了 54 个工具,靠额外调一次 LLM 来判断你的命令危不危险。
总览对比
Claude Code
Anthropic
TypeScript · Bun · LLM Classifier
54 Tools · 6 Permission Modes · MCP
vs
Codex CLI
OpenAI
Rust · 81 Crates · Kernel Sandbox
Shell + File · Landlock/Seatbelt · Minimal
架构对比
| 维度 | Claude Code | Codex CLI |
|---|---|---|
| 语言 | TypeScript (TSX) | Rust |
| 运行时 | Bun | Native Binary (tokio) |
| 代码规模 | 代码分割 ~450 chunks, 大型 monorepo | 81 crates, 精简编译 |
| UI 框架 | React + Ink (终端 React) | Ratatui (Rust TUI) |
| 模块系统 | ESM, 动态导入, Feature Flags | Cargo workspace, 静态编译 |
| API 模型 | Claude (Anthropic/Bedrock/Vertex/Azure) + OpenAI 兼容层 | OpenAI GPT-4o / o3 系列 |
| 扩展性 | MCP 协议 + Hook 系统 + 自定义 Agent | 有限扩展 |
安全模型 — 核心差异
这是两者最大的分歧点。 两种完全不同的安全哲学:一个信任操作系统内核,一个信任 AI 模型的判断力。
Claude Code: LLM 分类器
- 每次工具调用前,可选地调用一次 LLM 分类器判断安全性
- 6 种权限模式 + 7 层规则来源
- 分类器有 2 秒超时的推测性检查
- 支持危险命令模式检测 (rm -rf, force push 等)
- 用户可自定义 allow/deny 规则,细到命令前缀级别
- 本质:概率性安全 — 依赖模型理解命令语义
Codex CLI: OS 内核沙箱
- 使用 Linux Landlock LSM + macOS Seatbelt 进行内核级隔离
- 限制文件系统访问(只允许读写项目目录)
- 限制网络访问(可完全禁止)
- 限制进程创建和系统调用
- 沙箱策略由用户选择的模式决定
- 本质:确定性安全 — 依赖 OS 内核强制执行
工具系统对比
| 能力 | Claude Code | Codex CLI |
|---|---|---|
| 文件搜索 | GlobTool (glob 模式) + GrepTool (ripgrep 正则) | Shell 命令 (find, grep) |
| 文件编辑 | FileEditTool (字符串替换) + FileWriteTool (全文覆盖) | apply_patch (unified diff) |
| Shell 执行 | BashTool (后台, 超时, 流式) + PowerShellTool | shell (在沙箱内执行) |
| Web 访问 | WebFetchTool + WebSearchTool | 无 (可被沙箱限制) |
| 多 Agent | AgentTool (7+ 类型, Worktree 隔离, Team Swarm) | 无 |
| 代码智能 | LSPTool (Language Server Protocol) | 无 |
| 任务管理 | TaskCreate/Update/List/Get (完整任务系统) | 无 |
| 外部集成 | MCP 协议 (任意工具源) | 无 |
| 总工具数 | 54 (+ MCP 动态工具) | ~3 (shell, file_read, apply_patch) |
Agent Loop 对比
Claude Code
AsyncGenerator 驱动的循环。
多工具并行执行。
三级上下文压缩 (Auto/Snip/Reactive)。
错误恢复 (max_output_tokens 重试, prompt_too_long 压缩)。
子 Agent 可递归生成。
Thinking 模式支持。
Codex CLI
简洁的 while 循环。
逐个工具执行。
上下文管理简单。
错误直接回退。
无子 Agent 概念。
依赖模型原生能力。
设计哲学总结
Claude Code 选择了"丰富的工具 + AI 驱动的安全"路线 — 54 个工具覆盖几乎所有开发场景,用 LLM 分类器实现语义级的安全判断,用 MCP 协议实现无限扩展。代价是安全性依赖模型判断(概率性),且系统复杂度高。
Codex CLI 选择了"极简工具 + OS 内核安全"路线 — 只需 3 个工具(shell、read、patch),用操作系统内核的 Landlock/Seatbelt 提供确定性的安全保证。代价是功能有限,扩展性低,但安全性可证明。
这两种方法没有绝对的对错,反映了不同的工程权衡:
- 功能丰富 vs 安全简洁 — 更多功能意味着更大的攻击面
- 概率安全 vs 确定安全 — LLM 可能误判,但也能理解更复杂的场景
- 生态扩展 vs 自包含 — MCP 开放但引入信任边界