Claude Code의 자체 채점 방지 및 편집 권한 없는 Judge와 공개를 막는 Hook
요약
Claude Code 사용 시 AI가 스스로 채점하는 문제를 해결하기 위해, '만드는 역할(Builder)'과 '검사하는 역할(Judge)'을 분리한 시스템 구조를 제시합니다. Judge에게는 편집 권한을 주지 않고, 합격 판정이 나올 때까지 공개 명령어가 작동하지 않도록 제한하여 객관적인 검증 과정을 거치게 합니다.
핵심 포인트
- AI의 자체 채점 오류 방지를 위해 역할 분리가 필수적입니다.
- Judge 에이전트에게는 편집 권한을 제거하고 읽기 전용으로만 사용합니다.
- Manager가 전체 흐름을 관리하며 Builder와 Judge를 순차적으로 작동시킵니다.
Claude Code에 작업을 맡기면, 만든 AI 자신이 '문제없음'이라고 채점하고 끝내는 경우가 있습니다. 저는 이것이 마음에 걸려, 만드는 역할과 검사하는 역할을 분리했습니다. 검사하는 역할에는 편집 도구를 주지 않고, 합격 판정이 나올 때까지 공개 명령어가 통하지 않도록 했습니다.
이 글은 그 시스템의 내부 구조와 과정에서 겪었던 문제들을 기록한 것입니다. 동작을 확인한 환경은 Windows 11, Claude Code, Node.js v24.16.0 조합뿐입니다.
자체 채점에서 발생한 일
프로젝트 기밀 유지 때문에 구체적인 프로젝트는 언급할 수 없습니다. 대신, 다른 작은 도구를 만들었을 때의 이야기를 하겠습니다.
그 도구의 README는 만든 쪽 AI가 작성했습니다. 다른 에이전트에게 검사를 맡겼더니, README의 검증 상황에 기록에는 없는 확인 내용이 적혀 있다는 점에 대해 별개의 설명으로 3번 지적받았습니다. 즉, 만든 쪽 AI가 작성한 설명에 기록을 초과하는 내용이 남아 있어, 다른 에이전트의 검사에서 발견되었다는 것입니다.
이 경험을 통해 저는, 만드는 측이 채점까지 하게 되면 놓치는 부분이 생기기 쉽다고 생각했습니다. 이는 저의 경험에 기반한 생각이며, 일반적으로 증명된 내용은 아닙니다.
역할 분리
역할을 3가지로 나누었습니다.
| 역할 | 할 일 | 사용 가능한 도구 |
|---|---|---|
Manager (/goal ) | 요청 사항을 결과물 정의와 완료 조건으로 정리합니다. Builder, Judge 순서로 작동시키며 판정을 기록합니다. | |
| Builder | 결과물을 만듭니다. | Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch |
| Judge | 완료 조건에 비추어 검사만 합니다. | Read, Grep, Glob, WebSearch, WebFetch |
흐름은 다음과 같습니다.
요청 → Manager → Goal Spec (goals/xxx.md)
→ Builder (생성)
→ Judge (검사만 가능. 편집 불가) → PASS 또는 FAIL
...
Judge에 대한 도구 제한
Judge는 서브 에이전트의 정의 파일에서 사용 가능한 도구를 제한합니다.
---
name: judge
description: Builder
Builder는 색상 대비 비율을 Python으로 실측하고, 근거를 들어 수치를 작성했습니다. Judge는 그 수치를 신뢰하지 않고, WCAG의 상대 휘도 공식으로 8가지 항목 모두를 재계산했습니다. 보고서와의 오차가 0.02 이내임을 확인한 후에야 합격 판정을 내립니다.
예시는 이 한 건입니다. 기사나 코드 등 다른 종류의 산출물에서의 결과는 검증에 포함되지 않습니다.
## 발생했던 문제들
### Hook 확장자
처음에는 `.js`로 작성했습니다. 프로젝트의 `package.json`에 `
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기