Claude Code의 프로젝트 설명을 반복하지 않으려고 Anthropic의 '드림(dreaming)' 아이디어를 빌려왔습니다
Borrowed Anthropic's "dreaming" idea to stop re-explaining my projects to Claude Code
핵심 요약
Anthropic의 '드림' 연구를 활용해 Claude Code 세션 기록을 자동으로 요약하고 프로젝트 메모를 업데이트하는 자동화 스크립트를 구현했습니다.
- 드림 아이디어 — 세션 기록을 분석해 프로젝트 메모를 자동으로 업데이트함
- 자동화 구현 — 매시간 실행되는 스크립트가 JSONL 기록을 요약하고 메모를 관리함
- 가드레일 설정 — 코드 수정은 금지하고 CLAUDE.md와 메모 파일만 업데이트하도록 제한함
- 효율성 검증 — 장기 프로젝트 복귀 시 컨텍스트 재설명 시간을 줄이는 것이 목표임
Anthropic의 에이전트 메모리 연구에서는 낡은 기억을 수정하는 방식을 "꿈꾸기(dreaming)"라고 부르는데, 최근에 관련 내용을 발표했더라. 핵심은 에이전트가 작업 도중에 나중에 뭐가 중요할지 모르는 상태에서 뭘 저장할지 결정한다는 거야. 보통 이런 기록들은 처음부터 틀린 경우도 많고, 상황이 바뀌면서 쓸모없어지기도 하거든.
이 방식은 에이전트가 유휴 상태일 때 다시 돌아가서 실제로 무슨 일이 있었는지 읽어보고 기록을 수정하는 거야. 사람이 잘 때 뇌가 하루를 복기하는 거랑 비슷하다고 보면 돼.
Claude Code는 이미 모든 세션을 ~/.claude/projects에 JSONL로 저장하고 있어서, 원재료는 그냥 놀고 있었거든. 이걸 제대로 써먹어 보려고 이번에 시도해 본 거야.
왜 이런 짓을 하냐고? 근본적인 원인은 메모리가 세션 도중에만 기록되는데, 그때는 Claude가 나중에 뭐가 중요할지 알 수가 없고, 나중에 다시 확인하는 과정도 전혀 없기 때문이지.
내가 이 '꿈꾸기' 아이디어를 어떻게 적용했냐면:
이건 매시간 돌아가는 launchd 작업인데, 프로젝트 경로 리스트를 읽어와. 2시간 동안 유휴 상태가 아니었거나, 마지막 '꿈' 이후로 새로운 기록이 없는 프로젝트는 그냥 건너뛰어.
간단한 파이썬 스크립트가 새로운 JSONL 파일들을 압축해. 사용자랑 어시스턴트 대화는 그대로 두고, 각 도구 호출은 한 줄(Bash 명령어, 파일 경로)로 줄이고, 도구 결과는 300자 미리보기로 자른 다음, 세션당 15개로 제한해. 이렇게 해야 Sonnet에서 돌릴 때 비용이 적당하거든. 이 작업에 Sonnet이 아주 훌륭한 모델이라고 생각해.
이 스크립트는 dream/<timestamp> 브랜치에 git worktree를 만들고, 시스템 프롬프트에 '꿈꾸기' 스킬을 추가해서 claude -p --model sonnet을 실행해. --add-dir로 압축된 기록들을 가리키고, 도구는 Read/Glob/Grep/Edit/Write로 제한해서 안전장치를 걸어뒀어.
이 스킬은 Claude한테 메모리가 뭔지 알려주고 뭘 기록할지 직접 판단하게 해. 이건 내가 읽은 Anthropic 연구에서 그대로 가져온 건데, "실패한 것만 기록해라" 같은 딱딱한 규칙은 오히려 똑똑한 모델의 성능을 떨어뜨리더라고. Claude는 기록들을 대조해서 각 메모리를 검증하고(최신 세션 우선), 내가 반복해야 했던 것들을 기록하고, 끝난 일회성 작업은 쳐내고, CLAUDE.md는 150줄 내외로 유지하면서 세부 내용은 docs/memory/로 넘겨. 그리고 모든 변경 사항은 DREAM_LOG.md에 근거와 함께 남겨.
커밋하기 전에 안전장치가 git status를 확인해서 CLAUDE.md, DREAM_LOG.md, docs/memory/ 이외의 파일은 전부 되돌려버려. 버그를 발견하더라도 코드는 절대 못 건드리게 해 놨어. 대신 로그에 버그를 기록하게 만들었지.
만약 마지막 '꿈'이 아직 머지되지 않았다면, 다음 '꿈'은 그 위에 쌓이는 방식이라 2주 뒤에 다시 시작해도 머지는 한 번만 하면 돼.
어떻게 쓸 생각이냐면, 한참 쉬었다가 다시 돌아오는 프로젝트에만 쓸 거야. 매일 하는 프로젝트는 대화 내용이 생생하니까 굳이 필요 없고, 죽은 프로젝트는 토큰 낭비니까.
프로젝트를 다시 잡을 때 내 루틴은 git diff main...dream/<latest>를 실행하고, DREAM_LOG.md를 훑어본 다음, 머지하고 세션을 시작하는 거야. Claude가 내가 어디까지 했는지 이미 다 알고 시작하니까, 내가 15분 동안 다시 설명할 필요가 없다는 게 핵심이지.
지금 내 맥에서 일주일째 테스트 중이야. 기대하는 건 간단해. 과연 diff가 진짜 실수를 잡아낼까, 아니면 그냥 말장난 수준일까?
어떤 결과가 나오든 실제로 뭘 잡아냈는지 나중에 공유할게. 너희들도 비슷한 거 시도해 본 적 있어? 아니면 자기 프로젝트에서 학습하는 더 효율적인 방법 아는 사람? 나는 그냥 "꿈꾸기"라는 아이디어가 너무 흥미로워서 해본 거야.
연구 논문 링크: https://www.anthropic.com/research/components-of-agent-memory
