Karpathy의 “LLM Wiki” 아이디어를 Obsidian 안에 구현한 플러그인이다.[1][2]
사용자의 노트와 선택한 문서를 LLM으로 entity/concept 페이지로 추출하고,
[[wiki-link]]그래프를 이용한 질의·유지보수 표면을 제공한다.[1][2]이 문서는 Community listing의 제품 설명과 고정 commit의 TypeScript 구현을 분리해 기록한다.[1][2]
소스 범위와 현재성
- 사용자가 지정한 canonical source는 Obsidian Community의 Karpathy LLM Wiki listing이다.[1] 캡처 시점인 2026-08-30에 listing은 current version
1.27.0,82 releases,40k downloads, Obsidian1.11.4+, Desktop/Mobile, Apache-2.0을 표시했다.[1] 이 숫자와 Marketplace의Health Excellent / Review Passed표시는 시점 의존적인 listing metadata이지, 독립적인 보안 감사나 지속적인 사용량 보증은 아니다.[1] - 연결된 공식 저장소는 green-dalii/obsidian-llm-wiki이며, 이 페이지의 구현 조사는
main@e054012d26d3e851dbabbf558bb3663aa6e44120에 고정했다.[3] pinnedmanifest.json도 version1.27.0과 minimum Obsidian1.11.4를 선언한다.[3] - raw에는 Marketplace 추출본 전체와 저장소의 선택 파일 18개만 보존했다. 저장소 capture는 전체 mirror가 아니며, README·manifest·build metadata·PPR·문서 변환·candidate gate·query pipeline·wiki engine·SecretStorage 구현을 대표 범위로 삼았다.
한 줄 판단
이 플러그인은 RAG/vector DB를 별도 운영하는 제품이라기보다, Obsidian vault를 LLM이 유지하는 Markdown knowledge base로 바꾸는 파일 우선 구현이다.[1][2]
강점은 Obsidian의 native graph와 여러 provider를 한 UX에 묶은 점이고, 핵심 trade-off는 “local-first”가 provider 선택에 따라 실제 데이터 경로가 달라진다는 점이다.[1][2][9]
무엇을 하는가
- Ingest. 단일 note, folder, 여러 파일을 선택해 entity/concept/source 페이지와 aliases, links, source attribution을 생성한다.[1] Community listing은 Markdown·PDF·image·Office 입력 경로를 설명하며, 원본 vault note는 수정하지 않고
wiki/아래에 결과를 만든다고 주장한다.[1] - Query. Query Wiki가 오른쪽 side panel에서 vault의 wiki context를 이용해 답하고, 답변에 다시
[[wiki-link]]를 붙이는 흐름을 제공한다.[1] 이 기능은 인터넷 검색 대체재가 아니라 사용자가 이미 보존한 vault 지식에 대한 질의면으로 설명되어 있다.[1] - Maintain. Lint가 duplicate, dead link, empty page, orphan, missing alias, contradiction을 검사하고 Smart Fix All이 alias 보강→duplicate merge→dead-link 수정→orphan linking→empty-page 확장의 순서로 수리한다.[1] Auto-maintenance와 수정 범위는 사용자 설정과 승인에 의존한다.[1]
- Protect. pre-ingest gate는 empty/whitespace/frontmatter-only source를 LLM 호출 전에 거르고, content-hash dedup으로 다른 경로의 동일 파일을 건너뛴다.[1]
reviewed: true페이지는 overwrite 보호 대상으로 문서화되어 있다.[1]
검색 구조: embedding 대신 graph retrieval
-
Community README는 검색을
[[wiki-link]]graph 위의 PPR + Monte Carlo로 설명한다.[2] 저장소의 Monte Carlo 구현은 seed에서 시작해 각 walk에서 damping 확률로 seed에 teleport하고, 아니면 outgoing edge를 따라가며 방문 횟수를 확률로 정규화한다.[5] -
고정 소스의 기본값은
3,000walks ×50steps이며, random-walk 비용을O(K × L)로 두고 graph 크기와 분리하는 설계다.[2][5]Marketplace의
PPR @5 = 27.1%대 pure-kNN24.1%는 프로젝트 자체 corpus에 대한 source-reported benchmark이며, 이 조사에서 재현하지 않았다.[1][2] -
PPR cascade는 graph가 있어도 임의의
pages index 0을 seed로 삼지 않고, LLM explicit seed 또는 query와 lexical match된 seed처럼 query-relevant한 출발점만 사용한다.[6] query-relevant seed가 없으면 빈 결과를 반환해 무관한 graph noise를 피하도록 되어 있다.[6]
5-stage seed-selection cascade
Community 설명은 다음 순서를 제시한다.[1][2]
- Lex fast path: title과 aliases의 token overlap.[1][2]
- LLM keyword generation: 자연어 query에서 cross-language keyword 후보 생성.[1][2]
- Local substring scan: 생성된 keyword를 title·alias·body snippet에 다시 대조.[1][2]
- LLM knowledge-base fallback: lexical/keyword signal이 약할 때 semantic seed selection.[1][2]
- PPR graph expansion: 선택된 seed에서 wiki-link graph를 다중 hop 확장.[1][2]
문서와 구현 주석 사이에는 keyword 개수의 작은 불일치가 있다.[2][11]
README/Marketplace는 8–12를 말하지만, pinned query-keywords.ts와 관련 테스트는 5–10 후보를 말한다.[2][11][12]
따라서 8–12를 런타임 보장값으로 해석하지 않고, 이 snapshot에서는 문서 drift가 남아 있는 것으로 기록한다.[2][11][12]
문서·PDF·image·Office 경로
- v1.27.0의 내장 MinerU backend는 PDF, PNG/JPG/JPEG/JP2/WebP/GIF/BMP image, DOC/DOCX/PPT/PPTX/XLS/XLSX Office 파일을 Markdown으로 변환하는 선택 경로다.[1] Marketplace가 보고한 server cap은 PDF
200 MB / 200 pages, archive256 MB / 10,000 files다.[1] - 고정 구현은 MinerU URL에 HTTPS를 요구하고 userinfo/password가 들어간 URL과 localhost/loopback 계열 host를 거부한다.[7] 이는 변환 endpoint 입력 검증의 보안 경계이지, 외부 MinerU 서비스가 안전하다는 독립 검증은 아니다.[7]
- native PDF provider 경로와 Force PDF Support도 별도로 존재한다.[1] Office 파일은 Obsidian 자체가 원본 Office format을 inline render하지 않으므로, 실용적인 흐름은 Markdown 변환 후 wiki ingest이며 원본 파일은 reference로 남기는 방식이다.[1]
- PDF conversion cache는 content/model/converter 조합에 묶인 성능 cache다.[1][8] 코드 주석은 기본 TTL을 30일로 설명하고, cache miss/expired/corrupt 상황이 변환 결과의 correctness를 막지 않는 graceful-degradation 경계를 둔다.[8]
- 따라서 이 조사에서 MinerU API 호출, 대형 PDF, OCR 품질, Office layout fidelity는 실행 검증하지 않았다. listing의 cap·품질·“best path” 표현은 제공자 주장으로 남긴다.
후보 품질과 비용 제어
- candidate gate는 LLM extraction이 이름을 뽑았더라도 원문에 실제로 등장하는지 확인해, parenthetical/list/enumeration에만 나온 mention-only 후보를 선택적으로 제거한다.[1][10] 이 gate는 further LLM call을 쓰기 전에 clear case를 처리하도록 설계되어 있다.[10]
skipMentionOnlyCandidates는 default off인 opt-in setting이며, 언어별 profile이 없거나 cross-language 조건이 맞지 않으면 조용히 skip하지 않고 gate를 적용하지 않는 경계를 둔다.[1][10] pinned wiki engine은 이 setting이 켜진 경우에만gateCandidates를 ingest flow에 연결한다.[13]- per-step task policy는 text-mode/thinking 설정을 task 단위로 override하는 Advanced 설정이다.[1] 작은/local model의 schema drift 가능성도 listing이 인정하므로, custom vocabulary는 wire-level schema gate와 동일하지 않다.[1]
파일·쓰기 모델
- source content는 Obsidian vault API로 읽고, 생성된 wiki page가 이미 있으면
vault.modify로 결과를 갱신한다.[13] inspected path는 source document와 generated wiki content를 구분하는 방향이지만, 이 조사만으로 모든 예외 경로가 원본 파일을 절대 수정하지 않는다고 증명한 것은 아니다.[13] - Marketplace가 말하는 “source files are read-only”는 제품 contract로 기록하고,[1] 실제 운영에서는
reviewed: true, backup/Git history, dry-run 또는 isolated vault로 확인하는 것이 안전하다.[1] - 기본 wiki layout은
wiki/sources,wiki/entities,wiki/concepts로 설명된다.[1] 이 구조와 frontmatter/aliases를 이용하므로 Obsidian Graph View·Dataview·Git과 조합할 수 있지만, 각 연동 plugin의 실제 compatibility는 이 조사에서 별도로 실행하지 않았다.[1]
네트워크·privacy·credential 경계
-
제품 listing은 backend/server/analytics가 없고, network는 사용자가 설정한 LLM provider와 통신할 때만 사용한다고 설명한다.[1] 그러나 pinned source에는 Obsidian의
requestUrl을 Vercel AI SDK 계층에 연결하는 bridge가 있으므로, “no backend”는 “no network” 또는 “no external provider”와 같은 뜻이 아니다.[2][9] -
Ollama·LM Studio 같은 local endpoint를 선택하면 note가 기기 밖으로 나가지 않는 local mode를 구성할 수 있다.[1]
반대로 cloud provider 또는 MinerU online backend를 선택하면 선택한 text/document가 해당 외부 서비스로 전송될 수 있으므로 provider·converter 선택이 데이터 경로를 결정한다.[1][7][9]
-
provider credentials는 Obsidian
App.secretStorage의getSecret/setSecretsurface를 사용하는 구현으로 분리되어 있다.[1][14]이 문서에는 실제 API key, OAuth token, password, connection string, credential value를 보존하지 않는다.[1][14]
-
Marketplace의 “Obsidian automated review / Review Passed”는 Community listing 상태로만 기록한다.[1] 이것을 code-level threat model, dependency audit, provider privacy policy 검토 완료로 확대 해석하지 않는다.[1]
Provider·언어·배포 표면
- listing은 Anthropic, OpenAI, Gemini, Bedrock, 여러 OpenAI-compatible provider, Codex OAuth, Ollama/LM Studio 등을 16+ provider family로 제시한다.[1] provider별 native PDF, auth, context window, cost가 다르므로 “works with every provider”는 compatibility claim이지 동일한 기능·보안·비용 보장이 아니다.[1][2]
- UI와 wiki-output language를 독립적으로 고르는 11-language 표면을 제공한다고 문서화되어 있다.[1] query keyword generator는 query의 primary language를 자동 감지하고 그 언어와 English 후보를 만들도록 설계되어 있다.[1][11]
- 사용자는 Community Plugins에서 설치하고 provider를 설정한 뒤 Test Connection과 Ingest single source를 실행하는 흐름이다.[1] 이 문서의 조사 환경에서는 실제 Obsidian desktop/mobile 설치나 provider connection을 수행하지 않았다.
이 볼트에서의 위치
- moc-llm-wiki — Karpathy LLM Wiki 패턴·구현 허브. 이 플러그인은 추상 아이디어를 Obsidian-native workflow로 구체화한 사례다.
- moc-ai-agents-memory — persistent knowledge base와 agent memory 관점의 상위 허브.
- 2026-04-03-karpathy-llm-knowledge-bases — 특정 제품이 아닌 Karpathy의 원본 LLM Wiki 아이디어.
- 2026-04-07-wiki-skills-claude-code-karpathy-wiki — Claude Code 안에서 같은 패턴을 구현한 별도 plugin/workflow.
- 2026-08-02-graphify-labs-graphify — 코드베이스 지식 그래프로 확장된 별도 구현체.
검증 결과와 한계
실제로 확인한 것
- 직접 지정된 Community page를 추출하고, credential-like image query value 1건은
[REDACTED]처리했다. 원본 extracted page의 byte 수와 SHA-256은 capture metadata에만 남겼고, 위키 본문에는 값 자체를 보존하지 않았다. - 공식 repo clone의 checkout HEAD와
origin/main은e054012d26d3e851dbabbf558bb3663aa6e44120로 일치했다. pinned raw manifest는18/18파일 HTTP 200, byte 수 일치, SHA-256 일치로 검증했다. pnpm install --frozen-lockfile --ignore-scripts가 성공했고, package가 선언한 Gate 1(lint → typecheck → build → test → css-lint)을 실행했다.[4] 결과는 ESLint 통과, TypeScript typecheck 통과, production build 통과, Vitest260files /3690tests 통과, CSS lint0 violations였다.[4]
실행하지 않은 것
- 실제 Obsidian desktop/mobile UI, ribbon/side panel, Graph View, Dataview, vault mutation 검증은 실행하지 않았다.
- 실제 LLM provider 호출, cloud PDF/native PDF, MinerU upload/poll/download, OCR 품질, Bedrock/Codex OAuth, local endpoint 연결은 실행하지 않았다.
- Marketplace의 download/release/benchmark 수치와 “no tracking”·“GDPR-Friendly” 표현은 독립적인 telemetry audit, network trace, privacy-policy/legal review로 재검증하지 않았다.[1]
- Gate 1은 pinned source의 build/test evidence이지, 사용자의 vault에서 안전하게 실행된다는 보증이나 모든 provider의 runtime compatibility 증명이 아니다.[4]
결론
Karpathy LLM Wiki 플러그인은 Obsidian의 파일·링크·그래프를 LLM ingest/query loop에 연결하는 실용적인 구현이다.[1][2]
별도 vector DB 없이 PPR/Monte Carlo로 graph context를 확장한다.[1][2][5]
PDF·image·Office 입력과 candidate/caching/SecretStorage 경계를 추가한 점이 기존의 추상 LLM Wiki 노트와 구별된다.[1][7][14]
다만 “local-first”와 “no backend”는 provider 선택과 외부 변환 backend를 제외한 절대적 offline 보장이 아니다.[1][7][9]
운영 전에 provider가 받는 payload, 원본 vault backup, cache/sidecar 설정, pinned release와 현재 Marketplace 버전의 drift를 별도로 확인해야 한다.[1][7][9]
SecretStorage와 로그 경계도 별도로 확인해야 한다.[1][14]
Sources
[1] https://community.obsidian.md/plugins/karpathywiki — Karpathy LLM Wiki - Obsidian Community plugin listing [2] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/README.md — Karpathy LLM Wiki README at pinned commit [3] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/manifest.json — Obsidian plugin manifest at pinned commit [4] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/package.json — Karpathy LLM Wiki package scripts at pinned commit [5] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/monte-carlo-ppr.ts — Monte Carlo PPR implementation at pinned commit [6] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/ppr-cascade.ts — PPR cascade implementation at pinned commit [7] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/mineru-converter.ts — MinerU converter implementation at pinned commit [8] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/pdf-cache.ts — PDF conversion cache at pinned commit [9] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/obsidian-fetch-bridge.ts — Obsidian network fetch bridge at pinned commit [10] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/core/candidate-gate.ts — Candidate gate implementation at pinned commit [11] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/wiki/query-engine/pipeline/query-keywords.ts — Query keyword generation at pinned commit [12] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/wiki/query-engine/pipeline/select-seeds.ts — Five-stage seed selection at pinned commit [13] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/wiki/wiki-engine.ts — Wiki engine implementation at pinned commit [14] https://raw.githubusercontent.com/green-dalii/obsidian-llm-wiki/e054012d26d3e851dbabbf558bb3663aa6e44120/src/llm-sdk/provider-secret-store.ts — Provider SecretStorage implementation at pinned commit