문제와 배경
TIL은 쌓이지만 지식은 쌓이지 않는 경우가 많다. TIL은 본질적으로 "그날 그 프로젝트에서 생긴 일"의 기록이라 맥락에 강하게 묶여 있다. 한 달 뒤에 다시 읽으면 당시 맥락이 사라져 재사용이 안 된다.
/til-to-knowledge는 이 간극을 메우는 커맨드다. 하루치 TIL을 입력으로 받아, 그 안에서 더 공부할 수 있는 범용 CS/웹 개념을 도출하고, 각 개념을 완결된 학습 문서로 작성해 두 시스템에 기록한다.
동작 방식
- 입력 — Obsidian AgentMemory 볼트의
wiki/todayILearned/{날짜}.md. 날짜를 생략하면 최신 TIL. - 추출 — TIL에서 파생 학습 주제를 도출한다. "오늘 이 버그를 고쳤다"가 아니라 "이 버그의 배후에 있는 일반 원리는 무엇인가"를 묻는다.
- 이중 기록 — 같은 지식을 두 형식으로 변환해 쓴다.
- 볼트
wiki/cs/{domain}/— 한 줄 정의 / 왜 필요한가 / 핵심 개념 / 진단 질문 / 처방 구조의 학습 문서. TIL 노트에 wikilink로 역연결. - 블로그
content/knowledge/{category}/— Zod frontmatter 스키마를 갖춘 공개용 문서. 이 사이트의 Knowledge 섹션이 바로 이 산출물이다.
- 볼트
두 시스템은 형식과 분류 체계가 다르기 때문에 복사가 아니라 변환이다. 볼트 문서에는 frontmatter가 없고, 블로그 문서에는 디렉터리 category === frontmatter category 불변식이 있다.
가장 중요한 규칙: 기밀 제거
TIL에는 회사 프로젝트의 이름, 경로, 수치가 그대로 들어 있다. 이 커맨드의 출력물은 공개를 전제로 하므로, TIL은 개념 추출의 입력으로만 쓰고 결과물은 교과서적·범용적으로 다시 쓴다. 결과물만 보고는 어느 회사, 어느 프로젝트인지 알 수 없어야 한다. 프로젝트 일화와 수치는 인용하지 않고, 필요하면 익명의 일반 예시로 치환한다.
또 하나의 규칙은 stub 금지다. "나중에 채울 TODO 문서"는 만들지 않는다. 빈 껍데기 문서는 지식 그래프에서 깨진 약속이 되고, 결국 아무도 채우지 않는다.
파이프라인에서의 위치
/agent-memory-log가 쌓은 세션 기록과 일일 TIL이 이 커맨드의 입력이고, 여기서 만들어진 knowledge 문서들이 블로그 글의 근거가 된다. [기록 → 지식 → 글]에서 가운데 단계, 즉 맥락 의존적 기록을 맥락 독립적 지식으로 승격하는 단계다.
배운 점
지식 관리의 병목은 수집이 아니라 변환이다. 기록은 쌓이는데 지식이 안 쌓인다면, 기록을 범용 개념으로 다시 쓰는 단계가 없기 때문이다. 그 변환을 사람이 매번 손으로 하면 지속이 안 되므로, 규칙(기밀 제거·stub 금지·분류 불변식)을 커맨드에 박아 자동화했다.