실전 가이드 · 3분 · 06.23

Claude Code 세션 메모리, LLM에 맡기지 마세요 — Recall이 TF-IDF로 푼 방식

loopy vibecoder

핵심 요약 (TL;DR)

Claude Code 매 세션마다 "제 프로젝트는 NextJS 14에 Supabase 쓰고..."를 다시 적고 있다면 raiyanyahya의 Recall이 답입니다. LLM 요약 없이 로컬 TF-IDF + TextRank로 마크다운 두 장(history.md, context.md)만 관리해 기억 비용을 사실상 0으로 만들었어요. Show HN 첫날 126 포인트, GitHub 24시간에 311 스타.

매일 같은 설명을 반복하는 피로

Claude Code를 매일 쓰는 분이라면 익숙한 풍경이 있을 거예요. 세션이 열리고, 새 창에 똑같은 문장을 다시 칩니다. "현재 프로젝트는 NextJS 14, App Router, Supabase, Tailwind, shadcn/ui입니다. 인증은 magic link로…" 이 한 단락에 매번 300~500토큰. 하루 다섯 번 세션을 열면 1,500토큰이 같은 문장 재설명으로 사라지는 거죠.

이걸 해결하려는 시도가 없었던 건 아닙니다. 거의 모두 "LLM에게 요약시키자"였어요. 세션 끝에 ChatGPT/Claude한테 "이번 작업 요약해줘"를 시키고, 다음 세션에서 그 요약을 다시 컨텍스트로 넣는 식. 그런데 이 패턴엔 두 가지 함정이 있죠. 첫째, 요약하느라 토큰을 또 태웁니다. 둘째, LLM 요약은 비결정적이라 같은 내용도 매번 다른 형태로 다듬어집니다.

raiyanyahya가 뒤집은 전제

24시간 안에 311 스타를 받은 Recall이 보여준 건 의외로 간단한 통찰입니다. "기억 = LLM 요약"이 애초에 잘못된 전제 아니었나?

Recall의 작동 방식은 이렇습니다. 세션 진행 중 슬래시 커맨드 /recall:save를 치면 그 시점의 결정·맥락·코드 변경이 history.md에 append됩니다. append-only라서 데이터가 깨질 일이 없어요. 그리고 그 위에 context.md가 자동 생성되는데, 이게 다음 세션의 "프로젝트 메모"가 되는 거죠.

핵심 트릭은 context.md 생성에 LLM을 안 쓴다는 점이에요. 대신 TF-IDF(단어 중요도 가중치)와 TextRank(문서 내 핵심 문장 추출)를 결합한 클래식 NLP로 처리합니다. 이 두 알고리즘은 1990년대~2000년대 검색·요약의 주력이었고, Python + numpy로 1초 안에 돈답니다. API 호출 0회, 토큰 비용 0, 같은 입력에 같은 출력.

슬래시 커맨드 세 개로 끝나는 설계

설치는 Python 환경에서 한 줄. Claude Code 설정에 슬래시 커맨드 세 개가 노출됩니다.

  • /recall:save — 지금까지의 세션 결정을 history.md에 append
  • /recall:show — 현재 context.md를 출력 (다음 세션 시작 시 자동으로 컨텍스트에 주입)
  • /recall:log — 누적된 history.md의 변경 이력 조회

여기에 보안 디테일이 붙어요. 시크릿 자동 redaction(API 키·토큰 패턴 매칭), git hook과 pager 비활성화로 파일 누락 방지, CodeQL과 Python 3.9~3.13 매트릭스 CI까지. 솔로 메인테이너 18 커밋 프로젝트 치고는 단단하게 설계된 거죠. 게시 다음 날 바로 v0.3.4를 띄우고, 그 다음 날 v0.3.5를 또 띄운 속도도 인상적입니다.

"오픈웨이트가 검증한 클래식 NLP"라는 의미

Recall이 가르쳐주는 건 도구 하나 이상의 이야기예요. LLM 시대에 우리가 "당연히 LLM으로 풀 문제"라고 분류한 것 중, 사실은 30년 된 알고리즘이 더 잘 푸는 영역이 있다는 사실. 요약·검색·랭킹은 그 대표적 후보입니다.

같은 아이디어를 Cursor·Codex·Windsurf에도 이식할 수 있을 거예요. 세션 끝에 마크다운 한 장에 append하고, 다음 세션 시작 시 TF-IDF로 핵심 문장을 추출한다. 이걸 직접 짠다면 Python 50줄 안쪽. raiyanyahya가 보여준 건 "큰 도구 없이도 큰 마찰을 푼다"는 디폴트 그 자체죠.

FAQ

Q. 기억 비용이 정말 0인가요?
요약 생성 단계의 LLM 비용이 0이라는 뜻입니다. 다음 세션에서 context.md를 컨텍스트로 읽을 땐 당연히 토큰을 씁니다. 다만 매번 "프로젝트 소개"를 다시 적어 넣을 때보다 압축률이 훨씬 높아요.

Q. ChatGPT나 Cursor에도 쓸 수 있나요?
현재는 Claude Code 슬래시 커맨드로만 노출돼 있지만, 코어 로직은 Python 라이브러리라 다른 도구의 후처리 스크립트로 호출 가능합니다. 다른 IDE 확장 여부는 미공개.

Q. 시크릿 redaction은 안전한가요?
정규식 기반이라 false negative 여지가 있습니다. 회사 환경에서 쓴다면 history.md.gitignore에 추가하고 별도 디렉토리에 분리 보관하는 걸 권합니다.

매 세션 같은 문장을 다시 치는 데 들어가는 토큰과 손가락의 피로를 한번 계산해보세요. Recall이 답이 아닐 수는 있지만, 그 마찰을 그대로 두는 게 답일 가능성은 더 낮습니다.

0

댓글 0

아직 댓글이 없습니다