Use when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
Inspired by Andrej Karpathy's LLM Wiki pattern (gist). This skill turns Claude Code (or any agent CLI) into a disciplined wiki maintainer that incrementally builds and maintains a persistent, interlinked Obsidian vault as you feed it sources. The knowledge compounds — cross-references, contradictions, and synthesis are already there when you query.
Most LLM+docs workflows are RAG: retrieve fragments at query time, synthesize from scratch, forget. The wiki is compounding: sources are read once, integrated into a persistent markdown knowledge base, and kept current. You curate and ask; the LLM reads, files, cross-references, and maintains.
Obsidian is the IDE. The LLM is the programmer. The wiki is the codebase.
Do NOT use when: you need one-shot Q&A over a fixed document (use RAG), you don't plan to add sources over time, or you don't want Obsidian in the loop.
vault/
├── raw/ # Layer 1 — IMMUTABLE source of truth
│ ├── <source files> # Articles, papers, PDFs, images, data
│ └── assets/ # Downloaded images from clipped articles
├── wiki/ # Layer 2 — LLM-owned knowledge base
│ ├── index.md # Content catalog (LLM updates every ingest)
│ ├── log.md # Append-only timeline (## [YYYY-MM-DD] <op> | <title>)
│ ├── entities/ # Person/Org/Place pages
│ ├── concepts/ # Ideas, theories, frameworks
│ ├── sources/ # One summary page per ingested source
│ ├── comparisons/ # Cross-source analysis pages
│ └── synthesis/ # High-level syntheses, theses, overviews
├── CLAUDE.md # Schema + conventions (Claude Code)
└── AGENTS.md # Same content, for Codex/Cursor/Antigravity
references/ingest-workflow.md.index.md first, drills into relevant pages, synthesizes with citations. Good answers get filed back into the wiki so explorations compound. See references/query-workflow.md.references/lint-workflow.md.# 1. Initialize a vault (in Obsidian's vault directory)
python scripts/init_vault.py --path ~/vaults/research --topic "LLM interpretability"
# 2. Drop a source into raw/, then ingest
/wiki-ingest ~/vaults/research/raw/anthropic-monosemanticity.pdf
# 3. Ask questions (answers can be re-filed into the wiki)
/wiki-query "how does monosemanticity compare to mechanistic interpretability?"
# 4. Periodic health check
/wiki-lint
# 5. See the timeline
/wiki-log --last 10
| Command | Purpose |
|---|---|
/wiki-init | Bootstrap a fresh vault with schema files + starter structure |
/wiki-ingest <path> | Read a source, discuss, update wiki, log it |
/wiki-query <question> | Search wiki, synthesize answer, offer to file back |
/wiki-lint | Run health check — contradictions, orphans, stale claims, gaps |
/wiki-log | Show recent log entries (uses unix tools on log.md) |
| Agent | When dispatched |
|---|---|
wiki-ingestor | Delegated ingest flow — reads source, proposes updates, applies after your approval |
wiki-linter | Runs the health-check workflow independently, reports findings |
wiki-librarian | Answers queries using index-first search, synthesizes with citations |
scripts/)All tools are standard library only (no pip installs). Run with python scripts/<tool>.py --help.
| Script | Purpose |
|---|---|
init_vault.py | Create folder structure + seed CLAUDE.md, AGENTS.md, index.md, log.md |
ingest_source.py | Helper: extract text/frontmatter from a source file, ready for LLM review |
update_index.py | Regenerate index.md from wiki page frontmatter (category, date, source count) |
append_log.py | Append a standardized log entry ## [YYYY-MM-DD] <op> | <title> |
wiki_search.py | BM25 search over wiki pages (standalone fallback when index.md isn't enough) |
lint_wiki.py | Find orphans (no inbound links), stale pages, missing cross-refs, broken links |
graph_analyzer.py | Compute link graph stats — hubs, orphans, clusters, disconnected components |
export_marp.py | Render a wiki page (or subtree) to a Marp slide deck |
The vault's schema lives in CLAUDE.md (Claude Code) or AGENTS.md (Codex/Cursor/Antigravity/OpenCode). The same content works in both. This plugin ships both templates. For per-tool setup instructions see references/cross-tool-setup.md.
CLAUDE.md → Claude Code
AGENTS.md → Codex CLI, Cursor, Antigravity, OpenCode, Gemini CLI
.cursorrules → legacy Cursor (pre-AGENTS.md)
The scripts are pure Python stdlib → run identically everywhere. Only the loader file changes per tool.
raw/raw/assets/. Settings → Hotkeys → bind "Download attachments for current file" to Ctrl+Shift+DFull setup walkthrough: references/obsidian-setup.md
| Plain RAG | LLM Wiki |
|---|---|
| Rediscover knowledge each query | Knowledge accumulates |
| Cross-references re-computed every time | Cross-references pre-written and maintained |
| Contradictions surface only if you ask | Contradictions flagged during ingest |
| Exploration disappears into chat history | Good answers re-filed as new pages |
| Scales by embeddings infrastructure | Scales by markdown + index.md + optional local search |
At ~100 sources / hundreds of pages, index.md + filesystem search is enough. Past that, layer in a local search tool like qmd or use scripts/wiki_search.py.
context: fork)This skill is marked context: fork so other skills can chain into it:
para-memory-files — PARA-method memory; complementary as long-term personal memory that feeds sources into the wikiobsidian-vault (mattpocock) — lightweight Obsidian note helper; this skill is the maintained-wiki layer on toprag-design — when wiki outgrows ~500 pages, use rag-design to bolt on a retrieval layermcp-design — expose the wiki as an MCP toolagent-communication — for multi-agent wiki maintenance (ingestor + linter + librarian)references/wiki-schema.md — full vault layout, page frontmatter, naming conventionsreferences/page-formats.md — entity, concept, source, comparison, synthesis templatesreferences/ingest-workflow.md — the detailed ingest flow the wiki-ingestor agent followsreferences/query-workflow.md — query patterns, citation format, re-filing answersreferences/lint-workflow.md — health-check heuristicsreferences/obsidian-setup.md — Obsidian plugins, hotkeys, vault configreferences/cross-tool-setup.md — per-tool setup (Codex, Cursor, Antigravity, etc.)references/memex-principles.md — Bush's Memex, why the LLM changes the maintenance mathassets/)CLAUDE.md.template, AGENTS.md.template, .cursorrules.template — schema loaders per toolindex.md.template, log.md.template — starter index and logpage-templates/ — entity, concept, source-summary, comparison, synthesisexample-vault/ — small worked example you can study or copyThe LLM never edits files in raw/. Ever. Sources are immutable. All LLM writes go to wiki/. If you need to correct a source, do it in raw/ yourself — then re-ingest.