跳转至

Santa Loop

使用 santa-method 技能实现的对抗性双审查收敛循环。两个独立的审查员(不同模型、无共享上下文)必须在代码发布前都返回 NICE。

目的

对当前任务输出运行两个独立审查员(Claude Opus + 外部模型)。在代码推送之前,两者都必须返回 NICE。如果其中任何一个返回 NAUGHTY,请修复所有被标记的问题,提交,并使用新的审查员重新运行(最多 3 轮)。

用法

/santa-loop [file-or-glob | description]

工作流

步骤 1:确定审查对象

从 $ARGUMENTS 确定范围,或回退到未提交的变更:

git diff --name-only HEAD

读取所有变更文件,构建完整的审查上下文。如果 $ARGUMENTS 指定了路径、文件或描述,则将其用作范围。

步骤 2:构建评分标准

构建适合被审查文件类型的评分标准。每个标准都需要有客观的 PASS/FAIL 条件。至少包括以下内容:

标准 合格条件
准确性 逻辑正确、无 bug,并处理边界情况
安全性 不存在密钥、注入、XSS、OWASP Top 10 问题
错误处理 错误被显式处理,没有隐式忽略
完整性 所有需求都已处理,没有遗漏情况
内部一致性 文件之间或章节之间没有矛盾
无回归 变更不会破坏现有行为

根据文件类型添加领域特定标准(例如:TS 类型安全性、Rust 内存安全性、SQL 迁移安全性)。

步骤 3:双独立审查

使用 Agent 工具并行启动两个审查员(为了并发,在一条消息中启动两者)。在进入判定门之前,两者都必须完成。

每个审查员都将所有评分标准评估为 PASS 或 FAIL,并返回结构化 JSON:

{
  "verdict": "PASS" | "FAIL",
  "checks": [
    {"criterion": "...", "result": "PASS|FAIL", "detail": "..."}
  ],
  "critical_issues": ["..."],
  "suggestions": ["..."]
}

判定门(步骤 4)会将这些映射为 NICE/NAUGHTY:两者都 PASS → NICE,任一 FAIL → NAUGHTY。

审查员 A:Claude 代理(始终运行)

启动拥有完整评分标准 + 所有被审查文件的代理(subagent_type: code-reviewer、model: opus)。Prompt 必须包括: - 完整评分标准 - 所有被审查文件的内容 - “你是一个独立的质量审查员。你没有看到其他审查。你的工作是发现问题,而不是批准。” - 返回上述结构化 JSON 判定

审查员 B:外部模型(仅当未安装外部 CLI 时回退到 Claude)

首先,检测可用的 CLI:

command -v codex >/dev/null 2>&1 && echo "codex" || true
command -v gemini >/dev/null 2>&1 && echo "gemini" || true

构建审查员 Prompt(与审查员 A 相同的评分标准 + 指示),并写入唯一的临时文件:

PROMPT_FILE=$(mktemp /tmp/santa-reviewer-b-XXXXXX.txt)
cat > "$PROMPT_FILE" << 'EOF'
... 完全なルーブリック + ファイル内容 + レビュアー指示 ...
EOF

使用第一个可用的 CLI:

Codex CLI(如果已安装)

codex exec --sandbox read-only -m gpt-5.4 -C "$(pwd)" - < "$PROMPT_FILE"
rm -f "$PROMPT_FILE"

Gemini CLI(如果已安装且没有 codex)

gemini -p "$(cat "$PROMPT_FILE")" -m gemini-2.5-pro
rm -f "$PROMPT_FILE"

Claude 代理回退(仅当 codex 和 gemini 都未安装时) 启动第二个 Claude 代理(subagent_type: code-reviewer、model: opus)。记录警告,说明由于两个审查员共享同一模型家族,未能实现真正的模型多样性,但上下文隔离仍然适用。

在所有情况下,审查员都必须返回与审查员 A 相同的结构化 JSON 判定。

步骤 4:判定门

  • 两者都 PASS → NICE — 进入步骤 6(推送)
  • 任一 FAIL → NAUGHTY — 合并来自两个审查员的所有关键问题,去重,并进入步骤 5

步骤 5:修复循环(NAUGHTY 路径)

  1. 显示来自两个审查员的所有关键问题
  2. 修复所有被标记的问题 — 只修改被标记的内容,不做顺手重构
  3. 将所有修复合并为一个提交:
    fix: address santa-loop review findings (round N)
    
  4. 使用新的审查员重新运行步骤 3(没有前一轮的记忆)
  5. 重复,直到两者都返回 PASS

最多 3 次迭代。 如果 3 轮后仍为 NAUGHTY,停止并呈现剩余问题:

SANTA LOOP ESCALATION (exceeded 3 iterations)

3ラウンド後の残存問題:
- [両方のレビュアーからの未解決のクリティカルな問題をすべてリスト]

続行する前に手動レビューが必要です。

不要推送。

步骤 6:推送(NICE 路径)

如果两个审查员都返回 PASS:

git push -u origin HEAD

步骤 7:最终报告

显示输出报告(参见下面的输出部分)。

输出

SANTA VERDICT: [NICE / NAUGHTY (escalated)]

Reviewer A (Claude Opus):   [PASS/FAIL]
Reviewer B ([model used]):  [PASS/FAIL]

Agreement:
  Both flagged:      [両方が検出した問題]
  Reviewer A only:   [Aのみが検出した問題]
  Reviewer B only:   [Bのみが検出した問題]

Iterations: [N]/3
Result:     [PUSHED / ESCALATED TO USER]

注意事项

  • 审查员 A(Claude Opus)始终运行 — 无论工具环境如何,都保证至少有一个强大的审查员。
  • 审查员 B 的目标是模型多样性。GPT-5.4 或 Gemini 2.5 Pro 提供真正的独立性 — 不同的训练数据、不同的偏差、不同的盲点。仅使用 Claude 的回退虽然具有上下文隔离的价值,但会失去模型多样性。
  • 使用可用的最强大模型:审查员 A 使用 Opus,审查员 B 使用 GPT-5.4 或 Gemini 2.5 Pro。
  • 外部审查员以 --sandbox read-only(Codex)运行,以防止在审查期间修改仓库。
  • 每轮使用新的审查员,以防止对先前发现的锚定偏差。
  • 评分标准是最重要的输入。如果审查员只是盖章批准,或标记主观风格问题,请严格化评分标准。
  • 由于 NAUGHTY 轮会进行提交,即使循环中断,修复也会保留。
  • 推送仅在 NICE 后发生 — 循环期间绝不执行。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC