에이전트 자기개선 하네스 (8/12) — 거버넌스 Tier 게이트: 메모리 폭주 차단
workspace-shared Tier 0/1/2와 plan → apply → verify → audit → fix 파이프라인
핵심 요약
- 자동 메모리 시스템에서 쓰기 위치를 LLM이 매 호출마다 다시 판단하면 정책이 유지되지 않는다. Tier 0/1/2 게이트는 위치 결정을 정책 레이어로 끌어올려 LLM의 판단 범위를 좁힌다.
- 승격은
plan → apply → verify → audit → fix4-step 파이프라인으로 쪼개고, 마지막 안전망은pre-commit훅에서bank/_tier2/경로의 직접 커밋을 차단한다. - 결과: 쓰기 경로가 정책으로 잠기고, 거버넌스 비용은 검증 단계의 소규모 컨텍스트 호출에 수렴한다.
이 글에서 얻어갈 것
- 자동 메모리 시스템이 무너지는 구조적 원인과, 이를 정책 레이어로 끌어올리는 3-Tier 모델의 역할 분담.
- Tier 2 → Tier 1 승격을 LLM 1회 호출이 아닌 4단계 독립 단계로 분리했을 때 어떤 실패가 부분 결과로 남지 않게 되는가.
- 사람과 LLM을 동일한 게이트로 통과시키는
pre-commit훅 1줄의 적용 범위와 한계. - 메모리 백엔드와 거버넌스 정책을 분리했을 때 얻는 이식성 — 백엔드 교체 시 정책 레이어를 그대로 유지할 수 있는 이유.
문제 정의 — 자동 메모리 시스템이 무너지는 지점
자동 메모리 시스템의 실패는 대부분 한 지점으로 환원된다. 어디에 쓸지를 매 호출마다 LLM이 다시 결정한다는 점이다. 단건 정확도가 95%라도, 100회 누적되면 잘못된 위치에 쓰인 5건이 전체 메모리 구조를 뒤틀어 놓는다. 이후의 검색·참조·승격 결정은 그 5건에 오염된 컨텍스트 위에서 이뤄진다.
해법의 방향은 명확하다. 쓰기 위치 결정은 LLM의 매 호출에서 빼고, 정책 레이어로 끌어올린다. LLM은 이미 허용된 칸 안에서만 판단한다. 아래 3-Tier 모델은 이 방향을 구조로 구현한 것이다.
3-Tier 모델 — 쓰기 권한의 정책화
| Tier | 의미 | 쓰기 권한 |
|---|---|---|
| Tier 0 | 영구 정체성 (MEMORY.md, bank/identity/) |
사람만, PR 리뷰 필수 |
| Tier 1 | curated 지식 (bank/world/, bank/patterns/ 등) |
4-step 승격 통과 시 LLM 가능 |
| Tier 2 | 실험·임시 (bank/_staging/) |
LLM 자유, Tier 1로 올리려면 다시 4-step |
핵심 원리는 Tier 2 → Tier 1 승격 경로에 4-step이 의무라는 것이다. LLM은 임시 영역(Tier 2)에는 자유롭게 쓸 수 있지만, 그것이 curated 지식(Tier 1)이 되려면 반드시 게이트를 통과한다. Tier 0는 사람만 쓴다 — 정체성·규약 수준의 파일은 LLM 자동화 대상에서 제외된다.
이 구조의 의도는 단순하다. 자주 바뀌는 것과 바뀌면 안 되는 것을 같은 쓰기 경로에 두지 않는다.
4-step 승격 파이프라인 — 단계 분리의 이유
plan → apply → verify → audit → fix
- plan — 무엇을 어디에 쓸지 후보를 만든다. 실제 파일 변경 없음. 읽기 전용.
- apply — 후보를 임시 브랜치에 적용. 파일 쓰기는 이 단계에서만 발생.
- verify — 스키마 / Retain 태그 / 토픽 연결 / 중복을 기계적으로 검사.
- audit → fix — 결과 리포트를 생성. 실패 시 apply를 되돌리고 fix 큐에 적재.
각 단계는 읽기-쓰기-검증이 분리돼 있다. 이 분리의 효과는 부분 결과가 남지 않는다는 점에서 나온다. verify가 실패해도 apply 이전 상태로 롤백 가능하고, apply가 도중에 멈춰도 plan 결과는 버려도 무해하다. LLM이 단일 호출 내에서 "계획하고 쓰고 검증한다"를 한꺼번에 하면 중간 실패가 누적되지만, 단계를 나누면 각 단계의 실패는 해당 단계에서만 발생한다.
pre-commit 차단 — 사람도 LLM도 같은 게이트
정책 레이어의 마지막 안전망은 git 훅이다.
if git diff --cached --name-only | grep -q '^bank/_tier2/'; then
echo "ERROR: Tier 2 경로 직접 commit 금지. 4-step 승격 필요."
exit 1
fi
한 줄의 의미는 사람과 LLM을 동일한 게이트로 보낸다는 것이다. 운영자가 파일을 수동으로 옮겨 커밋해도 막히고, LLM이 승격 파이프라인을 우회해 직접 쓰려 해도 막힌다. 정책이 "LLM에게만 적용되는 룰"이 되면 사람이 뚫는 순간 무너진다 — pre-commit 훅은 그 우회로를 차단한다.
한계는 분명하다. 이 훅은 commit 시점에만 작동한다. 파일 시스템에서 임시로 쓰고 지우는 플로우는 감지하지 못한다. 그래서 pre-commit은 1차 방어선이 아니라 최종 안전망의 위치에 둔다.
작동 관찰과 거버넌스 비용
게이트 도입 전 bank/ 디렉터리에서는 의도하지 않은 파일이 간헐적으로 발견됐다. 도입 후 같은 카테고리의 이벤트는 관찰되지 않는 수준으로 줄었다.
비용 측면에서 눈여겨볼 점은 4-step이 추가 LLM 호출을 만들어낸 것이 아니라는 점이다. 기존의 단일 호출(계획+쓰기+검증)을 단계로 쪼갠 구조이므로, 순수 증분 비용은 verify 단계의 소규모 컨텍스트 검사에 수렴한다. 스키마·Retain·중복 검사는 대부분 결정론적 로직으로 처리 가능하므로, LLM 토큰 추가는 제한적이다.
한계와 열린 질문
- 승격 기준의 LLM 의존도. verify 단계에서 "토픽 연결"을 LLM이 판단하는 구간이 남아 있다. 이 구간도 결정론적 규칙으로 더 밀어낼 여지가 있다.
- Tier 간 경계의 운영 피로. 초기에는 Tier 2에만 쌓이고 Tier 1로 올라오지 않는 현상이 나타날 수 있다. 승격 트리거(배치? 이벤트?)의 설계는 별도 문제다.
- 다중 저장소 확장. 현재 게이트는 단일 workspace 기준이다. 여러 프로젝트가 메모리를 공유할 때 Tier 정책의 네임스페이스화가 필요하다.
이식성 — 백엔드 교체에 정책이 따라오지 않는 구조
이 게이트 구조는 메모리 백엔드(파일 시스템, DB, 벡터 스토어)와 분리돼 있다. 4-step의 plan/apply/verify는 MemoryProvider.on_memory_write 같은 훅 지점에 매핑되고, pre-commit 차단은 git 훅에 그대로 남는다. 백엔드가 바뀌어도 정책 레이어의 계약은 유지된다.
적용 범위
Tier 게이트 모델은 다음 조건을 만족하는 시스템에 이식 가능하다.
- 자동 쓰기가 존재하는 메모리·문서·설정 저장소 (LLM이든, 스케줄러든, 외부 프로세스든 무관).
- 쓰기 경로를 경로 규칙 또는 스키마로 사전 분류할 수 있는 구조.
- 변경을 커밋 단위로 추적할 수 있는 VCS 연동.
세 조건 중 하나라도 빠지면 Tier 모델은 안전망을 온전히 제공하지 못한다. 특히 세 번째 조건이 없는 환경에서는 pre-commit 차단 대신 동등한 역할의 write-barrier를 별도로 설계해야 한다.
정리 — 정책으로 잠그고, LLM에게는 잠긴 칸을 준다
자동화의 폭주를 막는 접근은 판단을 LLM에게 매번 묻지 않는 것에 있다. 정책으로 잠글 수 있는 부분은 정책으로 잠그고, LLM에게는 이미 잠긴 칸 안에서만 결정권을 준다. Tier 게이트는 이 원칙을 쓰기 경로 전반에 일관되게 적용한 결과다. 단계를 쪼개고, 훅으로 우회로를 막고, 백엔드와 정책을 분리하는 — 세 가지 축이 맞물릴 때 거버넌스 비용은 0에 수렴한다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기