用途:codex-exec 是 AgentOps 中的一次性运行时适配器,只运行调用方提供的单个 Codex 提示,一个提示对应一个进程、一份捕获产物,使每个输出字节都可追溯到一次调用。它不选择工作、不重试、不校验、不继续执行。
主要能力与规则:沙箱按声明的效果选择,-s read-only 用于审查或分析,workspace-write 仅用于获授权的编辑,网络或更大权限仅在调用方明确需要时使用。必须关闭 stdin:codex exec 在未给提示参数时从 stdin 读取提示,非 TTY 运行(CI、脚本)若 stdin 打开可能永久等待,应通过 stdin 传入提示并让其结束,或重定向 </dev/null。只设一个绝对截止时间且不续期,每次调用(包括调用方决定的重试)只使用该截止时间前剩余的时间;缺失、为零、负数或格式错误的界限会阻止启动,已过期则在派发前停止。此处不重试,超时、错误或空输出按原样报告。输出按字节上限捕获到文件并报告退出状态,超时不算结果。
使用方式:在 AgentOps 源码检出中可使用受保护的库,它强制截止时间、合并输出上限(默认 10 MiB)、进程组清理和回显检测:
. "$AGENTOPS_ROOT/scripts/lib/codex-exec.sh"
CODEX_EXEC_DIR="$WORKSPACE" CODEX_EXEC_SANDBOX=read-only
CODEX_EXEC_PROMPT_FILE="$PROMPT_FILE" CODEX_EXEC_DEADLINE_EPOCH="$DEADLINE_EPOCH"
CODEX_EXEC_MAX_OUTPUT_BYTES=10485760 CODEX_EXEC_OUT_FILE="$OUTPUT"
codex_exec_guarded </dev/null
已安装的技能只附带该文件,源码检出之外没有 scripts/lib/codex-exec.sh,此时直接运行 codex exec(标志以 codex-cli 0.156.1 为准,可用 codex exec --help 确认;macOS 上 Homebrew coreutils 可能只提供 gtimeout):
remaining=$(( DEADLINE_EPOCH - $(date +%s) ))
[ "$remaining" -gt 0 ] || { echo "deadline passed; not launched" >&2; exit 124; }
timeout -k 10 "$remaining"
codex exec -C "$WORKSPACE" -s read-only - <"$PROMPT_FILE" 2>&1
| head -c 10485760 >"$OUTPUT"
rc=${PIPESTATUS[0]}
在 Git 仓库之外可加 --skip-git-repo-check,用 -o <file> 单独保留最终消息(不计入上限)。输出文件恰好等于上限表示被截断,其状态反映的是管道关闭而非审查结果。回退方案没有幸存者检查和回显检测,应报告为未强制执行。
退出码(受保护库):0 表示 Codex 完成并产生输出;2 表示前置条件问题(二进制缺失、界限无效或缺失、能力不可用、清理未验证),不是结果;122 表示 Codex 退出后仍有后代进程存活,降级运行;123 表示达到捕获或提示准备上限,保留部分证据;124 表示截止时间过期,或干净退出但输出为空,属于停滞而非结果;125 表示输出重复了提示,不是结果;128+N 表示被信号 N 取消(129 HUP、130 INT、143 TERM);其他为 Codex 自身的非零状态,原样保留。保留码是运行时证据,不是语义判定;Codex 自身状态可能与保留码重合,可通过运行器的 stderr 诊断区分。
报告内容:command(确切 argv 或库调用,提示按引用给出)、sandbox(-s 值及需要它的已声明效果)、bound(绝对截止时间和启动时剩余秒数)、capture(输出路径、字节上限、是否截断)、exit(状态及表中含义)、cleanup(库结果,或直接回退时写“not enforced”)。
适用场景与限制:适合一次性 codex exec 运行或 CI 步骤;不适合批处理或重试。请求的模型标志或模型自身描述不能证明实际运行的是哪个模型。同系列技能包括 claude-exec(单次无头 Claude 提示)、agy-native 和 agent-native(工作批次)。