코드리뷰데이터·SQL보안by affaan-m
산타 루프
두 개의 독립적인 모델 리뷰어가 모두 승인해야만 코드가 배포되는 적대적 이중 검토 수렴 루프입니다.
한 줄 평가 — 다음 사람 도와주세요
언제 쓰나
코드 리뷰의 품질과 보안을 극대화하고 싶을 때
SKILL.md
Lattice 한국어 번역 · 원본 affaan-m/everything-claude-code (841beea). 복사 → 저장하면 Claude Code가 인식합니다.
---
description: 적대적 이중 검토 수렴 루프 — 두 명의 독립적인 모델 검토자가 모두 승인해야 코드가 배포됩니다.
---
# 산타 루프
santa-method 스킬을 사용한 적대적 이중 검토 수렴 루프입니다. 두 명의 독립적인 검토자(다른 모델, 공유 컨텍스트 없음)가 모두 코드가 배포되기 전에 NICE를 반환해야 합니다.
## 목적
현재 작업 출력을 대상으로 두 명의 독립적인 검토자(Claude Opus + 외부 모델)를 실행합니다. 코드가 푸시되기 전에 둘 다 NICE를 반환해야 합니다. 둘 중 하나라도 NAUGHTY를 반환하면 플래그가 지정된 모든 문제를 수정하고 커밋한 후 새로운 검토자를 다시 실행합니다. 최대 3회까지 반복합니다.
## 사용법
```
/santa-loop [file-or-glob | description]
```
## 워크플로우
### 단계 1: 검토할 내용 식별
`$ARGUMENTS`에서 범위를 결정하거나 커밋되지 않은 변경 사항으로 대체합니다.
```bash
git diff --name-only HEAD
```
전체 검토 컨텍스트를 빌드하기 위해 변경된 모든 파일을 읽습니다. `$ARGUMENTS`가 경로, 파일 또는 설명을 지정하면 대신 해당 항목을 범위로 사용합니다.
### 단계 2: 루브릭 구축
검토 중인 파일 유형에 적합한 루브릭을 구성합니다. 모든 기준에는 객관적인 PASS/FAIL 조건이 있어야 합니다. 최소한 다음을 포함합니다.
| 기준 | 통과 조건 |
|-----------|---------------|
| 정확성 | 논리가 건전하고 버그가 없으며 엣지 케이스를 처리함 |
| 보안 | 비밀 정보, 주입, XSS 또는 OWASP Top 10 문제가 없음 |
| 오류 처리 | 오류가 명시적으로 처리되고, 조용히 무시되지 않음 |
| 완전성 | 모든 요구 사항이 해결되었고, 누락된 케이스가 없음 |
| 내부 일관성 | 파일 또는 섹션 간에 모순이 없음 |
| 회귀 없음 | 변경 사항이 기존 동작을 중단시키지 않음 |
파일 유형에 따라 도메인별 기준을 추가합니다(예: TS의 타입 안전성, Rust의 메모리 안전성, SQL의 마이그레이션 안전성).
### 단계 3: 이중 독립 검토
Agent 도구를 사용하여 **병렬로** 두 명의 검토자를 실행합니다(동시 실행을 위해 단일 메시지에 모두 포함). 베리딕트 게이트로 진행하기 전에 둘 다 완료해야 합니다.
각 검토자는 모든 루브릭 기준을 PASS 또는 FAIL로 평가한 다음 구조화된 JSON을 반환합니다.
```json
{
"verdict": "PASS" | "FAIL",
"checks": [
{"criterion": "...", "result": "PASS|FAIL", "detail": "..."}
],
"critical_issues": ["..."],
"suggestions": ["..."]
}
```
베리딕트 게이트(단계 4)는 이를 NICE/NAUGHTY로 매핑합니다. 둘 다 PASS → NICE, 하나라도 FAIL → NAUGHTY입니다.
#### 검토자 A: Claude Agent (항상 실행)
전체 루브릭 + 검토 중인 모든 파일을 사용하여 Agent(subagent_type: `code-reviewer`, model: `opus`)를 실행합니다. 프롬프트에는 다음이 포함되어야 합니다.
- 전체 루브릭
- 검토 중인 모든 파일 내용
- "당신은 독립적인 품질 검토자입니다. 다른 검토 내용은 보지 못했습니다. 당신의 임무는 승인하는 것이 아니라 문제를 찾는 것입니다."
- 위의 구조화된 JSON 베리딕트 반환
#### 검토자 B: 외부 모델 (외부 CLI가 설치되지 않은 경우 Claude 폴백)
먼저 어떤 CLI가 사용 가능한지 감지합니다.
```bash
command -v codex >/dev/null 2>&1 && echo "codex" || true
command -v gemini >/dev/null 2>&1 && echo "gemini" || true
```
검토자 프롬프트(동일한 루브릭 + 검토자 A와 동일한 지침)를 빌드하고 고유한 임시 파일에 씁니다.
```bash
PROMPT_FILE=$(mktemp /tmp/santa-reviewer-b-XXXXXX.txt)
cat > "$PROMPT_FILE" << 'EOF'
... 전체 루브릭 + 파일 내용 + 검토자 지침 ...
EOF
```
사용 가능한 첫 번째 CLI를 사용합니다.
**Codex CLI** (설치된 경우)
```bash
codex exec --sandbox read-only -m gpt-5.4 -C "$(pwd)" - < "$PROMPT_FILE"
rm -f "$PROMPT_FILE"
```
**Gemini CLI** (설치되었고 codex가 설치되지 않은 경우)
```bash
gemini -p "$(cat "$PROMPT_FILE")" -m gemini-2.5-pro
rm -f "$PROMPT_FILE"
```
**Claude Agent 폴백** ( `codex` 또는 `gemini`가 설치되지 않은 경우에만)
두 번째 Claude Agent(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)
Remaining issues after 3 rounds:
- [list all unresolved critical issues from both reviewers]
Manual review required before proceeding.
```
푸시하지 마십시오.
### 단계 6: 푸시 (NICE 경로)
두 검토자가 모두 PASS를 반환할 때:
```bash
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: [issues caught by both]
Reviewer A only: [issues only A caught]
Reviewer B only: [issues only B caught]
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 후에만 푸시가 발생하며, 루프 중간에는 절대 발생하지 않습니다.필요한 도구
호버하면 설명CC
설치 + 호출 (2단계)
Claude Code CLI 기준.
- 1
SKILL.md 저장
아래 버튼으로 복사 → 다음 경로로 저장.
~/.claude/skills/everything-claude-code-161/SKILL.md - 2
호출
Claude Code 채팅창에서 자연어로 부르면 자동 발동:
예) 코드 리뷰의 품질과 보안을 극대화하고 싶을 때
트리거가 안 잡히면 SKILL.md의
description줄에 더 구체적인 한국어 키워드를 추가해보세요.