用途
Codex Review Cycle 是一个简单、由用户驱动的审查与修复工作流技能。它用于在非空的 git diff 上运行迭代式的 codex 审查循环,由用户全程掌控节奏与决策。
主要能力
每个循环执行一次 codex 审查,Claude 验证每条发现的有效性,呈现逐字摘要,用户选择要处理哪些发现,Claude 仅应用被选中的修复,然后循环继续。默认上限为 2 个循环。最终循环的修复阶段后,Claude 渲染 §Final-cycle Assessment 区块,涵盖已处理发现、范围健康警告,以及继续 / 换角度 / 结束的建议。用户决定是否终止、以相同焦点再跑一轮,或以 <angle_request> 要求 codex 从实质不同的角度审查。每个用户选择的扩展循环都以相同的提示结束,因此循环仅在用户持续选择扩展时继续。
该技能刻意保持简单:不自动修复、不运行并行审查者、不计算停滞指纹、不管理自主区间、不委派救援子代理。Claude 是唯一的修复应用者,用户是唯一判定哪些发现重要的仲裁者。
使用方式
仅在以下条件全部满足时使用:用户明确要求在以下之一上运行 codex 审查循环——当前工作区 diff、当前分支对比其基线分支,或显式的提交/标签/分支引用;当前工作目录是 git 仓库;所选审查目标产生非空 diff(工作区有未提交改动,或 HEAD 领先于所选基线引用)。
以下情况不要使用:用户只想要单次 codex 审查(直接使用 codex 插件);解析出的审查目标产生空 diff(停止并告知用户);用户从零起草计划(改用 vibe-planning-guard);审查作为后台或自动检查运行。
审查目标模式支持三种,在 Phase 0 选定并在整个运行的所有循环中固定:
- working-tree:未提交改动(已跟踪修改 + 已暂存 + 未跟踪)。codex 以 --scope working-tree 调用。Claude 侧 diff 命令使用 git diff HEAD --name-only 加上 git ls-files --others --exclude-standard 处理未跟踪文件。
- branch:HEAD 对比自动检测的默认分支(先尝试本地 main/master/trunk,再尝试 origin/*)。codex 以 --base <base_sha> 调用(Phase 0 从检测到的引用解析并冻结的 SHA)。Claude 侧 diff 命令使用 git diff --name-only <base_sha>...HEAD(三点:merge-base 语义)。
- base-ref:HEAD 对比用户提供的显式引用(任意提交 SHA、标签或分支名)。codex 以 --base <base_sha> 调用(Phase 0 从用户提供的引用解析并冻结的 SHA)。Claude 侧 diff 命令使用 git diff --name-only <base_sha>...HEAD。
三种模式共享同一工作流,仅 Phase 0 的目标解析步骤、codex CLI 标志以及 Claude 用于有效性检查的 diff 命令不同。
语言处理
所有面向用户的输出按用户语言渲染(用户在对话中使用的语言,或 Claude Code 系统级语言设置中配置的语言)。需要翻译的内容包括:章节标题、每条发现的要点标签与停止信号表列头、§Final-cycle Assessment 的每条修复子要点标签与判断字段标签及范围健康值、Claude 撰写的自由文本字段、裁决标题自由文本、验证免责声明标题与正文、已应用修复列表标签、Case B 达到上限正文标签、AskUserQuestion 的问题/表头/选项标签与描述字段。
保持原文不翻译的内容包括:codex 标题字段、codex 建议字段、严重级别值(high / medium / low)、有效性结果关键词(valid / partially-valid / invalid)、范围类别名(must-fix / minimal-hygiene / reject-out-of-scope / reject-noise)、停止信号状态关键词(ACTIVE / ADVISORY / WARNING / silent)、标题中点分隔符(·,U+00B7)、裁决标题 emoji(✅、⚠️)、裁决标题数字片段、循环内发现 ID(F<n>)、技术标识符(文件路径、git 引用、fingerprint、cluster_id、applied_fixes 等字段名)、循环索引(cycle N)。
范围外工作树隔离
范围外隔离是可选的、由提示驱动的。启用时,它通过限定 pathspec 的 stash 临时从活动工作树移除用户批准的脏路径,使 codex、提案模式 DoD 证据、有效性检查和写入范围检查只看到预期的审查目标。
隔离从不自动执行。Claude 必须展示每个候选路径、状态、原因和证据,然后对整个提议集合请求一次确认,不要让用户逐个分类路径。面向用户的文本按语言规则本地化;路径、命令、字段名、run_id 和 worktree_id 保持原文。
诊断或解释性隔离输出必须包含紧凑的契约回顾,即使未创建 stash 或无需恢复:选择(候选需要路径、状态、原因和证据;不因路径未跟踪、已暂存或类似计划就隔离)、传输(隔离使用限定 pathspec 的 stash,带 --include-untracked、--pathspec-from-file=<file>、--pathspec-file-nul 和 NUL 分隔的 :(top,literal)<repo-relative-path> 条目)、恢复/恢复(隔离路径在 Step 20 完成、被拒绝或跳过之后恢复为未暂存;失败时保留 stash 记录并通过 stash_oid 加 git-common-dir 的 metadata_path 恢复)。
状态模型:isolation_state = {enabled, consent, run_id, worktree_id, metadata_path, stash_records[], isolated_paths[], restore_status},在 Phase 0.5 之前创建并在 Phase 0 步骤 7 中延续。enabled 仅在 stash 记录创建并验证后变为 true。
候选规则:绝不因路径未跟踪、已暂存、有类似计划的扩展名或位于 plans/ 下就隔离它,原因必须与审查相关性有关;绝不隔离 branch / base-ref 的 review_target.diff_files 中的路径;修复开始后绝不隔离循环拥有的已应用修复路径;从 NUL 安全的 git 输出解析脏状态,若重命名/复制条目无法以精确源/目标处理解析,则失败关闭并请用户手动清理或提交该状态。
Stash 传输:在第一条 stash 命令前生成 worktree_id = SHA-256(realpath(git worktree root))[:12] 和 run_id = crrc-iso-<YYYYMMDDHHMMSS>-<short-hash>;设置 metadata_path = $(git rev-parse --git-common-dir)/codex-review-cycle-isolation/<worktree_id>/<run_id>.json;pathspec 文件写在同目录下,条目为 NUL 分隔的字面仓库根相对 pathspec::(top,literal)<repo-relative-path>\0;运行 git stash push --include-untracked --pathspec-from-file=<pathspec-file> --pathspec-file-nul -m "codex-review-cycle isolation run=<run_id> worktree=<worktree_id> scope=<scope> paths=<N> metadata=codex-review-cycle-isolation/<worktree_id>/<run_id>.json"。不要使用全局 git stash -u、git stash --all、git clean、移动文件到别处或 git update-index --assume-unchanged。
恢复语义:隔离路径保持在活动工作树之外,直到 Step 20 完成、被拒绝或跳过;按创建逆序用 git stash apply <stash_oid>(不带 --index)恢复 stash 记录;每次 apply 后仅对该记录的隔离路径执行 git restore --staged -- <isolated paths>,然后验证 git diff --cached -- <isolated paths> 为空;在运行中所有记录都已应用且所有验证通过之前,不丢弃任何 stash 记录;若任何 apply 或验证失败,则不丢弃任何记录并打印保留的 stash 记录中的恢复命令及 metadata_path。
适用场景与限制
适用于用户明确要求迭代式 codex 审查循环、且存在非空 git diff 的场景。不适用于单次审查、空 diff、从零起草计划或后台自动检查。该技能不自动修复、不并行审查、不计算停滞指纹、不管理自主区间、不委派救援子代理。codex 内部 diff 收集模式(仅对抗性审查,codex 插件 ≥ 1.0.4):对于超过约 2 个变更文件或约 256KB 补丁字节的 diff,codex 省略内联 diff,仅接收轻量目标摘要,并运行自己的只读 git 命令在最终确定发现前检查 diff。