mcpField
C
codex-exec

codex-exec

github.com/boshu2Agent 工作流45055 次安装今天更新
代码仓库

关于 codex-exec

codex-exec 是一个一次性 Codex 运行时适配技能,面向需要执行单条调用方提示词并留存结果的工作流。它通过沙箱、超时和输出捕获约束单次进程,并报告运行状态后停止。

主要功能

  1. 01执行一条指定的 Codex 提示词
  2. 02依据授权影响选择沙箱模式
  3. 03设置运行时限并处理标准输入
  4. 04捕获输出并限制字节数
  5. 05报告退出状态与清理情况

适用场景

  1. 01以只读模式运行代码审查提示词
  2. 02执行获准修改工作区的提示词
  3. 03在 CI 或脚本中运行 Codex
  4. 04留存单次调用的输出与状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/boshu2/agentops --skill codex-exec

安装后在 Claude Code 中输入/codex-exec确认已加载。

附带文件references/guarded-runner.md

详细介绍

Codex Exec — 单次运行时适配器

将调用方提供的 Codex 提示词作为单个进程恰好运行一次,并捕获其结果。此技能不会选择工作、重试、验证或继续执行。一个提示词、一个进程、一个捕获的产物,确保每个输出字节都可追溯到一次调用。

会改变命令的规则

  • 根据声明的影响选择沙箱。 审查或分析使用 -s read-only,仅在获准编辑时使用 workspace-write;只有调用方明确要求网络或更广泛的访问权限时才启用。 “以防万一需要”不算声明的影响。运行期间的权限拒绝(套接字绑定、操作系统权限检查或对端凭据探测返回 EPERM 或 “Operation not permitted”)可能只表明所选模式阻止了什么;在沙箱内无法据此判断主机或代码是否会失败。引用该错误,并将此检查报告为受沙箱限制、未运行 / not_checked:既不算通过,也不算检查失败。主机上对同一探测的观察仍然有效;是否在主机上运行由调用方决定。
  • 关闭 stdin。 未提供提示词参数时,codex exec 会从 stdin 读取提示词;提供提示词参数时,则会将管道传入的 stdin 附加到提示词后。stdin 保持打开的非 TTY 运行(CI、脚本)可能无限期等待:这就是 stdin 挂起。将提示词通过 stdin 输入并使其结束,或使用 </dev/null 重定向。
  • 只设一个截止时间,绝不重置。 在首次尝试前确定一个绝对截止时间。每次调用,包括调用方决定进行的任何重试,都只能使用该截止时间之前剩余的时间。重试绝不能获得新的时间预算:为每次尝试单独设置一个新的超时的循环,会悄然放宽调用方设定的时限。缺少时限、时限为零、负值或格式错误时,不得启动;截止时间已过时,应在派发前停止。
  • 此处不重试。 按原样报告超时、错误或空输出。是否再次调用由调用方决定,且仍须遵守同一个截止时间。
  • 限制捕获大小,并明确退出状态。 将输出捕获到不超过字节上限的文件中,并报告退出状态。超时不算结果。

运行

在 AgentOps 源码检出目录中,使用受保护的库。它会强制执行截止时间、合并输出上限(默认 10 MiB)、进程组清理和回显检测:

# DEADLINE_EPOCH: absolute Unix time fixed once by the caller and reused by
# every invocation in its scope.
. "$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 提供 timeout):

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]}  # 124 timed out, 137 killed after grace, else codex's status

在 Git 仓库之外添加 --skip-git-repo-check,并添加 -o <file> 以单独保留最终消息(不计入上限)。输出文件大小恰好达到上限时,表示内容已被截断;其状态反映的是管道关闭,而不是审查结果。此备用方式不检查残留进程,也不检测回显;报告时须注明这两项均未强制执行。

退出代码(受保护的库)

退出代码含义
0Codex 已完成并生成输出
2前置条件不满足:找不到二进制文件、上限无效或缺失、功能不可用,或无法验证清理;不构成结果
122Codex 退出后仍有子进程存活;运行降级
123达到捕获或提示词准备上限;保留部分证据
124截止时间已过,或正常退出但输出为空;发生停滞,不构成结果
125输出重复了提示词;不构成结果
128+N被信号 N 取消(129 HUP、130 INT、143 TERM)
其他保留 Codex 自身的非零状态

保留代码是运行时证据,绝不是语义判定。Codex 自身的状态可能与保留代码相同;运行器的 stderr 诊断信息可用于区分两者。受保护的运行器内部机制介绍了输入、主机要求、进程监管和外部沙箱封装器。

报告,然后停止

command:  exact argv or library call (prompt by reference)
sandbox:  -s value and the declared effect that needs it
bound:    absolute deadline and seconds remaining at launch
capture:  output path, byte cap, truncated yes/no
exit:     status and its meaning from the table
cleanup:  library result, or "not enforced" for the direct fallback

Codex 验证器遵循判定回执规范 和 Agent 原生模型调度方案:请求的模型标志或模型自身的描述,都不能证明实际运行的是哪个模型。同类工具:一个无头 Claude 提示词是 claude-exec,AGY 是 agy-native,工作线程批次是 agent-native。

评论

支持 Markdown