LLM Wiki
Brain app
First committed by nashsu
Published in nashsu/llm_wiki. Publisher page
21,569 GitHub stars
What it is
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。
AutoGineer overview, from the brain’s own files
LLM Wiki is a desktop application designed to build and maintain a personal knowledge base by incrementally processing documents. Unlike traditional RAG systems that re-derive answers from scratch, this tool compiles knowledge into a structured, persistent wiki. It features a three-layer architecture (Raw Sources, Wiki, Schema) and uses a two-step chain-of-thought ingest process to analyze and generate interlinked Markdown pages. The application includes a knowledge graph with community detection, vector semantic search, and a Rust-based chat agent that supports tool use and skill management. It is designed to be compatible with Obsidian, allowing users to manage their knowledge base as a local vault.
How it works
Memory model: LLM wiki
AutoGineer overview, from the brain’s own files
The system ingests raw documents from a source folder, processes them through a two-step LLM pipeline (analysis followed by generation), and stores the output as interlinked Markdown files. It maintains a persistent index and log, and uses a knowledge graph to track relationships between pages. Users interact with the knowledge base through a chat interface that can perform semantic search, graph traversal, and web research. The application also supports folder watching to automatically ingest new files and provides an MCP server for external agent integration.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 4 |
| assets | attachments | 9 |
| scripts | scripts | 1 |
| src | source-code | 362 |
| extension | folder | 10 |
| mcp-server | folder | 11 |
| plans | folder | 1 |
| src-tauri | folder | 61 |
Requirements
Runtimes: Node.js
Databases: LanceDB
Set it up
- Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/nashsu/llm_wiki/blob/e08cfce65aad8b76b13546a081c1a8d4422b70c3/README.md#installation
First committed by nashsu. Published in nashsu/llm_wiki. Licence: GNU General Public License v3.0 only.
Usage
AutoGineer overview, from the brain’s own files
- Automating the creation of a personal wiki from research papers and web clips.
- Visualizing connections between disparate knowledge topics using a graph-based interface.
- Integrating local document knowledge into external AI agents via the bundled MCP server.
- Maintaining a structured, searchable archive of project-related documentation.
- “What are the key themes connecting my research on renewable energy and urban planning?”
- The agent traverses the knowledge graph, identifies relevant pages, and synthesizes a summary highlighting the intersection of these topics based on existing wiki links.
- “Find any isolated concepts in my current wiki that need more research.”
- The agent analyzes the graph structure to identify nodes with low connectivity and suggests topics for further investigation.
Documentation by nashsu
LLM Wiki
<p align="center"> <img src="logo.jpg" width="128" height="128" style="border-radius: 22%;" alt="LLM Wiki Logo"> </p>
<p align="center"> <strong>A personal knowledge base that builds itself.</strong><br> LLM reads your documents, builds a structured wiki, and keeps it current. </p>
<p align="center"> <a href="#what-is-this">What is this?</a> • <a href="#what-we-changed--added">Features</a> • <a href="#tech-stack">Tech Stack</a> • <a href="#installation">Installation</a> • <a href="#credits">Credits</a> • <a href="#license">License</a> </p>
<p align="center"> English | <a href="README_CN.md">中文</a> | <a href="README_JA.md">日本語</a> | <a href="README_KO.md">한국어</a> </p>
<p align="center"> <img src="assets/overview.jpg" width="100%" alt="Overview"> </p>
Features
Two-Step Chain-of-Thought Ingest — LLM analyzes first, then generates wiki pages with source traceability and incremental cache
Multimodal Image Ingestion — extract embedded images from PDFs, generate factual captions with a vision LLM, surface them in image-aware search results with lightbox preview and jump-to-source
Multi-format Document Parsing — ingest PDF, Office documents, EPUB/MOBI, Org mode, images, media, web clips, and batches of URLs, with built-in, cloud, or local MinerU PDF processing
Flexible Model Configuration — configure models per project, route Chat and Ingest independently, and manage custom providers, headers, and streaming output
Source-grounded Retrieval — use Read Sources Only mode to answer exclusively from original imported material
Project Management & Migration — export and import complete project archives across devices, and rebuild the Wiki index from existing pages
4-Signal Knowledge Graph — relevance model with direct links, source overlap, Adamic-Adar, and type affinity
Louvain Community Detection — automatic knowledge cluster discovery with cohesion scoring
Graph Insights — surprising connections and knowledge gaps with one-click Deep Research
Vector Semantic Search — optional embedding-based retrieval via LanceDB, supports any OpenAI-compatible endpoint
Persistent Ingest Queue — serial processing with crash recovery, cancel, retry, and progress visualization
Folder Import — recursive folder import preserving directory structure, folder context as LLM classification hint
Source Folder Auto-Watch — detects external changes in
raw/sources/and keeps ingest/delete cleanup in syncDeep Research — LLM-optimized search topics, multi-query web search via Tavily, SerpApi, or SearXNG, auto-ingest results into wiki
Rust Backend Chat Agent — tool-using chat runtime with wiki/source/graph/web retrieval, workspace file generation, shell approval, cancellation, and streaming tool events
Agent Skills — scan and enable local
SKILL.mdfolders, select skills with/skill, and let the Agent read skill instructions on demandGenerated Outputs Preview — Agent-created Markdown, HTML, images, and other workspace files appear as outputs with preview and quick folder access
Mermaid Diagram Rendering — render Mermaid code blocks directly in chat and preview, with compact syntax-error cards instead of raw parser output
Async Review System — LLM flags items for human judgment, predefined actions, pre-generated search queries
Chrome Web Clipper — one-click web page capture with auto-ingest into knowledge base
Local HTTP API + MCP Server + AI Agent Skill — built-in
127.0.0.1:19828JSON 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 …)
What is this?
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.
<p align="center"> <img src="assets/llm_wiki_arch.jpg" width="100%" alt="LLM Wiki Architecture"> </p>
Credits
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.
What We Kept from the Original
The core architecture follows Karpathy's design faithfully:
Three-layer architecture: Raw Sources (immutable) → Wiki (LLM-generated) → Schema (rules & config)
Three core operations: Ingest, Query, Lint
index.md as the content catalog and LLM navigation entry point
log.md as the chronological operation record with parseable format
wikilink syntax for cross-references
YAML frontmatter on every wiki page
Obsidian compatibility — the wiki directory works as an Obsidian vault
Human curates, LLM maintains — the fundamental role division
<p align="center"> <img src="assets/5-obsidian_compatibility.jpg" width="100%" alt="Obsidian Compatibility"> </p>
What We Changed & Added
1. From CLI to Desktop Application
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
2. Purpose.md — The Wiki's Soul
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
3. Two-Step Chain-of-Thought Ingest
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 ResearchAdditional 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 actionsQueue 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 itoverview.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
4. Knowledge Graph with Relevance Model
<p align="center"> <img src="assets/3-knowledge_graph.jpg" width="100%" alt="Knowledge Graph"> </p>
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
5. Louvain Community Detection
Not in the original. Automatic discovery of knowledge clusters using the Louvain algorithm (graphology-communities-louvain):
Auto-clustering — discovers which pages naturally group together based on link topology, independent of predefined page types
Type / Community toggle — switch between coloring nodes by page type (entity, concept, source...) or by discovered knowledge cluster
Cohesion scoring — each community scored by intra-edge density (actual edges / possible edges); low-cohesion clusters (< 0.15) flagged with warning
12-color palette — distinct visual separation between clusters
Community legend — shows top node label, member count, and cohesion per cluster
<p align="center"> <img src="assets/kg_community.jpg" width="100%" alt="Louvain Community Detection"> </p>
6. Graph Insights — Surprising Connections & Knowledge Gaps
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
<p align="center"> <img src="assets/kg_insights.jpg" width="100%" alt="Graph Insights"> </p>
7. Optimized Query Retrieval Pipeline
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.
8. Multi-Conversation Chat with Persistence
The original has a single query interface. We built full multi-conversation support:
Independent chat sessions — create, rename, delete conversations
Conversation sidebar — quick switching between topics
Per-conversation persistence — each conversation saved to
.llm-wiki/chats/{id}.jsonConfigurable history depth — limit how many messages are sent as context (default: 10)
Cited references panel — collapsible section on each response showing which wiki pages were used, grouped by type with icons
Reference persistence — cited pages stored directly in message data, stable across restarts
Regenerate — re-generate the last response with one click (removes last assistant + user message pair, re-sends)
Save to Wiki — archive valuable answers to
wiki/queries/, then auto-ingest to extract entities/concepts into the knowledge network
9. Rust Backend Chat Agent & Skills
Not in the original. Chat now runs through a Rust backend Agent runtime rather than a browser-only TypeScript loop:
Tool-using Agent — can choose wiki search, source search, graph search, web search, AnyTXT, workspace file tools, approved shell commands, and skill file reads
Skill management — scan project and user skill folders, enable or disable skills, and pick a skill per conversation with
/skillcompletionGenerated workspace outputs — files produced by Agent tools are kept under
agent-workspace/, shown as generated outputs, and can be previewed or opened from the chatUser interaction forms — skills can ask for structured user input such as single choice, multiple choice, or free text without hardcoding skill-specific UI
Safer execution model — project workspace commands can continue smoothly, while external shell commands still require explicit approval
10. Thinking / Reasoning Display
Not in the original. For LLMs that emit <think> blocks (DeepSeek, QwQ, etc.):
Streaming thinking — rolling 5-line display with opacity fade during generation
Collapsed by default — thinking blocks hidden after completion, click to expand
Visual separation — thinking content shown in distinct style, separate from the main response
11. Markdown Rendering: KaTeX Math & Mermaid Diagrams
Not in the original. Rich Markdown rendering across chat and preview:
KaTeX rendering — inline
$...$and block$$...$$formulas rendered via remark-math + rehype-katexMilkdown math plugin — preview editor renders math natively via @milkdown/plugin-math
Auto-detection — bare
\begin{aligned}and other LaTeX environments automatically wrapped with$$delimitersUnicode fallback — 100+ symbol mappings (α, ∑, →, ≤, etc.) for simple inline notation outside math blocks
Mermaid code blocks — fenced
mermaiddiagrams render directly as flowcharts, sequence diagrams, and other Mermaid-supported visualsCompact Mermaid errors — syntax failures are captured inside a small error card instead of spilling raw parser output into the chat
12. Review System (Async Human-in-the-Loop)
The original suggests staying involved during ingest. We added an asynchronous review queue:
LLM flags items needing human judgment during ingest
Predefined action types: Create Page, Deep Research, Skip — constrained to prevent LLM hallucination of arbitrary actions
Search queries generated at ingest time — LLM pre-generates optimized web search queries for each review item
User handles reviews at their convenience — doesn't block ingest
13. Deep Research
<p align="center"> <img src="assets/1-deepresearch.jpg" width="100%" alt="Deep Research"> </p>
Not in the original. When the LLM identifies knowledge gaps:
Web search via Tavily, SerpApi, or SearXNG finds relevant sources with full content extraction (no truncation)
Provider-specific configuration — Tavily and SerpApi use independent API keys; SerpApi supports selectable engines, while SearXNG uses a configured instance URL and search categories
Multiple search queries per topic — LLM-generated at ingest time, optimized for search engines
LLM-optimized research topics — when triggered from Graph Insights, LLM reads overview.md + purpose.md to generate domain-specific topics and queries (not generic keywords)
User confirmation dialog — editable topic and search queries shown for review before research starts
LLM synthesizes findings into a wiki research page with cross-references to existing wiki
Thinking display —
<think>blocks shown as collapsible sections during synthesis, auto-scroll to latest contentAuto-ingest — research results automatically processed to extract entities/concepts into the wiki
Task queue with 3 concurrent tasks
Research Panel — dedicated sidebar panel with dynamic height, real-time streaming progress
14. Browser Extension (Web Clipper)
<p align="center"> <img src="assets/4-chrome_extension_webclipper.jpg" width="100%" alt="Chrome Extension Web Clipper"> </p>
The original mentions Obsidian Web Clipper. We built a dedicated Chrome Extension (Manifest V3):
Mozilla Readability.js for accurate article extraction (strips ads, nav, sidebars)
Turndown.js for HTML → Markdown conversion with table support
Project picker — choose which wiki to clip into (supports multi-project)
Local HTTP API (port 19827, tiny_http) — Extension ↔ App communication
Auto-ingest — clipped content automatically triggers the two-step ingest pipeline
Clip watcher — polls every 3 seconds for new clips, processes automatically
Offline preview — shows extracted content even when app is not running
15. Multi-format Document Support
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.
16. File Deletion with Cascade Cleanup
The original has no deletion mechanism. We added intelligent cascade deletion:
Deleting a source file removes its wiki summary page
3-method matching finds related wiki pages: frontmatter
sources[]field, source summary page name, frontmatter section referencesShared entity preservation — entity/concept pages linked to multiple sources only have the deleted source removed from their
sources[]array, not deleted entirelyIndex cleanup — removed pages are purged from index.md
Wikilink cleanup — dead
[[wikilinks]]to deleted pages are removed from remaining wiki pages
17. Configurable Context Window
Not in the original. Users can configure how much context the LLM receives:
Slider from 4K to 1M tokens — adapts to different LLM capabilities
Proportional budget allocation — larger windows get proportionally more wiki content
60/20/5/15 split — wiki pages / chat history / index / system prompt
18. Cross-Platform Compatibility
The original is platform-agnostic (abstract pattern). We handle concrete cross-platform concerns:
Path normalization — unified
normalizePath()used across 22+ files, backslash → forward slashUnicode-safe string handling — char-based slicing instead of byte-based (prevents crashes on CJK filenames)
macOS close-to-hide — close button hides window (app stays running in background), click dock icon to restore, Cmd+Q to quit
Windows/Linux close confirmation — confirmation dialog before quitting to prevent accidental data loss
Tauri v2 — native desktop on macOS, Windows, Linux
GitHub Actions CI/CD — automated builds for macOS (Apple Silicon), Windows (.msi), Linux (.deb / .AppImage)
19. Other Additions
i18n — English + Chinese interface (react-i18next)
Settings persistence — LLM provider, API key, model, context size, language saved via Tauri Store
Obsidian config — auto-generated
.obsidian/directory with recommended settingsMarkdown rendering — GFM tables with borders, proper code blocks, wikilink processing in chat and preview
Multi-provider LLM support — OpenAI, Anthropic, Google, Ollama, Custom — each with provider-specific streaming and headers
Configurable LLM timeout — adjust request timeouts for slow local models and long-running operations
Configurable Firecrawl — optional API key and custom Base URL for hosted or self-hosted services
Collapsible file sidebar — collapse Knowledge/Files navigation while preserving its state
Project maintenance — ZIP export/import for migration and deterministic
wiki/index.mdrebuildingdataVersion signaling — graph and UI automatically refresh when wiki content changes
Tech Stack
| 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 |
Installation
Pre-built Binaries
Download from Releases:
macOS:
.dmg(Apple Silicon)Windows:
.msiLinux:
.deb/.AppImage
Build from Source
# 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 buildChrome Extension
Open
chrome://extensionsEnable "Developer mode"
Click "Load unpacked"
Select the
extension/directoryClip the current page with
Alt+Shift+L(Command+Shift+Lon macOS). Customize it atchrome://extensions/shortcuts.
Quick Start
Launch the app → Create a new project (choose a template)
Go to Settings → Configure your LLM provider (API key + model)
Optional: configure Web Search providers and source folder auto-watch in Settings
Go to Sources → Import documents (PDF, DOCX, MD, etc.)
Watch the Activity Panel — LLM automatically builds wiki pages
Use Chat to query your knowledge base
Browse the Knowledge Graph to see connections
Check Review for items needing your attention
Run Lint periodically to maintain wiki health
Local HTTP API + MCP Server + AI Agent Skill
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, orall; optionaltypeandlimit)PATCH /api/v1/projects/{id}/reviews/{reviewId}— update one Review item (JSON body{ "resolved": true, "action": "label" };resolveddefaults 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) returningmode,tokenHits,vectorHits, per-resultvectorScorePOST /api/v1/projects/{id}/chat— backend Agent chat endpoint for wiki/source/web/AnyTXT retrieval. JSON requests remain non-streaming by default; send"stream": trueorAccept: text/event-streamfor SSE events (meta, incrementalagent, thendone,cancelled, orerror). The terminaldoneframe 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; supportsq,nodeType,limit(max 1000),offset, andedgeScope=page|filtered, and returnstotalCount/hasMorefor large projectsPOST /api/v1/projects/{id}/sources/rescan— trigger a backend rescanPOST /api/v1/projects/{id}/pages/embed— index one externally created or updatedwiki/*.mdpage without rebuilding the whole vector database
Enable 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.
Plug your AI agent in with one command
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-wikiAfter 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.
Skill repo: https://github.com/nashsu/llm_wiki_skill
Trigger discipline: it intentionally does not trigger on generic "search my notes" / "check my Obsidian / Notion / Logseq" — only when you explicitly name LLM Wiki /
my wiki/知识库.
Project Structure
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 itemsStar History
<a href="https://www.star-history.com/?repos=nashsu%2Fllm_wiki&type=date&legend=top-left"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=nashsu/llm_wiki&type=date&theme=dark&legend=top-left" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=nashsu/llm_wiki&type=date&legend=top-left" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=nashsu/llm_wiki&type=date&legend=top-left" /> </picture> </a>
License
This project is licensed under the GNU General Public License v3.0 — see LICENSE for details.
llm-wiki.md
LLM Wiki
A pattern for building personal knowledge bases using LLMs.
This is an idea file, it is designed to be copy pasted to your own LLM Agent (e.g. OpenAI Codex, Claude Code, OpenCode / Pi, or etc.). Its goal is to communicate the high level idea, but your agent will build out the specifics in collaboration with you.
The core idea
Most people's experience with LLMs and documents looks like RAG: you upload a collection of files, the LLM retrieves relevant chunks at query time, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch on every question. There's no accumulation. Ask a subtle question that requires synthesizing five documents, and the LLM has to find and piece together the relevant fragments every time. Nothing is built up. NotebookLM, ChatGPT file uploads, and most RAG systems work this way.
The idea here is different. Instead of just retrieving from raw documents at query time, the LLM incrementally builds and maintains a persistent wiki — a structured, interlinked collection of markdown files that sits between you and the raw sources. When you add a new source, the LLM doesn't just index it for later retrieval. It reads it, extracts the key information, and integrates it into the existing wiki — updating entity pages, revising topic summaries, noting where new data contradicts old claims, strengthening or challenging the evolving synthesis. The knowledge is compiled once and then kept current, not re-derived on every query.
This is the key difference: the wiki is a persistent, compounding artifact. The cross-references are already there. The contradictions have already been flagged. The synthesis already reflects everything you've read. The wiki keeps getting richer with every source you add and every question you ask.
You never (or rarely) write the wiki yourself — the LLM writes and maintains all of it. You're in charge of sourcing, exploration, and asking the right questions. The LLM does all the grunt work — the summarizing, cross-referencing, filing, and bookkeeping that makes a knowledge base actually useful over time. In practice, I have the LLM agent open on one side and Obsidian open on the other. The LLM makes edits based on our conversation, and I browse the results in real time — following links, checking the graph view, reading the updated pages. Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase.
This can apply to a lot of different contexts. A few examples:
Personal: tracking your own goals, health, psychology, self-improvement — filing journal entries, articles, podcast notes, and building up a structured picture of yourself over time.
Research: going deep on a topic over weeks or months — reading papers, articles, reports, and incrementally building a comprehensive wiki with an evolving thesis.
Reading a book: filing each chapter as you go, building out pages for characters, themes, plot threads, and how they connect. By the end you have a rich companion wiki. Think of fan wikis like Tolkien Gateway — thousands of interlinked pages covering characters, places, events, languages, built by a community of volunteers over years. You could build something like that personally as you read, with the LLM doing all the cross-referencing and maintenance.
Business/team: an internal wiki maintained by LLMs, fed by Slack threads, meeting transcripts, project documents, customer calls. Possibly with humans in the loop reviewing updates. The wiki stays current because the LLM does the maintenance that no one on the team wants to do.
Competitive analysis, due diligence, trip planning, course notes, hobby deep-dives — anything where you're accumulating knowledge over time and want it organized rather than scattered.
Architecture
There are three layers:
Raw sources — your curated collection of source documents. Articles, papers, images, data files. These are immutable — the LLM reads from them but never modifies them. This is your source of truth.
The wiki — a directory of LLM-generated markdown files. Summaries, entity pages, concept pages, comparisons, an overview, a synthesis. The LLM owns this layer entirely. It creates pages, updates them when new sources arrive, maintains cross-references, and keeps everything consistent. You read it; the LLM writes it.
The schema — a document (e.g. CLAUDE.md for Claude Code or AGENTS.md for Codex) that tells the LLM how the wiki is structured, what the conventions are, and what workflows to follow when ingesting sources, answering questions, or maintaining the wiki. This is the key configuration file — it's what makes the LLM a disciplined wiki maintainer rather than a generic chatbot. You and the LLM co-evolve this over time as you figure out what works for your domain.
Operations
Ingest. You drop a new source into the raw collection and tell the LLM to process it. An example flow: the LLM reads the source, discusses key takeaways with you, writes a summary page in the wiki, updates the index, updates relevant entity and concept pages across the wiki, and appends an entry to the log. A single source might touch 10-15 wiki pages. Personally I prefer to ingest sources one at a time and stay involved — I read the summaries, check the updates, and guide the LLM on what to emphasize. But you could also batch-ingest many sources at once with less supervision. It's up to you to develop the workflow that fits your style and document it in the schema for future sessions.
Query. You ask questions against the wiki. The LLM searches for relevant pages, reads them, and synthesizes an answer with citations. Answers can take different forms depending on the question — a markdown page, a comparison table, a slide deck (Marp), a chart (matplotlib), a canvas. The important insight: good answers can be filed back into the wiki as new pages. A comparison you asked for, an analysis, a connection you discovered — these are valuable and shouldn't disappear into chat history. This way your explorations compound in the knowledge base just like ingested sources do.
Lint. Periodically, ask the LLM to health-check the wiki. Look for: contradictions between pages, stale claims that newer sources have superseded, orphan pages with no inbound links, important concepts mentioned but lacking their own page, missing cross-references, data gaps that could be filled with a web search. The LLM is good at suggesting new questions to investigate and new sources to look for. This keeps the wiki healthy as it grows.
Indexing and logging
Two special files help the LLM (and you) navigate the wiki as it grows. They serve different purposes:
index.md is content-oriented. It's a catalog of everything in the wiki — each page listed with a link, a one-line summary, and optionally metadata like date or source count. Organized by category (entities, concepts, sources, etc.). The LLM updates it on every ingest. When answering a query, the LLM reads the index first to find relevant pages, then drills into them. This works surprisingly well at moderate scale (~100 sources, ~hundreds of pages) and avoids the need for embedding-based RAG infrastructure.
log.md is chronological. It's an append-only record of what happened and when — ingests, queries, lint passes. A useful tip: if each entry starts with a consistent prefix (e.g. ## [2026-04-02] ingest | Article Title), the log becomes parseable with simple unix tools — grep "^## \[" log.md | tail -5 gives you the last 5 entries. The log gives you a timeline of the wiki's evolution and helps the LLM understand what's been done recently.
Optional: CLI tools
At some point you may want to build small tools that help the LLM operate on the wiki more efficiently. A search engine over the wiki pages is the most obvious one — at small scale the index file is enough, but as the wiki grows you want proper search. qmd is a good option: it's a local search engine for markdown files with hybrid BM25/vector search and LLM re-ranking, all on-device. It has both a CLI (so the LLM can shell out to it) and an MCP server (so the LLM can use it as a native tool). You could also build something simpler yourself — the LLM can help you vibe-code a naive search script as the need arises.
Tips and tricks
Obsidian Web Clipper is a browser extension that converts web articles to markdown. Very useful for quickly getting sources into your raw collection.
Download images locally. In Obsidian Settings → Files and links, set "Attachment folder path" to a fixed directory (e.g.
raw/assets/). Then in Settings → Hotkeys, search for "Download" to find "Download attachments for current file" and bind it to a hotkey (e.g. Ctrl+Shift+D). After clipping an article, hit the hotkey and all images get downloaded to local disk. This is optional but useful — it lets the LLM view and reference images directly instead of relying on URLs that may break. Note that LLMs can't natively read markdown with inline images in one pass — the workaround is to have the LLM read the text first, then view some or all of the referenced images separately to gain additional context. It's a bit clunky but works well enough.Obsidian's graph view is the best way to see the shape of your wiki — what's connected to what, which pages are hubs, which are orphans.
Marp is a markdown-based slide deck format. Obsidian has a plugin for it. Useful for generating presentations directly from wiki content.
Dataview is an Obsidian plugin that runs queries over page frontmatter. If your LLM adds YAML frontmatter to wiki pages (tags, dates, source counts), Dataview can generate dynamic tables and lists.
The wiki is just a git repo of markdown files. You get version history, branching, and collaboration for free.
Why this works
The tedious part of maintaining a knowledge base is not the reading or the thinking — it's the bookkeeping. Updating cross-references, keeping summaries current, noting when new data contradicts old claims, maintaining consistency across dozens of pages. Humans abandon wikis because the maintenance burden grows faster than the value. LLMs don't get bored, don't forget to update a cross-reference, and can touch 15 files in one pass. The wiki stays maintained because the cost of maintenance is near zero.
The human's job is to curate sources, direct the analysis, ask good questions, and think about what it all means. The LLM's job is everything else.
The idea is related in spirit to Vannevar Bush's Memex (1945) — a personal, curated knowledge store with associative trails between documents. Bush's vision was closer to this than to what the web became: private, actively curated, with the connections between documents as valuable as the documents themselves. The part he couldn't solve was who does the maintenance. The LLM handles that.
Note
This document is intentionally abstract. It describes the idea, not a specific implementation. The exact directory structure, the schema conventions, the page formats, the tooling — all of that will depend on your domain, your preferences, and your LLM of choice. Everything mentioned above is optional and modular — pick what's useful, ignore what isn't. For example: your sources might be text-only, so you don't need image handling at all. Your wiki might be small enough that the index file is all you need, no search engine required. You might not care about slide decks and just want markdown pages. You might want a completely different set of output formats. The right way to use this is to share it with your LLM agent and work together to instantiate a version that fits your needs. The document's only job is to communicate the pattern. Your LLM can figure out the rest.
476 files · 469 not served here
- .github/scripts/package-windows-portable.ps1 (not served here)
- .github/scripts/verify-macos-release.sh (not served here)
- .github/workflows/build.yml (not served here)
- .github/workflows/ci.yml (not served here)
- .gitignore (not served here)
- ATTRIBUTION.md
- LICENSE
- README.md
- README_CN.md
- README_JA.md
- README_KO.md
- assets/1-deepresearch.jpg (not served here)
- assets/2-ai_chat.jpg (not served here)
- assets/3-knowledge_graph.jpg (not served here)
- assets/4-chrome_extension_webclipper.jpg (not served here)
- assets/5-obsidian_compatibility.jpg (not served here)
- assets/kg_community.jpg (not served here)
- assets/kg_insights.jpg (not served here)
- assets/llm_wiki_arch.jpg (not served here)
- assets/overview.jpg (not served here)
- components.json (not served here)
- extension/Readability.js (not served here)
- extension/Turndown.js (not served here)
- extension/background.js (not served here)
- extension/clipper-core.js (not served here)
- extension/icon128.png (not served here)
- extension/icon16.png (not served here)
- extension/icon48.png (not served here)
- extension/manifest.json (not served here)
- extension/popup.html (not served here)
- extension/popup.js (not served here)
- index.html (not served here)
- llm-wiki.md
- logo.jpg (not served here)
- mcp-server/README.md (not served here)
- mcp-server/package-lock.json (not served here)
- mcp-server/package.json (not served here)
- mcp-server/src/api-client.ts (not served here)
- mcp-server/src/index.ts (not served here)
- mcp-server/src/project-binding.ts (not served here)
- mcp-server/src/version.ts (not served here)
- mcp-server/test/api-client.test.ts (not served here)
- mcp-server/test/project-binding.test.ts (not served here)
- mcp-server/test/version.test.ts (not served here)
- mcp-server/tsconfig.json (not served here)
- package-lock.json (not served here)
- package.json (not served here)
- plans/multimodal-images.md (not served here)
- scripts/debug_ollama_tokens.py (not served here)
- src-tauri/Cargo.lock (not served here)
- src-tauri/Cargo.toml (not served here)
- src-tauri/build.rs (not served here)
- src-tauri/capabilities/default.json (not served here)
- src-tauri/icons/128x128.png (not served here)
- src-tauri/icons/[email protected] (not served here)
- src-tauri/icons/32x32.png (not served here)
- src-tauri/icons/icon.icns (not served here)
- src-tauri/icons/icon.ico (not served here)
- src-tauri/icons/icon.png (not served here)
- src-tauri/pdfium/SHA256SUMS (not served here)
- src-tauri/pdfium/libpdfium-arm64.so (not served here)
- src-tauri/pdfium/libpdfium-x86_64.dylib (not served here)
- src-tauri/pdfium/libpdfium.dylib (not served here)
- src-tauri/pdfium/libpdfium.so (not served here)
- src-tauri/pdfium/pdfium.dll (not served here)
- src-tauri/src/agent/cancel.rs (not served here)
- src-tauri/src/agent/context.rs (not served here)
- src-tauri/src/agent/events.rs (not served here)
- src-tauri/src/agent/mod.rs (not served here)
- src-tauri/src/agent/permissions.rs (not served here)
- src-tauri/src/agent/provider.rs (not served here)
- src-tauri/src/agent/router.rs (not served here)
- src-tauri/src/agent/runtime.rs (not served here)
- src-tauri/src/agent/session.rs (not served here)
- src-tauri/src/agent/skills.rs (not served here)
- src-tauri/src/agent/tools.rs (not served here)
- src-tauri/src/agent/types.rs (not served here)
- src-tauri/src/agent/workspace.rs (not served here)
- src-tauri/src/api_server.rs (not served here)
- src-tauri/src/clip_server.rs (not served here)
- src-tauri/src/commands/claude_cli.rs (not served here)
- src-tauri/src/commands/cli_resolver.rs (not served here)
- src-tauri/src/commands/codex_cli.rs (not served here)
- src-tauri/src/commands/ebook.rs (not served here)
- src-tauri/src/commands/external_search.rs (not served here)
- src-tauri/src/commands/extract_images.rs (not served here)
- src-tauri/src/commands/file_history.rs (not served here)
- src-tauri/src/commands/file_sync.rs (not served here)
- src-tauri/src/commands/fs.rs (not served here)
- src-tauri/src/commands/fs_anydoc_benchmark.rs (not served here)
- src-tauri/src/commands/mod.rs (not served here)
- src-tauri/src/commands/page_embedding.rs (not served here)
- src-tauri/src/commands/project.rs (not served here)
- src-tauri/src/commands/project_maintenance.rs (not served here)
- src-tauri/src/commands/search.rs (not served here)
- src-tauri/src/commands/vectorstore.rs (not served here)
- src-tauri/src/cors.rs (not served here)
- src-tauri/src/lib.rs (not served here)
- src-tauri/src/main.rs (not served here)
- src-tauri/src/panic_guard.rs (not served here)
- src-tauri/src/proxy.rs (not served here)
- src-tauri/src/server_bind.rs (not served here)
- src-tauri/src/tray.rs (not served here)
- src-tauri/src/types/mod.rs (not served here)
- src-tauri/src/types/wiki.rs (not served here)
- src-tauri/tauri.conf.json (not served here)
- src-tauri/tauri.linux.conf.json (not served here)
- src-tauri/tauri.macos.conf.json (not served here)
- src-tauri/tauri.windows.conf.json (not served here)
- src-tauri/windows-app-manifest.xml (not served here)
- src/App.tsx (not served here)
- src/assets/logo.jpg (not served here)
- src/commands/file-sync.ts (not served here)
- src/commands/fs.test.ts (not served here)
- src/commands/fs.ts (not served here)
- src/components/app-dialog-host.tsx (not served here)
- src/components/chat/agent-file-activity.tsx (not served here)
- src/components/chat/chat-input.test.ts (not served here)
- src/components/chat/chat-input.tsx (not served here)
- src/components/chat/chat-message.tsx (not served here)
- src/components/chat/chat-panel.tsx (not served here)
- src/components/chat/reference-knowledge-graph.tsx (not served here)
- src/components/editor/file-history-panel.tsx (not served here)
- src/components/editor/file-preview.test.ts (not served here)
- src/components/editor/file-preview.tsx (not served here)
- src/components/editor/frontmatter-panel.tsx (not served here)
- src/components/editor/page-links-panel.tsx (not served here)
- src/components/editor/wiki-editor.tsx (not served here)
- src/components/editor/wiki-reader.tsx (not served here)
- src/components/error-boundary.tsx (not served here)
- src/components/graph/graph-layout-worker.ts (not served here)
- src/components/graph/graph-view.tsx (not served here)
- src/components/layout/activity-panel.tsx (not served here)
- src/components/layout/app-layout-visibility.test.ts (not served here)
- src/components/layout/app-layout-visibility.ts (not served here)
- src/components/layout/app-layout.tsx (not served here)
- src/components/layout/content-area.tsx (not served here)
- src/components/layout/file-tree-utils.test.ts (not served here)
- src/components/layout/file-tree-utils.ts (not served here)
- src/components/layout/file-tree.tsx (not served here)
- src/components/layout/icon-sidebar.tsx (not served here)
- src/components/layout/knowledge-tree.tsx (not served here)
- src/components/layout/preview-panel.tsx (not served here)
- src/components/layout/research-panel-nav.test.ts (not served here)
- src/components/layout/research-panel-nav.ts (not served here)
- src/components/layout/research-panel.tsx (not served here)
- src/components/layout/sidebar-panel.tsx (not served here)
- src/components/layout/update-banner.tsx (not served here)
- src/components/lint/lint-view.test.ts (not served here)
- src/components/lint/lint-view.tsx (not served here)
- src/components/mermaid-diagram.test.tsx (not served here)
- src/components/mermaid-diagram.tsx (not served here)
- src/components/project/create-project-dialog.test.ts (not served here)
- src/components/project/create-project-dialog.tsx (not served here)
- src/components/project/template-picker.tsx (not served here)
- src/components/project/welcome-screen.tsx (not served here)
- src/components/review/review-view.tsx (not served here)
- src/components/search/search-view.tsx (not served here)
- src/components/settings/context-size-selector.tsx (not served here)
- src/components/settings/llm-presets.ts (not served here)
- src/components/settings/preset-resolver.test.ts (not served here)
- src/components/settings/preset-resolver.ts (not served here)
- src/components/settings/sections/about-section.tsx (not served here)
- src/components/settings/sections/api-server-section.test.ts (not served here)
- src/components/settings/sections/api-server-section.tsx (not served here)
- src/components/settings/sections/changelog-section.tsx (not served here)
- src/components/settings/sections/embedding-section.tsx (not served here)
- src/components/settings/sections/general-section.tsx (not served here)
- src/components/settings/sections/interface-section.tsx (not served here)
- src/components/settings/sections/llm-provider-section.test.ts (not served here)
- src/components/settings/sections/llm-provider-section.tsx (not served here)
- src/components/settings/sections/maintenance-section.tsx (not served here)
- src/components/settings/sections/mineru-section.tsx (not served here)
- src/components/settings/sections/multimodal-section.tsx (not served here)
- src/components/settings/sections/network-section.tsx (not served here)
- src/components/settings/sections/output-section.tsx (not served here)
- src/components/settings/sections/scheduled-import-section.tsx (not served here)
- src/components/settings/sections/skills-section.tsx (not served here)
- src/components/settings/sections/source-watch-section.tsx (not served here)
- src/components/settings/sections/web-search-section.tsx (not served here)
- src/components/settings/settings-types.ts (not served here)
- src/components/settings/settings-view.tsx (not served here)
- src/components/sources/sources-view.test.ts (not served here)
- src/components/sources/sources-view.tsx (not served here)
- src/components/ui/button.tsx (not served here)
- src/components/ui/dialog.tsx (not served here)
- src/components/ui/input.tsx (not served here)
- src/components/ui/label.tsx (not served here)
- src/components/ui/resizable.tsx (not served here)
- src/components/ui/scroll-area.tsx (not served here)
- src/components/ui/separator.tsx (not served here)
- src/components/ui/tooltip.tsx (not served here)
- src/hooks/use-global-shortcut.ts (not served here)
- src/i18n/en.json (not served here)
- src/i18n/i18n-parity.test.ts (not served here)
- src/i18n/index.ts (not served here)
- src/i18n/it.json (not served here)
- src/i18n/ru.json (not served here)
- src/i18n/zh.json (not served here)
- src/index.css (not served here)
- src/lib/__tests__/claude-cli-transport.test.ts (not served here)
- src/lib/__tests__/dedup_embedding.test.ts (not served here)
- src/lib/__tests__/llm-providers.test.ts (not served here)
- src/lib/__tests__/wiki-graph.test.ts (not served here)
- src/lib/agent-file-activity.test.ts (not served here)
- src/lib/agent-file-activity.ts (not served here)
- src/lib/anytxt-search.test.ts (not served here)
- src/lib/anytxt-search.ts (not served here)
- src/lib/api-server-constants.ts (not served here)
- src/lib/api-server.real-llm.test.ts (not served here)
- src/lib/api-token.test.ts (not served here)
- src/lib/api-token.ts (not served here)
- src/lib/auto-save.test.ts (not served here)
- src/lib/auto-save.ts (not served here)
- src/lib/azure-openai.test.ts (not served here)
- src/lib/azure-openai.ts (not served here)
- src/lib/changelog.test.ts (not served here)
- src/lib/changelog.ts (not served here)
- src/lib/chat-agent-types.ts (not served here)
- src/lib/chat-image-utils.ts (not served here)
- src/lib/chat-save-to-wiki.test.ts (not served here)
- src/lib/chat-save-to-wiki.ts (not served here)
- src/lib/claude-cli-transport.ts (not served here)
- src/lib/clip-watcher.ts (not served here)
- src/lib/codex-cli-transport.test.ts (not served here)
- src/lib/codex-cli-transport.ts (not served here)
- src/lib/concurrency-limits.test.ts (not served here)
- src/lib/concurrency-limits.ts (not served here)
- src/lib/connection-tests.test.ts (not served here)
- src/lib/connection-tests.ts (not served here)
- src/lib/context-budget.test.ts (not served here)
- src/lib/context-budget.ts (not served here)
- src/lib/dedup-queue.test.ts (not served here)
- src/lib/dedup-queue.ts (not served here)
- src/lib/dedup-runner.test.ts (not served here)
- src/lib/dedup-runner.ts (not served here)
- src/lib/dedup-storage.ts (not served here)
- src/lib/dedup.test.ts (not served here)
- src/lib/dedup.ts (not served here)
- src/lib/dedup_embedding.ts (not served here)
- src/lib/deep-research.test.ts (not served here)
- src/lib/deep-research.ts (not served here)
- src/lib/detect-language.property.test.ts (not served here)
- src/lib/detect-language.test.ts (not served here)
- src/lib/detect-language.ts (not served here)
- src/lib/embedding.real-llm.test.ts (not served here)
- src/lib/embedding.test.ts (not served here)
- src/lib/embedding.ts (not served here)
- src/lib/endpoint-normalizer.test.ts (not served here)
- src/lib/endpoint-normalizer.ts (not served here)
- src/lib/enrich-wikilinks.real-llm.test.ts (not served here)
- src/lib/enrich-wikilinks.scenarios.test.ts (not served here)
- src/lib/enrich-wikilinks.test.ts (not served here)
- src/lib/enrich-wikilinks.ts (not served here)
- src/lib/extract-source-images.test.ts (not served here)
- src/lib/extract-source-images.ts (not served here)
- src/lib/file-tree-order.test.ts (not served here)
- src/lib/file-tree-order.ts (not served here)
- src/lib/file-types.test.ts (not served here)
- src/lib/file-types.ts (not served here)
- src/lib/frontmatter.test.ts (not served here)
- src/lib/frontmatter.ts (not served here)
- src/lib/graph-filters.test.ts (not served here)
- src/lib/graph-filters.ts (not served here)
- src/lib/graph-insights.test.ts (not served here)
- src/lib/graph-insights.ts (not served here)
- src/lib/graph-relevance.test.ts (not served here)
- src/lib/graph-relevance.ts (not served here)
- src/lib/graph-search.test.ts (not served here)
- src/lib/graph-search.ts (not served here)
- src/lib/graph-visibility.test.ts (not served here)
- src/lib/graph-visibility.ts (not served here)
- src/lib/greeting-detector.test.ts (not served here)
- src/lib/greeting-detector.ts (not served here)
- src/lib/has-usable-llm.test.ts (not served here)
- src/lib/has-usable-llm.ts (not served here)
- src/lib/image-caption-pipeline.test.ts (not served here)
- src/lib/image-caption-pipeline.ts (not served here)
- src/lib/ingest-cache.test.ts (not served here)
- src/lib/ingest-cache.ts (not served here)
- src/lib/ingest-commit-coordinator.test.ts (not served here)
- src/lib/ingest-commit-coordinator.ts (not served here)
- src/lib/ingest-parse.test.ts (not served here)
- src/lib/ingest-queue.integration.test.ts (not served here)
- src/lib/ingest-queue.test.ts (not served here)
- src/lib/ingest-queue.ts (not served here)
- src/lib/ingest-reasoning.test.ts (not served here)
- src/lib/ingest-sanitize.test.ts (not served here)
- src/lib/ingest-sanitize.ts (not served here)
- src/lib/ingest-source-path-collision.test.ts (not served here)
- src/lib/ingest.prompt.test.ts (not served here)
- src/lib/ingest.real-llm.test.ts (not served here)
- src/lib/ingest.scenarios.test.ts (not served here)
- src/lib/ingest.ts (not served here)
- src/lib/keyboard-utils.test.ts (not served here)
- src/lib/keyboard-utils.ts (not served here)
- src/lib/knowledge-source-filter.test.ts (not served here)
- src/lib/knowledge-source-filter.ts (not served here)
- src/lib/language-metadata.test.ts (not served here)
- src/lib/language-metadata.ts (not served here)
- src/lib/latex-to-unicode.ts (not served here)
- src/lib/lint-config.test.ts (not served here)
- src/lib/lint-config.ts (not served here)
- src/lib/lint-fixes.test.ts (not served here)
- src/lib/lint-fixes.ts (not served here)
- src/lib/lint-structural-core.test.ts (not served here)
- src/lib/lint-structural-core.ts (not served here)
- src/lib/lint-structural.worker.ts (not served here)
- src/lib/lint.real-llm.test.ts (not served here)
- src/lib/lint.scenarios.test.ts (not served here)
- src/lib/lint.test.ts (not served here)
- src/lib/lint.ts (not served here)
- src/lib/llm-client.real-llm.test.ts (not served here)
- src/lib/llm-client.test.ts (not served here)
- src/lib/llm-client.ts (not served here)
- src/lib/llm-providers.test.ts (not served here)
- src/lib/llm-providers.ts (not served here)
- src/lib/llm-task-routing.test.ts (not served here)
- src/lib/llm-task-routing.ts (not served here)
- src/lib/macos-release-verification.test.ts (not served here)
- src/lib/markdown-image-resolver.test.ts (not served here)
- src/lib/markdown-image-resolver.ts (not served here)
- src/lib/mineru.test.ts (not served here)
- src/lib/mineru.ts (not served here)
- src/lib/natural-sort.test.ts (not served here)
- src/lib/natural-sort.ts (not served here)
- src/lib/optimize-research-topic.test.ts (not served here)
- src/lib/optimize-research-topic.ts (not served here)
- src/lib/output-language-options.ts (not served here)
- src/lib/output-language.test.ts (not served here)
- src/lib/output-language.ts (not served here)
- src/lib/page-merge.test.ts (not served here)
- src/lib/page-merge.ts (not served here)
- src/lib/parsed-source-output.test.ts (not served here)
- src/lib/parsed-source-output.ts (not served here)
- src/lib/path-utils.property.test.ts (not served here)
- src/lib/path-utils.test.ts (not served here)
- src/lib/path-utils.ts (not served here)
- src/lib/persist.integration.test.ts (not served here)
- src/lib/persist.ts (not served here)
- src/lib/project-file-sync.test.ts (not served here)
- src/lib/project-file-sync.ts (not served here)
- src/lib/project-file-tree-refresh.test.ts (not served here)
- src/lib/project-file-tree-refresh.ts (not served here)
- src/lib/project-identity.ts (not served here)
- src/lib/project-mutex.test.ts (not served here)
- src/lib/project-mutex.ts (not served here)
- src/lib/project-store-source-watch.test.ts (not served here)
- src/lib/project-store.test.ts (not served here)
- src/lib/project-store.ts (not served here)
- src/lib/proxy-config.test.ts (not served here)
- src/lib/proxy-config.ts (not served here)
- src/lib/raw-source-resolver.test.ts (not served here)
- src/lib/raw-source-resolver.ts (not served here)
- src/lib/reasoning-capabilities.test.ts (not served here)
- src/lib/reasoning-capabilities.ts (not served here)
- src/lib/reasoning-detector.test.ts (not served here)
- src/lib/reasoning-detector.ts (not served here)
- src/lib/research-query-grounding.test.ts (not served here)
- src/lib/research-query-grounding.ts (not served here)
- src/lib/reset-project-state.test.ts (not served here)
- src/lib/reset-project-state.ts (not served here)
- src/lib/review-batch-research.test.ts (not served here)
- src/lib/review-batch-research.ts (not served here)
- src/lib/review-create-page.test.ts (not served here)
- src/lib/review-create-page.ts (not served here)
- src/lib/review-utils.property.test.ts (not served here)
- src/lib/review-utils.test.ts (not served here)
- src/lib/review-utils.ts (not served here)
- src/lib/scheduled-import.test.ts (not served here)
- src/lib/scheduled-import.ts (not served here)
- src/lib/search-rrf.test.ts (not served here)
- src/lib/search.scenarios.test.ts (not served here)
- src/lib/search.ts (not served here)
- src/lib/selection-edit.test.ts (not served here)
- src/lib/selection-edit.ts (not served here)
- src/lib/source-delete-decision.test.ts (not served here)
- src/lib/source-delete-decision.ts (not served here)
- src/lib/source-filter.test.ts (not served here)
- src/lib/source-filter.ts (not served here)
- src/lib/source-identity.test.ts (not served here)
- src/lib/source-identity.ts (not served here)
- src/lib/source-lifecycle-delete.test.ts (not served here)
- src/lib/source-lifecycle.test.ts (not served here)
- src/lib/source-lifecycle.ts (not served here)
- src/lib/source-preprocess.test.ts (not served here)
- src/lib/source-preprocess.ts (not served here)
- src/lib/source-watch-config.test.ts (not served here)
- src/lib/source-watch-config.ts (not served here)
- src/lib/source-watch-defaults.json (not served here)
- src/lib/sources-merge.test.ts (not served here)
- src/lib/sources-merge.ts (not served here)
- src/lib/sources-tree-delete.test.ts (not served here)
- src/lib/sources-tree-delete.ts (not served here)
- src/lib/sweep-chained.real-llm.test.ts (not served here)
- src/lib/sweep-reviews-build-wiki-index.test.ts (not served here)
- src/lib/sweep-reviews.property.test.ts (not served here)
- src/lib/sweep-reviews.race.test.ts (not served here)
- src/lib/sweep-reviews.real-llm.test.ts (not served here)
- src/lib/sweep-reviews.scenarios.test.ts (not served here)
- src/lib/sweep-reviews.test.ts (not served here)
- src/lib/sweep-reviews.ts (not served here)
- src/lib/tauri-fetch.test.ts (not served here)
- src/lib/tauri-fetch.ts (not served here)
- src/lib/templates.ts (not served here)
- src/lib/text-chunker.test.ts (not served here)
- src/lib/text-chunker.ts (not served here)
- src/lib/theme.ts (not served here)
- src/lib/update-check.test.ts (not served here)
- src/lib/update-check.ts (not served here)
- src/lib/url-source-import.test.ts (not served here)
- src/lib/url-source-import.ts (not served here)
- src/lib/utils.ts (not served here)
- src/lib/vision-caption.real-llm.test.ts (not served here)
- src/lib/vision-caption.test.ts (not served here)
- src/lib/vision-caption.ts (not served here)
- src/lib/vision.real-llm.test.ts (not served here)
- src/lib/web-search.test.ts (not served here)
- src/lib/web-search.ts (not served here)
- src/lib/wiki-cleanup.test.ts (not served here)
- src/lib/wiki-cleanup.ts (not served here)
- src/lib/wiki-filename.test.ts (not served here)
- src/lib/wiki-filename.ts (not served here)
- src/lib/wiki-graph-analysis.test.ts (not served here)
- src/lib/wiki-graph-analysis.ts (not served here)
- src/lib/wiki-graph-analysis.worker.ts (not served here)
- src/lib/wiki-graph.ts (not served here)
- src/lib/wiki-page-delete.test.ts (not served here)
- src/lib/wiki-page-delete.ts (not served here)
- src/lib/wiki-page-resolver.test.ts (not served here)
- src/lib/wiki-page-resolver.ts (not served here)
- src/lib/wiki-page-types.test.ts (not served here)
- src/lib/wiki-page-types.ts (not served here)
- src/lib/wiki-schema.test.ts (not served here)
- src/lib/wiki-schema.ts (not served here)
- src/lib/wiki-type-style.test.ts (not served here)
- src/lib/wiki-type-style.ts (not served here)
- src/lib/wikilink-transform.test.ts (not served here)
- src/lib/wikilink-transform.ts (not served here)
- src/main.tsx (not served here)
- src/stores/activity-store.ts (not served here)
- src/stores/app-dialog-store.test.ts (not served here)
- src/stores/app-dialog-store.ts (not served here)
- src/stores/chat-messages-to-llm.test.ts (not served here)
- src/stores/chat-store.test.ts (not served here)
- src/stores/chat-store.ts (not served here)
- src/stores/file-sync-store.ts (not served here)
- src/stores/lint-store.test.ts (not served here)
- src/stores/lint-store.ts (not served here)
- src/stores/research-store.test.ts (not served here)
- src/stores/research-store.ts (not served here)
- src/stores/review-store.property.test.ts (not served here)
- src/stores/review-store.test.ts (not served here)
- src/stores/review-store.ts (not served here)
- src/stores/update-store.ts (not served here)
- src/stores/wiki-store.test.ts (not served here)
- src/stores/wiki-store.ts (not served here)
- src/stores/zoom-store.ts (not served here)
- src/test-helpers/deferred.ts (not served here)
- src/test-helpers/fs-temp.ts (not served here)
- src/test-helpers/load-test-env.ts (not served here)
- src/test-helpers/mock-stream-chat.ts (not served here)
- src/test-helpers/real-content.ts (not served here)
- src/test-helpers/scenarios/enrich-scenarios.ts (not served here)
- src/test-helpers/scenarios/ingest-scenarios.ts (not served here)
- src/test-helpers/scenarios/lint-scenarios.ts (not served here)
- src/test-helpers/scenarios/materialize.ts (not served here)
- src/test-helpers/scenarios/search-scenarios.ts (not served here)
- src/test-helpers/scenarios/sweep-scenarios.ts (not served here)
- src/test-helpers/scenarios/types.ts (not served here)
- src/types/wiki.ts (not served here)
- src/vite-env.d.ts (not served here)
- tsconfig.app.json (not served here)
- tsconfig.json (not served here)
- tsconfig.node.json (not served here)
- vite.config.ts (not served here)
Advantages
- Incremental updates save tokens and time by hashing source files and skipping unchanged content. evidence: README.md
- Provides a visual knowledge graph with community detection to surface hidden connections and knowledge gaps. evidence: README.md
Limitations
- Requires consistent LLM API access for the ingest and query pipelines to function. evidence: README.md
- The system relies on specific folder structures and frontmatter conventions to maintain the wiki. evidence: README.md
Security
Risk level: Low risk
This brain runs
Binaries (5)
src-tauri/pdfium/libpdfium-arm64.so:ships native binariessrc-tauri/pdfium/libpdfium-x86_64.dylib:ships native binariessrc-tauri/pdfium/libpdfium.dylib:ships native binariessrc-tauri/pdfium/libpdfium.so:ships native binariessrc-tauri/pdfium/pdfium.dll:ships native binaries
- Low risk: scripts-present (vite.config.ts)
Attribution and licence
- First committed by
nashsu
- Publisher
- nash_su (Community)
- Source
- nashsu/llm_wiki · commit e08cfce
- Licence
- GNU General Public License v3.0 only (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- nashsu, annieyii, xinyuan0801, Thomas-Piva, b9bt5dp9hg-ship-it
AutoGineer is not affiliated with or endorsed by nashsu.
Install from source
469 of its files are not served here, so there is no ZIP. nashsu/llm_wiki at e08cfce