你安装了 Codex CLI,满怀期待地启动它,对它说:“修复这个仓库里的所有测试问题。” 然后,噩梦开始了:
Codex: 我要运行 pytest
允许吗? (y/n)
你按了 y。紧接着它又来一句:
Codex: 我要修改 test_user.py
允许吗? (y/n)
又是一个 y。一次又一次。每当需要读取某个文件、运行某个命令或修改某行代码时,都会跳出确认提示。确认、确认、确认。感觉像是跟一个实习生工作,他连上厕所都要问你准不准。
与此同时,Claude Code 或 Cursor Agent 在干同样的事情,却能悄无声息地完成。发生了什么?
其实 Codex 默认是以一种“谨慎模式”运行的。这样做的确有道理——对一个新产品来说,这是最安全的选择。但是如果你是个知道自己在做什么的用户,这种保守模式实在让人崩溃,根本无法高效工作。
好消息是:只需要两秒钟,就能解决这个问题。
权限系统:approval mode
Codex 使用一种叫做 approval mode(审批模式)的机制来控制何时需要你的确认。默认情况下,它会向你请求确认做任何事情:
- 运行命令
- 写入文件
- 修改代码
- 新建文件
- 运行测试
简而言之:默认情况下,Codex 什么都做不了,除非你点 y 确认。就像每执行一个动作都需要输入 sudo。
结果是,这个应该是自主工作的代理,变成了一个永远啰嗦不完的对话系统,而你作为“人类环节”,成为了整个流程中最慢的一环。
解决办法:一个标志,马上起飞
| |
就是这么简单。有了 --approval-mode never,Codex 就再也不会问你了。它会直接执行命令、修改文件、创建需要的文件……就像一个真正可以工作的代理一样。
想让它永久生效?有两个方法可以实现:
| |
| |
从现在开始,每次启动 Codex,它都不会打断你的操作。
第二个问题:sandbox 沙盒
虽然移除了确认提示,但 Codex 可能仍然会被第二个问题卡住。默认情况下的 sandbox(沙盒)模式限制严格,代理甚至不能在仓库内写入。
对于开发使用,你需要将模式设置为 workspace-write:
- 读取整个仓库
- 修改现有文件
- 创建新文件
- 在项目内运行命令
这个设置的完整启动命令如下:
| |
仅需两个标志。这两个标志之间,就是一个“每次都要征求你同意点点点”和“一个能安心干活的代理”之间的差距。
设置别名,避免重复劳动
如果你常用终端(假设你在用 Codex CLI,那应该是的),不如为它创建个别名:
| |
从现在开始:
| |
你就拥有了一个表现像真正代理的 Codex。
单次命令模式:一劳永逸
更有趣的是,你还可以在命令中直接传入任务参数:
| |
不用交互式会话,也不用对话。Codex 会分析项目、运行测试、找出失败案例、修改代码、重新运行,循环操作,直到问题全部解决。而你只需要悠然自得地去喝杯咖啡。
这种模式——agentic loop(循环代理)——正是所有现代代码代理背后的核心逻辑,一个程序会自动循环迭代,直到任务完成。不同之处在于,默认情况下 Codex 会把你拉进这个循环,让你成为强制参与的一环。而通过这两个标志,你可以彻底自动化这个过程,让循环自主运行。
与 Claude Code 的尴尬对比
到了这个部分,OpenAI 可能就不想听下去了:Claude Code 默认已经是这种配置。
| 特性 | Codex CLI (默认) | Codex CLI (优化后) | Claude Code |
|---|---|---|---|
| 权限 | 对一切操作请求确认 | 不需要确认 | 仅对破坏性操作请求确认 |
| 沙盒限制 | 强制性 | workspace-write | 灵活但需要选择性确认 |
| CLI 模式 | 支持 | 支持 | 原生支持 CLI 优先 |
| 单次命令模式 | codex "prompt" | codex-agent "prompt" | claude --print "prompt" |
| 需要配置 | 0 标志 | 2 个标志 | 0 标志 |
Claude Code 的方式更为平衡:它在 90% 的操作中尽量不打扰你,但涉及有可能破坏性操作(如删除文件或修改系统)时会询问确认。这是 Codex 所缺少的默认平衡。
实际效果如何?使用 Claude Code,从一分钟开始你就能流畅工作。使用 Codex?你得先完成一番设置仪式。虽然设置只需敲两个标志就能完成,但对新手来说,这种额外步骤很容易让人前五分钟就想放弃。
写出一个关键提示
一旦让 Codex 可以无障碍操作,最后结果的质量就完全取决于你的提示语(prompt)。一个懒惰的提示只能得到糟糕的结果。
# 错误示例
Fix the tests.
# 正确示例
Fix the failing tests in this repository.
Work autonomously:
- inspect the repo structure
- run tests
- modify code to fix failures
- rerun tests
- repeat until all tests pass
Do not ask for confirmation.
差别非常明显。第一个提示可能只会让 Codex 修复一个测试后停下来。而第二个清楚地告诉 Codex ,要一直迭代工作,直到所有问题被解决。这就好比对水暖工说 “修修这个” 和列一个明确的任务清单之间的区别。
不管是对 Codex、Claude Code 还是其他任何代理,approval mode 能消除所有干扰,而关键提示语则决定了在没有这些干扰的情况下,任务完成得好还是不好。
什么时候不要取消权限?
给出“总是用 --approval-mode never”这种建议是不负责任的,除非加上警告:
别在生产环境的仓库中用这个模式,也别用它直接推送到主分支。 自主代理直接在main分支修改提交代码而没有人复查,这无异于埋下炸弹。自主模式非常适合这些场景:
- 需要最终由你复查的开发分支
- 你能实时查看操作的交互式会话
- 限定任务,如“修复所有测试”“格式化这个模块”“更新依赖”
对于直接影响生产环境的任务,Claude Code 提供的选择性确认模式可能更加合理:在非破坏性操作之间自由工作,但在执行重要修改前会提示你确认。
30 秒快速总结
如果 Codex CLI 用确认提示让你快崩溃了:
| |
| |
这两个参数就能把一个神经过敏的助手,变成一个真正自主的代理。Codex 的默认设置是出于安全考虑设计的,而不是提高效率。不过现在,你知道要怎么打开那个开关了。