Claude Code가 첫날부터 모든 세션을 로컬에 저장하고 있었습니다. 저희가 인덱싱했습니다.
Claude Code has been writing every session to disk since day one. We indexed it.
핵심 요약
Claude Code가 모든 대화 기록을 로컬에 JSONL로 저장한다는 점을 발견하고, 이를 검색하고 재구성할 수 있는 인덱싱 도구를 개발했습니다.
- 세션 기록 저장 — Claude Code가 모든 대화와 도구 호출을 JSONL 파일로 로컬에 자동 저장함.
- 검색 도구 개발 — SQLite와 FTS5를 활용해 과거 세션을 검색하고 스레드를 재구성하는 인덱서를 구축함.
- 문맥 유지 해결 — 세션 경계를 넘어 대화 맥락을 이어가며 컴팩션으로 인한 정보 손실 문제를 방지함.
- 오픈소스 공개 — MIT 라이선스로 관련 도구를 깃허브에 공개하고 커뮤니티 피드백을 수용 중임.
~/.claude/projects/를 확인해보세요.
지금까지 진행한 모든 세션의 JSONL 파일이 있습니다. 모든 턴, 도구 호출, 파일 수정, 응답까지 전부 첫 세션부터 지금까지 추가(append-only) 방식으로 저장되어 있습니다. 저희 건 1월부터 쌓여서 57MB, 1,026개 세션, 76,000개 턴이 그냥 그대로 남아있더군요.
누가 알려준 게 아니라 그냥 직접 찾아본 겁니다.
형식도 깔끔합니다. 각 줄이 JSON 객체로 되어 있어서 역할, 타임스탬프, 내용, 도구 호출 등이 구조화되어 있습니다. 파싱하기 힘든 로그가 아니라 완전한 에피소드 기록입니다. 지난주 화요일에 3시간 동안 중요한 문제를 해결했다면, 그 대화가 지금 당신 드라이브에 고스란히 남아있습니다. 다만 다시 불러올 방법이 없었을 뿐이죠.
그래서 인덱서를 만들었습니다. SQLite+FTS5, 턴 간의 시간적 연결, 그 위에 MCP 서버를 올렸죠. 이제 Claude Code 세션 안에서 이렇게 할 수 있습니다:
search_sessions("remember when we fixed that auth bug last month")
recall_session("a8f2c441")
thread_recall(root_id, depth=8)
마지막 명령어는 시간적 엣지 그래프를 BFS로 탐색해서 세션 경계를 넘어 스레드를 재구성합니다. "2주 전에 말했잖아" 문제가 그냥 사라지는 거죠. 데이터는 원래 있었는데, 그 위에 불러오기 계층을 만든 사람이 없었을 뿐입니다. claude.ai 데이터 내보내기에서 가져온 conversations.json도 지원해서 웹 채팅 기록도 CLI 세션과 같은 인덱스에서 관리됩니다.
나머지 절반은 압축(compaction)입니다. Claude Code를 진지하게 쓰는 사람이라면 다들 느껴봤을 겁니다. 컨텍스트가 꽉 차서 압축이 실행되면, 이미 알고 있어야 할 내용을 다시 설명해야 하는 상황이 오죠. 저희는 그 고리를 끊기 위해 전체 훅 체인을 연결했습니다.
아무도 기록하지 않는 사실은 PreCompact 페이로드의 transcript_path가 훅이 실행될 때 항상 채워져 있지는 않다는 점입니다. 이걸 중심으로 저장 로직을 짜서 배포하면 설명할 수 없는 조용한 실패를 겪게 되죠. 저희가 딱 그랬습니다. 해결책은 Stop이 세션 종료 시점뿐만 아니라 매 턴마다 체크포인트를 기록하게 하는 겁니다. 그러면 PreCompact가 실행될 때 어떤 상황에서도 항상 최신 상태를 참조할 수 있습니다.
그리고 SessionStart는 source 필드를 읽습니다. "compact"는 압축이 방금 실행됨, "resume"은 앱 재시작, "startup"은 새 세션, "clear"는 의도적인 삭제를 의미합니다. 각각 다르게 동작하죠. 어디에도 문서화되어 있지 않아서 직접 알아내야 했습니다.
결과적으로 압축은 강제 초기화가 아니라 캐시 미스가 됩니다.
저희는 anthropics/claude-code#47023의 업스트림 대화에도 참여 중입니다. 7개의 독립적인 메모리 프로젝트가 서로 다른 사람들에 의해 만들어졌는데, 모두 똑같은 벽에 부딪히고 똑같은 훅 요구사항에 도달했습니다. Bella, NEXO Brain, Cozempic, world-model-mcp까지요. 서로 조율한 것도 아닌데 다들 같은 게 필요했던 거죠. 공식 훅 사양은 거기서 논의 중이니 관심 있으면 팔로우하세요.
저장소: https://github.com/Haustorium12/continuity-v2 — MIT 라이선스, 훅 설정은 5분 정도 걸리고 MCP 서버는 파이썬 파일 하나입니다. 질문 환영합니다.
