Implements Karpathy's LLM Wiki pattern as a production-grade plugin. The LLM
incrementally ingests sources into a persistent, interlinked Obsidian vault —
updating entity/concept/source pages, flagging contradictions, maintaining an
index and append-only log. Knowledge compounds instead of being re-derived by
RAG on every query.
Plugin contents (engineering/llm-wiki/):
- SKILL.md with `context: fork` frontmatter for skill chaining
- 3 sub-agents: wiki-ingestor, wiki-librarian, wiki-linter
- 5 slash commands: /wiki-init, /wiki-ingest, /wiki-query, /wiki-lint, /wiki-log
- 8 Python tools (stdlib only): init_vault, ingest_source, update_index,
append_log, wiki_search (BM25), lint_wiki, graph_analyzer, export_marp
- 8 reference docs: schema, page-formats, ingest/query/lint workflows,
obsidian-setup, cross-tool-setup, memex-principles
- Vault templates: CLAUDE.md, AGENTS.md, .cursorrules, index.md, log.md,
5 page templates (entity, concept, source, comparison, synthesis)
- Worked example vault on "LLM interpretability"
- .claude-plugin/plugin.json manifest
Cross-tool compatibility: the scripts are pure Python stdlib. Only the schema
loader changes per tool (CLAUDE.md for Claude Code, AGENTS.md for Codex CLI /
Cursor / Antigravity / OpenCode / Gemini CLI, .cursorrules for legacy Cursor).
init_vault.py --tool all installs all three.
Repo-level registration:
- Commands mirrored to top-level commands/ for repo-wide discovery
- Agents mirrored to agents/engineering/ as cs-wiki-{ingestor,librarian,linter}
- .claude-plugin/marketplace.json: new llm-wiki entry + version bump to v2.3.0
- CLAUDE.md updated: 234 skills, 313 Python tools, 432 refs, 28 agents, 27 commands
Also saved (deferred): craighewitt-mattpocock reimplementation plan at
documentation/implementation/ — 4-pod proposal for building better versions
of selected skills from thecraighewitt-skills and mattpocock-skills
collections. Not executed; awaiting user confirmation on scope.
End-to-end smoke test passed: init_vault → ingest → update_index → append_log
→ wiki_search → lint → graph_analyzer → export_marp all run against a fresh
vault with real pages, wikilinks, and frontmatter.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.2 KiB
llm-wiki
A second brain for Claude Code + Obsidian. Inspired by Andrej Karpathy's LLM Wiki gist.
Turn any LLM CLI into a disciplined wiki maintainer. You curate sources and ask questions. The LLM reads, files, cross-references, flags contradictions, and keeps a living synthesis current. Knowledge compounds instead of being re-derived by RAG on every query.
The idea in one paragraph
Most LLM+docs workflows are RAG: retrieve fragments at query time, synthesize from scratch, forget. The wiki is compounding. The LLM reads each source once and integrates it into a persistent, interlinked Obsidian vault — updating entity pages, revising concept pages, flagging contradictions, and strengthening the synthesis. The wiki is the compiled artifact; RAG is the just-in-time retrieval. This plugin gives the LLM the discipline (SKILL.md), the delegation (sub-agents), the triggers (slash commands), and the bookkeeping (Python tools) to do the job.
What's in the box
| Piece | What it does |
|---|---|
| SKILL.md | Master skill doc — architecture, workflows, iron rules, cross-tool compat. Has context: fork so other skills can chain into it. |
| 3 sub-agents | wiki-ingestor, wiki-librarian, wiki-linter |
| 5 slash commands | /wiki-init, /wiki-ingest, /wiki-query, /wiki-lint, /wiki-log |
| 8 Python tools | Standard library only: init_vault, ingest_source, update_index, append_log, wiki_search (BM25), lint_wiki, graph_analyzer, export_marp |
| 8 reference docs | Schema, page formats, ingest/query/lint workflows, Obsidian setup, cross-tool setup, Memex principles |
| Vault templates | CLAUDE.md, AGENTS.md, .cursorrules, index.md, log.md, plus 5 page templates (entity, concept, source, comparison, synthesis) |
| Example vault | A small worked example on "LLM interpretability" |
Quick start
# 1. Initialize a vault
python scripts/init_vault.py --path ~/vaults/research --topic "LLM interpretability" --tool all
# 2. Open in Obsidian
open -a Obsidian ~/vaults/research
# 3. Drop a source into raw/ and ingest
cp ~/Downloads/paper.pdf ~/vaults/research/raw/papers/
cd ~/vaults/research
# in Claude Code:
> /wiki-ingest raw/papers/paper.pdf
# 4. Ask questions
> /wiki-query "what does the paper say about sparse features?"
# 5. Health check
> /wiki-lint
Cross-tool compatibility
The scripts are pure Python stdlib — they run anywhere. Only the schema loader changes per tool:
| Tool | Loader file |
|---|---|
| Claude Code | CLAUDE.md |
| Codex CLI (OpenAI) | AGENTS.md |
| Cursor (modern) | AGENTS.md |
| Cursor (legacy) | .cursorrules |
| Antigravity (Google) | AGENTS.md |
| OpenCode / Pi | AGENTS.md |
| Gemini CLI | AGENTS.md |
init_vault.py --tool all installs all three. You can run multiple CLIs against the same vault.
See references/cross-tool-setup.md for per-tool instructions.
Architecture
<vault>/
├── raw/ # IMMUTABLE sources (you own)
├── wiki/ # LLM-owned knowledge base
│ ├── index.md # content catalog
│ ├── log.md # append-only timeline
│ ├── entities/ # people, orgs, places, products
│ ├── concepts/ # ideas, theories, frameworks
│ ├── sources/ # one summary per ingested source
│ ├── comparisons/ # cross-source analyses
│ └── synthesis/ # high-level overviews and theses
├── CLAUDE.md # schema for Claude Code
├── AGENTS.md # schema for Codex/Cursor/Antigravity
└── .cursorrules # (optional) legacy Cursor
Iron rule: The LLM never edits raw/. All writes go to wiki/.
Three operations
- Ingest — Read a source, discuss with user, write summary page, update 5-15 cross-referenced pages, update index, log it
- Query — Read index first, drill into 3-10 pages, synthesize answer with inline citations, offer to file back as a new page
- Lint — Mechanical + semantic health check; surface contradictions, orphans, stale claims, cross-reference gaps
Why not just RAG?
| 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 |
The wiki and RAG aren't opposites — RAG can sit on top of the wiki once you outgrow index-first search.
Status
v1.0.0 — initial release. SKILL + 3 agents + 5 commands + 8 scripts + 8 references + full vault templates + example vault.
License
MIT.
Related
- Karpathy's original gist — the pattern this plugin implements
- Vannevar Bush, "As We May Think" (1945) — the Memex
- qmd — local hybrid search over markdown (pair with this when the wiki outgrows
index.md)