요약: 메모리는 콘텐츠가 아니라 컨트롤이다

코딩 에이전트(Claude Code, Cursor, Cline 등)는 메모리를 “문서”로만 다룬다. CLAUDE.md, 계획 파일, 자동 작성 메모리 디렉토리 — 전부 에이전트가 의도적으로 쓰고, 의도적으로 읽어야 동작한다.

인간 엔지니어가 실제로 의존하는 메모리는 다르다. “이 테스트는 저 플래그 아래에서 flaky하다”, “이 라우트는 반드시 마지막이어야 한다” — 이런 사실은 아무도 문서화하지 않는다. 일하면서 자연스럽게 인코딩되고, 상황이 다시 나타나면 자동으로 떠오른다.

Swapnanil Saha의 논문 「Delivery, Not Storage: Cue-Anchored Working Memory as a Harness Property for Coding Agents」(arXiv:2607.20972)는 이 “두 번째 계층”의 메모리가 코딩 에이전트에서 왜 사라졌고, 왜 하네스(harness)가 책임져야 하는지를 실험으로 보여준다.

Vectr: 에이전트를 위한 영구 작업 메모리

핵심 발견: 자발적 메모리 사용은 0%

가장 충격적인 수치는 이것이다. 에이전트에게 메모리 도구를 주고, 작업에 직접 관련된 사실을 미리 채워 넣어도, 114턴 동안 메모리 호출이 0회였다.

The agent’s store was pre-seeded with facts directly relevant to its task, with connected tools and explicit guidance, made zero memory calls in 114 turns.

이것은 “도구가 없어서”가 아니다. 도구가 있고, 가이드가 있고, 데이터가 미리 입력되어 있는데도 에이전트는 그것을 쓰지 않는다. 인지과학 문헌에서는 이것을 **전향적 기억(prospective memory)**의 실패로 설명한다: “나중에 이것을 해야 해”라는 의도를 맥락이 길어지면 잊어버린다. TriggerBench가 이미 보여준 바가 정확히 이것이다 — 모델은 회고적 기억(이미 명시된 사실 검색)은 잘하지만, 전향적 기억(상황이 주어지면 알아서 행동)은 컨텍스트가 길어질수록 급격히 무너진다.

두 계층 메모리 모델

논문이 제안하는 아키텍처는 단순하다:

Cue-Anchored Working Memory: 2계층 모델과 실험 결과

Tier 1: 문서 메모리 (Content Plane)

  • CLAUDE.md, 인스트럭션 파일, 계획 아티팩트
  • 에이전트가 의도적으로 쓰고 읽는다
  • 현재 모든 코딩 에이전트의 유일한 메모리 계층

Tier 2: 큐 앵커 작업 메모리 (Control Plane)

  • 트리거 조건: {path, symbol, semantic, event, temporal}의 조합
  • 평가 주체: 하네스(모델이 아님)
  • 전달 방식: 큐가 발생하면 자동으로 컨텍스트에 주입
  • 핵심 설계 원칙: 모델의 판단이 배달 경로에 없다

이 구분이 중요한 이유는 신뢰성이다. 모델이 “메모리를 확인하자”고 판단하는 경로는, 실험에서 보여주듯, 0%에 가까운 성공률을 가진다. 하네스가 결정론적으로 주입하는 경로는 139/139, 즉 100% 성공했다.

Vectr: 이 논론을 구현한 도구

이 모델은 Vectr(github.com/swapnanil/vectr)이라는 오픈소스 로컬 데몬으로 구현되었다:

  • 의미론적 코드 검색: 전체 코드베이스를 20ms 이내에 검색
  • 영구 작업 메모리: 세션을 넘어서 메모리가 유지, /compact 후에도 보존
  • MCP 서버: Claude Code 등 MCP 지원 하네스에 플러그인
  • 로컬 임베딩: API 키 불필요

성능 측정도 흥미롭다. CPython 코드베이스(약 182파일)에서 저장된 메모 3개를 vectr_recall로 회수하는 데 약 360 토큰. grep + Read로 같은 사실을 다시 찾으면 약 2,060 토큰 — 5.7배 적은 토큰, 6배 적은 도구 호출.

감쇠 프로브: 컴팩션이 메모리를 죽인다

논문의 가장 강력한 실험은 반복 컴팩션 감쇠 프로브다:

측정 항목Arm N (메모리 없음)Arm M (주입 메모리)
강제 컴팩션 횟수108138
10/10 사실을 유지한 요약253
0/10 사실만 남은 요약10685
최종 요약의 사실 보존0/100/10
종단점 (10/10 사실 도달)10/10 — 부정 (트랜스크립트 고고학)10/10 — 정상 (주입)
팩트 전달 횟수0139

핵심 발견:

  1. 대화에만 존재하는 사실은 첫 번째 컴팩션에서 전부 사라진다 — 두 arm 모두에서.
  2. 주입된 사실은 138/138 컴팩션-리줌에서 보존되었다.
  3. 메모리가 박탈된 에이전트는 하네스의 자체 세션 파일을 grep해서 잃어버린 사실을 재구성하려 시도했다 — 명시적 지시에 반해서.
  4. 모든 요약은 all-or-nothing이었다: 10/10이거나 0/10이고, 중간 상태는 한 번도 없었다.

Delivery, not storage, is the product: the reliable memory channel for agents is the one the agent never has to think about.

왜 하네스의 책임인가

벤더들도 이미 이것을 알고 있다:

  • Anthropic의 메모리 도구는 “메모리를 확인하라”는 대문자 명령을 강제 주입한다
  • ChatGPT의 메모리는 자동 캡처 + 자동 주입이며, 자발적 조회 도구가 아예 없다

둘 다 “모델이 스스로 메모리를 관리하게 하라”는 순진한 접근이 실패한다는 것을 제품 설계로 인정하고 있다. 다만, 현재 구현은 임시방편이다. 논문이 제안하는 것은 더 구조적이다:

  • 트리거 어휘: path glob, 심볼 참조, 의미론적 유사도, 세션 이벤트, 시간 조건
  • 전달 규율: 예산 제한, 중복 제거, 유통기한 검증, 출처 명시
  • 감사 가능성: 모든 트리거 평가, 발화, 억제가 로깅됨

39%의 재구매 비용

실용적으로 중요한 발견 하나: 세션 내에서 39%의 재읽기가 컴팩션 이전에 이미 비용을 지불한 콘텐츠를 재구매하는 것이었다. 에이전트는 자기가 이미 읽었던 파일을, 컨텍스트가 요약된 후에 다시 읽는다. 이것은 단순한 비용 문제가 아니라, 에이전트가 자신의 인지 상태를 추적하지 못한다는 증거다.

필자의 해석

이 논문은 인지과학과 시스템 설계를 드물게 잘 연결한다. “인간의 뇌 메모리”와 “에이전트의 문서 메모리” 사이의 간극을 확장 마음(extended mind) 이론, 사건 기반 전향적 기억, 부호화 특수성 같은 실제 인지 문헌으로 설명한다.

다만 한계도 분명하다:

  • 실험이 단일 태스크(Apache Camel Resequencer)에 의존한다
  • 저자가 Vectr 구현과 벤치마크 하네스를 공동으로 작성했다 (회피 전략은 명시됨)
  • 메모리 캡처(기억의 “쓰기” 측면)는 미해결 문제로 남아있다 — 논문은 “오픈된 절반”이라고 부른다
  • 11분간의 호스트 하이버네이션이 한 실행에서 발생했다

그럼에도 불구하고, 시그널은 일관된다: 모델에게 메모리 도구를 주는 것은 위키를 주는 것과 같다; 하네스에 큐 앵커 계층을 추가하는 것은 전문가의 직감을 재현하는 것이다.

더 실습해보고 싶은 분들께

에이전트 하네스 설계, 메모리 시스템, 그리고 루프 안에서의 인지 공학에 관심이 있다면:


논문: arXiv:2607.20972 · 코드: github.com/swapnanil/vectr