你安装了 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

结果是,这个应该是自主工作的代理,变成了一个永远啰嗦不完的对话系统,而你作为“人类环节”,成为了整个流程中最慢的一环。

解决办法:一个标志,马上起飞

1
codex --approval-mode never

就是这么简单。有了 --approval-mode never,Codex 就再也不会问你了。它会直接执行命令、修改文件、创建需要的文件……就像一个真正可以工作的代理一样。

想让它永久生效?有两个方法可以实现:

1
2
3
4
5
# 方法1:使用配置命令
codex config set approval_mode never

# 方法2:直接编辑配置文件
# ~/.codex/config.toml
1
approval_mode = "never"

从现在开始,每次启动 Codex,它都不会打断你的操作。

第二个问题:sandbox 沙盒

虽然移除了确认提示,但 Codex 可能仍然会被第二个问题卡住。默认情况下的 sandbox(沙盒)模式限制严格,代理甚至不能在仓库内写入。

对于开发使用,你需要将模式设置为 workspace-write

  • 读取整个仓库
  • 修改现有文件
  • 创建新文件
  • 在项目内运行命令

这个设置的完整启动命令如下:

1
codex --approval-mode never --sandbox workspace-write

仅需两个标志。这两个标志之间,就是一个“每次都要征求你同意点点点”和“一个能安心干活的代理”之间的差距。

设置别名,避免重复劳动

如果你常用终端(假设你在用 Codex CLI,那应该是的),不如为它创建个别名:

1
2
3
4
5
# Fish
alias codex-agent "codex --approval-mode never --sandbox workspace-write"

# Bash/Zsh
alias codex-agent="codex --approval-mode never --sandbox workspace-write"

从现在开始:

1
codex-agent

你就拥有了一个表现像真正代理的 Codex。

单次命令模式:一劳永逸

更有趣的是,你还可以在命令中直接传入任务参数:

1
2
codex-agent "运行测试套件,找出失败的测试,\
修复代码并重复操作直到所有测试通过。"

不用交互式会话,也不用对话。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 用确认提示让你快崩溃了:

1
2
3
4
5
# 快速启动
codex --approval-mode never --sandbox workspace-write

# 永久设置
codex config set approval_mode never
1
2
# ~/.codex/config.toml
approval_mode = "never"

这两个参数就能把一个神经过敏的助手,变成一个真正自主的代理。Codex 的默认设置是出于安全考虑设计的,而不是提高效率。不过现在,你知道要怎么打开那个开关了。