Grep은 죽었다: Claude Code가 기억하게 만드는 방법 | GeekNews
핵심 포인트
- 1Claude Code의 세션 간 컨텍스트 유실 문제를 해결하기 위해, 로컬 검색 엔진 QMD와 `/recall` 스킬을 결합한 메모리 시스템이 개발되었습니다.
- 2QMD는 Obsidian 볼트를 BM25, 시맨틱, 하이브리드 모드로 즉시 검색 가능하게 하며, `/recall` 스킬은 시간순, 주제별, 그래프 시각화를 통해 과거 세션의 풀 컨텍스트를 복원합니다.
- 3이 시스템은 700개 세션의 JSONL 대화 기록을 자동 파싱 및 임베딩하여 항상 최신 인덱스를 유지하며, 컨텍스트 중심 워크플로우를 통해 어떤 AI 에이전트에서도 지속적인 메모리 활용을 가능하게 합니다.
본 논문은 대규모 언어 모델(LLM)인 Claude Code의 핵심 문제점인 세션 간 컨텍스트 유실을 해결하기 위한 포괄적인 메모리 시스템 구축 방안을 제시한다. Claude Code는 각 대화 세션을 제로 상태에서 시작하며, 이는 과거 결정사항이나 프로젝트 컨텍스트를 추적하기 어렵게 만들고, 컨텍스트 한도 도달 시 정보 유실을 야기한다. 기존의 파일 grep 기반 검색 방식은 확장성과 효율성 측면에서 한계가 명확하다.
이러한 문제점을 극복하기 위해, 본 시스템은 로컬 검색 엔진 QMD와 Claude Code 스킬인 /recall을 결합한다.
QMD(Local Search Engine)는 Obsidian 볼트를 인덱싱하여 빠른 검색을 지원하는 핵심 구성 요소이다. QMD는 다음과 같은 세 가지 검색 모드를 제공한다:
- BM25 (
qmd search): 결정론적 풀텍스트 검색 방식이다.grep처럼 키워드를 매칭하지만, 각 파일에 점수를 부여하여 관련성을 평가한다. 이는 단어 출현 빈도(Term Frequency, TF)와 전체 문서 대비 희소성(Inverse Document Frequency, IDF)을 기반으로 수학적으로 계산된다. BM25는 AI나 임베딩 없이 작동하며, 다음과 같은 수식을 기반으로 문서의 관련성을 평가한다:
여기서 는 문서 에서 쿼리 단어 의 빈도, 는 문서 의 길이, 은 모든 문서의 평균 길이, 과 는 튜닝 파라미터이다.
- Semantic (
qmd vsearch): 임베딩 기반 검색으로, 정확한 단어가 없어도 의미적 유사성을 통해 검색 결과를 반환한다. 이는 문서를 다차원 벡터 공간에 임베딩하고, 쿼리 임베딩과의 코사인 유사도 등을 통해 의미적으로 유사한 문서를 찾아낸다. - Hybrid (
qmd query): BM25와 Semantic 검색을 결합하여 두 방식의 장점을 활용한다.
QMD는 Claude Code의 grep 기반 서브 에이전트 검색(3분 소요, 낮은 품질)과 달리 즉각적이고 정확하며 토큰 소모가 적다. 예를 들어, qmd search "insomnia"는 볼트에 해당 단어가 없으면 결과가 없지만, 시맨틱 검색인 qmd vsearch "couldn't sleep, bad night"는 수년 전의 취침 습관 목표까지 발견하는 등 뛰어난 문맥 이해 능력을 보여준다.
/recall Skill은 QMD 위에서 작동하는 Claude Code 스킬로, 작업 시작 전에 컨텍스트를 자동으로 로드한다. /recall은 세 가지 모드를 지원한다:
- Temporal (
/recall yesterday,/recall last week): 날짜 기반으로 과거 세션 기록을 스캔하여 타임라인 형태로 재구성한다. - Topic (
/recall topic QMD video): 특정 QMD 컬렉션을 대상으로 BM25 검색을 수행하여 관련 세션과 노트를 찾아낸다. - Graph (
/recall graph last week): 세션과 파일을 시각화하여 인터랙티브하게 탐색할 수 있는 그래프를 제공한다. 오래된 세션은 흐리게, 최근 세션은 특정 색상으로 강조하며, 파일은 타입별(goals, research 등)로 클러스터링된다.
이 시스템은 Claude Code의 모든 대화 기록(JSONL 파일)을 자동으로 파싱하여 클린 마크다운 형태로 변환하고, 이를 QMD 인덱스에 임베딩하는 자동화 파이프라인을 구축한다. 터미널 종료 시 자동 hook이 실행되어 세션을 QMD에 export 및 embed하므로, 수동 작업 없이 항상 최신 인덱스가 유지된다. 이를 통해 "실행하지 않은 아이디어"와 같이 과거에 기록했으나 잊혀진 내용을 재발견하는 것이 가능하다.
전체 스택 구조는 Obsidian Vault(하단) QMD Search(중간) Claude Code / OpenClaw(상단)로 구성되며, 컨텍스트가 하단에서 상단으로 흐르는 구조를 가진다. Obsidian Sync를 통해 볼트를 Mac과 상시 가동되는 Mac Mini 간 동기화하고, Mac Mini에서 OpenClaw가 24/7 실행되어 폰에서도 동일한 볼트, QMD 인덱스, 스킬을 활용할 수 있도록 하여 도구가 바뀌어도 컨텍스트가 유지되는 컨텍스트 중심 워크플로우를 제시한다. 모든 임베딩은 로컬에 저장되어 개인 정보 보호를 보장한다.