문제는 AI 코딩 도구 Claude Code가 같은 실수를 반복한다는 것이었습니다. 사람이 규칙을 적어 줘도 AI는 그 규칙을 따르거나 무시할 뿐이고, 규칙 자체는 멈춰 있습니다. 그래서 실수 한 번이 곧바로 새 규칙이 되고, 그 규칙이 시간이 지날수록 더 단단해지며, 정말 효과가 있었는지까지 자동으로 확인하는 시스템을 만들었습니다. 이렇게 결과를 다시 되먹여 스스로를 고쳐 나가는 순환을 폐루프(閉루프, closed loop)라고 부릅니다. 그리고 AI가 "다 했다"고 대충 넘어가지 못하게 붙잡는 장치 전체를 하네스(harness, 증거를 강제하는 감시 장치)라고 부릅니다. 가동 7일 만에 자동 개선 51건이 이 순환에서 나왔습니다.
보통 Claude Code나 Cursor 같은 AI 코딩 도구의 설정은 정적입니다. 사람이 규칙을 미리 한 번 적어 두면, AI는 그걸 따르거나 무시할 뿐 규칙 자체는 그대로 멈춰 있다는 뜻입니다. 반면 이 시스템에는 3개의 피드백 루프가 자동으로 돌아갑니다. 피드백 루프란 작업 결과를 다시 입력으로 되돌려 스스로를 손보는 순환을 말합니다. 그래서 쓰면 쓸수록 규칙이 늘고 강해집니다.
코드를 고친 기록('fix:'로 시작하는 저장 기록, 즉 커밋)이 생기면 감지 스크립트(script, 정해진 일을 자동으로 처리하는 작은 프로그램)가 알아챕니다. 그러면 그 프로젝트만의 규칙 모음(scaffold)에 '앞으로 이렇게 하지 말 것' 항목을 새로 적어 둡니다. 규칙 모음에서는 이 항목을 never do 라고 부릅니다. 이 항목은 나중에 같은 실수를 하려는 순간, 프로그램을 멈춰 세우는 신호(exit 2)로 실행을 막습니다.
fix: 수정 커밋 발생NEVER DO 항목을 규칙 모음에 추가사용자가 남긴 불만 섞인 말들을 자동으로 모읍니다. 그 말들에서 문제의 진짜 원인을 찾아내고, 다시 일어나지 않도록 새 규칙을 만듭니다.
규칙에는 두 종류의 강제력이 있습니다. 하나는 권고(Soft)입니다. AI가 참고만 하고 무시할 수도 있습니다. 다른 하나는 차단(Hard)입니다. 프로그램이 실행을 아예 멈춰 세워(exit 2 신호) 절대 못 어기게 막습니다. 다른 시스템의 규칙은 계속 권고에 머뭅니다. 이 시스템은 같은 실수가 반복될수록 그 규칙을 권고에서 차단으로 자동으로 끌어올립니다. 아래 세 칸이 그 승격 계단입니다.
SOFT 단계라서 AI가 무시할 수 있습니다.HARD 단계라서 이제 무시할 수 없습니다. exit 2| 시스템 | 규칙 만들기 | 규칙 강제 방법 | 실수에서 학습 | 세션(한 번의 작업 시간) 간 기억 | 스스로 진화 |
|---|---|---|---|---|---|
| Devin (Cognition) | 사람이 직접 | Playbook | 없음 | 세션 메모리(작업 중에만) | 없음 |
| OpenHands (ex-OpenDevin) | 사람이 직접 | Microagent | 그 세션 안에서만 | 없음 | 없음 |
Codex (OpenAI CLI, command line tool) |
사람이 직접 | Sandbox | 그 세션 안에서만 | 없음 | 없음 |
| Cline / Roo Code | 사람이 직접 | Mode Rules | 없음 | 없음 | 없음 |
| 이 시스템 | 자동 생성 | Hook exit 2 | 세션 간 자동 기억 | 6개 영구 저장소 | 폐루프 진화 |
scaffold-violation-check.shcode-quality-check.shqa-gate-before-push.shno-localstorage.shno-env-commit.shportless-required.shauto-validate.shtask-quality-gate.shhtml-api-gate.shvalidate-before-commit.shverify-before-deploy.shsubagent-verify.sh| 항목 | Devin / OpenHands / Codex | 이 시스템 |
|---|---|---|
| 규칙 만들기 | 사람이 규칙집(Playbook/Microagent)을 직접 작성 | 코드 수정 기록('fix:' 커밋)에서 자동으로 뽑아냄 |
| 강제력 | 지시문에 넣어 부탁 (AI가 무시하면 그만) | 검문 스크립트가 실행을 중단(exit 2)시켜 차단 |
| 프로젝트별 학습 | 공통 규칙이거나 사람이 직접 설정 | 프로젝트마다 규칙 모음(scaffold)이 따로 성장 |
| 세션(한 번의 작업 시간) 간 기억 | Devin만 일부 지원 | 6개 영구 저장소에 쌓임 |
| 효과 측정 | 측정 안 함 | 30일 뒤 자동 평가 후 권고(Soft)에서 차단(Hard)으로 승격 |
각 프로젝트의 규칙 모음(scaffold)은 그 프로젝트에서 생긴 수정 기록('fix:' 커밋)에서만 배웁니다. 그래서 프로젝트끼리 규칙이 섞이지 않습니다. 단, 2개 이상의 프로젝트에서 똑같은 문제가 발견되면 전체 공통 규칙으로 자동 승격됩니다. 아래 카드의 큰 숫자는 그 프로젝트에 쌓인 금지 규칙(never do rules)의 수이고, 작은 글씨는 그 프로젝트가 쓰는 프로그래밍 언어와 프레임워크(framework, 화면과 서버를 만드는 공통 틀)입니다.
BIS 프레임워크(React 기반 공통 화면 틀)Next.js아래는 article21-page 프로젝트(Vue로 만든 관리자 화면)의 규칙 모음에서 자동으로 뽑아낸 규칙들입니다. 하나하나가 실제로 코드를 고친 기록('fix:' 커밋)에서 만들어졌습니다. 카드마다 날짜, 규칙, 그리고 그 규칙을 낳은 커밋 해시(commit hash, 저장 기록 하나하나에 붙는 일곱 자리 고유 번호)가 적혀 있습니다.
6f81cfa6cc9da82955142d8874d412401e8a010d1f81923705998c509b8ab68c908607c95ec93NOT NULL Boolean 칸의 form 초기값에 DB 기본값 필수4197f23| 한계 | 현재 상태 | 앞으로 가능한 개선 |
|---|---|---|
| 과거 기록(Memory-Bank) 연동 | 문서에는 적어 뒀지만 실제 연동 코드는 아직 일부만 | 전용 도구를 직접 불러 완전히 연동 |
| 말버릇·행동 차단 | 지금은 코드 실수만 강하게 차단 | "확인해주세요" 같은 말버릇도 감지 |
| 규칙 품질 | 단어(키워드)를 맞춰 보는 방식 | 코드 구조까지 뜯어보는 정밀 분석 |
| 효과 측정 | 시스템 가동 7일차 (아직 판단하기 이름) | 30일이 지나야 본격 작동 |
지난 7일 동안 51건의 자동 개선, 4개 프로젝트의 독립 규칙 모음(scaffold), 12개의 강제 검문 스크립트(차단 단계의 hook)가 모두 이 순환에서 나왔습니다. 시스템은 쓸수록 강해집니다. 사람은 정말 판단이 필요한 순간, 즉 시스템이 사람에게 넘기는 에스컬레이션(escalation) 때만 끼어들면 됩니다.