Codex 使用技巧:用 codex exec 把任务交给脚本自动跑
不想每次都在终端里和 Codex 对话?codex exec 可以一行命令跑完一个任务,适合自动生成说明、总结测试失败、接入持续集成。本文整理管道输入、权限、JSON 输出、续接会话和密钥安全五个实用技巧。
平时用 Codex,是在终端里一来一回地对话。但有些活儿完全可以交给脚本:每天自动生成更新说明、测试失败后自动总结原因、在持续集成里做检查。这时要用的是 Codex 的非交互模式,也就是 codex exec。本文按 OpenAI 官方文档,整理它最实用的几种用法。
一行命令跑完一个任务
codex exec 后面直接跟任务描述,Codex 做完就退出,不会进入对话界面:
codex exec "generate release notes for the last 10 commits" | tee release-notes.md
它的输出有一个很好用的设计:执行过程写到 stderr,只有最终回答写到 stdout。所以可以直接用管道或重定向把结果存成文件,不会混进中间过程。
不想在本机留下这次会话的记录文件,加上 --ephemeral。
技巧一:把命令输出当作上下文喂给它
管道送进来的内容加上一句任务描述,Codex 会把任务描述当作指令、把管道内容当作补充资料。最典型的用法是让它读测试结果:
npm test 2>&1 | codex exec "summarize the failing tests"
如果任务描述本身很长,可以写在文件里,用 - 表示从标准输入读取整个任务:
cat prompt.txt | codex exec -
技巧二:先想清楚给多大权限
非交互模式没有人在旁边点确认,所以权限要提前定好:
- 默认是只读沙箱,适合分析、总结、出报告;
- 需要改文件时,加
--sandbox workspace-write; danger-full-access只在隔离的环境里用,例如持续集成的运行机或容器。
官方已经不再支持旧的 --full-auto 参数。想要以前的效果,用 --sandbox workspace-write;想让越界请求交给自动审核,用 --approve-for-me。
另外,Codex 默认要求在 Git 仓库里运行。确认环境安全时,才用 --skip-git-repo-check 跳过这个检查。
技巧三:让结果方便程序读取
脚本要拿 Codex 的结果做下一步处理时,有三个参数很有用:
--json:把整个过程按 JSON Lines 格式输出到 stdout,每行一个事件,例如thread.started、turn.started、turn.completed、turn.failed、error,以及命令执行、文件修改、网页搜索、计划更新等条目。-o或--output-last-message <文件>:把最终回答单独写进一个文件,同时照常打印。--output-schema <文件>:给一个 JSON Schema,让最终回答按这个结构输出。下游步骤读取固定字段时,就不用再从一段文字里去猜。
技巧四:接着上次的任务继续
非交互模式也能延续上下文。继续最近一次运行:
codex exec resume --last "fix the issues you found"
指定某一次会话,则用 codex exec resume <SESSION_ID>。先让它只读分析,再根据结果追加一句让它动手,是很顺手的两步走用法。
技巧五:登录方式和密钥安全
codex exec默认沿用你在命令行里已经保存的登录状态,本机使用不需要额外设置。- 只想在某一次运行中使用 API 密钥,可以在这条命令前临时设置
CODEX_API_KEY。 - 在 GitHub Actions 里,官方推荐用 Codex 的 GitHub Action,而不是自己安装命令行。
- 不要把
OPENAI_API_KEY或CODEX_API_KEY设成整个任务都能读到的环境变量,尤其是会运行仓库代码的任务,因为构建脚本和依赖包都能读到它。 - 登录凭据文件
auth.json要像密码一样保管;用 ChatGPT 账号登录的方式放进持续集成,官方只建议在可信的私有运行机上使用,不适合公开仓库。
一个完整的思路:自动修复测试失败
官方文档给了一个参考做法:持续集成失败后触发一个后续流程,用只读权限检出失败的提交,通过 GitHub Action 运行 Codex,把修改保存成补丁文件;再由另一个拥有写权限、但拿不到密钥的任务去应用补丁、发起合并请求。这样分开,Codex 既能干活,密钥和仓库写权限又不会落在同一个环节里。
上手建议
- 先从只读任务开始,例如
codex exec "总结这个项目的目录结构",熟悉输出方式。 - 把常用的任务描述存成文本文件,用
cat prompt.txt | codex exec -反复调用。 - 要接入其他脚本时,配合
--output-schema和-o,让结果格式固定下来。
codex exec 默认使用你的 ChatGPT 登录,跑自动化任务会持续消耗用量。日常使用 Plus 就能上手,自动化任务多、每天高强度使用的,可以在 BuyBuy代充(buybuytopup.cn) 开通 ChatGPT Pro,各套餐具体用量以 ChatGPT 官网为准。