| name | create-memo |
| description | 새 메모 파일을 src/content/memo/에 생성합니다. Use when the user wants to create a new memo — triggers on phrases like "메모 생성", "새 메모", "메모 만들어줘", "메모 추가해줘", "이거 메모로 남겨줘". |
메모 생성
다음 ID로 새 메모 파일을 생성합니다.
실행 방법
scripts/create-memo.mjs를 실행하여 빈 메모를 생성. 첫 인자로 type(형태)을 넘긴다:
node scripts/create-memo.mjs bookmarks
node scripts/create-memo.mjs snippet
node scripts/create-memo.mjs note
스크립트는 다음을 자동으로 처리:
src/content/memo/ 내 가장 큰 숫자 ID + 1
ctime, mtime을 오늘 날짜로 설정
- 빈
tags: []
status: bookmarks는 archive, 나머지는 draft (Status 기준은 docs/memo-spec.md 참고)
type과 본문 형태가 어긋나면 빌드가 잡는다 (pnpm lint:memo).
작업 순서
- 사용자 의도 파악: 메모 주제/내용/태그를 사용자가 함께 제공했는지 확인
- 스크립트 실행:
node scripts/create-memo.mjs <type> 실행 → 생성된 파일명 확인
- 내용 작성 (사용자가 주제/내용을 제공한 경우):
- 적절한 태그 추가 (kebab-case)
- CLAUDE.md의 메모 유형(A~F) 중 적합한 템플릿 선택
- 본문 작성
- 압축 확인 (필수): 아래 "압축 확인" 절차 수행
- 중복 확인: 유사 태그/주제 기존 메모가 있으면 사용자에게 알리고 통합 여부 확인
- 관계 탐지 (계보 연결): 아래 "관계 자동화" 절차 수행
압축 확인 (필수)
외부 문서를 요약해 넣으면 원문의 살이 따라 들어온다. 압축 원칙은 CLAUDE.md "압축" 참고. 문체는 기준이 아니다 — 걸러야 할 것은 원천 없이 만들어진 값이다.
작성 직후 스스로 점검한다:
- 출처 — 본문의 사실이 어디서 왔는가? 원천을 못 대는 값은 지어낸 것이다. 인용이면
>·QuoteLink로 표시한다.
- 1인칭 — "제가 만든", "저희 팀은" 같은 표현은 원문 저자의 1인칭이 따라 들어온 것이다 (268.md가 그랬다).
- 반복 — 같은 내용이 두 단락에 있으면 기계 요약의 흔적이다 (272.md).
- 각주 — 각주도 압축 대상이다. 링크 제목에 이미 있는 내용을 늘려 쓰지 않는다 (83.md는 각주 하나가 5문장이었다).
검사 명령:
pnpm lint:memo
[!IMPORTANT]
압축하면 형태가 바뀔 수 있다. 부풀린 산문을 걷어내면 남는 게 링크뿐일 수 있고, 그러면 type도 함께 고친다 (pnpm lint:memo가 잡아준다).
관계 자동화 (parent / relation)
새 메모가 기존 메모를 이어가거나 대체하면 frontmatter에 parent(+relation)를 추가한다. 계보 스펙은 docs/memo-spec.md "메모 연결" 참고.
절차
-
후보 탐색: 두 신호로 찾는다 — 공유 태그(IDF 가중)와 공유 URL.
node scripts/find-related.mjs 578
node scripts/find-related.mjs tag1,tag2
본문에 링크를 이미 붙여놨다면 메모 ID로 호출한다. 같은 URL을 가리키는 메모가 공유 URL n으로 표시되고, 어떤 URL이 겹치는지 ↳로 나온다.
URL 겹침이 태그보다 강한 증거다. 같은 글을 가리키는 메모쌍 29개 중 14쌍은 공유 태그가 0개라 태그만으로는 영원히 만나지 못한다.
후보는 기본적으로 release만 나온다. --all을 붙이면 비공개까지 보이는데, 그건 계보가 아니라 통합 후보다 (consolidate-memos 스킬).
-
관계 판단: 상위 후보의 내용을 읽고 새 메모와의 관계를 판단한다.
| 판단 | 설정 |
|---|
| 단순히 비슷함 (주제만 겹침) | 연결 안 함 — 자동 관련 메모가 이미 처리 |
| 후보의 후속/심화/이어지는 생각 | parent: '후보ID' (relation 생략 = continues) |
| 후보의 내용을 갱신/교체/대체 | parent: '후보ID', relation: supersedes |
-
사용자 확인 후 적용: 단정하지 말고 "이 메모는 #N을 이어가는/대체하는 것으로 보입니다. 연결할까요?"로 제안한 뒤 frontmatter에 추가한다.
주의
parent는 하나만 건다 (가장 직접적인 부모). 곁가지(branch)는 같은 부모를 공유하면 자동 도출되므로 명시 불필요.
- 애매하면 연결하지 않는다. 약한 연결은 노이즈. 자동 관련 메모로 충분.
parent는 release 메모만 해석됨 — draft·archive를 부모로 걸지 않는다.
- URL이 겹치는데 계보가 아닌 경우도 있다. 넓은 링크 모음이 특정 주제 메모와 한 링크를 공유하는 정도면 연결하지 않는다 (106↔365가 그런 경우). 같은 흐름의 작업 기록이어야
parent다 (229↔235).
메모 작성 원칙 (CLAUDE.md 준수)
- 한 문장으로 요약 가능한가?
- 코드가 핵심이면 코드만
- 헤딩은 정말 필요할 때만
- 서론/결론 구조 지양
- 남의 문장을 그대로 옮긴 것은 메모가 아니다 (→ "압축 확인")
- 원천 없는 값을 지어내지 않는다 — 모르면 질문으로 남긴다
주의사항
- 주제가 명확하지 않으면 빈 파일만 생성하고 사용자에게 작성을 위임
status: 작성 중이면 draft, 저장만 해두면 archive, 완성되면 release. bookmarks는 draft를 쓰지 않는다 (링크는 붙여넣은 순간이 최종형) — 기준은 docs/memo-spec.md "Status 기준" 참고
- 태그가 애매하면
[]로 두는 것도 허용