安装 Codex CLI 后,满怀期待地启动它。你告诉它“修复这个代码库中失败的测试”。然而,灾难随即开始:
Codex: I want to run pytest
Allow? (y/n)
你输入了 y。接下来:
Codex: I want to modify test_user.py
Allow? (y/n)
又输入了 y 。一次又一次,每次需要读取一个文件、执行一个命令或者修改一行代码,它都会请求确认。确认,确认,还是确认。这感觉就像跟一个刚入门的实习生合作,他每次连去洗个手间都要问你同不同意。
与此同时,Claude Code 或 Cursor Agent 却可以实现相同的功能,但却不会多说一句话。这是为什么?
原因在于:默认情况下,Codex 被配置为一个“过于谨慎”的助手。这么做是为了安全考虑,尤其是针对一款新产品来说是很合理的。但如果你对操作足够了解,这种保守模式在实际工作中将让人无法忍受。
好消息是:只需几秒钟便能调整过来。
权限模式:approval mode
Codex 使用一种叫做 approval mode(批准模式)的概念来控制需要你授权的情境。默认设置下,它对所有操作都需要你的确认:
- 执行命令
- 写入文件
- 修改代码
- 创建新文件
- 运行测试
简单来说:默认状态下,Codex 无法在没有你按下 y 键的情况下做任何事情。可以将其形容为:对每一个操作都需要一次 sudo 操作。
这使得一个本应是自主代理的工具,变成了一场你成为整个过程中最慢环节的无休止对话。
解决方案:使用一个标志
codex --full-auto
从版本 0.1.2 起,--full-auto 是官方的快捷方式,它将 --approval-mode never 和 --sandbox workspace-write 两个参数组合在一起。如果你使用的是旧版本,也可以用完整写法:
codex --approval-mode never
无论选择哪种方法,Codex 都会停止询问你,直接执行命令、修改文件、创建需要的内容。它将真正成为一个自主工作的代理。
想要让设置永久生效?有两种方法:
# 方法1: 设置配置命令
codex config set approval_mode never
# 方法2: 直接编辑配置文件
# ~/.codex/config.toml
approval_mode = "never"
从现在开始,每次启动 Codex,它都不会再进行无休止的打扰。
第二个问题: sandbox(沙盒)
但还有另一个问题会让 Codex 无法顺利工作。即使你取消了所有确认请求,默认的沙盒模式可能仍然过于限制,以至于代理甚至无法在代码库中写入。
对于开发工作而言,你需要选择适当的模式,推荐 workspace-write:
- 可以读取整个代码库
- 能修改现有文件
- 可以创建新文件
- 能在项目中执行命令
要让 Codex 真正全力工作,需要这样启动:
# 新版本(0.1.2+)
codex --full-auto
# 或者更明确的方式(等效)
codex --approval-mode never --sandbox workspace-write
两个标志——如果你使用的是 --full-auto,就只需一个。这是将一个总是打断你的助手与专注工作的代理区分开来的关键。
创建别名避免重复输入
如果你习惯了在终端里工作(使用 Codex CLI 的人通常会这样),可以创建一个别名:
# Fish shell(现代版本)
alias codex-agent "codex --full-auto"
# Fish shell(明确版本)
# alias codex-agent "codex --approval-mode never --sandbox workspace-write"
# Bash/Zsh
alias codex-agent="codex --full-auto"
从现在开始:
codex-agent
你将拥有一个真正像代理一样工作的 Codex。
一次性任务模式:启动并忘记
有趣的地方在于,当你直接将任务作为参数传递时:
codex-agent "Run the test suite, identify failing tests, \
fix the code and repeat until everything passes."
无需交互式会话,也没有多余对话。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 默认情况下本应具备的平衡。
良好提示语的关键作用
一旦 Codex 获得权限,结果的质量将 100% 取决于你的提示语质量。模糊的提示语会产出模糊的结果。
# 不佳
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 修复一个测试后停止;而第二个提示则清晰地告诉它要迭代直至所有工作完成。这类似于告诉工人“修好这个”,还是提供详细的故障清单。
这一点同样适用于 Claude Code 和其他任何代理。approval mode(批准模式)可以避免中断,而提示语的设计则决定了代理所完成工作的质量。
在什么情况下不建议取消权限
直接告诉你“始终使用 --approval-mode never”是不负责任的。请注意:
请勿在未复查的生产代码库中启用此选项。 允许代理自动将更改提交到 main 分支而无人复查,很可能导致灾难。自主模式更适合以下场景:
- 需要你复查结果的开发分支
- 你能实时查看动作的交互式会话
- 范围明确的任务:比如“修复测试”、“格式化此模块”、“更新依赖项”等
对于可能影响生产环境的任务,Claude Code 的选择性确认模式会更为周全:它允许自由工作,但在执行关键操作前会要求你的确认。
30 秒概述
如果 Codex CLI 的反复确认让你抓狂:
# 快速方式(0.1.2+)
codex --full-auto
# 明确方式(等效)
codex --approval-mode never --sandbox workspace-write
# 永久设置
codex config set approval_mode full-auto
一个标志可以将一个过于谨慎的助手转变成一个真正的自主代理。Codex 的默认配置强调安全性而非生产力,现在你知道如何切换了。
本文原文为西班牙语,借助AI翻译。