1. Codex CLI 命令体系与真实项目里的批量执行场景
Codex CLI 是 OpenAI 官方推出的命令行编程助手,能直接在终端里读写项目文件、跑测试、改代码。它最核心的三个子命令是exec、apply、resume:exec负责非交互式一次性执行任务,apply把生成的差异落到本地文件,resume用来恢复之前的会话继续跑。适合谁?适合需要在 CI/CD 里批量跑代码修复、或者任务跑到一半中断了想接着跑的开发者。
很多人第一次用 Codex 只会在交互界面里聊天,一旦遇到「批量处理 20 个文件」「跑了一半断网了」这种场景就抓瞎。我试过在一个 30 多个模块的仓库里用codex exec批量修 lint 错误,中途因为终端关掉导致会话丢失,后来靠resume才把上下文接回来。这套组合拳的价值就在这里:把 Codex 从「聊天玩具」变成「可编排的工程工具」。
本文聚焦三件事:第一,exec/apply/resume在真实项目里的组合用法和可复制命令清单;第二,auth.json与 Base URL 的配置写法,把 endpoint 指向 TaoToken 后如何验证连通性;第三,常见报错(401、local proxy failed、reading choices、OAuth 失败)的排查动作。全程给命令、给配置、给结果,你跟着敲就能跑通。
先明确一个概念:Codex CLI 的「会话」是有状态的。交互模式下你聊的每一轮都会存进本地会话文件,exec默认也会创建一个会话,resume就是把这些会话重新加载。理解这一点,后面所有命令都好懂了。
2. TaoToken 前置准备:auth.json 与 Base URL 配置实操
Codex CLI 默认走 OpenAI 官方 endpoint,但你可以通过配置文件把请求转发到兼容 OpenAI 协议的服务上。TaoToken 提供的就是这种兼容接口,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 根地址是 https://taotoken.net/api 。下面把配置步骤拆开讲。
第一步,拿到 API Key。登录后进入控制台,在 API Keys 页面创建一个新 Key,复制保存。这个 Key 就是后面auth.json里的OPENAI_API_KEY值。注意别把 Key 提交到 Git 仓库,建议放环境变量或本地配置文件。
第二步,找到 Codex 的配置目录。不同系统路径不一样:
| 系统 | 配置目录 |
|---|---|
| macOS / Linux | ~/.codex/ |
| Windows | %USERPROFILE%\.codex\ |
目录里通常有auth.json和config.toml两个文件。auth.json存凭证,config.toml存模型和 provider 配置。
第三步,写auth.json。内容是一个 JSON 对象,字段名必须和 Codex 读取的一致:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }注意OPENAI_BASE_URL结尾不要带/v1,Codex 会自己拼接路径。如果你之前配过官方地址,这里直接替换即可。
第四步,写config.toml,指定模型和 provider。Codex 支持自定义 provider,把 base_url 指到 TaoToken:
model = "gpt-5" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "OPENAI_API_KEY" wire_api = "chat"这里wire_api = "chat"表示走 Chat Completions 协议,env_key告诉 Codex 从哪个环境变量读 Key。如果你把 Key 直接写在auth.json里,env_key可以保留,Codex 会优先读 auth.json。
第五步,验证配置是否生效。运行:
codex --version codex --help然后进交互界面敲/status,看当前 provider 和 base_url 是不是 TaoToken。如果显示的还是官方地址,说明config.toml没被读到,检查文件路径和 TOML 语法。
这一步做完,Codex 的所有请求都会走 TaoToken。接下来exec、apply、resume就能正常用了。如果你更习惯用 Coding Plan 做长期编码任务,可以在控制台里看套餐说明,这里不展开。
3. exec / apply / resume 可复制配置与命令清单
这一节是全文的核心,把三个子命令的完整用法和组合场景列清楚。所有命令都可以直接复制到终端跑。
3.1 exec 非交互式执行
exec是最适合脚本化的命令,跑完就退出,不进入交互界面。
# 基本用法:执行单次任务 codex exec "更新所有依赖并运行测试" # 全自动模式,不需要人工确认每一步 codex exec --full-auto "修复所有 lint 错误" # 静默模式,减少输出,适合 CI 日志 codex exec -q "生成 API 文档" # 指定工作目录 codex exec --cwd /path/to/project "重构 utils 目录" # 指定模型 codex exec -m gpt-5 "给所有函数补上类型注解"在 GitHub Actions 里的写法:
- name: Auto-fix lint run: | npm install -g @openai/codex codex exec --full-auto "fix all eslint errors" env: OPENAI_API_KEY: ${{ secrets.TAOTOKEN_KEY }} OPENAI_BASE_URL: https://taotoken.net/api注意 CI 环境里没有交互终端,必须用--full-auto或-q,否则 Codex 会卡在等待确认。
3.2 apply 应用差异
apply把 Codex 生成的最新差异落到本地文件。它有个别名codex a。
# 应用最新差异 codex apply # 别名 codex a典型场景:你在交互界面里让 Codex 改了几个文件,它生成了 diff 但还没写入。这时用codex apply一次性落盘。如果 diff 有冲突,Codex 会提示你手动处理。
3.3 resume 恢复会话
resume用来接续之前的会话,断点续跑的关键。
# 从会话选择器里挑一个恢复 codex resume # 直接恢复最近一次会话 codex resume --last # 从指定文件恢复 codex resume --file session.json配合/export和/load使用更灵活:在交互界面里/export session.json导出会话,之后codex resume --file session.json就能在任何机器上接着跑。
3.4 组合用法:批量执行 + 断点续跑
真实项目里最常见的组合是这样:
# 第一步:批量跑任务,导出会话 codex exec --full-auto "修复所有 TypeScript 类型错误" codex exec "运行测试并生成报告" # 第二步:如果中途中断,恢复最近会话 codex resume --last # 第三步:确认改动后应用差异 codex apply如果你要跑一个长任务,建议先/export存一份会话,再resume --file恢复,这样即使换机器也不丢上下文。
3.5 交互界面内置斜杠命令速查
| 命令 | 说明 |
|---|---|
/help | 查看所有可用命令 |
/model | 切换模型,如/model gpt-5 |
/approvals | 切换审批模式 |
/clear | 清空当前对话上下文 |
/exit或/quit | 退出 |
/export session.json | 导出会话 |
/load session.json | 加载会话 |
/history | 查看对话历史 |
/undo | 撤销上一次文件修改 |
/diff | 查看待确认的变更差异 |
/status | 查看配置状态和账号信息 |
这些斜杠命令和子命令配合用,效率会高很多。比如先/diff看改动,确认没问题再codex apply。
4. 连通性验证与成功结果确认
配置写完不能直接信,得验证请求真的走到了 TaoToken。这一节给完整的验证步骤和预期结果。
4.1 最小验证:跑一条 exec
codex exec -q "输出当前目录的文件列表"预期结果:终端打印出文件列表,没有报错。如果看到401 Unauthorized,说明 Key 不对;如果看到local proxy failed,说明 base_url 或网络有问题。
4.2 检查 /status
进交互界面:
codex然后敲:
/status预期输出里应该包含:
Provider: taotoken Base URL: https://taotoken.net/api Model: gpt-5如果 Provider 显示的是openai而不是taotoken,说明config.toml里的model_provider没生效,检查拼写。
4.3 用 curl 直接验证 endpoint
绕过 Codex,直接测 API 是否通:
curl -s https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 10 }'预期返回一个 JSON,里面有choices数组。如果返回{"error": ...},看 error 里的 message 定位问题。
4.4 验证 resume 能接回上下文
# 先跑一个任务 codex exec "记住数字 42" # 恢复会话 codex resume --last在恢复的会话里问「我刚才让你记住什么」,如果回答 42,说明会话恢复成功。
4.5 成功结果的判断标准
三个信号说明配置完全正确:第一,codex exec能正常返回内容不报错;第二,/status显示 provider 是 taotoken;第三,resume --last能接回之前的上下文。三个都满足,就可以放心在项目里用了。
5. 常见报错排查:401 / local proxy failed / reading choices / OAuth
这一节对照真实报错,给排查动作。每个报错都按「现象 → 原因 → 动作」写。
5.1 401 Unauthorized
现象:codex exec返回401 Unauthorized或invalid api key。
原因:Key 不对、Key 过期、或者auth.json没被读到。
排查动作:
# 检查 auth.json 是否存在 cat ~/.codex/auth.json # 检查环境变量是否覆盖了配置 echo $OPENAI_API_KEY如果环境变量里有旧的官方 Key,会覆盖auth.json。清掉环境变量再试:
unset OPENAI_API_KEY codex exec -q "test"5.2 local proxy failed
现象:报错local proxy failed或connection refused。
原因:base_url 写错、网络不通、或者本地有代理拦截。
排查动作:
# 直接 curl 测 endpoint curl -v https://taotoken.net/api/chat/completions如果 curl 也不通,检查config.toml里的base_url是不是https://taotoken.net/api,结尾别多写/v1。如果 curl 通但 Codex 不通,检查是否有环境变量HTTP_PROXY指向了失效的本地代理,清掉:
unset HTTP_PROXY HTTPS_PROXY5.3 reading choices 报错
现象:error reading choices或unexpected response format。
原因:返回的 JSON 结构不符合预期,通常是wire_api配错了。
排查动作:检查config.toml里的wire_api。如果服务走 Chat Completions 协议,写chat;如果走 Responses 协议,写responses。TaoToken 的/api根路径兼容 Chat Completions,所以:
wire_api = "chat"改完重启 Codex 再试。
5.4 OAuth 失败
现象:OAuth token exchange failed或login required。
原因:Codex 尝试走 OAuth 登录流程,但你用的是 API Key 模式。
排查动作:确保auth.json里有OPENAI_API_KEY字段,并且config.toml里指定了env_key。如果 Codex 仍然弹登录,运行:
codex logout然后重新用 API Key 模式启动。不要走codex login的 OAuth 流程,那是给官方账号用的。
5.5 报错速查表
| 报错 | 最可能原因 | 第一动作 |
|---|---|---|
| 401 Unauthorized | Key 错或环境变量覆盖 | cat ~/.codex/auth.json |
| local proxy failed | base_url 错或代理拦截 | curl -v https://taotoken.net/api |
| reading choices | wire_api 配错 | 改成chat |
| OAuth failed | 走了登录流程 | codex logout后用 Key |
5.6 排查通用思路
遇到任何报错,先做三件事:第一,codex --version确认版本;第二,/status看当前配置;第三,curl直接测 endpoint。这三步能定位 80% 的问题。剩下的看报错关键词,对照上面的表。
6. 把 Codex 接入 TaoToken 后的长期用法与 CTA
配置跑通只是开始,真正提升效率的是把exec/apply/resume嵌进日常工作流。给你几个我实测下来好用的模式。
模式一:CI 里自动修 lint。在 GitHub Actions 里加一个 job,用codex exec --full-auto跑 eslint 修复,失败就resume --last重试。这样每次 PR 都能自动清理格式问题。
模式二:本地批量重构。把要改的文件列表喂给codex exec,配合--cwd指定目录,一次跑完。改完用codex apply落盘,/diff确认。
模式三:长任务断点续跑。跑大任务前先/export session.json,中断后codex resume --file session.json接回来。换机器也能继续。
如果你需要长期跑编码任务或 Agent 流程,可以看 Coding Plan 的套餐,地址是 https://taotoken.net/api 对应的控制台里能找到。验证模型效果的话,直接用模型对话页面测几条 prompt 就行。接入文档在 https://taotoken.net/api 的 doc 路径下,API Keys 在 console 里管理。
最后提醒一句:auth.json和config.toml别提交到 Git,用.gitignore排除~/.codex/或者把 Key 放环境变量。跑exec前先codex --version确认版本,不同版本的参数名可能微调。遇到报错先curl测 endpoint,再对照第 5 节的表排查。这套流程跑顺了,Codex 就能真正变成你项目里的自动化助手。