Santa Loop¶
使用 santa-method 技能实现的对抗性双审查收敛循环。两个独立的审查员(不同模型、无共享上下文)必须在代码发布前都返回 NICE。
目的¶
对当前任务输出运行两个独立审查员(Claude Opus + 外部模型)。在代码推送之前,两者都必须返回 NICE。如果其中任何一个返回 NAUGHTY,请修复所有被标记的问题,提交,并使用新的审查员重新运行(最多 3 轮)。
用法¶
工作流¶
步骤 1:确定审查对象¶
从 $ARGUMENTS 确定范围,或回退到未提交的变更:
读取所有变更文件,构建完整的审查上下文。如果 $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(如果已安装)
Gemini CLI(如果已安装且没有 codex)
Claude 代理回退(仅当 codex 和 gemini 都未安装时)
启动第二个 Claude 代理(subagent_type: code-reviewer、model: opus)。记录警告,说明由于两个审查员共享同一模型家族,未能实现真正的模型多样性,但上下文隔离仍然适用。
在所有情况下,审查员都必须返回与审查员 A 相同的结构化 JSON 判定。
步骤 4:判定门¶
- 两者都 PASS → NICE — 进入步骤 6(推送)
- 任一 FAIL → NAUGHTY — 合并来自两个审查员的所有关键问题,去重,并进入步骤 5
步骤 5:修复循环(NAUGHTY 路径)¶
- 显示来自两个审查员的所有关键问题
- 修复所有被标记的问题 — 只修改被标记的内容,不做顺手重构
- 将所有修复合并为一个提交:
- 使用新的审查员重新运行步骤 3(没有前一轮的记忆)
- 重复,直到两者都返回 PASS
最多 3 次迭代。 如果 3 轮后仍为 NAUGHTY,停止并呈现剩余问题:
SANTA LOOP ESCALATION (exceeded 3 iterations)
3ラウンド後の残存問題:
- [両方のレビュアーからの未解決のクリティカルな問題をすべてリスト]
続行する前に手動レビューが必要です。
不要推送。
步骤 6:推送(NICE 路径)¶
如果两个审查员都返回 PASS:
步骤 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