untactit
AI 에이전트가 읽는 스킬·지침·메모리를 한곳에서 관리하는 통제 기반을 만들고 있습니다.
AI 지침을 90KB에서 147KB로 늘렸다. 위반은 안 줄었고, 코드로 내린 8건만 재발 0이었다
AI 에이전트에게 지키게 하고 싶은 규칙이 있다. AGENTS.md에 쓴다. 안 지킨다. 더 자세히 쓴다. 그래도 안 지킨다. 조문을 하나 더 넣는다.
48일간 그렇게 운영한 결과 상주 지침 파일은 90KB에서 147KB가 됐다.
그리고 위반은 안 줄었다.
숫자를 낸다. 전부 내 환경 1대의 실측이다(n=1).
1. 토큰의 94.4%는 같은 텍스트를 다시 읽은 것이었다
지침 파일을 늘리면 비용이 어떻게 움직이는가. 48일 집계다.
| 항목 | 실측값 |
|---|---|
| 누계 토큰 | 62,250M |
| 그중 캐시 재독 | 58,751M (94.4%) |
| 순수 생성 출력 | 185.9M (0.30%) |
| 메시지 수 | 268,766 |
| 메시지당 재독량 | 약 219k 토큰 |
상주 지침은 4파일 204,309바이트. 이게 매 턴 재주입된다.
즉 「누계 토큰량」은 에이전트의 작업량이 아니라 지침 길이 × 턴 수의 함수다. 이걸 자기 가동 규모의 지표로 쓰면, 지침을 길게 쓴 사람일수록 「많이 쓰는 사람」으로 보인다.
캐시 적중률 99.3%도 같은 함정이다. 효율의 증거가 아니라 같은 맥락을 반복해서 던지고 있다는 증거였다.
2. 그런데도 위반은 안 줄었다
지적받을 때마다 규칙 단위로 횟수를 세는 작은 스크립트를 돌리고 있다. 대단한 게 아니고, 교정받으면 카운터를 1 올리는 것뿐이다.
조문을 써넣은 뒤에도 카운터는 멈추지 않았다. 전날 신설한 조문이 다음 날 깨지는 일까지 있었다.
조문을 늘리는 것은 해결이 아니라 증상이었다.
3. 24개 규칙을 두 군으로 나눠 재봤다
기록된 24개 규칙이 마침 두 군으로 갈려 있었다.
- A군(8건): 위반을 코드에서 막은 것. PreToolUse 훅, 검사 스크립트, 발송 직전 가드.
- B군(16건): 조문으로 문서에만 쓴 것.
같은 환경, 같은 에이전트, 같은 기간이다.
| 군 | 규칙 수 | 재발한 규칙 | 누적 재발 | 규칙당 |
|---|---|---|---|---|
| A: 코드 게이트 | 8 | 0건 (0%) | 0회 | 0.00 |
| B: 문서 조문만 | 16 | 16건 (100%) | 19회 | 1.19 |
B군은 전멸이었다. 16건 전부가 최소 1회는 재발했다.
A군은 게이트 설치 후 2,500~4,053턴 무재발이 이어지고 있다.
4. 이걸 「게이트가 효과 있었다」고 해도 되나
반론 세 개를 진지하게 본다.
반론 1: 선택 편향. 게이트를 붙인 건 원래 제일 심한 규칙 아닌가.
맞다. 운영 규칙상 같은 위반이 3회를 넘으면 코드로 내린다. 즉 A군은 원래 가장 재발이 심했던 8건이다. 그게 지금 0회다. 편향은 결론을 약화시키는 게 아니라 강화하는 방향으로 작동한다.
반론 2: 역인과. 게이트 설치 시점에 이미 학습이 끝난 것 아닌가.
부정할 수 없다. 「3회째에 게이트를 붙인다」는 절차 자체가 시간 경과와 상관한다. 다만 B군에도 2회 재발한 채 멈추지 않은 규칙이 3건 있어서, 시간만으로는 설명이 안 된다.
반론 3: 애초에 문서를 안 읽는 것 아닌가.
읽는다. 204KB 전량이 매 턴 컨텍스트에 들어간다. 읽은 상태에서 안 지켜진다는 게 이 측정의 의미다.
5. 학습 큐도 절반이 버려지고 있었다
지적받을 때마다 큐에 쌓고 조문화까지 추적하는 장치도 돌린다. 누적 내역이다.
| 상태 | 건수 |
|---|---|
| 조문 승격 | 231 |
| 검증 완료 | 178 |
| 기각 | 229 |
| 미처리 | 12 |
| 사람 판단 대기 | 63 |
기각률 49.8%. 포착한 학습 신호의 절반이 조문이 되지 못하고 사라진다. 그리고 「사람 판단 대기」가 63건 쌓여 있다. 자동화했다고 생각한 장치가 결국 사람을 병목으로 만들고 있었다.
6. 무엇을 바꿨나
규칙의 거처를 3단으로 나눴다.
- 1회째: 기록만 한다. 조문에 쓰지 않는다.
- 2회째: 조문에 쓴다. 단 매 턴 앞에 「최근 빈발 위반 상위 3건」만 주입한다. 전문이 아니라 3건이다.
- 3회째: 문서 수정으로 닫는 것을 금지한다. 코드 게이트를 쓰고, 일부러 망가뜨린 입력이 그 게이트에 걸리는 것을 확인할 때까지 닫지 않는다.
3단계가 핵심이었다. 「조문 고쳤습니다」로 닫을 수 있는 한, 같은 위반이 4회째에 온다.
상위 3건만 주입하는 것도 의도적이다. 건수를 늘리면 또 안 읽힌다. 안 읽히는 조문을 늘린 게 애초의 원인이었으니까.
7. 못 잰 것
구멍을 정직하게 적는다.
- n=1이다. 1대, 1인 운영이다. 다른 환경에서 재현될지 모른다.
- 게이트 정확도를 못 쟀다. 회귀 판정기 자체에 1표본 오탐률 66%라는 측정이 있다(「확정」으로 보고된 회귀 3건 중 2건이 3표본 재측정에서 통과). 게이트 검증은 이제부터다.
- 「지켜졌다」의 정의가 약하다. 재발 카운트는 사람의 지적이 기점이다. 아무도 못 잡은 위반은 안 세어진다. 실제 위반율은 이보다 높다.
정리
- 지침을 90KB → 147KB로 늘려도 위반은 안 줄었다
- 토큰의 94.4%는 같은 지침의 재독이라, 토큰량은 작업량 지표가 못 된다
- 24개 규칙 대조에서 코드로 내린 8건은 재발 0%, 문서로만 둔 16건은 재발 100%
- 조문을 늘리는 것은 해결이 아니라 증상이었다
자기 머신에서 같은 측정을 해본 사람이 있으면 숫자를 보고 싶다. 특히 B군 재발률이 환경에 따라 달라지는지.
이 계측은 untactit을 만드는 과정의 실측이다. AI 에이전트가 읽는 스킬·지침·메모리를 한곳에서 관리하는 control plane이고 현재 얼리 액세스다. 드리프트 탐지 부분은 agent-drift로 MIT 공개했다(의존성 없음, 단일 파일).
untactit
AI 에이전트가 읽는 스킬·지침·메모리를 한곳에 모아, 승인을 거쳐 모든 단말에 배포합니다. 복붙 없이 팀 전체가 같은 자산을 씁니다.