개요

LLM 코딩 에이전트에게 모든 맥락을 프롬프트나 일반 RAG로 계속 주입하면 **컨텍스트 부패(Context Rot)**가 발생한다. 컨텍스트가 비대해지고, 오래된 정보와 현재 작업 정보가 섞이며, 검색된 chunk가 실제 코드 변경의 의사결정 맥락을 충분히 담지 못한다.

Code-native memory는 에이전트 메모리를 코드베이스 artifact(VCS history, AST diffs, git-backed task graphs)에 뿌리내려서, 손실 많은 자연어 요약 대신 구조화된 표현을 사용한다. 세 가지 주요 설계가 스펙트럼을 이룬다.


1. Typed memory from VCS history (CommitDistill)

커밋, PR, 이슈에서 결정론적 추출기(deterministic extractor)로 구조화된 지식을 뽑아내고, budget-constrained retriever로 에이전트에 노출한다.

구성 요소:

  • Deterministic extractor — 정규식 기반, embedding 불필요, 10,000 커밋을 4초 이내 처리
  • Typed knowledge units: Facts (설정값, API 제약 등 단순 정보), Skills (절차적 지식, 마이그레이션 방법), Patterns (파일명 규칙, 에러 처리 등 반복 관례)
  • Budget-constrained TF-IDF retriever — calibrated silence threshold(theta=2.5)로 out-of-distribution 질의에는 침묵

성능: 256자 쿼리 예산에서 hit-rate 0.750 (BM25 0.333, git log grep 0.083 대비). 단, headline LLM-as-judge metric에서는 통계적 유의차 없음. Budget-conditional optimization — 예산이 넉넉하면 BM25와 수렴.

적용 조건 (모두 필요):

  1. 고품질 커밋 관행 (conventional commits, 구조화된 PR 설명) — GitHub 커밋의 90%는 저품질
  2. 빡빡한 검색 예산
  3. 느리게 진화하는 코드베이스
  4. 충분히 큰 저장소 (작으면 raw git log로 충분)

역효과: 빠르게 진화하는 코드베이스에서 추출된 Pattern이 현재 관례와 충돌 → 확신에 찬 오답 생성. 결정의 대안(Decision Shadow)은 커밋에 기록되지 않으므로 복구 불가.

관련 논문: CommitDistill: A Lightweight Knowledge-Centric Memory Layer for Software Repositories (Chukkapalli et al. 2026)


2. AST-guided memory (CodeMEM)

자연어 요약은 구조적 관계를 잃는다 — “fixed pagination logic”이 어떤 함수/노드가 변경되었는지 알 수 없음. CodeMEM은 AST 표현을 메모리로 저장.

두 구성 요소:

  • Code Context Memory — 각 검증된 변경 후 AST-informed 연산으로 저장소 상태 유지. 구조적 충돌 방지.
  • Code Session Memory — AST diff 분석으로 잊혀진 컨텍스트 식별. 이전에 포기한 접근법으로 회귀(regression)를 기계적으로 탐지.

효과: instruction following 12.2%(current-turn) / 11.5%(session-level) 개선, 태스크당 2-3 라운드 감소. 라운드 감소가 실질적 이점.

역효과: DSL, 템플릿 시스템, 바이너리 포맷은 AST diff 불가. 설정 파일(YAML/TOML)은 AST 없음. AST 파서 통합 오버헤드 존재. 1-3턴짜리 작업에는 오버헤드가 순비용.

관련 연구: Tree-sitter 기반 지식 그래프 → 10× tokens 절약, 2.1× tool call 감소 (arXiv:2603.27277)


3. Git-backed task graphs (Beads)

에이전트가 세션마다 완료한 단계를 재발견하고 중복 계획을 생성하는 “50 First Dates” 문제 해결. Dolt 기반 DB를 git에 .beads/ 디렉토리로 커밋.

핵심 기능:

  • 각 task: ID(hash), 상태(open/in_progress/blocked/closed), 우선순위(0-4), 의존성 엣지
  • bd ready — 블로커 없는 태스크 조회, 세션 시작 시 plan 파일 대신 사용
  • --claim — atomic assignee + status 변경, 병렬 에이전트 충돌 방지
  • 종료된 태스크는 시간이 지나면서 의미 압축(semantic compaction)

역효과: 단일 컨텍스트 윈도우에 프로젝트 전체가 들어가면 TASKS.md 대비 도구 오버헤드. —claim은 watchdog 없음 → crash 시 태스크 stuck. 해시 ID도 merge conflict 완전 제거 불가.


비교 요약

접근법저장 대상검색 방식예산 의존성최대 이점
CommitDistillVCS history typed unitsTF-IDF + silence threshold높음 (빡빡한 예산에서만 우위)검색 정밀도
CodeMEMAST representationAST diff 비교낮음 (세션 길이에 비례)라운드 감소
BeadsTask graph (Dolt/git)Dependency-resolved query낮음작업 상태 추적

Key Takeaway

Code-native memory는 자연어 요약의 정보 손실을 구조화된 표현으로 대체한다. 그러나:

  • Typed VCS memory는 budget-conditional optimization (좋은 커밋 관행 + 빡빡한 예산 필요)
  • AST diffs는 라운드 감소가 핵심 (2-3턴 절약)
  • Task graph는 세션 간 작업 상태 추적
  • 세 substrate 모두 eviction/compaction 규율 필요

현실적 조언: “평범한 RAG가 통하지 않는 상황에서만 도입하라. 효과가 검증된 영역은 빡빡한 검색 예산 + 느린 코드베이스 + 긴 세션이다.”