Communitygithub.com

jau123/claude-memory-manager

Claude Code 스킬로, 프로젝트 메모리 라이브러리를 감사 가능하고, 일관된 이름을 유지하며, 수일이 아닌 수개월 동안 표류하지 않도록 관리합니다.

claude-memory-manager란 무엇인가요?

이 스킬은 Claude Code 환경에서 프로젝트의 자동 메모리(`memory/` 디렉토리)와 `CLAUDE.md`를 체계적으로 관리하기 위한 방법을 제공합니다. 프로젝트가 성장함에 따라 메모리 라이브러리를 검색 가능하고 감사 가능한 상태로 유지하는 것이 핵심 목표입니다. 주요 기능으로는 저장할 가치가 있는 정보를 판단하는 의사 결정 트리(Rule 2), 기존 메모리를 우선 업데이트하고(Rule 3) 파일 크기나 주제 수에 따라 분할하는 규칙(Rule 6), 그리고 `MEMORY.md` 인덱스의 설명(`description`) 필드를 활용한 검색 최적화 방안(Rule 4) 등을 포함합니다. 이 스킬은 `feedback`, `reference`, `project` 세 가지 유형의 메모리 파일을 정의하고, 각 유형별 필수 정보(예: feedback에는 이유를 설명하는 `## Why` 섹션)와 일관된 명명 규칙(`<type>_<topic>.md`)을 제시합니다. 또한, `mode` 기반 워크플로우를 통해 새로운 메모리 생성(Mode 2), 기존 메모리 업데이트(Mode 3), 구조적 변경(Mode 4), 신규 프로젝트 부트스트래핑(Mode 5) 등을 단계별로 안내하며, 선택적으로 감사 스크립트(`audit-memory.sh`)를 통해 전체 메모리 시스템의 규정 준수율을 확인할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add jau123/claude-memory-manager

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

메모리 관리(Memory Management)

Claude Code의 자동 메모리와 CLAUDE.md에 프로젝트가 성장함에 따라 라이브러리를 검색 가능한 상태로 유지하는 방법을 작성하는 방법입니다.

빠른 참조(Quick Reference)

사용자가 말하면...이렇게 하세요
"기록해줘" (모호함, 여러 후보)/"복기해줘"/"개발 끝났는데 기록할 만한 거 봐줘"→ 모드 1: 후보 평가(여러 후보 필터링)
"오늘 그 X 함정 기록해줘" (구체적인 단일 항목)/ 중요 버그 수정 완료 후/ 보안 사고 처리 완료 후/ 명확하지 않은 결론이 있는 단일 결정→ 모드 2: 새 memory 생성(직접 진행)
"이 memory 업데이트해줘 / X 결론 수정해줘"→ 모드 3: 기존 memory 업데이트(새로 생성보다 우선)
추가할 단락이 100줄을 넘거나 파일에 H2 주제가 이미 4개 이상인 경우→ 규칙 6: 업데이트 대신 분할
"스키마 변경해줘 / 새 type 추가해줘 / 기억 구조 바꿔줘"→ 모드 4: 구조적 변경(반드시 이미 겪은 함정 목록 참고)
"새 프로젝트 기억 없이 시작" / "어떻게 시작하지?"→ 모드 5: 제로 메모리 부트스트랩
"기억 시스템이 지저분해 보여/감사해줘"→ 프로젝트 루트에 scripts/audit-memory.sh가 있으면 실행; 없으면 templates/audit-memory.template.sh를 참고하여 직접 생성

중요 규칙(Important Rules)

규칙 1: 사실은 memory에, 방법은 skill에

memory 파일에는 "X 함정을 겪음", "업계 Y 데이터", "프로젝트 Z 상태"를 담습니다. 이 skill에는 "무엇을 기록할지 결정하는 방법/작성 방법/구성 방법"을 담습니다. 스키마 규칙을 memory에 작성하지 마세요(카테고리 오류).

규칙 2: 먼저 '기록할 가치가 있는지' 판단하고, 그다음 '어디에 기록할지' 판단하세요

모든 발견 사항을 기록할 필요는 없습니다. 의사 결정 트리:

신호기록해야 하나요?
같은 함정을 두 번째로 겪음✅ 반드시 기록
검토 중 명확하지 않은 판단 발견✅ 결정의 '이유(Why)' 기록
업계 비교/실측 데이터(재사용 가능한 기준)✅ 기록
일회성 디버그, 수정 완료, 가치 없음❌ 기록하지 않음(커밋 메시지로 충분)
임시 상태, 변경될 예정⚠️ 지속성 확인 후, 장기적인 경우만 기록
빈도는 낮지만 치명적(6개월간 읽지 않았지만 유일한 진실)✅ 남겨둠 — 30일간 접근하지 않음 ≠ 오래됨; 삭제 기준은 '주제가 사라졌거나/대체됨'이지, '얼마나 오래 읽지 않았는지'가 아님

'어디에 기록할지' 판단 — 근접성 유발 4단계 라우팅:

먼저 직교 질문을 던지세요: '미래에 이 사실이 필요할 때, 특정 코드 위치를 보고 있는 중인가요, 아니면 파일 간 의사 결정을 하거나 특정 유형의 오류를 추적하는 중인가요?'

트리거 조건대상메커니즘
특정 라인/블록을 보고 있고, WHY가 한 문장으로 설명 가능함인라인 코드 주석(해당 라인 바로 위에)파일 수정 시 100% 발견, 인덱싱 비용 0
특정 파일 그룹에 대한 다중 계약/체크리스트.claude/rules/<x>.md + paths: frontmatter일치하는 경로 접근 시 자동으로 context 주입
트리거가 시나리오/오류/특정 문제이거나, 여러 파일에 걸쳐 있거나, 단일 저장소 파일에 속하지 않음(플랫폼/SDK 함정)memory(본 시스템)description 매칭
매 세션마다 지켜야 하는 규칙(명령어, 기술 스택, 협업 선호도)CLAUDE.md상주

특정 파일에 바인딩된 feedback은 기본적으로 SPLIT: 파일 로컬 핵심 -> 인라인 주석(작성 전에 해당 코드를 grep하면 이미 동등한 주석이 있는 경우가 많음); memory에는 '파일 간 재사용 가능한 원칙 + 해당 파일을 가리키는 포인터'만 남깁니다.

3가지 과도한 마이그레이션 방지 가드레일(기본값 memory, 가능한 적게 마이그레이션):

  1. 특정 파일을 제거해도 일반적인 교훈이 남는 경우 -> memory 유지(예: 'optional 필드를 중요한 결정 경로에 사용하지 마세요', 특정 파일은 예시일 뿐, 원칙은 이전 가능)
  2. 플랫폼/SDK 동작이 여러 파일에서 반복됨 -> memory 유지(코드에 의미가 있더라도)
  3. 묘비(X는 은퇴 -> Y를 보세요)/ 조사 SOP / 비즈니스 경제적 추론 -> memory 유지(트리거는 아키텍처/시나리오 수준)

실증(175개 파일 프로덕션 라이브러리 전체 감사): 약 15%의 항목만 단일 파일에 바인딩되어 있으며, 그중 대부분의 파일 로컬 핵심은 이미 코드 주석에 있음 — '마이그레이션'은 대부분 memory의 중복 복사본을 삭제하는 것이지 실제로 이동하는 것이 아님.

.claude/rules/*.md 작성 방법(프로젝트 .claude/rules/에 배치, git에 포함 -> 머신/worktree 간 공유):

---
description: 이 규칙이 무엇을 담당하는지 한 문장으로
paths:
  - src/components/SomeDialog.tsx
  - src/lib/providers/*.ts          # glob 지원
---
위 경로가 일치할 때 자동으로 주입되는 계약/체크리스트 본문(다중 gotcha).

⚠️ 네이티브 rules 주입의 알려진 경계(2026-07 확인, anthropics/claude-code issues): paths: 규칙은 Read 시에만 일치하는 파일에 주입되고, Write/새 파일 생성 시에는 주입되지 않음(#23478); 사용자 수준 ~/.claude/rules/의 paths:는 무시되며, 프로젝트 수준만 적용됨(#21858). '새 파일을 생성할 때도 반드시 적용되어야 하는 계약'은 CLAUDE.md에 남겨두고 rules에만 두지 마세요.

규칙 3: 기존 항목을 우선 업데이트하고, 새로 생성하지 마세요

주제와 관련된 기존 파일이 있으면 해당 파일을 업데이트합니다(단락 또는 변경 로그 섹션 추가). 주제가 완전히 직교하는 경우에만 새로 생성합니다. 새로 생성하면 주제가 파편화되어 -> 찾기 어려워지고 -> 기억 상실로 이어집니다.

규칙 4: memory는 자동으로 로드되지 않으며, description이 적중을 결정합니다

topic file(memory/*.md)은 세션 시작 시 로드되지 않습니다. Claude는 MEMORY.md 인덱스의 description을 기반으로 읽을지 판단합니다. description은 반드시 시나리오 키워드 + 핵심 결론을 혼합해야 합니다. 그렇지 않으면 Claude가 인상에 따라 어떤 파일을 읽을지 결정합니다.

네이티브 메커니즘 확인(2026-07, 공식 docs/en/memory): 벡터/의미론적 자동 검색은 없음 — 발견은 전적으로 'MEMORY.md 인덱스 라인 + 파일 이름'에 의존하며, Claude는 Read를 사용하여 필요에 따라 읽습니다. 읽을 때 harness는 "이 memory는 N일 전입니다"라는 시간 정보 프롬프트를 주입합니다. 인덱스 라인 hook의 품질 = 적중률의 전부이며, 이는 네이티브 동작이지 본 스킬의 규칙이 아닙니다.

규칙 5: skill 자신이 skill이 가르치는 규칙을 따라야 합니다

이 skill이 사용자에게 ## Why 섹션을 작성하도록 요구한다면, 이 skill도 자신의 각 규칙에 대한 이유(Why)를 설명해야 합니다(모두 이 파일에 인라인으로 포함되어 있습니다).

범위 주의: 규칙 5의 적용 범위는 "방법/작성법/빠른 참조 형식 등"이며, 스키마 규칙에는 재귀적으로 적용되지 않습니다. 스키마(이름/frontmatter/Why 섹션)는 memory 파일을 위한 것이며, skill 자체에는 적용되지 않습니다. Skill은 memory 파일이 아닙니다.

규칙 6: 언제 업데이트 대신 분할할지(단일 파일/단일 그룹 과부하 방지)

규칙 3은 업데이트를 우선시하지만, 임계값이 있습니다. 분할을 트리거하는 신호(단일 파일 수준):

신호조치
기존 파일이 100줄 초과이고, 추가할 새 내용이 원래 주제와 직교함새 파일로 분할, 추가하지 않음
기존 파일에 H2 최상위 섹션이 이미 ≥ 4개이고, 새 내용이 5번째 독립 주제에 속함새 파일로 분할
섹션 추가 후 총 길이가 150줄을 초과함분할 여부 평가(주제 독립성 확인)
추가할 내용이 원래 파일 제목/description과 일치하지 않음새 파일로 분할(원래 파일은 선언된 주제에 집중해야 함)

단일 그룹 과부하(인덱스 수준):

신호조치
MEMORY.md의 특정 큰 그룹 엔트리 수 ≥ 15허브 memory(섹션 인덱스) 생성을 고려하여 플랫 리스트 대체, 새 엔트리는 허브에 연결
한 그룹의 description을 모두 훑어보는 데 25줄이 넘음위와 동일
MEMORY.md > 23,000자(wc -m) 또는 > 190줄🔴 네이티브 하드 제한 = 처음 200줄 또는 25K 자 중 먼저 도달하는 쪽(공식 문서 "25KB" 표현, 실제로는 string length=자 기준: 27,972자/37.9KB 인덱스가 정확히 25,000자에서 잘림, 바이트 기준으로는 약 35% 일찍 잘림). 초과분은 조용히 로드되지 않음. ⚠️ wc -c(바이트)로 추정하지 마세요: 한글 UTF-8은 글자당 3바이트로, 약 35% 여유를 과대평가하게 됩니다. 한계에 가까워지면 harness가 경고를 주입하며, Only part of it was loaded 메시지가 보이면 이미 인덱스가 손실되고 있는 중입니다.
단일 인덱스 라인 > ~160자description에 세부 정보가 너무 많음 -> topic file로 이동하거나 코드 주석으로 내리고, 인덱스에는 "시나리오 키워드 + 핵심 결론"만 남깁니다.

단일 그룹 과부하도 관리해야 하는 이유: Claude는 MEMORY.md 인덱스를 훑어 description을 매칭하는데, 그룹 내 20개 이상의 description을 한 번에 훑으면 누락률이 발생합니다. 허브를 구축하면 그룹 인덱스는 허브를 가리키는 한 줄만 남고, 허브 내에서 주제 맵을 제공합니다.

인덱스 수준 전체가 가장 위험한 이유: 단일 파일/단일 그룹 과부하는 '적중률 감소'일 뿐이지만, 인덱스 전체가 잘리면 = 끝부분 전체가 로드되지 않음 = 적중률이 0이 되며, 조용히 오류 없이 진행됩니다. 따라서 ⭐⭐⭐ 핵심 항목은 MEMORY.md 상단에 배치해야 합니다(잘림 방지 보험).

한계 초과/과대 시 다이어트 우선순위(description 압축은 최악의 첫 번째 방법으로, 적중률을 스스로 해칩니다):

  1. 먼저 이동: 파일 로컬 항목 -> 인라인 주석 / .claude/rules(인덱스는 작아지고 적중률은 높아짐, 규칙 2의 4단계 라우팅 참조)
  2. 그다음 삭제: 진정한 묘비(주제가 사라졌거나/대체되었고 부활 방지 가치가 없는 것)
  3. 그다음 재배치: ⭐⭐⭐ 항목을 MEMORY.md 상단으로 이동
  4. 그다음 계층화: 인덱스 라인을 중요도별로 예산 배분 — 핵심 항목 ≤160자, 일반 항목 ≤110자, 롱테일 저빈도 항목은 하나의 라인에 여러 링크로 집계(하위 주제 → [a](f1.md) · [b](f2.md), 한 줄에 5-10개 파일 수용). 또한, 링크 레이블은 type 접두사를 제거한 짧은 이름 사용([foo-bar](feedback_foo_bar.md)), 전체 파일 이름을 반복하지 말고, 줄당 12-45자 절약
  5. 마지막으로 단일 description의 정보량 압축

역사적 함정 사례(참고용, 규칙의 일부가 아님)

  • 단일 파일 과부하: 한 reference 파일이 130+ 줄까지 커져 7-8개의 독립 하위 주제(인프라, cron 목록, 장애 수첩 등)를 포함하게 되었고, MEMORY.md 인덱스 설명이 부정확하여 Claude가 특정 하위 주제를 적중하지 못함. 5개의 독립 memory로 분할 후 각 주제 정확히 적중.
  • 단일 그룹 과부하: 특정 그룹에 20개 이상의 엔트리가 누적되어 새 세션에서 Claude가 인덱스를 훑을 때 누락이 발생, 작업 처리 시 바퀴를 재발명. 허브 memory를 구축하여 관련 진입점 집계 -> 해결.
  • 인덱스 수준 전체 과부하: MEMORY.md가 43KB 바이트(≈31K 자, 25K 자 제한 초과)까지 커지고, 93개의 description이 각각 400-900자로, 시작 시 조용히 잘려서 끝부분의 ⭐⭐⭐ 항목이 누락 -> 한 조사에서 설계대로 작동하는 메커니즘을 취약점으로 오판. 교훈: description이 너무 상세하면 인덱스를 터뜨려 오히려 적중률을 해친다.
  • 바이트/자 혼동으로 인한 잘못된 교정: 과부하 관리 시 경고선을 바이트(wc -c) 기준 32KB로 설정했지만, harness는 자 기준으로 실행(한글은 글자당 3바이트) -> 바이트 기준선은 여유가 있다고 착각하게 만들어 인덱스가 다시 잘림. 교훈: harness와 같은 단위를 사용해야 하며, 모니터링은 wc -m을 사용하세요.

워크플로우 모드(Workflow Modes)

모드 1: 후보 평가(여러 후보, 필터링 필요)

트리거 시나리오(여러 후보 -> 모드 1 필터링 필요):

  • 기능 개발 완료 / 긴 디버그 완료 / 검토 완료
  • 남용 방지 처리 완료(여러 판단 포인트 + 교훈 가능)
  • 보안 사고 처리 완료 / 장애 위치 파악 완료
  • 사용자가 "기록해줘"라고 말함(모호함, 특정 함정 미지정)

단일 구체적인 내용은 직접 모드 2로 이동: 사용자가 "오늘 그 wildcard 버그 기록해줘" / "연결 누수 장애 수첩 기록해줘"라고 말함 -> 이미 단일 항목 명확 -> 모드 2, 모드 1 불필요.

단계:

  1. 이번 세션의 주요 노드 검토(사용자 수정, 검토 발견, 예상치 못한 버그, 업계 비교 조회, 단일 결정의 명확하지 않은 결론)
  2. 하나씩 규칙 2 의사 결정 트리 적용, 기록할 가치가 있는 것 필터링
  3. 각 후보에 대해 판단:
    • 이미 해당 내용을 다루는 memory 파일이 있는가?(MEMORY.md 인덱스 grep) -> 있으면 모드 3 업데이트, 없으면 모드 2 새로 생성
    • 추가할 내용이 규칙 6 분할 트리거 선을 초과하는가? -> 새 파일로 분할
    • memory가 아닌 CLAUDE.md에 들어가야 하는가?(아래 표 참조)
  4. 사용자와 목록 확인: "추가 제안 / 업데이트 제안 / 분할 제안" 후보를 나열하고 사용자 확인 후 작성

memory vs CLAUDE.md 경계:

내용 성격위치
구체적인 함정 경험(SDK 버그, 플랫폼 제한, 업계 데이터)memory feedback_*
주제 심층 참고 / 표준 방법 / 프로세스 문서memory reference_*
상태적 사실(진행 중인 작업, 임시 설정, 현재 아키텍처 스냅샷)memory project_*
매 세션마다 지켜야 하는 규칙(명령어, 기술 스택, 협업 선호도)CLAUDE.md
특정 파일 작업 시에만 필요한 규칙.claude/rules/*.md + paths frontmatter

모드 2: 새 memory 생성(표준 절차)

단계 0: 먼저 근접성 유발 4단계 라우팅 확인(규칙 2)

작성 전에 정말 memory에 들어가야 하는지 확인: 단일 파일에 집중 -> 인라인 주석; 파일 그룹의 계약 -> .claude/rules+paths; 시나리오/파일 간/플랫폼 함정 -> 그래야만 memory로 이동. 파일에 바인딩된 feedback은 기본적으로 SPLIT(핵심은 주석, memory는 파일 간 원칙 + 포인터만). 자세한 내용은 규칙 2 참조.

단계 1: type 결정

Type사용 시기필수 포함 정보
feedback배운 함정(SDK 버그 / 플랫폼 제한 / 사용자 선호도)이유(이 결론이 나온 이유) + 재사용 시기(트리거 시나리오)
reference주제 심층 참고 / 표준 방법 / 업계 비교 / 재사용 가능한 파이프라인이유 섹션 불필요(설명적)
project상태적 사실(아키텍처 스냅샷, 진행 중인 작업, 경제학 분석)이유 섹션 불필요(상태적)

feedback 필수 포함 정보의 표현 형식(다음 중 하나):

  • 별도 섹션: ## Why 또는 동의어 한글 ## 근본 원인 / ## 원인 / ## 교훈 / ## 이유(감사에서 모두 허용)
  • 굵은 글씨 인라인: **Why**: / **근본 원인**: (짧은 결론도 가능)
  • description 또는 ## 제목에 인라인(결론 자체가 이미 이유와 재사용 시기를 함축한 경우, 예: ❌/✅ 비교 표)

재사용 시기 정보: 별도의 ## How to apply 섹션이거나, description에 시나리오 키워드 포함(예: tab 전환 / mutation이 이미 트리거 시나리오를 암시).

단계 2: 파일 이름 지정

<type>_<topic>[_<modifier>].md 모두 소문자, 밑줄 사용:

  • ✅ feedback_supabase_from_deadlock.md
  • ✅ reference_supabase_egress_favorites_refactor.md
  • ❌ feedback-supabase-deadlock.md(하이픈 사용)
  • ❌ FeedbackSupabaseDeadlock.md(카멜 케이스)
  • ❌ _schema.md(밑줄로 시작하면 숨김 파일로 간주되며, Claude가 능동적으로 읽지 않음)

단계 3: frontmatter 작성

---
name: kebab-case-slug
description: 시나리오 키워드 + 핵심 결론
type: feedback | reference | project       # 평평하게(권장)
# 또는:
# metadata:
#   type: feedback | reference | project   # 중첩(호환 가능)
---

type 필드 위치: type: 평평하게(권장) 또는 metadata.type: 중첩 모두 허용. 감사 스크립트는 둘 다 인식. 새 파일 생성 시 평평한 방식을 우선 사용하며, 기존 대부분과 일관성을 유지합니다.

description 스타일 판단:

✅ 좋은 description❌ 나쁜 description
브라우저에서 supabase.from() mutation이 탭 전환 후 교착 상태 발생, 반드시 fetch()로 REST API 호출Supabase 관련 문제
CF Image Transformations 실패 7일 캐시 / cf-resized err= / FavoriteCard retry 패턴이미지가 가끔 표시되지 않음
RLS 정책은 반드시 (SELECT auth.uid())로 래핑해야 함, 그렇지 않으면 각 행마다 반복 평가RLS 성능 최적화

판단 기준: Claude가 description을 읽을 때 "이것은 X 시나리오에서 확인해야 할 Y 결론이다"를 즉시 알 수 있는가?

단계 4: 본문 작성

feedback 클래스(필수: 이유 + 재사용 시기 포함) :

# 제목(무엇(What) — 한 문장)

[핵심 결론 + 1-2단락 배경]

## Why(또는 동의어: ## 근본 원인 / ## 원인 / ## 교훈 / ## 이유)

[왜 이 결론이 나왔는가 — 겪은 구체적인 함정, 검토 발견, 사용자 선호도]
**이유가 반드시 필요한 이유**: 이유 섹션이 없으면, 다음에 같은 결정을 재논의할 때 종종 같은 잘못된 결론에 도달하게 됩니다.

## How to apply(description에 이미 시나리오 키워드가 포함된 경우 생략 가능)

[이 결론을 재사용할 시기 — 트리거 시나리오, 체크리스트, 함정 회피 단계]

reference / project 클래스: 섹션 구조 강제 없음, 주제에 따라 자연스럽게 구성.

단계 5: MEMORY.md 인덱스에 추가

  • 기존 큰 그룹 선택, 새 그룹 생성 금지
  • description을 그룹 내 해당 위치에 추가(높은 중요도는 ⭐⭐ / ⭐⭐⭐ 굵게 표시)
  • 주제 간: description 끝에 (다른 파일 보기 [[other-file]]) 추가

모드 3: 기존 memory 업데이트(새로 생성보다 우선)

단계 1: grep으로 기존 주제 소속 확인

grep -l "<키워드>" memory/*.md

단계 2: 업데이트 방식 결정

상황업데이트 방법
새 데이터 / 새 사례로 기존 결론 보강본문에 단락 또는 변경 로그 섹션 추가
기존 결론이 반박됨기존 파일 상단에 ⚠️ Superseded by [[new-file-slug]] 추가, 새 파일 본문에 "[[old]]의 어떤 부분을 대체" 작성
description 설명이 불충분한 경우MEMORY.md 인덱스만 수정, 파일 자체는 수정하지 않음(내용 추가 시 함께 수정)

단계 3: MEMORY.md 동기화

description을 변경했다면 MEMORY.md의 해당 라인도 변경해야 합니다.


모드 4: 구조적 변경(스키마 변경 / 새 type 추가 / 그룹 변경)

반드시 읽어야 할 이미 겪은 함정 목록:

  • if: "Write(memory/*.md)" glob 문법을 hook에 사용하지 마세요 — if:는 permission rule이지 file glob이 아니며, 유효하지 않음이 확인됨
  • exit 2를 사용하여 hook을 차단하지 마세요 — pre-deploy batch 흐름을 망가뜨리는 것으로 확인됨(Claude에 자동 재시도 메커니즘 없음)
  • 스키마 권위 소스를 _schema.md와 같은 밑줄로 시작하는 파일에 두지 마세요 — Claude가 topic file을 능동적으로 읽지 않음
  • 프로젝트 .claude/settings.json에 hook을 구성하지 마세요 — 해당 디렉토리는 일반적으로 .gitignore에 있어 git에 포함되지 않고 worktree 간 공유되지 않음
  • 새 필수 필드 추가 시 3곳 동기화: (a) 본 skill 섹션 "모드 2 → 단계 3" (b) MEMORY.md 상단 빠른 참조 핵심 섹션 (c) audit-memory.sh 스크립트 필드 목록
  • hook 수정 / 제약 조건 추가 전에 먼저 bash scripts/audit-memory.sh를 실행하여 현재 규정 준수율 확인 — <95%인 경우에만 하드 조치 필요, ≥95%는 소프트 경고 유지
  • MEMORY.md 크기 모니터링은 반드시 자(wc -m) 기준이어야 하며 바이트(wc -c) 기준이 아님 — 네이티브 상한 200줄/25K 자는 자 기준; 한글은 글자당 3바이트이므로 바이트로 교정하면 조용히 잘림 발생(규칙 6 역사적 사례 참조)

스키마 변경 절차:

  1. audit 실행하여 현재 기준선 확보
  2. 변경 설계(본 skill + 프로젝트 허브 수정)
  3. 기존 memory가 새 규칙을 대량으로 위반하는지 확인(>10% → 일시 중지, 먼저 새 규칙으로 마이그레이션)
  4. MEMORY.md 핵심 섹션 업데이트 동기화
  5. audit 스크립트 필드 목록 수정
  6. audit 재실행하여 새 규정 준수율 확인

모드 5: 제로 메모리 부트스트랩(새 프로젝트)

사용자가 memory 시스템이 없는 프로젝트에서 "기억 구축 시작"이라고 말할 때:

단계 1: auto memory 디렉토리 경로 확인

Claude Code가 자동으로 ~/.claude/projects/<project-slug>/memory/를 생성합니다. 여기서 <project-slug> = 프로젝트 절대 경로에서 /를 -로 대체한 값입니다. 예:

  • 프로젝트 /Users/alice/Project/myapp → slug -Users-alice-Project-myapp

Claude Code가 해당 프로젝트에 대해 이미 auto memory를 생성했다면 디렉토리가 존재합니다. 확인: ls ~/.claude/projects/ | grep <프로젝트명>.

단계 2: MEMORY.md 인덱스 생성

상단 템플릿(~25줄로 압축 가능):

# <프로젝트명> 프로젝트 기억

## ⭐⭐⭐ memory 작성 빠른 참조(하드 규칙)
- 파일 이름:`<type>_<topic>.md` 모두 소문자, 밑줄; type ∈ {feedback, reference, project}
- 필수 frontmatter: name / description / type
- feedback은 반드시 ## Why 섹션 포함(또는 동의어 한글 ## 근본 원인 / ## 교훈 / ## 원인)
- description 스타일: 시나리오 키워드 + 핵심 결론(한 줄 ≤160자)
- 동일 주제 기존 파일 있으면 → 업데이트, 새로 생성 금지(규칙 6 임계값 초과 시 분할)
- 본 인덱스 하드 상한: 처음 200줄 또는 25K 자(먼저 도달하는 쪽), 초과분은 조용히 로드되지 않음
- 자세한 방법: memory-management skill

## ⭐ 프로젝트 주제 목록
(없음 — 이후 주제별로 그룹 추가)

단계 3: 그룹 진화 임계값(파일 수에 따라 구조 결정)

memory 파일 수권장 구조
< 15개플랫 리스트, 그룹화 없음(단일 목록으로 충분, 그룹화는 오히려 파편화)
15-25개3-5개의 큰 그룹 도입(주제별 집계)
> 25개그룹화 성숙, 그룹 동결하여 새 그룹 생성 금지, 새 항목은 기존 그룹에 연결(주제 간은 (다른 파일 보기 X))

단계 4: CLAUDE.md 상단에 Memory 프로토콜 추가(3-5줄)

## Memory 관리
memory 쓰기 / 업데이트 / 스키마 조정 관련 → `memory-management` skill을 사용하세요.
- 빠른 참조 규칙: MEMORY.md 상단 ⭐⭐⭐ 섹션
- 점검 규정 준수율: `bash scripts/audit-memory.sh`(선택 사항, skill templates/ 참조)

단계 5: 본 skill의 일반 방법 재사용

skill 내용을 프로젝트에 복사하지 마세요. Skill은 사용자 수준에 있으며, 모든 프로젝트가 한 세트의 방법을 공유합니다. 프로젝트에는 프로젝트별 상태(그룹 목록 / 할 일 / 프로젝트 특정 함정)만 넣으세요.


스키마 규격(Schema Specification, 권위 소스)

파일 이름

<type>_<topic>[_<modifier>].md 모두 소문자, 밑줄, type ∈ {feedback, reference, project}

필수 frontmatter

---
name: kebab-case-slug
description: 시나리오 키워드 + 핵심 결론
type: feedback | reference | project       # 평평하게(권장)
# 또는:
# metadata:
#   type: feedback | reference | project   # 중첩(호환)
---

audit 스크립트는 둘 다 인식합니다. 새 파일 생성 시 평평한 방식을 우선 사용합니다.

feedback 필수 포함 정보

이유 섹션(다음 중 하나):

  • ## Why 또는 동의어 한글 제목 ## 근본 원인 / ## 교훈 / ## 원인 / ## 이유 / ## Root cause(영문 : 또는 한글 : 가능)
  • 굵은 글씨 인라인 **Why**: / **근본 원인**: 등

재사용 시기(다음 중 하나):

  • 별도 ## How to apply 섹션
  • description에 시나리오 키워드 포함(트리거 시나리오를 암시하면 충분)

description 스타일

혼합(시나리오 키워드 + 핵심 결론), Claude가 description으로 "X 시나리오에서 Y 결론 확인"을 적중할 수 있도록 합니다. 한 줄 ≤ ~160자 — 세부 사항은 topic file 또는 코드 주석으로 이동(인덱스 하드 상한 = 200줄/25,000 자 중 먼저 도달하는 쪽, 초과분은 조용히 로드되지 않음)

인덱스 라인 형식

- [짧은 레이블](전체파일명.md) — hook. 짧은 레이블 = type 접두사를 제거한 하이픈 이름(예: [supabase-from-deadlock](feedback_supabase_from_deadlock.md)); 롱테일 저빈도 항목은 집계 라인 사용(하위 주제 → [a](f1.md) · [b](f2.md))

그룹 동결

기존 큰 그룹에서 선택, 새 그룹 생성 금지. 소속이 모호한 경우 (다른 파일 보기 hub-X)로 교차 참조.


일반적인 실수(Common Mistakes)

틀림맞음
인상으로 description 작성 "Supabase 문제"시나리오 키워드 + 결론 작성 "supabase.from() 탭 전환 교착 상태, fetch 사용"
feedback에 "무엇인지"만 씀feedback은 반드시 ## Why 포함, 미래에 재검증 방지
동일 주제로 두 번째 파일 생성기존 파일 우선 업데이트, 새로 생성 시 파편화 발생
"네트워크 문제" 그룹을 새로 만들어 1개 entry 배치기존 그룹 사용, 주제 간은 (다른 파일 보기 X) 사용
스키마 규칙을 memory 파일에 작성스키마는 본 skill에, memory는 사실을 담음
hook exit 2로 강제 차단소프트 경고(stderr + exit 0) 또는 audit 사후 점검 사용

자체 점검(Self-Check, 작성 후)

  • type이 올바른가(feedback/reference/project)?
  • 파일 이름이 <type>_<topic>.md 모두 소문자, 밑줄 형식을 따르는가?
  • frontmatter 3개 필드가 모두 있는가(name / description / type)?
  • feedback 클래스에 이유 섹션(## Why 또는 동의어 한글 / 굵은 글씨 인라인)이 있는가?
  • description에 시나리오 키워드 + 핵심 결론이 포함되었는가?
  • MEMORY.md 인덱스의 올바른 큰 그룹 아래에 추가되었는가?
  • 새 그룹을 생성하지 않았는가?(생성했다면, 기존 그룹으로 되돌리기)
  • 주제 간 (다른 파일 보기 X) 알림을 추가했는가?
  • 규칙 6 확인: 새 파일 < 100줄 + < 5개 H2 섹션?(기존 파일을 업데이트하여 임계값을 초과하게 만든 경우, 새 파일로 분할로 변경)
  • 근접성 유발 확인(규칙 2): 이 항목이 특정 파일에 바인딩되어 있는가? 그렇다면, 파일 로컬 WHY가 이미/또는 코드 주석에 있어야 하며, memory에는 파일 간 원칙만 남겨야 하는가?
  • 인덱스 수준 확인: description 추가/변경 후 MEMORY.md가 여전히 < 23,000자(wc -m, 바이트 아님!)이고 < 190줄이며, 각 줄이 ≤ ~160자인가?
  • 트리거력 점검: 미래에 질문할 가능성이 있는 3가지 시나리오 키워드를 나열하고, 시뮬레이션으로 "Claude가 description을 보고 이 memory를 읽을까?"라고 물어보기(시나리오를 상상할 수 없다면 description이不合格).

도구 통합(Tool Integration)

audit 스크립트는 선택 사항인 프로젝트 도구입니다.

프로젝트 루트에 scripts/audit-memory.sh 있음 → 실행:

bash scripts/audit-memory.sh  # 규정 준수율 확인 / 위반 항목 나열 / 30일간 미접근 항목 나열

출력: 총 파일 수 / frontmatter 누락 / Why 누락 / MEMORY.md 끊긴 링크 / 30일간 미접근 / MEMORY.md 크기(자+줄, 네이티브 200줄/25K 자 상한 대비) / 규정 준수율%. 목표 규정 준수율 ≥ 95%.

audit 스크립트 없음 → 템플릿에서 직접 생성:

# 사용자 수준 skill에 포함된 일반 템플릿
cp ~/.claude/skills/memory-management/templates/audit-memory.template.sh \
   <프로젝트>/scripts/audit-memory.sh
# MEMORY_DIR을 프로젝트의 auto memory 디렉토리로 변경
chmod +x <프로젝트>/scripts/audit-memory.sh
bash <프로젝트>/scripts/audit-memory.sh

기본 auto memory 경로 참조: ~/.claude/projects/<project-slug>/memory/, 모드 5 단계 1 참조.

관련 스킬