学习精选 · AI 工具
Codex

codex exec 实战:在脚本和 CI 里非交互运行 Codex

DEV Community2026-11-04约 6 分钟读完AI 整理查看原文

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 阅读原文后整理,未经人工逐字核对,内容以原文为准。

登录后可以点赞、查看和发表评论