"그런 것까지 필요합니까." — 훅이니 게이트니 메모리니, AI에게 일을 시키는 데 왜 그런 장치까지 만드느냐는 물음을 받았다.
다섯 달 전의 나도 같은 쪽이었다. 이 관측 기록은 그 물음에 느낌이 아니라 실측으로 답한다 — 무용론의 논거 넷 중 둘은 반박하고, 둘은 인정한다.
이 관측 기록은 규칙 파일 하나로 시작해 운영 체계(OS)가 되기까지의 다섯 달을 되짚는다. 형식은 문답이다 — 수신된 반론 네 개를 하나씩 열고, 관측 데이터로 응답한다.
충분했다, 한동안은. 출발점은 규칙을 모아둔 저장소 하나였다 — 보안 금지선, 브랜치 규칙, 응답 형식을 마크다운으로 정리해 에이전트가 매 세션 읽게 하는 방식. 지시의 일관성이라는 실익은 분명했다. "매번 처음부터 설명"하는 비용이 사라졌다.
그런데 석 달을 굴리자 문서로는 안 되는 것 세 가지가 남았다. 첫째, 강제가 없다 — 규칙 파일은 조언이라, 안 읽거나 읽고도 어기면 그만이다. 둘째, 기억이 없다 — 세션이 끝나면 맥락이 사라져 지난주의 교정을 오늘 다시 해야 한다. 셋째, 검증이 없다 — 지켜지는지 알 방법이 없어 "잘 되고 있는 것 같다"는 느낌만 남는다.
방향을 바꾼 건 이론이 아니라 사고들이었다. 지금 운영하는 보편 규칙 35개 중 30개가 실제 사고에서 태어났다 — 사고가 나기 전에는 그 규칙이 필요하다는 것조차 몰랐다.
| INCIDENT — 실제 발생 | 규칙 파일의 대응 | 지금의 대응 |
|---|---|---|
| 병렬 세션이 같은 폴더에서 서로의 브랜치를 바꿔치기 — 커밋이 남의 브랜치에 착지, 2회 재발 | "조심하자"는 다짐 | 커밋 작업은 격리 폴더(worktree)에서만 — 구조적으로 충돌 불가 |
| 계정 전환이 전역 상태를 바꿔, 병렬 세션의 push가 엉뚱한 계정으로 발사 | 확인 체크리스트 | 프로세스 단위 계정 격리 — 전역 전환 금지 |
| 검증 게이트가 수 주간 "이상 없음(0건)" — 실은 측정 자체가 죽어서 0건 | 발견 불가능 | 감사로 발견 → 게이트 부활(24/24) + 게이트를 감시하는 게이트 |
| 자동 검사 훅 1개가 조용히 죽은 채 30일 | 발견 불가능 | 훅 생존 측정 도입 — 죽은 훅 2.6%(1/38) 실측 |
일부는 그렇다. 모델이 좋아질수록 "실수 교정"류 규칙의 가치는 실제로 떨어진다 — 이건 인정하고 시작한다. 그런데 다섯 달 동안 모델을 여러 번 갈아끼우며 확인한 것은, 좋아진 모델일수록 오히려 측정이 필요해진다는 역설이었다.
"새 모델이 더 좋겠지"라는 감(感)은 두 번 배신당했다. 한 번은 좋아 보였는데 아니었다 — "3연속 성공"으로 기록된 조합이 재측정에서 1/3로 무너져 판정을 철회했다. 한 번은 의심했는데 맞았다 — 동일 과제를 반복 실행(N=3)해 품질 게이트 동률을 확인하고 나서야, 추정 비용 −83%인 조합으로 안심하고 갈아탔다. 측정이 없었다면 앞의 것은 사고가 됐고 뒤의 것은 기회비용이 됐다.
좋은 직원이 와도 결재선과 회계 감사는 없어지지 않는다. 같은 이유로, 모델이 아무리 좋아져도 권한 경계 · 비가역 작업 게이트 · 메모리 · 측정은 모델 바깥에 남는다 — 이 넷은 모델의 지능이 아니라 운영의 구조에 속하기 때문이다.
반박하지 않겠다. 세션마다 주입되는 규칙이 122개, 440KB까지 불어난 것을 어느 날 세어보고 알았다. 규칙 수를 자산으로 여기던 관념은 그날 공식 폐기됐다 — 규칙은 재고이자 부채가 맞다.
중요한 건 그 다음이다. 부채라는 걸 알았으니 갚았다 — 실효성 없는 규칙을 덜어내는 "다이어트"를 돌려 절반 이하로 줄이고, 재발 방지로 "추가 1건 = 기존 1건 증류" 래칫을 걸어 총량을 잠갔다. 무용론과 갈리는 지점은 여기다: 부채가 생긴다는 사실이 아니라, 부채를 측정하고 상환하는 장치가 있느냐.
이것도 반박하지 않겠다. 참조한 업스트림 운영 환경에서는 push 훅이 검증 에이전트를 소환하고, 그 에이전트가 작업을 마치며 다시 push해 훅을 또 부르는 무한 재귀로 54분간 프로세스 수백 개가 생긴 사고가 있었다. 우리 쪽에서는 등록된 훅이 조용히 죽은 채 30일을 보냈고, 검증 게이트가 수 주간 가짜 "이상 없음"을 보고했다. 전부 자동화 장치 자신이 일으키거나 숨긴 문제다.
그래서 지금 체계의 상당 부분은 자동화를 감시하는 자동화다. 훅이 살아있는지 재는 생존 신호, 게이트가 진짜로 막는지 확인하는 재검증, 반년마다 도는 "거짓 안전감" 감사. 이 재귀적 비용은 무용론이 정확히 짚은 지점이고, 규모가 작다면 정당화되지 않는다.
무용론의 오류는 "필요 없다"에 있지 않다. 필요가 조건부라는 사실을 무시한 채 일반화하는 데 있다. 그리고 그 조건은 느낌이 아니라 측정할 수 있는 양이다 — 세션 빈도, 머신 수, 비가역 작업의 비중.
같은 잣대는 이쪽에도 적용된다. 하루 십수 세션을 여러 머신에서 돌리기에 수지가 맞는 것이지, 규모가 작으면 무용론이 옳다. 그래서 판정은 권장 사양표의 형태를 한다.
| 당신의 운영 조건 | 충분한 장비 | 비고 |
|---|---|---|
| 주 몇 회 사용 | 규칙 파일 하나 ← ENOUGH | 언어·컨벤션·금지선. 하루면 만든다 |
| 매일 사용, 혼자 | + 차단형 훅 1~3개 | 가장 아픈 실수부터 — 시크릿 커밋·보호 브랜치·위험 명령 |
| 하루 5세션 이상 | + 메모리 층 | 같은 지적을 두 번 하게 될 때가 도입 시점 |
| 여러 머신 · 하루 수십 세션 | + 측정 (생존·다이어트·기준선) | 이게 없으면 위의 것들이 서서히 썩는다 |
남은 병목도 적어둔다. 외부 성숙도 프레임 자가 평가 84.5점 중 가장 낮은 축은 이식성이다 — 이 체계는 나에게는 증명됐지만, 나 밖에서는 아직 증명되지 않았다. 그 증명을 위해 조각을 분리해 공개하는 것이 다음 일이고, 이 관측 일지가 그 첫 실험이다.
| 흔한 대응물 | 이 일지의 용어 | 같은 질문 |
|---|---|---|
| CLAUDE.md · Cursor rules · 시스템 프롬프트 | 규칙 파일 | "에이전트가 뭘 알아야 하나" |
| pre-commit · CI 체크 | 훅·게이트 | "어기면 어떻게 막나" |
| 노트 · RAG · 메모리 플러그인 | 메모리 층 | "세션이 끝나도 뭘 남기나" |
| eval 스위트 · 벤치마크 | 측정 | "좋아졌다는 걸 어떻게 아나" |
| dotfiles · 온보딩 문서 | 계층 프로파일 | "환경을 어떻게 복제하나" |
진단 질문 — 왼쪽 열 중 "어기면 막는 것"과 "세션 넘어 남는 것"이 둘 다 있는가? 하나라도 없다면 TRANSMISSION 01이 당신의 미래일 확률이 높다.
| 메모리 층 자생률 | 84.1% | 내 작업에서 추출된 사실 비율 — 다섯 달 전 0% |
| 외부 수집 | 251건/런 | 6시간 주기 자동 수확 · 자동 채택 0건 (ORBIT 02에서 해부) |
| 수확 판정 큐 | 이슈 22 · 기각 29 | 수확→사람 판단 게이트의 40일 기록 |