An LLM-maintained personal knowledge base — a persistent, interlinked collection of markdown pages built incrementally from raw source documents. The default domain is writing craft, but lenses allow any domain to be added.
You curate sources, direct the analysis, and ask questions. The LLM does the summarizing, cross-referencing, filing, and bookkeeping that makes a knowledge base compound over time.
Install the skills directly into any project via the Claude Code plugin system:
# Add the marketplace
/plugin marketplace add tom5610/llm-wiki
# Install the plugin
/plugin install llm-wiki@llm-wiki-pluginsOnce installed, skills are available as /llm-wiki:ingest, /llm-wiki:query, /llm-wiki:lint, and /llm-wiki:extract.
git clone https://github.com/tom5610/llm-wiki.git
cd llm-wikiSkills are available directly as /ingest, /query, /lint, /extract when using Claude Code in this directory.
Three layers:
| Layer | Path | Owner | Purpose |
|---|---|---|---|
| Raw sources | raw/ |
Human | Immutable source documents (articles, papers, notes, transcripts). Never modified by the LLM. |
| Wiki | wiki/ |
LLM | Generated markdown pages — summaries, entity pages, concept pages, technique pages, comparisons, synthesis. Fully owned by the LLM. |
| Schema | CLAUDE.md |
Co-evolved | Governs wiki conventions, page formats, and workflows. |
The wiki/ directory is auto-bootstrapped on the first /ingest run — no manual setup needed.
Four core operations:
| Skill | Description |
|---|---|
/ingest |
Process a raw source into the wiki. Reads the source, discusses key takeaways, creates/updates wiki pages, updates index and log. |
/query |
Answer questions against the wiki or search by keyword. Synthesizes answers with citations, or returns navigational results. |
/lint |
Health-check the wiki. Finds contradictions, orphan pages, stale claims, missing cross-references, and content gaps. |
/extract |
Derive structured knowledge — JSON/YAML data, checklists, guides, decision trees, or compact knowledge packs for LLM prompts. |
Lenses allow the same wiki to span multiple domains. Each lens defines what to notice during ingest, how to categorize content, and what quality standards apply. Lens files live in .llm-wiki/lenses/.
The LLM proposes lenses during ingest when it encounters content outside the base domain — you review and approve them. Pages are tagged with their lens, not separated into silos, so cross-domain linking works naturally.
- Claude Code — the LLM agent that maintains the wiki
- Obsidian — recommended viewer/browser (wikilinks, graph view, Dataview)
- Obsidian Web Clipper — browser extension for converting articles to markdown sources
- Drop a source document (article, notes, transcript) into
raw/ - Run
/ingest(or/llm-wiki:ingestif using the plugin) to process it - Browse results in Obsidian or query with
/query - Periodically run
/lintto keep the wiki healthy
├── .claude-plugin/ # Plugin manifest and marketplace catalog
│ ├── plugin.json
│ └── marketplace.json
├── skills/ # Plugin-distributed skills
│ ├── ingest/SKILL.md
│ ├── query/SKILL.md
│ ├── lint/SKILL.md
│ └── extract/SKILL.md
├── hooks/ # Plugin hooks (post-write validation)
│ └── hooks.json
├── scripts/ # Hook scripts
│ └── wiki-check.py
├── raw/ # Source documents (user-provided)
├── wiki/ # Generated wiki pages (auto-bootstrapped)
├── evals/ # Skill verification tests
├── CLAUDE.md # Wiki schema and conventions
└── ref/ # Pattern description and references
The eval suite verifies skill correctness via claude -p (programmatic mode):
# Install test dependencies
uv pip install pytest pytest-dependency pytest-timeout
# Run all tests (~7-10 min)
uv run pytest evals/ -v
# Fast mode — skip slow tests (~4-6 min)
uv run pytest evals/ -v -m "not slow"
# Reset wiki state before re-running
rm -rf wiki/ .llm-wiki/ .wiki-snapshot/ extracts/- llm-wiki.md — the full pattern description
- CLAUDE.md — wiki schema and conventions