codex-exec
GitHub非交互式运行单次 Codex 命令并捕获证据,强制使用进程组隔离与超时回收机制(默认600秒),确保执行可审计且失败时安全关闭。
Trigger Scenarios
Install
npx skills add boshu2/agentops --skill codex-exec -g -y
SKILL.md
Frontmatter
{
"name": "codex-exec",
"context": {
"intent": {
"mode": "none"
},
"window": "inherit",
"sections": {
"exclude": [
"HISTORY"
]
},
"intel_scope": "none"
},
"consumes": [
"codex-command-packet"
],
"metadata": {
"tier": "orchestration",
"effects": [
"run_codex_process",
"sandbox_tiered_workspace_and_network_effects"
],
"stability": "stable",
"disposition": "keep_optional_adapter",
"capabilities": [
"codex_exec"
],
"dependencies": [],
"canonical_status": "canonical"
},
"produces": [
"codex-run-output"
],
"practices": [
"pragmatic-programmer"
],
"context_rel": [
{
"kind": "supplier-to",
"with": "validate"
}
],
"description": "Run one caller-supplied Codex command non-interactively and capture evidence. Triggers: \"run Codex headless\", \"capture Codex evidence\".",
"hexagonal_role": "driving-adapter",
"user-invocable": false,
"output_contract": "process exit status and captured Codex output artifact",
"skill_api_version": 1
}
Codex Exec — one-shot runtime adapter
Run exactly one caller-supplied Codex prompt and capture its result. This skill does not choose work, retry failures, validate by itself, or control continuation.
One prompt, one process, one captured artifact is what makes the run auditable: when nothing loops, every byte of output traces to exactly one invocation, and a disagreement about what happened is settled by the artifact.
Named failure mode — stdin hang: a non-TTY run left waiting forever on an open stdin nobody will write to; always pipe the prompt or close the stream.
Anti-pattern: granting workspace-write or network access "in case the prompt needs it". Corrective: match the sandbox to the declared effects; a review prompt runs read-only, full stop.
Procedure
- Confirm
codex login statusfor the intended profile. - Set the working root explicitly with
-C. - Match the sandbox to the requested effects: read-only for offline review, workspace-write for authorized edits, and broader access only when the caller explicitly requires network or external effects.
- Pipe the prompt to stdin (or close stdin) in non-TTY execution so the process cannot wait indefinitely for input.
- A wall-clock deadline is mandatory — never run codex unbounded. Use the
caller's deadline, or the declared default of 600s (10 min) when the
caller supplies none, and record which one applied. Enforce it so the whole
process tree is reaped, not just the direct child: run codex in its own
process group and kill the group on expiry:
setsid(own process group) +kill -KILL -<pgid>on the group;--kill-afteronly escalates TERM→KILL and plaintimeout <secs> codex …signals only the direct child. If the wrapper cannot guarantee process-group reaping, do not execute — that host lacks the cleanup capability this skill requires (capability unavailable, fail closed). Deadline expiry is fail-closed: the run is killed and reported as timed-out / not proven, partial output preserved — never a completed review. - Capture the final response with
-o, JSONL, or an output schema. - Report the typed run result, then stop: the process exit status, the captured
artifact path, which deadline applied and whether it fired, that the
process tree was reaped (a run without guaranteed reaping never starts), and whether
the
codexbinary was present at all. Cancellation is the caller's; this skill neither retries nor continues on its own.
Terminal outcomes are explicit: binary absent (no codex on PATH) → report
unavailable and stop; deadline expiry → fail-closed, report the kill and
preserved partial output, never a completed review; nonzero exit → runtime
evidence, not a semantic verdict. The caller decides whether to launch another
invocation.
Example
# Deadline mandatory; default 600s. `setsid` puts codex in its own process
# group so expiry kills the whole tree, with `--kill-after` escalating
# TERM->KILL. No setsid (or equivalent group kill) available -> do not run:
# fail closed as capability-unavailable.
printf '%s\n' "$PROMPT" | setsid timeout --kill-after=10s "${CODEX_TIMEOUT:-600}" \
codex exec -C "$WORKSPACE" -s read-only -o "$OUTPUT" -
For a validator, the prompt must name the acceptance digest, exact subject
manifest digest, author context ID, evidence, and required checked/not-checked
report. The validator context ID must be distinct from the author's before a
PASS verdict is possible. When the caller elects a cross-model fresh
validator, record model identities per
the agent-native model-dispatch recipe and match the sandbox to
declared effects.
Version History
-
7b07a7d
Current 2026-08-19 21:58
W6版本更新:引入强制墙钟超时(默认600s)、fail-closed机制及进程组树回收前置条件;细化沙箱权限匹配、登录状态确认及退出结果报告规范。
- 3f402e5 2026-07-24 22:06


