facts: 로컬 기반의 세션 요약 및 컨텍스트 보존

Claude Code는 매 세션을 시작할 때 이전 상태를 기억하지 못하는 '콜드 스타트(Cold Start)' 특성을 가진다. Recall은 이러한 문제를 해결하기 위해 세션 로그를 로컬에 저장하고, 이를 다시 시작 가능한 요약본으로 압축하는 로컬 프로젝트 메모리 도구다.

가장 핵심적인 기술적 특징은 모든 처리 과정이 사용자 기기 내부에서 완결된다는 점이다. API 키를 요구하지 않으며, 외부 모델로 데이터를 전송하지 않는다. 요약 과정에서 LLM(대규모 언어 모델) 호출이 전혀 발생하지 않으므로 모델 토큰이 소모되지 않는다.

Recall은 프로젝트 루트의 `.recall/` 디렉토리에 두 개의 파일을 생성하여 상태를 관리한다.

1. `summary.md`: 세션 내용을 압축한 요약본이다.

2. `context.md`: 트랜스크립트와 git에서 추출한 결정론적 사실들을 포함한다. 여기에는 사용자의 첫 번째 요청(목표), 수정된 파일 목록, 실행된 명령어, 중단 지점, 그리고 `git diff --stat` 결과가 기록된다.

이는 사용자가 작업 지침을 정의하는 `CLAUDE.md`와는 다른 역할이다. `CLAUDE.md`가 '어떻게 작업해야 하는가'에 대한 가이드를 제공한다면, Recall은 '지난번에 무엇을 했고 어디서 멈췄는가'에 대한 기록을 제공한다.

how-it-works: TF-IDF와 TextRank 기반의 추출적 요약 메커니즘

Recall의 요약 엔진은 `scripts/summarizer.py`에 구현되어 있으며, LLM 대신 고전적인 자연어 처리(NLP) 방식인 TF-IDF(Term Frequency-Inverse Document Frequency)와 TextRank 알고리즘을 사용한다. 이는 문장 간의 유사도를 그래프로 나타내어 가장 중심이 되는 문장을 선택하는 추출적 요약(Extractive Summarization) 방식이다.

구현 구조는 표준 라이브러리(stdlib)만으로 작동하도록 설계되어 별도의 `pip install` 과정이 필요 없다. 다만, 시스템에 `numpy`가 설치되어 있을 경우 이를 사용하여 수학 연산을 벡터화함으로써 대규모 세션에서의 처리 속도를 높인다. `numpy`가 없는 환경에서는 동일한 알고리즘의 순수 파이썬(Pure-Python) 구현체가 실행되며, 결과값은 동일하게 유지된다.

성능 검증은 `benchmarks/bench.py`를 통해 수행된다. 해당 벤치마크 하네스는 지연시간(Latency)과 처리량(Throughput)을 측정하며, 특히 요약기가 선택한 핵심 문장이 리드(Lead), 테일(Tail), 랜덤(Random) 베이스라인과 비교해 얼마나 유효한지를 점수화한다. 또한 `numpy` 경로와 순수 파이썬 경로가 동일한 문장을 선택하는지 확인하는 품질 게이트(`--check`)를 운영한다.

보안 및 안정성 검증을 위해 CI(.github/workflows/) 단계에서 Python 3.9부터 3.13까지의 버전 테스트를 수행하며, Bandit, CodeQL, 시크릿 스캐닝을 통해 코드 보안성을 점검한다. 특히 `tests/test_redact.py`를 통해 민감 정보 제거(Redaction) 품질을 별도로 검증한다.

implementation-impact: 토큰 비용 제거와 프로젝트 메모리 관리 전략

개발자와 실무자가 Recall을 도입할 때 고려해야 할 핵심은 '비용 제로'의 컨텍스트 유지다. 기존에는 이전 세션의 내용을 다시 설명하기 위해 프롬프트에 많은 토큰을 할당해야 했으나, Recall은 로컬에서 생성된 `summary.md`와 `context.md`를 통해 이를 대체한다.

운영 측면에서는 `.recall/` 폴더의 관리 방식에 따라 메모리의 성격이 달라진다. 기본적으로 `.gitignore`에 포함되어 개인적인 작업 메모리로 작동하지만, 이를 커밋하여 저장소에 올리면 팀 전체가 공유하는 '팀 메모리'로 활용할 수 있다.

설정 변경 및 제어는 다음과 같은 파일 기반 방식으로 이루어진다.

- **기본값 오버라이드**: 프로젝트 루트에 `.recall/config.json` 파일을 배치하여 설정을 변경할 수 있다.

- **로깅 일시 중지**: 설정 파일을 수정하지 않고 로깅을 멈추려면 `.recall/.capture-paused` 파일을 생성하면 된다. 해당 파일을 삭제하면 다시 로깅이 시작된다.

실제 워크플로우는 세션을 진행한 후 `/recall:save` 명령어를 실행하여 상태를 저장하고, 새로운 세션을 시작할 때 Recall이 제공하는 이전 중단 지점 정보를 확인하는 방식으로 이어진다. 이는 외부 API 의존성을 완전히 제거하면서도 세션 간 연속성을 확보하는 구체적인 구현 방안을 제시한다.