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, Obsidian 1.11.4+, Desktop/Mobile, Apache-2.0을 표시했다.[1] 이 숫자와 Marketplace의 Health Excellent / Review Passed 표시는 시점 의존적인 listing metadata이지, 독립적인 보안 감사나 지속적인 사용량 보증은 아니다.[1]
  • 연결된 공식 저장소는 green-dalii/obsidian-llm-wiki이며, 이 페이지의 구현 조사는 main@e054012d26d3e851dbabbf558bb3663aa6e44120에 고정했다.[3] pinned manifest.json도 version 1.27.0과 minimum Obsidian 1.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]

무엇을 하는가

  1. Ingest. 단일 note, folder, 여러 파일을 선택해 entity/concept/source 페이지와 aliases, links, source attribution을 생성한다.[1] Community listing은 Markdown·PDF·image·Office 입력 경로를 설명하며, 원본 vault note는 수정하지 않고 wiki/ 아래에 결과를 만든다고 주장한다.[1]
  2. Query. Query Wiki가 오른쪽 side panel에서 vault의 wiki context를 이용해 답하고, 답변에 다시 [[wiki-link]]를 붙이는 흐름을 제공한다.[1] 이 기능은 인터넷 검색 대체재가 아니라 사용자가 이미 보존한 vault 지식에 대한 질의면으로 설명되어 있다.[1]
  3. 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]
  4. 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,000 walks × 50 steps이며, random-walk 비용을 O(K × L)로 두고 graph 크기와 분리하는 설계다.[2][5]

    Marketplace의 PPR @5 = 27.1% 대 pure-kNN 24.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]

  1. Lex fast path: title과 aliases의 token overlap.[1][2]
  2. LLM keyword generation: 자연어 query에서 cross-language keyword 후보 생성.[1][2]
  3. Local substring scan: 생성된 keyword를 title·alias·body snippet에 다시 대조.[1][2]
  4. LLM knowledge-base fallback: lexical/keyword signal이 약할 때 semantic seed selection.[1][2]
  5. 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, archive 256 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.secretStoragegetSecret/setSecret surface를 사용하는 구현으로 분리되어 있다.[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을 수행하지 않았다.

이 볼트에서의 위치

검증 결과와 한계

실제로 확인한 것

  • 직접 지정된 Community page를 추출하고, credential-like image query value 1건은 [REDACTED] 처리했다. 원본 extracted page의 byte 수와 SHA-256은 capture metadata에만 남겼고, 위키 본문에는 값 자체를 보존하지 않았다.
  • 공식 repo clone의 checkout HEAD와 origin/maine054012d26d3e851dbabbf558bb3663aa6e44120로 일치했다. 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 통과, Vitest 260 files / 3690 tests 통과, CSS lint 0 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