전에 소개한 적 있는 Obsidian 플러그인을 요즘 제일 공들여서 만들고 있다. Andrej Karpathy가 제안한 아이디어인 “LLM Wiki” — 내가 원본 자료를 vault에 던져두면 LLM이 알아서 읽고 위키 문서로 정리해나가는 방식 — 를 Obsidian 위에서 직접 구현해보는 프로젝트다.
이걸 만들면서 나눈 대화를 처음부터 끝까지 그대로 기록해뒀다. “Obsidian 플러그인이 뭔지도 몰랐던” 첫 질문부터, 지금의 자율 Ingest 엔진(원본을 스스로 읽고 위키 문서로 정리하는 에이전트)까지 오는 데 꽤 많은 삽질과 설계 결정이 있었다. 대화록 하나가 23,000줄이 넘는다. 한 편에 다 담을 수 없어서 여러 편으로 나눠 기록하려고 한다.
왜 굳이 기록을 남기나
이 대화록을 다시 읽어보니, 결과물(지금 돌아가는 플러그인)만 봐서는 안 보이는 게 많았다. 왜 이 구조를 택했는지, 처음 생각이 왜 중간에 뒤집혔는지, 내가 AI의 제안을 그냥 받아쓰지 않고 반박해서 더 나은 설계로 이어진 지점들 — 이런 건 최종 코드에는 흔적도 안 남는다. 삽질을 줄이려고 기록한다는 이 블로그의 원래 취지에 제일 가까운 소재라 생각해서, 있는 그대로 풀어보려고 한다.
참고: “집사”라는 이름에 대해
대화록을 보면 AI 응답 페르소나를 “집사”라고 불러서, 플러그인 자체 이름도 한동안
Gemini Butler로 정했었다. 지금도 저장소 이름은 obsidian-gemini-butler로 남아있는데,
아직 확정된 최종 이름은 아니고 1차로 붙여둔 이름이다. 이 시리즈의 핵심은 “집사” 캐릭터가
아니라 LLM Wiki 구조 쪽이라, 제목에서는 그쪽을 앞세웠다.
목차
- 이미 있는 플러그인 10개를 두고 왜 또 만들었나 — 시작 동기, 기존 AI 채팅 플러그인 10개와 비교하며 차별점을 고민한 과정, “집사”라는 이름이 붙게 된 계기.
- 자정이 지나도 날짜가 안 바뀌던 버그 — LLM은 시계가 없다는 당연한 사실을 실전에서 맞닥뜨린 이야기. 대화 기록에 박제된 “어제 날짜”를 자정 넘어서도 오늘이라고 우기는 걸 어떻게 고쳤는지.
- 동적 뱃지와 dirty check, UX가 엔지니어링을 만날 때 — 매번 노트 전체를 토큰으로 날리는 비효율을 막으려고 설계한 “일회성 소멸 뱃지” UX와, 노트가 실제로 수정됐는지 판단하는 dirty check 알고리즘 이야기.
- 자율 Ingest 엔진으로 진화하기까지 — 단순 채팅 플러그인이 원본 자료를 스스로 읽고 위키 문서로 정리하는 자율 에이전트로 커지는 과정. 안전 구역/보호 구역 구분, 삭제 동기화, 재귀 폴더 스캔까지.