claude-skills/engineering/llm-wiki/README.md
Reza Rezvani b6ca45ddec feat(engineering): add llm-wiki plugin — second brain for Claude Code + Obsidian
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>
2026-04-11 01:14:11 +02:00

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.

  • 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)