Memory¶
이 페이지는 CLAUDE.md의 구현 노트를 미러합니다. 서브시스템 변경 시
양쪽 다 업데이트하세요.
memory.md는 Opus가 유지하는 장기 사용자 프로필입니다. 작고
(300단어 이하 bullet-point), rolling 디지스트 히스토리에서 주기적
업데이트되고, 제안 프롬프트에 주입되어 Cue의 세 제안이 시간이
지남에 따라 사용자가 누구인지 알게 됩니다.
데이터 흐름¶
graph LR
Digests[(digests<br/>SQLite rolling timeseries)]
MemoryMd[(memory.md<br/>plain text)]
Opus[Claude Opus]
Suggest[cue.suggest<br/>핫키 경로]
Digests -->|N 디지스트마다| Opus
MemoryMd -->|current_memory| Opus
Opus -->|재작성된 프로필| Scrub[pii.scrub]
Scrub --> MemoryMd
MemoryMd -->|memory dump| Suggest
cue.memory._compute_memory():
- 현재
memory.md로드 (첫 실행 시 비어있음). - SQLite에서 가장 최근 N 디지스트 요약 가져옴.
prompts.MEMORY_TEMPLATE.format(current_memory=..., digests=...)로 Opus 호출.- 반환된 텍스트를
cue.pii.scrub()로 scrub. memory.md에 atomic 작성.
프롬프트¶
전체 템플릿은 프롬프트 페이지에 렌더. 핵심:
- append-style 업데이트 — 교체가 아닌. 최근 디지스트가 지원하지 않으면 기존 패턴이 fade하지만 즉시 제거되지 않음.
- 캡처: 자주 사용하는 앱/도구, 일반적 작업 패턴, 반복되는 선호, 주목할 만한 습관.
- 출력: 300단어 이하, bullet-point 형식, 한국어, 프로필 텍스트만 (설명 없음).
실행 시점¶
메모리 업데이터는 스트리밍 레코더의 디지스트 cadence에 실행 — N
디지스트마다, streaming.memory_every_digests로 설정 가능. 기본값은
사용자가 Opus가 재작성을 요청받기 전에 최소 몇 디지스트의 누적
narrative를 가지도록 가정.
부팅 시 backfill¶
SQLite의 _meta.scrub_version이 현재 pii_recognizers.CURRENT_SCRUB_VERSION
보다 이전이면 memory.maybe_backfill_memory()가 시작 시
memory.md를 in-place 재 scrub. 같은 아이디어가 SQL digests.summary
row에도 store.backfill_scrub() 통해 적용. 버전 관리 — scrub
버전 bump마다 정확히 한 번 실행.
RAG 주입 지점¶
핫키 경로는 SUGGEST_MEMORY_LABEL ("사용자 프로필 (장기 메모리):")
헤딩 아래 memory.md를 제안 프롬프트에 append. Opus는 다음 디지스트
틱이 재작성할 때까지 매 핫키마다 같은 프로필 봄.
프라이버시 자세¶
- 메모리 텍스트는 post-scrub — 재작성 시 PII가 Opus에 도달하지 않고, 제안 경로에서도 PII가 Opus에 도달하지 않음.
- 이미지 바이트는
memory.md에 절대 쓰이지 않음. memory.md는 Cue 데이터의 나머지와 동일한 권한으로 데이터 루트에 존재 (Unix에서 POSIX 0o700 dir / 0o600 file).
더 보기¶
cue.memory— 모듈 reference (fullcue.memoryreference 페이지는 deferred).- 프롬프트 —
MEMORY_TEMPLATE렌더. - 디지스트 파이프라인 — 메모리 업데이터에 입력.