이것은 저의 첫 번째 글입니다. 마음에 드셨으면 좋겠습니다.
Claude Code나 opencode를 사용한 모든 새로운 세션은 처음부터 시작되었습니다. 저는 제 기기가 어떻게 설정되었는지, 우리가 이미 어떤 결정을 내렸고 그 이유가 무엇인지, 그리고 전날 제가 어떤 변경을 했는지를 매번 다시 설명해야 했습니다. 큰 메모 파일(notes file)을 유지하고 붙여넣으려고 시도했지만, 그것은 계속해서 커지기만 했습니다. 매 턴마다 토큰 비용이 발생했고, 대부분의 내용은 당면한 문제와 관련이 없었습니다.
그래서 저는 IHMT (Infinite Hierarchical Memory Tree: 무한 계층 메모리 트리)를 만들었습니다. 이것은 로컬 MCP 서버로, 프로그래밍 에이전트에게 장기 메모리를 제공하며, 이 메모리는 디스크 상의 평문 파일들의 트리 형태로 저장됩니다.
Infinite Hierarchical Memory Tree
실제 작동 방식
어제 저는 Claude Code를 이용해 저의 작은 앱에 작업하고 새로운 모드를 추가했습니다. 오늘 저는 아무런 컨텍스트 없이 새 세션을 열고, “마피아 모드는요?”라고 물었습니다. 에이전트는 자신의 메모리를 검색하여 다음 상세 내용을 응답했습니다: 해당 모드가 무엇을 하는지, 어떤 파일들이 이를 구현하는지, 그리고 제가 그날 같은 날 요청했던 변경 사항까지도 말입니다.
또한 실수를 잡아냈습니다. 한 메모에는 이 기능이 버전 1.3으로 출시되었다고 되어 있었습니다. 하지만 같은 날의 나중 메모에서는 모든 것을 1.2로 통합하기로 결정했다고 적혀 있었습니다. 검색은 두 가지를 모두 찾아냈고, 에이전트는 이전 버전 번호를 반복하는 대신 수정된 내용에 대해 저에게 알려주었습니다.
이것이 전체 아이디어입니다: 당신의 에이전트에게 한 번만 무언가를 말해주면, 그것은 모든 미래 세션, 어떤 프로젝트에서도 기억하게 만드는 것입니다.
작동 방식
메모리는 평문 파일들로 이루어진 폴더입니다:
- 리프(Leaves)는 저장된 텍스트 그대로의
.txt 파일입니다.
- 브랜치(Branches)는 아래 노드들을 요약하는 JSON 파일입니다.
- 트렁크(Trunk), 즉
root.json은 모든 검색이 시작되는 인덱스입니다.
검색은 모든 것을 읽지 않습니다. 트렁크(trunk)에서 시작하여 일치하는 몇몇 잎사귀(leaf)로 내려가기 때문입니다. 따라서 비용은 저장된 양이 아니라 트리의 깊이에 따라 증가합니다. 제가 측정한 바에 따르면, 200개의 메모는 9개의 브랜치를 열었고, 5,000개의 메모는 14개였습니다. 일반적인 답변은 200~900 토큰이며 약 13ms가 소요됩니다.
(...모든 것을 하나의 평면 인덱스에 임베딩하고 스캔하는 대신, IHMT는 지식을 트리로 구성합니다: 가장 아래에는 원문 텍스트 잎사귀(raw text leaves)가 있고, 그 위로는 재귀적인 JSON 요약이 있으며, 맨 위에는 단일한 root.json 트렁크가 있습니다. 질의가 이 트리를 따라 이동합니다 — 루트 → 브랜치 → 브랜치 → 잎사귀 — 따라서 열리는 파일 수는 저장된 양이 아니라 트리의 깊이에 따라 증가합니다 (≈ beam × log_B(n))...
number of files opened grows with the depth of the tree
제가 중요하게 생각한 몇 가지 사항들:
도움이 되지 않는 경우
제가 미리 말씀드리자면 다음과 같습니다:
- 노트 10개로는 아무것도 절약되지 않습니다. 어차피 컨텍스트에 들어갑니다. 이 가치는 메모리가 매 세션마다 붙여넣고 싶은 것보다 클 때 나타납니다.
- 저는 22개의 headless Claude Code 세션을 대상으로 A/B 테스트를 진행했습니다. IHMT가 사용 가능하자, Claude는 프로젝트 도구를 전혀 사용하지 않았습니다. 대신 이미 저렴한
grep과 sed를 선호했습니다. 강제로 이 도구들을 사용하게 하자 세션 비용이 42~71% 더 비싸졌습니다. 따라서 프로젝트 도구는 선택 사항이며, 진정한 가치는 세션 간의 메모리입니다.
- 서버를 활성화만 해두고 사용하지 않으면 대화당 약 460 토큰이 소모됩니다.
- 수천 개의 문서를 일괄 로드하는 것은 느립니다(약 107초에 5,000개). 에이전트가 하는 것처럼 노트 하나씩 저장하는 것은 즉시 이루어집니다.
[usage optimization](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu44ksi8992kl8aevdihl.png
사용해 보기
Python 3.10 이상과 git이 필요합니다. 이 내용을 에이전트에게 붙여넣으세요:
https://github.com/gonzaroman/IHMT-MEMORY에서 IHMT 메모리 MCP 서버를 설치해 주세요 — INSTALL.md의 지침을 따르세요.
에이전트는 요구 사항을 확인하고, 코드를 다운로드하며, MCP 서버를 등록하고, 사용 지침을 명령어 파일(CLAUDE.md, AGENTS.md...)에 추가하며, 모든 것이 작동하는지 확인합니다. macOS와 Linux에서 Claude Code, Codex, opencode로 테스트되었습니다. Windows 지침은 포함되어 있지만 아직 테스트되지는 않았습니다.
MIT 라이선스입니다: https://github.com/gonzaroman/IHMT-MEMORY
저는 피드백을 받고 싶습니다. 특히 제 설정과 다른 환경의 분들로부터요. 만약 무언가 작동하지 않거나 이해가 안 되는 부분이 있다면, 이슈를 열어주시거나 댓글로 알려주세요.