Dual-Model Verification

Codex QA
Integration

AI가 쓴 코드를 서로 다른 두 AI가 번갈아 검사하는 구조입니다. 원래는 Claude Code(코딩을 돕는 AI 도구)가 자기 코드를 스스로 QA(품질 검사)했습니다. 여기에 OpenAI가 만든 다른 AI인 Codex를 검사자로 하나 더 붙였습니다. 사람이 자기 글의 오타를 잘 못 찾듯, AI도 자기가 쓴 코드의 빈틈은 스스로 보기 어렵습니다. 그 사각지대를 다른 AI가 대신 잡아냅니다.

3
Hard Gates
2
Models
4
Recovery Steps
7
Files Modified
서로 다른 두 AI로 교차 검증
Claude (Opus 4.6)

프로젝트 규칙 검사

Claude는 이 프로젝트만의 규칙을 잘 압니다. '이건 절대 하지 말라'고 정해둔 금지 규칙, 프로젝트마다 다른 코드 패턴과 작성 스타일, 자료형(타입)이 서로 어긋나지 않는지를 검사합니다. 프로젝트의 맥락을 깊이 이해하는 것이 강점입니다.

+
Codex (GPT-5.4)

사각지대 보완

Codex는 같은 코드를 다른 관점에서 봅니다. Claude가 놓친 패턴, 보안 허점, 드물게만 터지는 예외 상황(엣지 케이스)을 잡아냅니다. 특히 일부러 약점을 찾아 공격하듯 살펴보는 검토(adversarial-review)로 숨은 결함을 파고듭니다.

코드를 막는 3중 검문소
1
Review Gate
하위 에이전트나 작업이 끝나면 codex review --uncommitted 명령이 자동으로 돕니다. 아직 저장(커밋)하지 않은 코드를 검사합니다. 가장 심각한 결함(CRITICAL)이 0건이면 통과(PASS) 증거 파일을 남깁니다.
codex-review-gate.sh
2
Stop Gate
Claude가 답변을 끝내려는 순간 Codex 검사가 다시 돌아갑니다. 검사 결과가 decision: "block" 이면 Claude는 답변을 멈추지 못하고 문제를 계속 고쳐야 합니다.
stop-review-gate-hook.mjs
3
Push Gate
.qa-cycle-passed + .codex-review-passed — 이 두 개의 통과 증거 파일이 모두 있어야만 코드를 서버에 올릴(push) 수 있습니다.
exit 2 — HARD BLOCK
전체 동작 흐름
코드를 쓰거나 고친 직후 (PostToolUse)
code-quality-check.sh
no-localstorage.sh
scaffold-violation-check.sh
SubagentStop / TaskCompleted
codex-review-gate.sh → .codex-review-passed
user-proxy agent hook
도구 실행이 실패한 직후 (PostToolUseFailure)
failure-counter.sh (1/3, 2/3, 3/3→RESCUE)
error-fixer agent hook
Claude가 답변을 끝내려는 순간 (Stop)
stop-review-gate-hook.mjs → ALLOW or BLOCK
self-improve-trigger.sh
코드를 서버에 올리기(git push) 직전 (PreToolUse)
품질검사 통과 파일(.qa-cycle-passed) 확인 · 기존
Codex 리뷰 통과 파일(.codex-review-passed) 확인 · 신규
두 파일 모두 통과해야 서버 업로드(push) 허용
에러 복구 4단계

코드에 오류가 났을 때 고치는 순서를 3단계에서 4단계로 늘렸습니다. 새로 넣은 3번째 단계에서는 문제를 통째로 Codex(OpenAI의 AI, GPT-5.4 모델)에게 넘깁니다. 서로 다른 AI는 문제를 푸는 방식도 달라서, 앞 단계에서 막혔던 부분을 새로운 방법으로 풀어낼 수 있습니다.

1st
직접 수정
타입(자료형) 정의
불러오기 경로
동작 로직 수정
2nd
구조 변경
타입 검사 추가
optional chaining
다른 라이브러리로 교체
3rd
codex:rescue
Codex에게 통째로 맡김
완전히 다른 AI가
새로운 방법으로
4th
되돌리기(리셋)
변경을 되돌린 뒤
다른 방식으로
다시 시도

네 단계를 모두 시도해도 실패하면, 텔레그램 메시지로 사용자에게 알려 직접 판단을 맡깁니다.

상황별 검사 강제 수준
상황 Review Gate Stop Gate Push Gate 강제 수준
직접 처리 (작업 위임 Task 사용) O O O 3단계 모두 강제
/team O O O 3단계 모두 강제
/manager O O O 3단계 모두 강제
직접 처리 (작업 위임 Task 안 씀) X O 차단* Stop 검문소만
slash command 불확실 O 불확실 Stop 검문소만 확실

* 하위 작업(Task)을 쓰지 않으면 통과 증거 파일(.codex-review-passed)이 만들어지지 않습니다. 그러면 코드를 서버에 올리는(push) 길이 영구히 막힙니다. 이때는 /codex:review 명령을 직접 실행해 검사를 통과시켜야 합니다.

무조건 차단(HARD)과 권고(SOFT) 정리
Hook 차단 방식 분류
qa-gate-before-push.sh .qa-cycle-passed exit 2 HARD
qa-gate-before-push.sh .codex-review-passed exit 2 HARD
stop-review-gate-hook.mjs decision: "block" HARD
scaffold-violation-check.sh '절대 금지(NEVER DO)' 패턴이 보이면 차단 HARD
no-env-commit.sh exit 2 HARD
failure-counter.sh 3번 실패하면 codex:rescue를 쓰라고 안내 (막지는 않음) SOFT
codex-review-gate.sh 통과 증거 파일만 만들고 막지는 않음 SOFT
agent hook prompts 말로 된 지시라 Claude의 판단에 맡김 SOFT
Codex 명령어
/codex:review
코드를 검토합니다 (Codex, GPT-5.4 모델)
/codex:adversarial-review
일부러 약점을 찾는 공격적 검토
/codex:rescue
막힌 작업을 Codex에 통째로 맡기기 (bug-fixer 대신)
/codex:status
뒤에서 도는 작업의 진행 상태 확인