Karpathy의 “LLM Knowledge Bases” 아이디어를 하네스 시스템으로 구현한 전과정. 4번의 커밋, 2,214줄 Python 코드, 커버리지 100%.
트윗 한 편이 구체적인 CLI 도구로 변환되는 데 필요한 것 — 제대로 된 하네스.
src/lkb/(11) + tests/(5) + .claude/(5) + wiki/(5) + samplesLKB_BACKEND 환경변수로 강제 선택. llm.py 래퍼가 두 백엔드를 투명하게 라우팅.
src/lkb/llm.py · 135줄 추가src/lkb/output.py · +60 -15 lineslint.py +143 · websearch.py +111 · ask.py/output.py/cli.py 확장2,214줄 코드 + 23개 테스트가 3시간 만에 나온 이유. 하네스가 자동 처리한 항목:
.claude/CLAUDE.md에 빌드 명령어, 아키텍처, 기술 스택 표 생성.src/lkb/ 구조 설계 → 구현 위임. CLI·SDK·컴파일·검색·출력·lint·웹UI 각 specialist에 분배.| 모듈 | 줄 수 | 역할 |
|---|---|---|
cli.py | 155 | Click 기반 엔트리포인트. 7개 서브커맨드 (ingest/compile/ask/search/output/lint/web) |
compile.py | 327 | raw/ → wiki/ 증분 컴파일. mtime 기반 state, 백링크 자동 생성 |
output.py | 323 | Marp 슬라이드, matplotlib 차트, 마크다운 리포트 + --file 양방향 filing |
llm.py | 281 | 듀얼 백엔드 (Claude Code CLI + Anthropic SDK) + 토큰 추적 + 재시도 |
lint.py | 359 | 정적 분석(깨진 링크) + --deep LLM 의미분석 (누락 topic, 불일치 탐지) |
ingest.py | 174 | 파일/URL 문서 수집. 이미지 자동 다운로드, 웹 클리퍼 호환 |
web.py | 195 | Flask 다크 모드 웹 UI — 브라우징 + 검색 |
search.py | 124 | TF-IDF 전문 검색 (CLI + 웹 UI 공용) |
websearch.py | 111 | Tavily + Claude Code 폴백. lint에서 missing topic URL 제안 |
ask.py | 85 | Q&A + 3개 후속 질문 자동 생성 |
config.py | 77 | 환경변수/경로 관리 |
| Karpathy 언급 | 구현 | 증거 |
|---|---|---|
| raw → compile → wiki | PASS | compile.py 증분 컴파일 |
| 인덱스/요약 자동 생성 | PASS | _index.md, _summaries.md |
| 백링크 (Obsidian 호환) | PASS | [[...]] 문법 |
| Q&A | PASS | ask.py |
| Further questions 제안 | PASS | ask 응답에 "추가로 탐구할 만한 질문" 3개 |
| Marp 슬라이드 | PASS | output slides |
| matplotlib 차트 | PASS | output chart |
| 마크다운 리포트 | PASS | output report |
| Output → Wiki filing | PASS | --file → wiki/outputs/ |
| Lint (깨진 링크) | PASS | lint.py 정적 분석 |
| LLM 기반 deep lint | PASS | lint --deep: 4개 missing article 탐지 |
| Web 검색 missing data 보완 | PASS | websearch.py Tavily+Claude 폴백 |
| 전문 검색 CLI | PASS | search.py |
| 웹 UI | PASS | web.py Flask |
| CLI as LLM tool | PASS | subprocess 예시 README 명시 |
| Obsidian Web Clipper | PASS | README 통합 가이드 |
| 듀얼 LLM 백엔드 | PASS | Claude Code + SDK |
| 증분 컴파일 | PASS | mtime state 기반 |
굵은 글씨 6개는 v0.2에서 self-improve가 재분석으로 추가한 기능. v0.1에서 누락됐던 항목들.
트윗 한 편 읽고 “음, 흥미로운데” 하고 지나침. 구현하더라도 compile.py까지만 만들고 lint, 듀얼 백엔드, filing 기능은 모두 누락. 원글을 다시 읽어볼 동기가 없음.
3시간 만에 11모듈 2,214줄. self-improve가 "완성 선언"을 의심하고 원글을 재검증하여 4개 누락 기능 자동 발견. 커버리지 100% 달성까지 자동 추적.
v0.1 “완성”을 의심하지 않았다면 lint --deep, output --file, websearch, further questions 4개 기능은 영원히 누락됐을 것. 하네스의 self-improve Phase가 “원글 다시 읽어봐라” 규칙을 강제 실행한 결과가 08a1a19 커밋.
프로젝트: llm-knowledge-base · 2026-04-05
Inspired by @karpathy's LLM Knowledge Bases