1. Codex 每步都要确认,自动牛马根本跑不起来

如果你最近在用 Codex 做自动化编码,大概率遇到过这个场景:让它改一个文件,它停下来问你要不要执行;让它跑一条命令,它又停下来等你点确认。你本来想让它当「自动牛马」,结果自己变成了那个不停点「同意」的人。尤其是跑长任务的时候,你去倒杯水回来,发现它卡在第三步等你审批,整条流水线根本没动。

这个问题的根源在于 Codex 默认开启了审批机制。它把每一步操作都当成潜在风险,需要你人工放行。这在交互式调试时是好事,但一旦你想让它无人值守地连续干活,这个机制就成了最大的阻碍。Claude Code 那边有个 --dangerously-skip-permissions 参数,一挂上就彻底放开,Codex 其实也有对应的东西,就是 --dangerously-bypass-approvals-and-sandbox。名字很长,但作用很直接:跳过审批、跳过沙箱限制,让它一口气跑完。

不过这里有个容易被忽略的前提。一旦你免确认跑长任务,整段时间里消耗的都是 Codex 在调用模型,Token 是实打实在烧的。如果模型通道和 Key 还捏在别人手里,或者用的是那种随时可能失效的临时赠码,跑到一半断了,你连问题出在哪都查不出来。所以正确的顺序是:先把模型通道和 Key 落到自己手里,再去配免审批参数。这篇就按这个顺序来,先解决 Key 和 Base URL,再解决自动牛马。

2. 先把模型通道落到自己手里:TaoToken 前置准备

免审批跑长任务,本质上是把「决策权」交给了 Codex,它会连续发起很多轮模型请求。这时候模型通道的稳定性直接决定任务能不能跑完。我试过用临时赠码跑,前几轮还行,跑到后面请求开始超时,任务就断在半路,git 提交记录停在中间,回退都回退不干净。

所以第一步是去 TaoToken 拿一个自己的 Key。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,在页面上创建 API Key。这个 Key 就是你后面所有 Codex 请求的凭证,创建完先复制保存好,页面刷新后就看不全了。

拿到 Key 之后,你需要知道 Base URL 填什么。TaoToken 的 API 地址是 https://taotoken.net/api ,注意这里不带 /v1,也不要加任何 UTM 参数。很多人习惯性在后面补 /v1,结果请求 404,排查半天以为是 Key 的问题。记住这个地址的原始形态,后面写进配置文件时原样填。

这一步只负责供 Key 和 Base URL,不涉及任何免确认参数。免审批那套东西是 Codex 自己的行为,和模型通道是两回事,两边互不干扰。你可以理解为:TaoToken 负责「让请求能发出去并且稳定返回」,Codex 的参数负责「让请求不用你手动放行」。先把前者配通,再动后者。

3. 改 ~/.codex/config.toml:把 Base URL 和 Key 写进去

Codex 的配置文件在 ~/.codex/config.toml,如果这个文件不存在,手动创建一个。核心是 model_providers 这一段,你需要在这里声明一个 provider,把 Base URL 指向 TaoToken,Key 用环境变量引入,而不是明文写死在文件里。

先设置环境变量。打开你的 shell 配置文件,zsh 用户是 ~/.zshrc,bash 用户是 ~/.bashrc,加一行:

export TAOTOKEN_API_KEY="你刚才创建的Key"

保存后执行 source ~/.zshrc 让它生效。用环境变量的好处是配置文件可以随便分享、提交,不会泄露 Key。

然后编辑 ~/.codex/config.toml,写入 provider 配置:

[model_providers.taotoken]
name = "TaoToken"
base_url = "https://taotoken.net/api"
env_key = "TAOTOKEN_API_KEY"
wire_api = "chat"

这里几个字段说明一下。base_url 就是刚才强调的地址,不带 /v1。env_key 指向你设置的环境变量名,Codex 会自己去读,不用把 Key 写进 toml。wire_api 填 chat,走标准的对话接口。如果你后面要指定默认用哪个 provider,可以在文件顶部加一行 model_provider = "taotoken",这样启动时默认就走 TaoToken 通道。

配置写完,先别急着挂免审批参数。用最普通的 codex 命令跑一条很短的指令,比如让它解释一个函数或者改一行注释,确认请求能正常返回。这一步是验证通道,不是验证自动牛马。

4. 验证请求:先短指令跑通,再挂免审批跑长任务

验证分两步,顺序不能反。第一步用短指令确认通道通,第二步再挂免审批参数跑长任务。

短指令验证:

codex "把 README.md 里的标题改成 Hello TaoToken"

如果配置正确,你会看到 Codex 正常发起请求、返回结果,并且真的改了文件。这一步如果报错,先别往下走,回到第 5 节排查。确认短指令能跑通,说明 Base URL 和 Key 都没问题。

接下来才是免审批。Codex 对应的参数是:

codex --dangerously-bypass-approvals-and-sandbox "重构 utils 目录下的工具函数,每改完一个文件就 git commit"

这个参数的作用等同于 Claude Code 的 --dangerously-skip-permissions,挂上之后 Codex 不再每步停下来问你,会连续执行。你可以观察它是否还会中断:正常情况下,它会一路改文件、跑命令、提交,中间不弹审批。

为了让它变成「永久自动牛马」,把这个 alias 写进 zsh:

alias codex-auto='codex --dangerously-bypass-approvals-and-sandbox'

保存 source ~/.zshrc 之后,以后直接敲 codex-auto "你的任务" 就是免确认模式。配合多轮 git 提交,出问题随时回退,这是原文那套思路里最实用的部分。

5. 本篇常见错排查

配通过程中容易踩的坑集中在几个地方,按出现频率排一下。

第一个是 Base URL 多写了 /v1。TaoToken 的地址是 https://taotoken.net/api,如果你写成 https://taotoken.net/api/v1,请求会 404 或者返回奇怪的错误。检查 config.toml 里的 base_url,确保结尾就是 /api。

第二个是环境变量没生效。你在 ~/.zshrc 里加了 export,但当前终端还是旧的环境。执行 echo $TAOTOKEN_API_KEY 看看有没有值,没有就 source ~/.zshrc 或者重开终端。另外注意 env_key 里填的是变量名 TAOTOKEN_API_KEY,不是变量值,别把 Key 直接写进去。

第三个是免审批参数挂上了但任务还是断。这种情况多半不是 Codex 的问题,而是模型通道在长任务里超时了。回到第 2 节确认你用的是自己创建的 Key,而不是临时赠码。长任务对通道稳定性要求高,临时凭证跑到一半失效很常见。

第四个是 alias 写了但不生效。检查你写的是 ~/.zshrc 还是 ~/.bashrc,和你当前用的 shell 要对上。写完必须 source 一次,或者重开终端。可以用 alias | grep codex 确认 alias 已经注册。

第五个是 git 提交没跟上。免审批跑长任务,万一改错了,没有提交记录就没法回退。建议在任务指令里明确要求「每改完一个文件就 commit」,或者提前把工作区清理干净,让 Codex 的每一步都有迹可循。

6. 配通之后:TaoToken 通道 + 免审批 alias,两边各管各的

整套配下来,你得到的是两个独立的东西。一个是 TaoToken 统一接入的模型通道,负责让 Codex 的请求稳定发出去、稳定返回,Key 和 Base URL 都在 ~/.codex/config.toml 里管着。另一个是原文那套免审批 alias,负责让 Codex 不再每步停下来问你,--dangerously-bypass-approvals-and-sandbox 加上 zsh alias 就搞定。

两边互不干扰。通道出问题,查 config.toml 和环境变量;审批出问题,查 alias 和参数。分开排查,比混在一起猜要快得多。

如果你后面想长期跑编码任务或者 Agent 类的自动化,可以看下 Coding Plan 相关的接入方式,把通道和额度都规划好,避免跑到一半断掉。需要确认模型返回是否正常,可以直接在模型对话里发一条测试指令,比在终端里反复试要直观。Key 的管理和重新生成在 API Keys 页面,接入细节看接入文档,遇到报错先对照第 5 节排查一遍,大部分问题都能定位到具体那一行配置。

更多推荐