보통의 AI 코딩 도구는 같은 실수를 되풀이합니다. 한 번의 작업이 끝나면 배운 것이 남지 않기 때문입니다. 이 글은 그 문제를 풀려고 만든 장치, Claude Code 하네스(harness, AI가 "다 됐다"고 대충 넘어가지 못하도록 증거를 요구하고 잘못을 자동으로 잡아 주는 감시 장치)를 뜯어본 기록입니다. 결론부터 적으면, 이 하네스는 무시할 수 없는 강제 검사 36개를 전부 통과했고 5개 항목 종합 진단은 100%였습니다. 다만 이 점검은 파일 속 문자열을 찾는 방식이라, 실제로 실행됐다는 것까지 증명하지는 못합니다. 이 하네스에서는 한 번 저지른 실수가 규칙으로 남습니다. 그 규칙은 스스로 더 단단해집니다. 개선이 진짜 효과가 있는지까지 자동으로 확인합니다.
HARD Checks규칙은 사람이 미리 다 적어 둬야 합니다. AI가 실수하면 그때그때 사람이 직접 고칩니다. 같은 실수를 몇 번을 반복해도 도구 자체는 그대로입니다. 한 번의 작업(세션)이 끝나면, 다음 작업은 배운 것 없이 다시 백지에서 시작합니다.
실수를 하면, 그 실수를 막는 규칙이 자동으로 만들어집니다. 처음에는 "이렇게 하지 말자"는 권고 규칙(SOFT)으로 시작합니다. 권고 규칙은 AI가 무시할 수도 있습니다. 같은 실수가 2번 다시 나오면, 아예 코드로 막아 통과 못 하게 하는 강제 규칙(HARD)으로 올립니다. 강제 규칙은 무시할 수 없습니다. 그리고 이 개선이 정말 나아졌는지 자동으로 확인합니다. 오히려 나빠졌으면 방금 바꾼 것을 원래대로 되돌립니다(rollback, 롤백). 그렇게 시스템이 스스로 단단해집니다.
실수를 고친 기록(fix 커밋) → 시스템이 신호 감지 → AI 규칙 묶음(scaffold) 수정 → 강제 규칙이 얼마나 촘촘해졌는지 점수 측정 → 좋으면 유지(keep)·나쁘면 폐기(discard). 이 과정이 반복되며 시스템이 한 지점으로 안정됩니다(수렴).
| # | 평가 항목 | 점수 | 비율 | 상태 |
|---|---|---|---|---|
D1 | 작업 흐름이 처음부터 끝까지 이어지는가 | 6/6 | 100% | |
D2 | 여러 단계가 서로 연결돼 있는가 | 9/9 | 100% | |
D3 | 무시 못 하는 강제 규칙이 얼마나 촘촘한가 | 10/10 | 100% | |
D4 | 스스로 고치는 속도가 빠른가 | 6/6 | 100% | |
D5 | 한 지점으로 안정될 만큼 성숙했는가 | 5/5 | 100% | |
| 종합 | 36/36 | 100% | S |
L1L2~/.claude/pending/self-improve-{project}.json입니다. 이 대기 파일을, 다음 작업을 시작해 사용자가 첫 입력을 넣는 순간(시스템 안 이름은 UserPromptSubmit) 확인 스크립트(self-improve-check.sh)가 발견해 개선 절차를 자동으로 돌립니다.L3os.getcwd() 을 기준으로 이뤄집니다. 즉 현재 열려 있는 프로젝트 폴더 안에서만 동작합니다.L4exit 2를 내보내 push를 강제로 가로막습니다. 이런 강제 차단 지점이 13곳입니다. 시스템 안에서는 이런 검문을 게이트(gate, 통과하지 못하면 다음 단계로 못 넘어가는 관문)라고 부릅니다. 이 밖에도 규칙 위반 검사(scaffold-violation-check.sh), 코드 품질 검사(code-quality-check.sh), 브라우저 저장소(localStorage) 사용 금지(no-localstorage.sh), 비밀정보 파일(.env) 커밋 금지(no-env-commit.sh) 같은 무시할 수 없는 강제 게이트(HARD gate)가 10개가 넘습니다. 스크립트 문법이 맞는지 확인하는 검사(bash -n)도 통과합니다.L5L6practical L6init_project/init-project · 프로젝트를 분석해 규칙 생성 (320줄)OKqa_scenario_gen/qa-scenario-gen(테스트 시나리오를 자동으로 만드는 스킬) · 779줄OKself_improve_triggerself-improve-trigger.sh · 실수 신호 감지 (139줄)OKself_improve_worker/self-improve Phase 1.1~1.10OKverify_initial/loopy-era-eval (36 HARD checks)OKcross_review다른 AI로 한 번 더 교차 점검 (이중 모델 리뷰)OKteam_plan/team 0단계 · 계획 수립 (init-project 연동)OKteam_execute/team 1~3단계 · 구현을 전문 에이전트(agent, 역할을 나눠 맡은 AI 일꾼)에 위임OKqa_cycle/qa-cycle · 도구 3개로 교차 검증 (700줄)OKqa_fix_retryqa-cycle 자동 수정(검사에서 잡힌 오류를 고치는 단계) · 실패 시 최대 5번 재시도OKinject_findings리뷰 지적사항(findings)을 대기목록에 넣기OKsi_worker_findings지적사항을 바탕으로 자동 수정(자가개선 일꾼이 11단계의 지적사항을 받아 고치는 단계)OKverify_final/loopy-era-eval · 문법 실행 검사(bash -n) 포함 재평가OKfinal_review다른 AI로 마지막 교차 점검(수정을 마친 코드를 다른 AI가 마지막으로 다시 살피는 최종 리뷰 단계)OKcloseout텔레그램 알림 + 코드 업로드(git push)OKloopy-era-eval이 36개 검사는 모두 사람 판단 없이 기계적으로 참·거짓이 갈립니다(deterministic, 결정론적). 특정 문자열을 세거나(grep), 파일이 있는지 보거나, 스크립트 문법을 확인하거나(bash -n), 숫자를 비교하는 식입니다. AI의 주관적 판단은 끼어들지 않습니다. 아래 목록에서 영문으로 적힌 이름은 검사가 찾는 문자열·파일·스킬 이름을 그대로 옮긴 것입니다. 그룹 머리에 붙은 짧은 영문 라벨은 앞의 종합 진단 표 번호(진단 항목 1~5)와 성숙도 카드 번호(1~6단계)를 그대로 가리킵니다.
qa-cycle (5)TC_EVIDENCED gateqa-scenario-gen (3)self-improve (3)autoresearch (6)metric_parseresults.tsvNEVER STOPteam→qa-scenarioscenario→qa-cycleteam→qa-cycleL6)qa-gate exit 2scaffold-violationcode-quality hookno-env-commitHARD ratioSOFT patterns핵심은 이렇습니다. 이 점검 방식은 파일에서 문자열을 찾는(grep) 방식이라, "문서에 그렇게 적혀 있다"까지만 증명할 뿐, "그게 실제로 실행된다"는 것까지는 증명하지 못합니다. 실제로 36개 검사 중 35개가 문자열 찾기(grep)이고, 진짜로 돌려 보는 검사(bash -n)는 단 1개뿐입니다. 그래서 다음 과제는 이 '실제로 돌려 보는' 검사의 비율을 높이는 것입니다.
측정일 2026-04-05 | 5개 항목 종합 리포트(harness-report) 100% | 자가개선 평가 도구(loopy-era-eval) 36/36 = 100%
데이터 출처: 홈 폴더 아래 Claude Code 설정 폴더의 .claude/skills/, .claude/hooks/, .claude/logs/ (스킬·훅·로그)