Codex
codex exec 实战:在脚本和 CI 里非交互运行 Codex
codex exec 让 Codex 脱离交互界面跑单次任务:进度走 stderr、答案走 stdout,默认只读沙箱。这篇把权限分级、结构化输出、会话续跑和 CI 里的注意事项讲清楚了,可以直接照着写脚本。
今天就能做
- 把“描述改法但不落地”的脚本改成加 --sandbox workspace-write,再跑一次验证文件真的被改。
- 在流水线里用 --json 加 jq 提取 agent_message,或直接用 --output-schema 加 -o 产出结构化 JSON 供下一步消费。
- CI 任务统一加 --ephemeral 和 --ignore-user-config,密钥只挂在单条命令上,GitHub 场景改用官方 Action。
默认行为:只读、要 Git 仓库、输出可管道
- codex exec(别名 codex e)接收一段指令,读完仓库、在沙箱里执行、打印最终答案后退出,适合 shell 脚本、git hook、cron 和 CI。
- 进度信息全部走 stderr,只有最终回复进 stdout,所以直接重定向或 tee 就能存结果,不用再过滤噪音。
- 它要求当前目录是 Git 仓库,否则拒绝运行,防止在无法回滚的目录里搞破坏;确实要在别处跑就加 --skip-git-repo-check。
- stdin 有两种用法:带 prompt 时管道内容作为上下文(如把 git diff 喂进去让它逐文件解释);prompt 写成 - 或不给 prompt 时,stdin 整体就是指令,适合脚本用模板拼 prompt。
权限:默认只读,按需放开
- 默认 read-only 沙箱,能读文件、跑只读命令,但改不了工作区。所以让它“修失败的测试”时,它常常只描述改法而不落地。
- sandbox workspace-write 允许改项目内文件,适合修 bug、重构、生成代码;danger-full-access 完全不设沙箱,只该用在可随时丢弃的容器里。
- 旧脚本里的 --full-auto 已是废弃兼容参数,会打警告,新脚本统一写 --sandbox workspace-write。
- dangerously-bypass-approvals-and-sandbox(别名 --yolo)去掉全部保护,仅限一次性环境。
- 要跨机器结果一致,加 --ignore-user-config 跳过个人 config.toml(认证仍有效),加 --ignore-rules 跳过用户和项目的 execpolicy 规则文件。
让脚本能解析输出
- o(长写 --output-last-message)把最终回复单独写进文件,终端照常显示进度,文件里只有答案。
- json 把每一步输出成 JSON Lines:thread.started、turn.started、item.started/item.completed、最后 turn.completed(带 token 用量)或 turn.failed;可用 jq 筛出 agent_message 的文本。
- thread.started 事件里带 thread_id,这是后续 resume 要用的 ID。
- output-schema 传入 JSON Schema 文件,强制最终回复符合结构,配合 -o 直接产出下一步能加载的 JSON 文件,而不是一段散文。
续跑与代码审查
- 每次运行都会存成 session,codex exec resume 把追问送进同一会话,Codex 保留之前读过的内容和判断。
- last 选最近一次会话;也可传 session ID 或 thread 名,跨目录的会话要加 --all,因为默认按当前目录过滤。
- 脚本里别依赖 --last,同一台机器上另一个任务可能插进来生成更新的会话,应从第一次运行的 thread.started 事件里取 ID。
- ephemeral 让本次运行不落盘,适合一次性 CI 任务,但也就无法 resume。
- codex exec review 支持 --uncommitted、--base main、--commit <hash> 三种审查范围,还能附加自定义审查指令;审查只读不改代码,适合作为 pre-push hook 的低风险第一步。
CI 里跑的几条规矩
- 认证用 CODEX_API_KEY,且只挂在需要它的那一条命令上,不要在 job 级别全局设置——文档明确提醒,在会执行仓库代码的 workflow 里全局设置密钥有风险。
- 沙箱按任务选:审查和总结保持默认只读;必须改文件才用 workspace-write,并让流水线开 PR 交给人审。
- 加 --ignore-user-config 和 --ephemeral,避免 runner 上的残留配置改变行为、会话文件越堆越多。
- GitHub 上优先用官方 Action(openai/codex-action@v1),而不是自己装 CLI 再传密钥给 shell 步骤。
- 依赖 MCP 工具时先用 codex mcp list --json 确认 runner 上配了什么;项目指令放 AGENTS.md,保证 CI 和本地用同一套构建与测试命令。
原文:Codex exec: execute Codex non-interactively in scripts and CI
来源:DEV Community · 2026-11-04
查看原文本文由 AI 阅读原文后整理,未经人工逐字核对,内容以原文为准。
登录后可以点赞、查看和发表评论