Codex CLI 与 Agent CLI 对照
一句话定位:Codex CLI 是 OpenAI 的开源终端编码 Agent(Rust 实现)——本文拿它与 Claude Code 做一次分层对照:哪些差异在 harness 设计层、选型看哪几个维度,以及开源实现给你的「读源码」特权。前置:Claude Code 全景与日常使用——先有一个参照系。
先从「评测吵成一团」说起
你用熟了 Claude Code,同事强烈推荐 Codex CLI;网上评测一个说「Codex 更克制」,一个说「Claude Code 更能干」,各说各的。两个工具都能读写代码、跑命令、自主完成整个任务——表面上干的活一样,实际体验却处处不同。
麻烦在于评测者连「差异在哪一层」都没对齐:有的在比模型,有的在比权限机制,有的在比生态——鸡同鸭讲。而且工具迭代极快,这篇说它有的功能,下个版本可能就变了;照着单篇评测做选型,很容易买到过期的结论。
对照两个 Agent CLI,框架应该怎么搭?差异的根因到底在 harness 设计的哪一层?
答案是「分层对照」:两个工具在骨架层高度同构——都是模型加循环加工具加刹车(Agent 基础篇的四要素);差异集中在三个设计决策上——权限怎么给(审批与沙箱机制)、约定怎么记(记忆文件约定)、开放到什么程度(闭源反推与源码直读)。把这三层拆开,评测与选型立刻清晰。先看对照框架:
图:CLI 对照框架——骨架同构,差异归位到①权限机制 ②记忆约定 ③开放程度三层;选型按四维度打分
渐进拆解:两个外包团队的差异
类比:把两个 CLI 想成两个外包团队,都能替你写代码干活。差异在三份「合作条款」上:一支队伍开工前先交计划书等你点头(计划模式),干活的房间装了门禁分级(沙箱按可写范围分级,审批策略决定何时来问你);另一支靠授权档位加事件钩子管纪律。
文档约定也不同:一个认 AGENTS.md,一个认 CLAUDE.md——好在约定文件可以单向打通——CLAUDE.md 一行导入就把 AGENTS.md 收编,迁移成本没有想象中大。
最大的差别在「后厨」:一个后厨完全开放(源码可读,你甚至能进去核对菜谱),一个只给你看前厅(行为可观察,菜谱靠猜)。猜也能猜对——但猜出来的结论,和翻过菜谱验证过的结论,含金量不同。
先把差异全景铺成一张对照表,后面各节逐一展开:
| 维度 | Codex CLI | Claude Code |
|---|---|---|
| 权限模型 | 「沙箱 + 审批」双轨:沙箱按可写范围分级,审批策略分档 | 权限模式(授权档位)+事件钩子 |
| 记忆机制 | 读 AGENTS.md | 读 CLAUDE.md,可用一行导入语法引入 AGENTS.md |
| 扩展生态 | 认 SKILL.md(目录发现制)、支持 MCP(配置在 config.toml)、/plugins 带市场浏览、/hooks 管生命周期钩子 | 认 SKILL.md、支持 MCP;插件市场与钩子生态起步更早、积累更厚 |
| 开源情况 | Rust 实现,Apache-2.0 全开源,可读源码求证 | 闭源,行为只能反推 |
Codex 常用功能:审批、沙箱与计划模式
Codex 的权限设计是「沙箱 + 审批」双轨(见表):
- 沙箱按可写范围分级:只读、工作区内可写、完全访问。
- 审批策略决定什么时候来问你:从「每次都问」到「放手去干」分档可调。
配合计划模式,它会在动手前先给你一份结构化的计划(读哪些文件、做哪些动作),批准后才执行。目标式使用是它的常见姿势:给一个目标而非逐步指令,让它在沙箱边界内自主推进——计划模式负责先对齐「怎么做」,沙箱负责兜住「做坏了」。账号与形态也值得知道:支持 ChatGPT 账号登录(按订阅计划使用),另有桌面应用形态;Rust 重写后 config.toml 的配置结构与早期版本有差异——升级前先对照当前文档。
插件、Skill 与记忆约定
扩展与记忆的全景见表:两家都认 SKILL.md、都支持 MCP、都有插件与钩子,差别不在「有没有」,在起步时间与生态积累;记忆约定功能同构(项目级持久指令),CLAUDE.md 一行导入就把 AGENTS.md 收编、事实源只维护一份,AGENTS.md 侧暂无对应语法,需要等效效果时用软链接。
本仓库自己就在用这套约定——根目录的 AGENTS.md 正是给所有编码 Agent 看的项目说明书;记忆之外还有第二条通道,上下文压缩:长会话逼近窗口上限时,双方都会把历史折叠成摘要续命——压缩管「对话能继续」,约定文件管「约定不丢」,正好接住前置篇的分层。
开源实现的对照价值
这是本篇最想交给你的视角:闭源一方的行为只能反推——观察它在什么场景做什么动作、输出什么日志,像做黑盒测试;开源一方可以直接读源码求证——审批策略怎么判定、沙箱边界画在哪、循环怎么退出,答案就在仓库里(开源情况见表)。读之前给自己立两条规矩:
- 每次只带一个具体问题去读(如「它怎么决定拦截」)。
- 读完就回到自己的工具验证——漫无目的地通读,两周也读不完一个仓库。
两个工具对照着用,等于「行为反推 + 源码直读」双通道:反推得到的假设,可以去开源实现里找同构机制验证。这个方法不止用于这两个产品——任何闭源 Agent 的行为假设,都能在某个开源实现里找到同构参照,因为它们要解决的问题是同一批。反推是隔着一道门猜菜谱,直读是走进后厨翻菜谱——两种本事都练,才不迷信任何一篇评测。
大白话:骨架一样,条款不同。选哪家看条款合不合你的规矩,看后厨开不开——别只听菜品的广告词。
技术定义与生态现状:Codex CLI 是 OpenAI 的开源终端编码 Agent——早期为 TypeScript 实现,后以 Rust 重写(基本信息见表与文末谱系图);同赛道常见的还有 Google 的 Gemini CLI、Aider 等,Agent CLI 已是一个多玩家的品类。
生态协议在收敛:MCP 成为工具接入的通用协议,Agent Skills 开放标准让技能格式跨工具通用——你写的技能与工具配置,迁移成本在持续下降。
另一个现实是版本节奏:这类 CLI 的 breaking changes 不罕见——升级前扫一眼变更说明,自动化脚本里锁版本,是两条被反复验证的教训。选型还有一条朴素经验:跟着自己的任务形态选,而不是跟着功能清单选——清单会趋同,任务形态不会变。
动手:同一任务,两条 CLI 对照跑
对照实验比读十篇评测有用。亲手跑一遍(# 后是注解;装好两个 CLI 与各自凭据,在同一个项目目录里跑):
claude -p "读 src/auth/ 目录,列出三个最值得重构的点" # Claude Code 侧
codex "读 src/auth/ 目录,列出三个最值得重构的点" # Codex 侧
# 对照观察三处,再做归位:
# 1. 审批粒度:各自在动手前问了什么、没问什么(对应①权限机制)
# 2. 约定文件:各自加载了什么(AGENTS.md 还是 CLAUDE.md)
# 3. 产出格式:同为「三个重构点」,结论结构是否可互相移植
# 归位:把观察到的每条差异,归到①权限 ②约定 ③开放哪一层
git clone https://github.com/openai/codex # 源码直读:克隆 Codex 仓库
# 在源码里搜审批与沙箱的实现,验证你观察到的行为:
# grep -ri "approval" --include="*.rs" .
克隆源码那步是本篇的点睛:你观察到的「它先问了再删文件」这类行为,在开源实现里能找到对应的判定代码——反推的结论有了可验证的落点。对照实验做完,①②③三层差异就不再是评测文章的形容词,而是你亲手摸过的机制。
边界与取舍:对照的价值与边界
同一任务的行为差异,根因都能归到 harness 层
- 审批粒度不同,是①权限机制的设计差异(沙箱分级 vs 权限模式加钩子)。
- 「它怎么知道团队约定」,是②记忆约定的差异(AGENTS.md 与 CLAUDE.md 同构)。
- 「这个功能怎么触发的」,是③开放程度的差异(能读源码还是只能观察)。
下次看到评测里的玄学结论,先问一句:你说的是哪一层的差异?
哪些开源实现值得读
Codex(Rust,Apache-2.0——一种开源许可证)是大厂开源终端 Agent 里实现最完整的一个,主循环、工具调度、沙箱、审批全在仓库里;Gemini CLI 同样开源可读。读法有两条:
- 带着行为疑问去搜实现(「它怎么决定拦截这条命令」)。
- 按模块通读:先找主循环,再看工具注册与会话管理——主循环是所有行为的发源地。
在那之前,权限机制、工具执行 这些专篇就是行为反推做深的范本——本篇的对照实验,是它和源码直读的第一次热身。
选型别用单维度
只看「谁更强」会永远摇摆——模型在换、版本在更。按四维度打分再加权:权限模型合不合你的安全规矩、记忆约定迁入成本、生态协议是否开放、开源与否是否影响你求证问题的能力。工具是雇来干活的,合适比名气重要。举个例子把维度用起来:
- 安全规矩严格(要细粒度审批与沙箱)→ ①权重高。
- 团队双工具混用 → ②权重高(CLAUDE.md 可导入 AGENTS.md,混用成本低)。
- 喜欢较真机制、读源码求证 → ③权重高。
每个人的权重表不同,结论自然不同,这不是谁对谁错。
图:Agent CLI 谱系——闭源到开源 × 轻量到全家桶;本篇只负责把坐标画准,不负责评判高下
自测
合上文章先自己答,再展开对照:
同一任务在 Claude Code 与 Codex 上的行为差异,根因在 harness 设计的哪一层?
骨架层(模型+循环+工具+刹车)两者同构,行为差异集中在三个设计决策:其一,权限机制——Codex 走「沙箱分级+审批策略」双轨,Claude Code 走「权限模式+事件钩子」,所以审批粒度与放行体验不同;其二,记忆约定——AGENTS.md 与 CLAUDE.md 功能同构(CLAUDE.md 可单向导入 AGENTS.md),团队约定的加载行为不同;其三,开放程度——闭源只能行为反推,开源可以源码直读,这决定了差异能不能被验证。评测里的分歧多半是没说清自己在比哪一层。
开源 CLI 的哪些实现可以直接读源码验证行为反推的结论?
Codex CLI(Rust、Apache-2.0)是代表性实现:主循环、工具调度、沙箱与审批策略的判定代码全部开放,克隆仓库后直接 grep 关键词就能定位行为对应的实现;Gemini CLI 同样开源可读。读法两条:带着行为疑问搜实现(验证反推假设),或按模块通读(循环、工具注册、会话管理)。Claude Code 闭源,只能行为反推——反推出的假设正好拿开源实现做同构验证,这就是「行为反推+源码直读」双通道。
参考与延伸
- Codex CLI 官方仓库(openai/codex,Apache-2.0,Rust):源码直读的主场 — github.com/openai/codex
- Agent Skills 开放标准(agentskills.io):技能格式跨工具通用的规范基础 — agentskills.io
- Gemini CLI 仓库(google-gemini/gemini-cli):另一条可读源码的开源路线 — github.com/google-gemini/gemini-cli
下一站:Tokenizer——CLI 之上是模型,模型的第一道门是分词:文本如何变成 token。