A personal knowledge base that builds itself.
LLM reads your documents, builds a structured wiki, and keeps it current.
What is this? • Features • Tech Stack • Installation • Credits • License
raw/sources/ and keeps ingest/delete cleanup in syncSKILL.md folders, select skills with /skill, and let the Agent read skill instructions on demand127.0.0.1:19828 JSON API and bundled MCP server for hybrid search, file read, graph traversal, and source rescan; ready-made agent skill installs into Claude Code / Codex with one command (npx skills add …)LLM Wiki is a cross-platform desktop application that turns your documents into an organized, interlinked knowledge base — automatically. Instead of traditional RAG (retrieve-and-answer from scratch every time), the LLM incrementally builds and maintains a persistent wiki from your sources. Knowledge is compiled once and kept current, not re-derived on every query.
This project is based on Karpathy's LLM Wiki pattern — a methodology for building personal knowledge bases using LLMs. llm_wiki is created and maintained by nash_su, who implemented the core ideas as a full desktop application with significant enhancements.
The foundational methodology comes from Andrej Karpathy's llm-wiki.md, which describes the pattern of using LLMs to incrementally build and maintain a personal wiki. The original document is an abstract design pattern; this project is a concrete implementation with substantial extensions.
The core architecture follows Karpathy's design faithfully:
The original is an abstract pattern document designed to be copy-pasted to an LLM agent. We built it into a full cross-platform desktop application with: - Three-column layout: Knowledge Tree / File Tree (left) + Chat (center) + Preview (right) - Icon sidebar for switching between Wiki, Sources, Search, Graph, Lint, Review, Deep Research, Settings - Custom resizable panels — drag-to-resize left and right panels with min/max constraints - Activity panel — real-time processing status showing file-by-file ingest progress - All state persisted — conversations, settings, review items, project config survive restarts - Scenario templates — Research, Reading, Personal Growth, Business, General — each pre-configures purpose.md and schema.md
The original has Schema (how the wiki works) but no formal place for why the wiki exists. We added purpose.md:
- Defines goals, key questions, research scope, evolving thesis
- LLM reads it during every ingest and query for context
- LLM can suggest updates based on usage patterns
- Different from schema — schema is structural rules, purpose is directional intent
The original describes a single-step ingest where the LLM reads and writes simultaneously. We split it into two sequential LLM calls for significantly better quality:
Step 1 (Analysis): LLM reads source → structured analysis
- Key entities, concepts, arguments
- Connections to existing wiki content
- Contradictions & tensions with existing knowledge
- Recommendations for wiki structure
Step 2 (Generation): LLM takes analysis → generates wiki files
- Source summary with frontmatter (type, title, sources[])
- Entity pages, concept pages with cross-references
- Updated index.md, log.md, overview.md
- Review items for human judgment
- Search queries for Deep Research
Additional ingest enhancements beyond the original:
- SHA256 incremental cache — source file content is hashed before ingest; unchanged files are skipped automatically, saving LLM tokens and time
- Persistent ingest queue — serial processing prevents concurrent LLM calls; queue persisted to disk, survives app restart; failed tasks auto-retry up to 3 times
- Folder import — recursive folder import preserving directory structure; folder path passed to LLM as classification context (e.g., "papers > energy" helps categorize content)
- Source folder auto-watch — files added, edited, or deleted in raw/sources/ outside the app are picked up automatically and reuse the same ingest/delete lifecycle as in-app actions
- Queue visualization — Activity Panel shows progress bar, pending/processing/failed tasks with cancel and retry buttons
- Auto-embedding — when vector search is enabled, new pages are automatically embedded after ingest
- Source traceability — every generated wiki page includes a sources: [] field in YAML frontmatter, linking back to the raw source files that contributed to it
- overview.md auto-update — global summary page regenerated on every ingest to reflect the latest state of the wiki
- Guaranteed source summary — fallback ensures a source summary page is always created, even if the LLM omits it
- Language-aware generation — LLM responds in the user's configured language (English or Chinese)
- Progressive Sources view — large source folders render progressively while scrolling, keeping big source collections responsive
The original mentions [[wikilinks]] for cross-references but has no graph analysis. We built a full knowledge graph visualization and relevance engine:
4-Signal Relevance Model:
| Signal | Weight | Description |
|--------|--------|-------------|
| Direct link | ×3.0 | Pages linked via [[wikilinks]] |
| Source overlap | ×4.0 | Pages sharing the same raw source (via frontmatter sources[]) |
| Adamic-Adar | ×1.5 | Pages sharing common neighbors (weighted by neighbor degree) |
| Type affinity | ×1.0 | Bonus for same page type (entity↔entity, concept↔concept) |
Graph Visualization (sigma.js + graphology + ForceAtlas2): - Node colors by page type or community, sizes scaled by link count (√ scaling) - Edge thickness and color by relevance weight (green=strong, gray=weak) - Hover interaction: neighbors stay visible, non-neighbors dim, edges highlight with relevance score label - Zoom controls (ZoomIn, ZoomOut, Fit-to-screen) - Position caching prevents layout jumps when data updates - Legend switches between type counts and community info based on coloring mode
Not in the original. Automatic discovery of knowledge clusters using the Louvain algorithm (graphology-communities-louvain):
Not in the original. The system automatically analyzes graph structure to surface actionable insights:
Surprising Connections: - Detects unexpected relationships: cross-community edges, cross-type links, peripheral↔hub couplings - Composite surprise score ranks the most noteworthy connections - Dismissable — mark connections as reviewed so they don't reappear
Knowledge Gaps: - Isolated pages (degree ≤ 1) — pages with few or no connections to the rest of the wiki - Sparse communities (cohesion < 0.15, ≥ 3 pages) — knowledge areas with weak internal cross-references - Bridge nodes (connecting 3+ clusters) — critical junction pages that hold multiple knowledge areas together
Interactive: - Click any insight card to highlight corresponding nodes and edges in the graph; click again to deselect - Knowledge gaps and bridge nodes have a Deep Research button — triggers LLM-optimized research with domain-aware topics (reads overview.md + purpose.md for context) - Research topic shown in editable confirmation dialog before starting — user can refine topic and search queries
The original describes a simple query where the LLM reads relevant pages. We built a multi-phase retrieval pipeline with optional vector search and budget control:
Phase 1: Tokenized Search
- English: word splitting + stop word removal
- Chinese: CJK bigram tokenization (每个 → [每个, 个…])
- Title match bonus (+10 score)
- Searches both wiki/ and raw/sources/
Phase 1.5: Vector Semantic Search (optional)
- Embedding via any OpenAI-compatible /v1/embeddings endpoint
- Stored in LanceDB (Rust backend) for fast ANN retrieval
- Cosine similarity finds semantically related pages even without keyword overlap
- Results merged into search: boosts existing matches + adds new discoveries
Phase 2: Graph Expansion
- Top search results used as seed nodes
- 4-signal relevance model finds related pages
- 2-hop traversal with decay for deeper connections
Phase 3: Budget Control
- Configurable context window: 4K → 1M tokens
- Proportional allocation: 60% wiki pages, 20% chat history, 5% index, 15% system
- Pages prioritized by combined search + graph relevance score
Phase 4: Context Assembly
- Numbered pages with full content (not just summaries)
- System prompt includes: purpose.md, language rules, citation format, index.md
- LLM instructed to cite pages by number: [1], [2], etc.
Vector Search is fully optional — disabled by default, enabled in Settings with independent endpoint, API key, and model configuration. When disabled, the pipeline falls back to tokenized search + graph expansion. Benchmark: overall recall improved from 58.2% to 71.4% with vector search enabled.
The original has a single query interface. We built full multi-conversation support:
.llm-wiki/chats/{id}.jsonwiki/queries/, then auto-ingest to extract entities/concepts into the knowledge networkNot in the original. Chat now runs through a Rust backend Agent runtime rather than a browser-only TypeScript loop:
/skill completionagent-workspace/, shown as generated outputs, and can be previewed or opened from the chatNot in the original. For LLMs that emit <think> blocks (DeepSeek, QwQ, etc.):
Not in the original. Rich Markdown rendering across chat and preview:
$...$ and block $$...$$ formulas rendered via remark-math + rehype-katex\begin{aligned} and other LaTeX environments automatically wrapped with $$ delimitersmermaid diagrams render directly as flowcharts, sequence diagrams, and other Mermaid-supported visualsThe original suggests staying involved during ingest. We added an asynchronous review queue:
Not in the original. When the LLM identifies knowledge gaps:
<think> blocks shown as collapsible sections during synthesis, auto-scroll to latest content
The original mentions Obsidian Web Clipper. We built a dedicated Chrome Extension (Manifest V3):
The original focuses on text/markdown. We support structured extraction preserving document semantics:
| Format | Method |
|---|---|
| Built-in pdf-extract (Rust) with file caching; optional MinerU Cloud, Local API, or Pipeline parsing for complex layouts | |
| DOCX | docx-rs — headings, bold/italic, lists, tables → structured Markdown |
| PPTX | ZIP + XML — slide-by-slide extraction with heading/list structure |
| XLSX/XLS/ODS | calamine — proper cell types, multi-sheet support, Markdown tables |
| EPUB/MOBI | Electronic book metadata, chapters, and body text → ingest-ready content |
| Images | Native preview (png, jpg, gif, webp, svg, etc.) |
| Video/Audio | Built-in player |
| Web clips | Readability.js + Turndown.js → clean Markdown |
MinerU is optional. Use MinerU Cloud, an official Local API endpoint, or Local Pipeline mode for complex PDFs. Local modes keep processing on your machine, and extracted images are stored in the project-managed
wiki/mediadirectory. If MinerU fails, LLM Wiki falls back to the built-in parser.
The original has no deletion mechanism. We added intelligent cascade deletion:
sources[] field, source summary page name, frontmatter section referencessources[] array, not deleted entirely[[wikilinks]] to deleted pages are removed from remaining wiki pagesNot in the original. Users can configure how much context the LLM receives:
The original is platform-agnostic (abstract pattern). We handle concrete cross-platform concerns:
normalizePath() used across 22+ files, backslash → forward slash.obsidian/ directory with recommended settingswiki/index.md rebuilding| Layer | Technology |
|---|---|
| Desktop | Tauri v2 (Rust backend) |
| Frontend | React 19 + TypeScript + Vite |
| UI | shadcn/ui + Tailwind CSS v4 |
| Editor | Milkdown (ProseMirror-based WYSIWYG) |
| Graph | sigma.js + graphology + ForceAtlas2 |
| Search | Tokenized search + graph relevance + optional vector (LanceDB) |
| Vector DB | LanceDB (Rust, embedded, optional) |
| Documents | pdf-extract + MinerU Cloud/Local + docx-rs + calamine + EPUB/MOBI extraction |
| i18n | react-i18next |
| State | Zustand |
| LLM | Streaming fetch (OpenAI, Anthropic, Google, Ollama, Custom) |
| Web Search | Tavily, SerpApi, SearXNG JSON API |
Download from Releases:
- macOS: .dmg (Apple Silicon)
- Windows: .msi
- Linux: .deb / .AppImage
# Prerequisites: Node.js 20+, Rust 1.88+, protoc
# macOS: brew install protobuf
# Linux: sudo apt install protobuf-compiler
# Windows: choco install protoc
git clone https://github.com/nashsu/llm_wiki.git
cd llm_wiki
npm install
npm --prefix mcp-server ci && npm run mcp:build # mcp-server/dist is bundled as a Tauri resource
npm run tauri dev # Development
npm run tauri build # Production build
chrome://extensionsextension/ directoryAlt+Shift+L (Command+Shift+L on macOS). Customize it at chrome://extensions/shortcuts.LLM Wiki ships a built-in local HTTP API at http://127.0.0.1:19828 (token-protected, 127.0.0.1-only) so external tools — including AI agents like Claude Code, Codex, or any HTTP-capable script — can query your wiki:
GET /api/v1/health — server status (no auth)GET /api/v1/projects — list projectsGET /api/v1/projects/{id}/files / files/content — read files and contentGET /api/v1/projects/{id}/reviews?status=unresolved — export Review tab items for wiki maintenance (status: unresolved, resolved, or all; optional type and limit)PATCH /api/v1/projects/{id}/reviews/{reviewId} — update one Review item (JSON body { "resolved": true, "action": "label" }; resolved defaults to true, pass false to reopen)POST /api/v1/projects/{id}/reviews/resolve — bulk-resolve Review items (JSON body { "ids": [...], "action": "label" }), returns { resolved, notFound, count }; the Review tab's Refresh button re-reads the result from diskPOST /api/v1/projects/{id}/search — hybrid retrieval (keyword + vector) returning mode, tokenHits, vectorHits, per-result vectorScorePOST /api/v1/projects/{id}/chat — backend Agent chat endpoint for wiki/source/web/AnyTXT retrieval. JSON requests remain non-streaming by default; send "stream": true or Accept: text/event-stream for SSE events (meta, incremental agent, then done, cancelled, or error). The terminal done frame contains the complete aggregate response, so clients should not render both message deltas and the final message as separate answers. mode: "deep" broadens evidence collection, while the full Deep Research workspace remains available in the desktop UIGET /api/v1/projects/{id}/graph — wikilinks graph; supports q, nodeType, limit (max 1000), offset, and edgeScope=page|filtered, and returns totalCount / hasMore for large projectsPOST /api/v1/projects/{id}/sources/rescan — trigger a backend rescanPOST /api/v1/projects/{id}/pages/embed — index one externally created or updated wiki/*.md page without rebuilding the whole vector databaseEnable the API, generate a token, and choose whether local unauthenticated access is allowed in Settings → API + MCP.
For MCP-compatible clients, LLM Wiki also includes a local MCP server in mcp-server/. After building it with npm run mcp:build, Settings → API + MCP shows a copyable MCP client configuration with the correct local path for your machine. The MCP tools call the same API surface, so agent clients can list projects, read files, export unresolved Review items, run hybrid search, inspect the graph, trigger source rescans, and call the same Rust backend Agent chat endpoint without custom HTTP glue code.
A ready-made agent skill for LLM Wiki lives in its own repo. Install it into Claude Code / Codex / any skills-compatible runtime:
npx skills add https://github.com/nashsu/llm_wiki_skill.git --skill llm-wiki
After install, the agent can answer prompts like "what does my LLM Wiki say about X", "search my 知识库 for Y", "show the neighborhood of node Z in my wiki graph", and "rescan my wiki sources" by talking to your locally-running app — read-only by default, citing wiki page paths so you can verify in-app.
my wiki / 知识库.my-wiki/
├── purpose.md # Goals, key questions, research scope
├── schema.md # Wiki structure rules, page types
├── raw/
│ ├── sources/ # Uploaded documents (immutable)
│ └── assets/ # Local images
├── wiki/
│ ├── index.md # Content catalog
│ ├── log.md # Operation history
│ ├── overview.md # Global summary (auto-updated)
│ ├── entities/ # People, organizations, products
│ ├── concepts/ # Theories, methods, techniques
│ ├── sources/ # Source summaries
│ ├── queries/ # Saved chat answers + research
│ ├── synthesis/ # Cross-source analysis
│ └── comparisons/ # Side-by-side comparisons
├── .obsidian/ # Obsidian vault config (auto-generated)
└── .llm-wiki/ # App config, chat history, review items
This project is licensed under the GNU General Public License v3.0 — see LICENSE for details.
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|