내 세컨드브레인이 스스로 관리되게 만든 방법
second 위키 Claude Code 자동화 구성기 — ingest·scrub·digest·훅이 맞물리는 방식
편 1. 위키 뼈대 — 두 폴더가 전부다
처음엔 raw/와 wiki/ 두 폴더만 만들었습니다. 규칙은 하나였어요: raw는 절대 수정하지 않는다. 원본 대화, 메모, 붙여넣기 — 뭐가 들어오든 raw에는 손대지 않는다. wiki는 LLM이 만들고 유지하는 합성물. “진실의 원천 vs 소화된 결과물” 분리를 처음부터 못 박으니 나중에 헷갈릴 여지가 없었습니다.
골격은 /docs-init 스킬 한 번으로 잡았어요. index.md, log.md, docs/ 타입 폴더까지 프로젝트 내용을 읽고 맞춤 생성해줍니다. 이미 있으면 갱신만 하고 덮어쓰지 않아서 기존 작업이 날아갈 걱정이 없었습니다.
스킬 배치도 여기서 정했어요. 글로벌(~/.claude/skills/) 에는 어느 프로젝트에서든 쓸 것들 — docs-init, digest, query, capture. 프로젝트(.claude/skills/) 에는 이 위키에서만 쓰는 것들. 처음에 이걸 구분 안 하면 나중에 뒤섞여서 정리하기 번거롭습니다.
편 2. 소화 파이프라인 — 네 단계가 한 흐름
ingest → scrub → digest → lint. 이게 raw에서 wiki까지 가는 전체 경로입니다.
ingest-chats가 시작입니다. Claude Code 세션은 ~/.claude/projects/**/*.jsonl에 자동으로 쌓이고, 스크립트가 manifest로 증분만 가져옵니다. 토큰 쓰지 않고, 같은 거 두 번 넣지 않고, 수 초면 끝납니다. 처음에는 이걸 LLM한테 시키려 했는데, 사실 이 단계는 “파일 복사”에 가까워서 결정론적 스크립트가 훨씬 빠르고 안전합니다.
다음이 scrub입니다. API 키, 주민번호, 비밀번호 같은 시크릿을 [REDACTED:유형]으로 치환합니다. 이게 필요한 이유가 처음엔 의아했는데 — obsidian-git이 자동커밋할 때 네이티브 pre-commit 훅을 실행하지 않는다는 걸 발견했습니다. isomorphic-git 구현이라서요. 그러니까 git 훅을 믿으면 안 됩니다. PreToolUse 훅이 실제 방어선입니다.
digest는 raw → wiki 변환입니다. LLM은 새 세션마다 컨텍스트를 잃기 때문에 CLAUDE.md에 소화 기준을 박아뒀고, 커맨드가 그 기준을 그대로 따릅니다. 처음에는 이 규칙을 전부 CLAUDE.md에 넣었는데, 세션마다 digest와 관련 없는 내용까지 컨텍스트에 로드됐어요. 커맨드로 분리하고 나서야 “필요할 때만” 로드되는 구조가 됐습니다.
lint는 마무리 건강검진입니다. 고아 페이지, 모순, 교차참조 누락을 잡아줍니다. 자주 돌리지 않아도 위키가 커지면 결국 필요해집니다.
편 3. 훅으로 완성 — 자동 방어선
설정은 단순합니다.
{
"hooks": {
"PreToolUse": [{
"matcher": "Skill",
"hooks": [{"type": "command", "command": "scripts/hook_digest_guard.sh"}]
}]
}
}
digest 실행 직전에 raw/와 wiki/ 변경분을 스캔합니다. sk-ant-, ghp_, AWS 키, 주민번호 패턴이 고신뢰로 걸리면 exit 2로 거부합니다. 모델이 판단하는 게 아니라 스크립트가 차단하는 거라서 실수가 없습니다.
이 구성에서 한 가지 더 챙긴 게 Remote Control 모드입니다. 모바일에서 claude.ai/code로 접속하면 이 PC의 세션에 붙습니다. 대화가 PC 로컬 jsonl에 쌓이니까 기존 ingest-chats가 그대로 흡수합니다. 어디서 대화하든 위키로 들어오는 경로가 같아집니다.
핵심은 단순합니다. 반복하는 작업을 한 단어 커맨드로 만들기. /ingest-chats, /digest, /scrub — 이름이 명확하면 언제 뭘 불러야 할지 헷갈리지 않습니다. 처음에는 세 단계가 복잡해 보이지만, 세 번째 사용부터는 없으면 불편합니다.
<- 이전 편: 에이전트 컨텍스트 끊김 문제와 위키 통합 · 다음 편 ->: AI가 썼지만 내 이야기 — 세컨드 브레인을 블로그 엔진으로 방법: Claude Code 4가지 제어 표면 정리 · 심화: 스킬이 로직이 되는 순간 · 배경: 세컨드브레인 설계 결정 기록