Claude Code와 Codex를 함께 쓰는 이유: 게이트가 아닌 어드바이저로 묶는 듀얼 에이전트 워크플로
목차
개요
LLM 한 대에 모든 코딩 작업과 그 코드를 검토하는 일까지 맡기면 어떤 일이 벌어질까. Rubric의 Claude × Codex 워크플로 커리큘럼 1장은 이 질문에서 출발한다. 저자는 한 달간 단일 저장소에서 Claude Code와 Codex를 동시에 운용한 경험을 정리하면서, 두 에이전트를 어떻게 분리해 두어야 하는지를 8장짜리 커리큘럼으로 풀어낸다. 핵심 결론은 단순하다. 다른 모델 두 개를 같은 역할로 겹쳐 두면 안 되고, 하나는 작성자 다른 하나는 비차단형 어드바이저로 두어야 한다.
단일 에이전트의 사각지대
커리큘럼 1장은 단일 LLM이 자기 코드를 자기 자신이 검토할 때 발생하는 세 가지 한계를 명시한다.
확신 편향과 동일 추론 경로
저자는 “자기 출력에 대한 확신이 강해서 놓친 가정을 잘 못 잡는다”고 표현한다. LLM은 자기가 만든 결과물을 평가할 때 그 결과물을 만들 때 사용한 가정을 그대로 신뢰하기 때문에, 검증되지 않은 전제를 비판적으로 다시 들춰내기 어렵다.
같은 모델은 같은 추론 경로를 반복한다. 같은 학습 분포, 같은 토크나이저, 같은 사고 패턴을 공유하므로 한 번 놓친 사각지대는 두 번째 시도에서도 동일하게 놓친다. 검토 단계에서 “원래의 사각지대를 새로 발견”하는 게 아니라 “사각지대를 그대로 통과”시키는 셈이다.
자기 정당화 드리프트
자기 코드를 비판해 달라고 요청받으면 모델은 객관적 평가보다는 자신의 결정을 방어하는 쪽으로 표류한다. 저자는 이를 “self-justification drift”라고 부른다. 검토 결과가 점차 변호 논리로 기울어 코드 품질 점검이 무력화되는 패턴이다.
듀얼 에이전트의 역할 분리
문제의 답은 모델 다양성이다. 서로 다른 아키텍처를 가진 두 모델은 서로의 사각지대를 자연스럽게 의심한다.
Claude는 작성자 Codex는 어드바이저
커리큘럼은 두 에이전트의 책임을 명확히 나눈다.
| 에이전트 | 역할 | 담당 작업 |
|---|---|---|
| Claude Code | 주 작성자 | 계획, 구현, 리팩터링, 테스트 작성 |
| Codex | 어드바이저 | 독립적인 2차 의견 제공, 이슈 지적 |
같은 저장소를 다루더라도 두 에이전트는 서로 다른 지시 파일을 본다. Claude Code는 CLAUDE.md, Codex는 AGENTS.md를 따라가도록 설정해 각 모델의 강점에 맞춘 컨텍스트를 따로 유지한다. 서로 다른 모델 아키텍처가 race condition, null 체크 같은 서로 다른 종류의 이슈를 잡아낸다는 것이 실제 운용에서의 관찰이다.
Advisory는 절대 차단이 아니다
이 커리큘럼이 가장 강하게 못 박는 원칙은 한 가지다. Codex의 검토 결과는 정보일 뿐 push를 막지 않는다.
| 항목 | 정책 |
|---|---|
| Timeout 발생 | 메인 파이프라인 진행 |
| Codex 인증 실패 | 메인 파이프라인 진행 |
| Critical finding 보고 | 사람의 판단에 위임, 자동 차단 안 함 |
| 스킵된 경우 exit code | 항상 success 반환 |
저자는 “advisory는 절대 차단이 아니다”라고 못 박는다. 한쪽 모델의 false positive 한 번이 전체 워크플로를 마비시키는 상황을 막기 위해 어드바이저는 끝까지 권고자에 머물러야 한다. 실제 차단이 필요한 종류의 검사, 예를 들어 시크릿 파일 검증이나 린팅, 보안 정책은 별도의 게이트로 따로 둔다. 하나의 wrapper 스크립트가 슬래시 명령 호출과 pre-push 훅 호출을 모두 흡수하도록 설계해 두 호출 경로가 동일하게 동작하게 만든다.
도입 비용 정당화 기준
두 모델 구독을 동시에 유지하는 것은 공짜가 아니다. 저자는 듀얼 구독이 합리적인 조건을 다음과 같이 제시한다.
| 조건 | 설명 |
|---|---|
| 자체 리뷰 피로도 | 팀이 매주 2~3개 이상의 PR을 머지하고 자체 리뷰에 지친 상태 |
| 리뷰어 부족 | 코드 리뷰어가 충분치 않거나 외부 리뷰가 보안 정책상 제한된 환경 |
| 엣지 케이스 비용 | 엣지 케이스 실패 1건 비용이 두 구독료를 넘어서는 영역의 코드 |
이 조건이 갖춰지지 않으면 단일 에이전트 워크플로가 여전히 충분하다는 점도 함께 말한다. 듀얼 에이전트는 “더 좋아 보여서” 도입하는 옵션이 아니라 자기 사각지대 비용을 계산해 본 뒤에 도입하는 옵션이다.
Geek News 토론에서는 한 개발자가 Claude 서브에이전트, Codex, Gemini 세 모델을 함께 쓰는 “trilateral-validation”을 리서치 워크에서 적용했다고 답하기도 했다. 또 다른 댓글에서는 두 도구가 수동 호출인지 Git 훅을 통해 자동 통합인지 묻는 질문이 나왔고, 저자는 두 방식을 동시에 사용한다고 답했다. 한쪽은 슬래시 명령으로 즉시 호출하고 다른 한쪽은 push 직전 훅에서 비차단형으로 자동 호출되는 구조다.
결론
Claude × Codex 듀얼 에이전트 워크플로의 핵심은 두 모델을 단순히 “겹쳐 쓰는 것”이 아니다. 같은 모델로 자기 코드를 검토하면 confirmation bias, 동일 추론 경로, self-justification drift라는 세 가지 한계가 그대로 누적된다. 서로 다른 모델 두 개를 작성자와 어드바이저로 분리하고, 어드바이저는 끝까지 비차단형 권고자로 두는 것이 이 커리큘럼이 도달한 운용 원칙이다. “advisory는 절대 차단이 아니다”라는 한 줄이 이 시스템의 전부를 요약한다.