codex exec 非交互用法
在脚本和 CI 里用 codex exec 跑 Codex:权限设置、管道输入、JSON 输出、结构化结果、恢复会话和安全注意事项。
codex exec(简写 codex e)用来在不打开交互界面的情况下运行 Codex,适合脚本、CI、定时任务,或者把 Codex 串进命令管道里。
基本用法
codex exec "总结仓库结构,列出风险最高的 5 个地方"运行时,进度输出到 stderr,只有最终回复输出到 stdout,所以可以直接重定向或接管道:
codex exec "根据最近 10 个提交生成发布说明" | tee release-notes.md权限:默认只读
codex exec 默认在只读沙箱里运行。要让它改文件,必须显式放宽权限。
# 允许在工作区内修改文件
codex exec --sandbox workspace-write "修复 lint 报错"
# 更宽的权限:只在隔离的 CI 机器或容器里用
codex exec --sandbox danger-full-access "<任务>"
# 越界请求交给自动审查处理
codex exec --approve-for-me "<任务>"--full-auto 已经不再支持,老脚本里有的话请换成 --sandbox workspace-write 或 --approve-for-me。
管道输入
同时提供管道输入和提示词时,提示词是指令,管道内容是附加上下文:
git diff main...HEAD | codex exec "审查这段 diff,只列出严重问题"npm test 2>&1 | codex exec "分析这些失败的测试,给出最可能的原因"提示词写 - 时,从标准输入读取提示词本身。
机器可读的输出
JSON Lines 事件流
codex exec --json "summarize the repo structure" | jq加上 --json 后,stdout 变成 JSONL 事件流,每行一个事件,类型包括 thread.started、turn.started、turn.completed、turn.failed、item.*、error 等。
只要最终回复
codex exec -o result.md "生成本周变更摘要"-o / --output-last-message 把最终回复写进文件,同时照常输出到 stdout。
按 JSON Schema 输出
需要稳定字段给后续步骤用时,提供一个 JSON Schema:
{
"type": "object",
"properties": {
"project_name": { "type": "string" },
"programming_languages": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["project_name", "programming_languages"],
"additionalProperties": false
}codex exec "Extract project metadata" \
--output-schema ./schema.json \
-o ./project-metadata.json恢复非交互会话
两步走的流水线可以接着上一次运行:
codex exec "检查这次改动有没有竞态问题"
codex exec resume --last "修复你找到的竞态问题"也可以用 codex exec resume <SESSION_ID> 指定会话;加 --all 会在所有目录的会话里找最近一次。
常用参数
| 参数 | 作用 |
|---|---|
-m / --model | 本次使用的模型 |
-s / --sandbox | 沙箱:read-only(默认)/ workspace-write / danger-full-access |
-C / --cd | 指定工作目录 |
-p / --profile | 叠加某个 profile 文件 |
-c / --config | 临时覆盖配置项,可重复使用 |
-i / --image | 附上图片 |
--json | 输出 JSONL 事件流 |
-o / --output-last-message | 把最终回复写进文件 |
--output-schema | 要求最终回复符合 JSON Schema |
--ephemeral | 不把会话记录写入磁盘 |
--skip-git-repo-check | 允许在非 Git 仓库里运行 |
--ignore-user-config | 不加载 ~/.codex/config.toml(登录信息仍然使用) |
Codex 默认要求在 Git 仓库里运行,防止改动无法回退。确认环境安全时,才用 --skip-git-repo-check 跳过检查。
在 CI 里认证
CI 里通常用 API Key(按 API 用量计费):
CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"不要把 Key 设成全局环境变量
在会检出或运行仓库代码的 CI 任务里,不要把 OPENAI_API_KEY 或 CODEX_API_KEY 设成整个 job 的环境变量:构建脚本、测试、依赖的安装钩子都能读到它。只给需要它的那一条 Codex 命令。GitHub Actions 上推荐直接用官方的 openai/codex-action,它专门做了防泄露设计。
官方也提供了在受信任的私有 CI 机器上使用 ChatGPT 账号认证的方案,但明确说 API Key 才是自动化的推荐默认方式,公开仓库或开源项目不要这样做。