Claude Code 自调用 / 调 Codex / Loop
术-运行时 · 术层 skill 全文
本页是 <code>rules/skills/claude_code_self_evoke_call_codex_loop.md</code> 的逐字投影(仅隐私清洗,零改写)。
时点提示:本页是仓内文件 rules/skills/claude_code_self_evoke_call_codex_loop.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。
Skill:Claude Code 自调用 / 调 Codex / Loop
使用时机
Claude Code 需要 Self Evoke、自调用、调用 Codex、或用 Loop 形式持续执行任务时使用。目标可以是另一个非交互 Claude Code 进程,也可以是 Codex CLI,用于独立实现、审查、smoke test、第二意见、judge,或可恢复的多轮任务执行。
本 skill 是 Claude Code 侧唯一调用入口。文件名刻意包含 self_evoke、call_codex、loop,但这里的 loop 只表示 Claude Code runtime 执行形态。用户泛称“做 Loop”、持续推进、优化并测试 Skill、AAU/AOU 多轮任务、或处理 Skill 非正交问题时,先进入 workflow_controller_loop;只有 Controller 明确选择 Claude runtime、自调用或 Claude Code 调 Codex 时才使用本 skill。它覆盖三类动作:
- Claude Code 自调用:通过
claude -p、claude-zai -p、claude-kimi -p执行调研、编辑、E2E、Judge。 - Claude Code 调 Codex:通过
cli_agent或codex exec调 OpenAI/Codex 模型做独立验证。 - Claude Code Loop:通过磁盘状态、durable evidence、
HANDOFF.md/PROGRESS.md和必要时的 ScheduleWakeup,把长任务拆成可恢复的连续回合。
如果任务已经由 workflow_controller_loop 管理,本文件只提供 Claude Code runtime profile:如何调用 Claude/Codex 子进程、如何保留 durable output、如何处理 quota/fallback、如何恢复进程。需求、任务卡、在线审查和业务 closure 由 Controller 持有。
Codex 自调用、Codex 调 Claude Code、以及 Codex runtime profile 属于 codex_self_evoke_call_claude_code_loop。需要选择 Codex App automation、cron、cloud、resume 等调度面时,再参考 codex_schedule_loop。
边界
按运行时归属分 skill,而不是按同类调用/跨工具调用拆 skill。原因是同一运行时共享同一组环境变量、hook、MCP 隔离、quota/fallback、日志、失败处理和 loop 恢复方式。把 Claude Code 自调用、Claude Code 调 Codex、Claude Code Loop 拆成多个 skill 会复制这些不变量,并让 agent 在相邻 trigger 之间摇摆。
只有运行时归属不同的时候才拆 skill。Claude Code 侧自调用、调 Codex 和 Loop 执行放在本文件;Codex 侧自调用、调 Claude Code 和 Loop 执行放在 codex_self_evoke_call_claude_code_loop。codex_schedule_loop 是 Codex 调度面参考,不作为 Claude Code 业务调用入口。若上层存在 workflow_controller_loop,本文件不重新定义需求、review verdict 或 final boundary。
运行时契约
- Provider、模型 profile、key env 名、fallback chain、budget、限额识别只在
llm_runtime维护,路径查tools/INDEX.md。 - 新文档和新代码使用
llm_runtime的 canonical tier alias。Claude 类保持high / medium / low;Codex 还可精确使用codex:xhigh、codex:max、codex:ultra。用户未指定特殊 effort 时用codex:xhigh(wire 值xhigh),不要把codex:ultraalias 到它。 - 真实任务的 Claude Code 子进程必须用
env -u CLAUDECODE,避免继承父进程的嵌套检测变量。 - 真实任务必须保留
--setting-sources "user,project" --strict-mcp-config。这样 SessionStart hook 会注入 workspace 规则,同时隔离默认 MCP。 - 只有 naming helper、连通性探针、极短无上下文测试可以用
--setting-sources ""。代码里要写清 opt-out 理由。 - 长 prompt 通过 stdin 或文件传入;结果写 durable file。不要把 stdout 当唯一结果源。
- 直接 Codex CLI 调用必须先用当前机器的
codex exec --help核对可用 flags。当前 CLI 使用codex exec ...;approval 行为来自配置/profile。不要把旧示例中的--ask-for-approval写进新 wrapper,除非本机 help 明确支持该 flag。 - 所有 Claude Code Self Evoke、Claude Code Call Codex 和 Loop agent/user-task 子进程都必须保存聊天/session 记录。不要给真实 agent 调用加
--no-session-persistence;调用 Codex 时也禁止codex exec --ephemeral。ledger 或 receipt 至少记录 session id/thread id、rollout/session path、source/runtime 和 run dir。 - 并发上限来自
LLM_MAX_CONCURRENCY,默认不超过 5。
工具路由
生产脚本优先走 cli_agent。它统一处理 token pre-flight、context overflow、quota 文本识别、cooldown、fallback 和 durable result。工具路径查 tools/INDEX.md。
Claude Code 调用 Claude Code:
python3 tools/cli_agent/router.py \
--task-name claude-subtask \
--primary claude-zai:high \
--fallback claude-kimi:medium claude:high \
< prompt.mdClaude Code 调用 Codex:
python3 tools/cli_agent/router.py \
--task-name codex-subtask \
--primary codex:xhigh \
--fallback claude-zai:high claude-kimi:medium claude:high \
< prompt.md直接 CLI 只用于 harness 边界测试、CLI 行为验证、或 router 本身不可用的临时诊断。
直接调用 Claude Code
Wrapper 调用方式:
env -u CLAUDECODE claude-zai -p \
--setting-sources "user,project" --strict-mcp-config \
--max-turns 20 \
--output-format json \
--permission-mode acceptEdits \
< prompt.md > /tmp/claude_result.json 2> /tmp/claude_stderr.logKimi 订阅可换成 claude-kimi -p:前台主 session/Opus 使用 k3(1M),Sonnet、Haiku 与普通 sub-agent 使用 kimi-for-coding(K2.7 Coding,256K)。Native Claude high profile:
env -u CLAUDECODE claude -p \
--model "$LLM_CLAUDE_HIGH_CLI_MODEL" \
--setting-sources "user,project" --strict-mcp-config \
--max-turns 20 \
--output-format json \
< prompt.md > /tmp/claude_result.json 2> /tmp/claude_stderr.log从 Python 等宿主直接设置环境变量时,先加载 llm_runtime 的 provider env,再设置 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL、ANTHROPIC_DEFAULT_{SONNET,OPUS,HAIKU}_MODEL、ANTHROPIC_SMALL_FAST_MODEL。Kimi 还需要 ENABLE_TOOL_SEARCH=false。
直接调用 Codex
codex exec \
--model "$LLM_CODEX_XHIGH_MODEL" \
--config "model_reasoning_effort=\"$LLM_CODEX_XHIGH_REASONING\"" \
--sandbox workspace-write \
--cd ~/context-infra \
--json \
--output-last-message /tmp/codex_last_message.txt \
- < prompt.mdGPT-5.6 的 exact wire efforts 是 low / medium / high / xhigh / max / ultra(Luna 当前到 max)。OpenAI 原生默认是 Sol + medium;本仓库 no-special-request policy 是 xhigh。对外可写 x-high,但 CLI 必须传 xhigh。Max 是最大单-agent推理,Ultra 还会自动委派 subagent。
Codex 不接收 Claude Code 的隐藏推理。跨工具交接只通过 prompt 文件、输入文件列表、结果文件和 git diff。
Claude Code Runtime Loop 契约
Loop 是可恢复的任务执行形态,不是简单地重复调用 agent。已有 Claude Code loop 任务的共同模式是:每一轮只推进一个明确目标,轮末把证据和下一步写回磁盘;下一轮必须能只靠文件状态恢复,不依赖上一轮对话还在上下文里。
Claude Code Loop 必须满足:
- 为任务建立稳定目录,优先使用已有任务目录;ad-hoc 任务放在
adhoc_jobs/<slug>_<YYYYMMDD>/。创建新的顶层adhoc_jobs/目录前,遵守rules/WORKSPACE.md的 adhoc job 自检和复用判断。 - 维护
PROGRESS.md记录当前 loop 状态、已完成项、阻塞点和证据路径。 - 维护
HANDOFF.md记录下一轮启动条件、下一步动作、停止条件和是否需要 ScheduleWakeup。 - 每轮执行顺序固定为:读状态文件 -> 选一个 bounded objective -> 用本 skill 的 Self Evoke 或 Call Codex 执行 -> 写 artifact/log/evidence -> 更新
PROGRESS.md和HANDOFF.md-> 写 runtime proposal/receipt。若上层有workflow_controller_loop,业务 stop / schedule / wait user 由 Controller 决定;若没有 Controller,才由本 runtime loop 决定。 - 需要自动继续且条件明确时,使用 Claude Code 的 ScheduleWakeup / Monitor 表达下一轮;如果等待用户判断或外部输入,只写
HANDOFF.md,不创建自动 wakeup。 - Loop 结果必须有 durable evidence,例如报告、diff、测试日志、JSON 结果或引用路径;不能只把“已完成”留在聊天里。
现有任务中的可复用模式:
- library distillation audit loop:多轮审计以
PROGRESS.md、HANDOFF.md、轮次报告和 evidence 文件收束,每轮末决定是否 ScheduleWakeup。 - design doc protocol loop:每轮把 prompt、产出、review 和下一轮计划写入任务目录;等待用户时停止调度。
- round-based distillation loop:轮末先写 evidence,再更新 progress/handoff,最后做版本和下一轮调度决策。
调用模式
| 模式 | Claude Code 设置 | 工具 | 成功检查 |
|---|---|---|---|
| 调研 | --max-turns 20+、--output-format json | Bash,Read,Glob,Grep,WebSearch,WebFetch | 结论引用文件或 URL,重要发现落盘 |
| 编辑 | --permission-mode acceptEdits、--max-turns 10+ | Read,Edit,Write,Bash,Glob,Grep | git diff 只含目标改动,产出可验证 |
| E2E/测试 | 可用 medium/low tier,显式 --allowedTools | 目标 MCP 或本地测试工具 | 有命令输出、日志、失败原因 |
| Judge/Eval | --max-turns 5、通常 medium tier | 一般不给工具,证据放 prompt | 输出 PASS/FAIL JSON,evidence 引用 appendix |
| Loop | 每轮独立 prompt,必要时 ScheduleWakeup | 本 skill 的自调用 / 调 Codex 路由 | PROGRESS.md、HANDOFF.md 和 evidence 全部更新 |
Judge 必须和 Execute 分离。Execute 负责产出 artifact,Judge 读取 rubric 和 evidence 做二元判定。Rubric 要写 PASS 条件、FAIL 条件、critical check,避免只给主观评分。
提示词与结果交接
- Prompt 只写目标、边界、输入路径、验收标准和输出路径。能让子进程自己读的文件,不整段塞进 prompt。
- Controller 管理下的任务把 prompt、输入清单、结果、stderr 和 receipt 放在 task-local
AGENT_RUNS/或runs/agents/;只有一次性诊断才放tmp/<session_slug>/。 - 结构化结果用
--output-format json,stderr 单独保存。 - 关键字段检查:
subtype、is_error、result、session_id、total_cost_usd、permission_denials。 - 真实 agent/user-task 子进程必须保留 session,方便
claude --resume <session_id>或 Codex rollout 复查;不要使用--no-session-persistence。只有不唤起 Claude/Codex agent 的纯本地 helper 命令才不存在 session persistence 问题。
失败处理
| 失败 | 必需处理 |
|---|---|
| 请求成功但返回 quota 文本 | 当作 provider quota failure,记录 quota scope 后 fallback |
Claude Code 子进程继承 CLAUDECODE | 加 env -u CLAUDECODE |
| 静默挂死或 MCP 初始化卡住 | 使用 --setting-sources "user,project" --strict-mcp-config |
| Claude wrapper context 溢出 | 先交给 router;直接调用时降低注入或换更大 context tier |
permission_denials 非空 | 补齐 --allowedTools 或缩小任务 |
error_max_turns | 增加 --max-turns,或拆任务 |
Codex --output-last-message 为空 | 当作 empty result,进入 fallback |
| 模型升级 | 只改 llm_runtime 配置 |
验收标准
一次调用算完成,必须同时满足:
- 选择的执行面与运行时归属匹配:Claude Code 侧 Self Evoke、Call Codex、Loop 用本 skill;Codex 侧自调用、调 Claude Code 或 Loop 执行转
codex_self_evoke_call_claude_code_loop。 - 使用 tier alias 和
llm_runtime,没有在业务代码里硬编码新模型 ID。 - Claude Code 子进程清掉
CLAUDECODE,真实任务加载 user/project settings 并启用 strict MCP config。 - Codex 直接调用已用当前
codex exec --help校验 flags,并写入--output-last-message;不复制 stale--ask-for-approval写法。 - 每个 Claude/Codex agent run 都确认保存了 session/chat 记录;没有使用
--no-session-persistence或--ephemeral。 - 结果有 durable output、stderr 或日志;失败能进入 fallback 或给出可复查原因。
- Loop 任务更新
PROGRESS.md/HANDOFF.md/ evidence,并明确下一轮的 runtime proposal;Controller 管理下的任务不由 runtime skill 单独裁决业务 closure。