LLM Wiki Manager
LLM wiki kit
Created by sametbrr
Published in sametbrr/llm-wiki-manager. Publisher page
73 GitHub stars
What it is
Agent Skills plugin for a persistent LLM-managed markdown wiki — ingest, cross-reference, cited queries and lint with 5 stdlib scripts
AutoGineer overview, from the brain’s own files
LLM Wiki Manager is an agent skill and plugin designed to implement the Karpathy LLM Wiki pattern. It shifts the paradigm from traditional RAG—where an LLM re-reads raw documents on every query—to a persistent, compounding knowledge base. The system maintains a clear division of labor: the user curates raw source files in a dedicated folder, while the agent manages the wiki layer, handling synthesis, cross-referencing, indexing, and bookkeeping. It includes idempotent Python scripts for maintenance tasks like linting, logging, and schema evolution, ensuring that knowledge remains structured and traceable over time.
How it works
Memory model: LLM wiki
AutoGineer overview, from the brain’s own files
The system organizes data into a three-layer model: a schema file for conventions, a raw folder for immutable source documents, and a wiki folder for synthesized content. The agent uses a set of Python scripts to manage this structure. When a user provides a source, the agent ingests it, summarizes the content, updates entity and concept pages, and logs the action. It supports advanced operations like semantic updates to propagate changes across multiple pages, automated health checks that generate dated reports, and multi-wiki routing to bridge project-specific and global knowledge bases.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 2 |
| skills | agent-instructions | 27 |
| tests | tests | 1 |
| .claude-plugin | folder | 1 |
| .codex-plugin | folder | 1 |
The agent reads
- CLAUDE.md evidence: README.md
The agent writes
- CHANGELOG.md evidence: AGENTS.md
- AGENTS.md evidence: README.md
- CLAUDE.md evidence: README.md
Requirements
Works with: Claude Code, OpenAI Codex, GitHub Copilot, Cursor, Kiro, OpenCode, Amp, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
- Download the brain as a ZIP and unzip it where you keep your notes or project: https://mp-staging.autogineer.com/agent-brains/sametbrr/llm-wiki-manager/download
Claude Code reads CLAUDE.md from this folder automatically.
cd llm-wiki-manager && claude
AutoGineer scanned these files at commit 28ad285.
Created by sametbrr. Published in sametbrr/llm-wiki-manager. Licence: MIT License.
Usage
AutoGineer overview, from the brain’s own files
- Bootstrap a new wiki environment in a research folder.
- Ingest PDF or text documents into the wiki.
- Query the wiki for synthesized answers with citations.
- Perform semantic updates to propagate information changes across the wiki.
- Run automated health checks to identify broken links or orphan pages.
- Route knowledge between project-specific and global wikis.
- “Set up an LLM wiki here. Topic: history of nutrition science.”
- The agent scaffolds the raw/ and wiki/ folders and initializes the schema file.
- “Add this PDF to the wiki.”
- The agent reads the source, writes a summary, updates relevant entity pages, and logs the ingestion.
- “Smith 2024 supersedes Keys 1980, update the wiki.”
- The agent performs a semantic sweep across all pages to update the superseded claim and logs the change.
- “Lint the wiki.”
- The agent runs a health check, generates a dated report in the reports folder, and updates the index.
Documentation by sametbrr
Image: Release Image: License: MIT Image: Agent Skills
Quick Start • Installation • Usage • Update mode • Multi-wiki • Compatibility
LLM Wiki Manager
An Agent Skill and plugin for Claude Code and Codex for building and maintaining a personal LLM-managed wiki — a persistent, compounding knowledge base where the LLM does all the writing, cross-referencing, and bookkeeping while you curate sources and ask questions.
🇹🇷 Türkçe için README.tr.md
Quick Start
claude plugin marketplace add sametbrr/skill-hub && claude plugin install llm-wiki-manager@skill-hub # Claude Code
codex plugin marketplace add sametbrr/skill-hub && codex plugin add llm-wiki-manager@skill-hub # CodexStart a new session in your research folder:
mkdir ~/research/my-topic && cd ~/research/my-topic && claude # or: codex
> "Set up an LLM wiki here. Topic: history of nutrition science."Features
Instead of RAG — where the LLM rediscovers answers from raw documents on every query — this pattern has the LLM compile raw sources into a persistent, interlinked markdown wiki. Each new source enriches existing pages. Cross-references are built eagerly. Contradictions are flagged. Knowledge compounds over time.
Implements Karpathy's LLM Wiki pattern as a full agent skill with 9 operating modes (including multi-wiki routing and migrate), 5 idempotent Python scripts, 8 page templates, and 11 reference documents.
Without this pattern With this pattern
──────────────────── ──────────────────
Query 1 → re-read 50 docs Query 1 → read compiled wiki (already synthesized)
Query 2 → re-read 50 docs Query 2 → read updated wiki (cross-refs already there)
Query 3 → re-read 50 docs Query 3 → read updated wiki (contradictions already flagged)Requirements
Claude Code, OpenAI Codex, or any agentskills.io-compatible agent
Python 3.9+ (stdlib only, for the 5 included scripts — no pip install needed)
Installation
Option 1 — Claude Code plugin (recommended)
claude plugin marketplace add sametbrr/skill-hub
claude plugin install llm-wiki-manager@skill-hubOption 2 — Codex plugin
codex plugin marketplace add sametbrr/skill-hub
codex plugin add llm-wiki-manager@skill-hubOption 3 — GitHub CLI, any agent (gh CLI with gh skill)
gh skill install sametbrr/llm-wiki-manager llm-wiki-manager --agent claude-code --scope user # or --agent codexOption 4 — manual copy: copy skills/llm-wiki-manager/ into ~/.claude/skills/ or ~/.agents/skills/.
After installing, start a new session. The skill loads automatically when relevant.
Usage
The skill auto-detects which mode applies from natural language. No slash commands needed.
> "Set up an LLM wiki here" # Bootstrap: scaffold raw/, wiki/ and the schema file
> "Add this PDF to the wiki" # Ingest: summarize, cross-reference, index, log
> "What does the wiki say about X?" # Query: answer with citations, offer to file back
> "Smith 2024 supersedes Keys 1980, update the wiki" # Update: sweep every page that paraphrases the claim
> "Lint the wiki" # Lint: dated health report in wiki/reports/
> "We should always do X going forward" # Schema-evolve: record a convention for future sessions
> "Add this to my global wiki" # Multi-wiki: route between project and global wiki
> "How does this pattern work?" # Teach: explain the pattern and compare it with RAGModes
| Mode | Trigger examples | What happens |
|---|---|---|
| Bootstrap | "Set up a wiki", "start a knowledge base here" | Scaffolds raw/, wiki/ and the schema file (AGENTS.md + a CLAUDE.md pointer) from templates |
| Ingest | "Add this PDF to the wiki", "I just read X, file it" | Reads source → writes summary → updates entity/concept pages → indexes → logs |
| Query | "What does the wiki say about X?", "Compare X and Y" | Reads index → candidate pages → synthesizes answer with citations → offers to file back |
| Update | "Smith 2024 supersedes Keys 1980, update the wiki" | Semantic sweep across all pages → diff-before-write per page → single log entry |
| Lint | "Health check the wiki", "anything broken?" | Runs lint_wiki.py → auto-saves wiki/reports/lint-YYYY-MM-DD.md → auto-tracks in index and log |
| Schema-evolve | "We should always do X going forward" | Updates the schema file (AGENTS.md / CLAUDE.md) so future sessions inherit the convention |
| Multi-wiki | "Add this to my global wiki", "promote this page to global" | Routes between project wiki and global wiki using the External Wiki: declaration in project CLAUDE.md |
| Teach | "How does this pattern work?", "explain the LLM wiki idea" | Explains the pattern, compares with RAG, walks through a concrete example |
Full walkthrough
# 1. Go to your research folder
mkdir ~/research/my-topic && cd ~/research/my-topic && claude
# 2. Bootstrap the wiki
> "Set up an LLM wiki here. Topic: history of nutrition science."
# 3. Drop a source
cp ~/Downloads/pollan-2008.pdf raw/
# 4. Ingest it
> "Ingest Pollan's In Defense of Food"
# 5. Ask questions
> "What does the wiki say about nutritionism?"
# 6. Health check (auto-saves dated report to wiki/reports/)
> "Lint the wiki"The three-layer model
your-wiki/
├── AGENTS.md # Schema — conventions for this wiki (co-evolved over time)
├── CLAUDE.md # One line: @AGENTS.md (Claude Code reads CLAUDE.md, Codex reads AGENTS.md)
├── raw/ # YOUR layer — immutable sources you curate. LLM reads, never writes.
└── wiki/ # LLM layer — all pages written and maintained by the LLM
├── index.md # Content catalog (updated on every ingest)
├── log.md # Append-only operation log (greppable)
├── hot.md # Hot cache — most recently ingested sources and active references
├── sources/ # One summary page per ingested source
├── entities/ # People, organizations, places, products
├── concepts/ # Ideas, theories, frameworks, terms
├── notes/ # Filed-back query answers and loose pages
└── reports/ # Auto-generated dated lint reports (wiki/reports/lint-YYYY-MM-DD.md)Division of labor:
| You do | The LLM does |
|---|---|
| Curate sources (decide what to read) | Read sources end-to-end |
| Ask questions, steer direction | Write summaries, entity and concept pages |
| Review the wiki, follow links | Update cross-references in-place |
| Decide what matters | Maintain index.md and log.md |
Own raw/ | Flag contradictions, surface gaps |
You almost never write wiki pages by hand. The LLM does the bookkeeping — that's what makes the wiki compound instead of collapse.
Core disciplines
LLM owns
wiki/. You ownraw/. No exceptions.Every operation logs to
log.mdviaappend_log.py. Greppable:grep "^## \[" log.md | tail -20Every new or updated page touches
index.mdviaupdate_index.py. Stale index = wiki that feels lost.Cross-reference aggressively. When a source mentions an entity that already has a page, update that page. Don't leave connections implicit.
Cite back to
raw/. Every claim is traceable to a specific source file.Flag contradictions, don't overwrite. New source disagrees with old claim? Both stay, marked with their source, with a
> [!warning] Sources disagreecallout.Schema lives in
CLAUDE.md. When a convention works, write it down. The next session starts informed.
What's inside
Scripts (Python stdlib, no dependencies, all idempotent)
| Script | Purpose |
|---|---|
scripts/init_wiki.py | Scaffold a new wiki — creates raw/, wiki/, the schema file (AGENTS.md + CLAUDE.md pointer, or keeps an existing one), index.md, log.md, and hot.md. Idempotent. |
scripts/append_log.py | Append a ## [YYYY-MM-DD] action | title entry to log.md. Supports flexible log path detection. |
scripts/update_index.py | Add or update an entry under a category in index.md. Case-insensitive categories, keeps section order and content, follows the index link style (markdown or [[wikilinks]]), new categories go before ## Meta. |
scripts/lint_wiki.py | Health check. Detects orphan pages, broken links and index drift in both standard markdown and Obsidian wiki-link format ([[page#heading]], ![[embed.png]] included). Default: writes wiki/reports/lint-<today>.md and auto-tracks. Run --stdout for terminal output. |
scripts/migrate_wiki.py | Schema upgrade (v1 → v2). Deduplicates index.md, moves dated changelog blocks from hot.md into log.md, stamps the schema version. Idempotent. |
Templates
| Template | Used for |
|---|---|
wiki-CLAUDE.md.tmpl | The schema file dropped into a fresh wiki |
source-summary.md.tmpl | One ingested source — claims, methodology, cross-links, open questions |
entity-page.md.tmpl | People, organizations, places, products |
concept-page.md.tmpl | Ideas, frameworks, theories, terms |
comparison-page.md.tmpl | "X vs Y" pages, often filed-back query answers |
index.md.tmpl | Initial content catalog |
log.md.tmpl | Initial log with bootstrap entry |
hot.md.tmpl | Initial hot cache — rewritten after each ingest with latest sources and active references |
Reference docs
Eleven detailed workflow documents in references/:
philosophy.md · architecture.md · bootstrap-workflow.md · ingest-workflow.md · query-workflow.md · update-workflow.md · lint-workflow.md · migrate-workflow.md · schema-design-guide.md · multi-wiki-routing.md · teaching-mode.md
The skill reads these selectively — you don't need to. They're there to give the LLM depth on each mode.
Update mode
Standard ingest already handles contradictions on a single page (Disputes section). Update mode is for when a new source supersedes a claim that's paraphrased across multiple pages — the same idea written four different ways in four different files.
Scenario: Smith 2024 reanalysis shows Keys 1980's seven-countries study cherry-picked data.
The Keys r=0.87 claim appears as:
concepts/saturated-fat.md → "Keys found r=0.87 across seven countries"
entities/ancel-keys.md → "famous for showing strong correlation"
concepts/heart-disease.md → "saturated fat is a primary driver per Keys"
concepts/dietary-policy.md → "the saturated fat hypothesis drove decades of policy"
Update mode:
1. Semantic sweep — finds all four (grep won't, LLM will)
2. Shows scope: "4 pages affected. Proceed?"
3. Diff-before-write per page — y/n/skip/edit per change
4. Per-page strategy: revise / disputes / annotate (not one-size-fits-all)
5. One log entry tying all four edits to Smith 2024This is change propagation, not change tracking. The log and frontmatter track what was edited. Update mode ensures the edit reaches everywhere it should.
Auto-dated lint reports
lint_wiki.py with no flags:
Writes
wiki/reports/lint-YYYY-MM-DD.md(overwrites same-day run — idempotent daily)Adds a
Reportsindex entry automaticallyAppends a
lint | Health checklog entry automaticallyExits with code 1 if any block-severity issue found (useful for CI)
Reports accumulate as a longitudinal health record. git log wiki/reports/ shows how wiki quality evolved over time.
Override flags: --stdout (terminal, no tracking), --no-track (write file, skip index/log), --report PATH (custom path).
Multi-wiki
Most users start with one wiki. Once you have two — say, a per-project wiki at the working directory plus a long-lived global "second brain" (often an existing Obsidian vault) — the skill routes writes between them based on a single declaration in the project's CLAUDE.md.
~/projects/x-project/ ← active project (current working directory)
├── CLAUDE.md ← project schema — declares the global wiki path
├── raw/ ← project sources
└── wiki/ ← project wiki
~/Documents/obsidian/ ← global wiki (long-lived, exists across projects)
├── CLAUDE.md ← global schema
├── raw/
└── wiki/One-time setup
Add this to the project's CLAUDE.md (or ask the agent to do it):
## External Wiki
Global knowledge base: ~/Documents/obsidian/
### Routing rules
- Project-specific code decisions, architecture, bugs, configuration → this project's `wiki/`
- Concepts, frameworks, patterns, ideas applicable beyond this project → global wiki
- When in doubt, ask before writing
- Scripts always need `--path` flag pointing to the right wiki root
### Cross-wiki links
- Use absolute paths (`~/...`) when linking from one wiki to the other.
- Never use relative paths that cross wiki boundaries.Four canonical scenarios
| # | Scenario | Trigger | What the agent does |
|---|---|---|---|
| A | Write to global while in a project | "Add JWT refresh rotation to my global wiki" | Reads project CLAUDE.md → resolves global path → writes to global, project wiki untouched |
| B | Pull from global into a project | "What does the global wiki say about rate limiting? Apply it to /api/search" | Reads global pages → synthesizes recommendation → writes a project-specific page that links to the global one (never copies) |
| C | Promote a page from project to global | "concepts/event-sourcing.md has matured, promote it" | Moves content to global → leaves a one-line redirect stub at the project path → updates both indexes and logs |
| D | Lint both wikis at once | "Lint both wikis" | Runs lint_wiki.py --path against each → reads both reports → returns one summary |
Full walkthroughs of all four scenarios in references/multi-wiki-routing.md.
Compatibility
| Tool | Install | Schema file it reads |
|---|---|---|
| Claude Code | plugin (claude plugin install llm-wiki-manager@skill-hub) or ~/.claude/skills/ | CLAUDE.md |
| OpenAI Codex | plugin (codex plugin add llm-wiki-manager@skill-hub) or ~/.agents/skills/ | AGENTS.md |
| GitHub Copilot, Cursor, Gemini CLI, … | gh skill install … --agent <name> | usually AGENTS.md |
A wiki that keeps its schema in AGENTS.md with a one-line CLAUDE.md (@AGENTS.md) works in all of them; init_wiki.py sets that up.
Related
Karpathy's LLM Wiki gist — the original idea
agentskills.io — open standard spec
Contributing
Questions and ideas: Discussions
Bugs: issue tracker
Pull requests: read the contribution guide first
Security reports: follow the security policy, not a public issue
License
MIT — see LICENSE.
<div align="center">
</div>
skills/llm-wiki-manager/SKILL.md
name: llm-wiki-manager description: Build, maintain, and query a personal LLM-managed wiki — a markdown knowledge base where the LLM owns all writing, cross-referencing, and bookkeeping while the user curates sources. Use this skill when the user wants to (1) bootstrap a new wiki, second brain, or research notebook; (2) ingest a new source (article, PDF, paper, transcript) and update relevant entity/concept pages, the index, and log; (3) query an existing wiki and synthesize an answer with citations, filing it back if useful; (4) update the wiki when a new source supersedes a claim across multiple pages (diff-before-write sweep); (5) lint the wiki for orphan pages, broken links, index drift, or stub pages — auto-dated reports. Trigger this when the user mentions a "second brain", "research wiki", "knowledge base", or "Memex", or asks the agent to track sources across sessions. Bundles five idempotent scripts and enforces the bookkeeping discipline that makes wikis compound rather than rot. license: MIT metadata: author: sametbrr version: "1.5.1" tags: - wiki - knowledge-management - second-brain - research - karpathy - llm-wiki
LLM Wiki Manager
A skill for running a personal LLM-managed wiki: a persistent, compounding markdown knowledge base where the human curates sources and asks questions, and the LLM does all the reading, writing, cross-referencing, and bookkeeping.
The pattern is intentionally tool-agnostic — it's just markdown files in a git repo. It works in any editor (Obsidian, VS Code, plain vim), and the skill makes no assumptions beyond "you have a filesystem and git". It runs the same way under Claude Code, Codex, or any Agent Skills client.
Schema file = AGENTS.md or CLAUDE.md. Claude Code reads CLAUDE.md; Codex and most other agents read AGENTS.md. Use whichever the wiki already has. If CLAUDE.md only contains @AGENTS.md, the schema is AGENTS.md. New wikis get AGENTS.md plus a one-line CLAUDE.md (@AGENTS.md), so both hosts load the same schema. The scripts auto-detect it (--schema-file overrides). Throughout this skill and its references, "CLAUDE.md" means the wiki's schema file, whichever of the two it is.
Scripts live in scripts/ next to this file. Run them by path relative to this skill's directory, and always pass --path <wiki-root>.
The three layers (memorize this)
Every wiki this skill manages has exactly three layers. Confusing them is the most common failure mode.
raw/— immutable sources the user curates. Articles, PDFs, transcripts, screenshots, data files. The LLM reads fromraw/but never modifies it. This is the source of truth; if it gets edited the audit trail breaks.wiki/— markdown pages the LLM owns entirely. Source summaries, entity pages, concept pages, comparisons. Three structural files always live here:wiki/index.md(content catalog),wiki/log.md(operation log),wiki/hot.md(~500-word hot cache, rewritten after every ingest). The user reads it; the LLM writes it. Pages link to each other and back to specific files inraw/.CLAUDE.md/AGENTS.md(at the wiki root) — the schema. Tells future LLM sessions how this particular wiki is structured, what the page conventions are, how categories are named, how aggressive ingest should be. Co-evolved with the user over time — when something works, write it down here so the next session inherits it.
The whole point of the pattern is that wiki/ is a persistent, compounding artifact. It is not re-derived on every query. New sources update existing pages in place. That is what separates this from RAG.
Mode router
When this skill triggers, identify which mode applies and read the matching reference file. The user rarely names the mode explicitly — infer it from context. If genuinely ambiguous, ask one short clarifying question.
| Mode | Triggers | Reference |
|---|---|---|
| Teach | "how does this pattern work", "explain the LLM wiki idea", first-time user, no CLAUDE.md and no wiki/ and they're asking how it works rather than to set one up | references/teaching-mode.md |
| Bootstrap | "set up a wiki", "start from scratch", "init a knowledge base", working directory has no wiki/ yet and the user wants one | references/bootstrap-workflow.md |
| Ingest | new source dropped (file in raw/, pasted URL, attached PDF), "add this to the wiki", "file this", "I just read X" | references/ingest-workflow.md |
| Query | question against existing wiki content, "what do we know about X", "compare X and Y from my notes", "based on what I've collected…" | references/query-workflow.md |
| Update | "X is no longer right", "Smith 2024 supersedes Keys 1980", a new source invalidates a claim across 3+ existing pages (not just one), user explicitly correcting a factual error they spotted | references/update-workflow.md |
| Multi-wiki | "add this to my global wiki", "file to obsidian", "what does the global wiki say about X", "check my notes on Y", "promote this page to global", "lint both wikis", any operation that explicitly targets a second wiki location, or project's CLAUDE.md declares an ## External Wiki section | references/multi-wiki-routing.md |
| Lint | "health check", "audit the wiki", "find contradictions", "anything broken", periodic maintenance request | references/lint-workflow.md |
| Migrate | "wiki güncelle", "upgrade wiki", "migrate wiki", "move the wiki to the new structure", schema-version mismatch detected | references/migrate-workflow.md |
| Schema-evolve | "update CLAUDE.md", "we should always do X going forward", convention drift noticed during another mode | references/schema-design-guide.md |
If multiple modes apply (e.g., user asks a question and wants the answer filed back), do them in sequence and log each one.
Step 0 — schema version check (every mode). The wiki schema file's frontmatter (AGENTS.md or CLAUDE.md) carries a schema_version stamp (unstamped = v1). If it is lower than the version this skill expects, offer one sentence before starting the requested work: "This wiki is at schema v1, the skill expects v2 — run scripts/migrate_wiki.py first?" Don't block the requested operation if the user declines; lint also reports the mismatch as a finding.
Update vs. Ingest's Disputes handling — important distinction. Ingest already handles contradictions on a single page by adding a Disputes section. Switch to Update mode only when the new source's claim affects multiple existing pages — that is, when the same idea is paraphrased across the wiki and a single Disputes section won't keep the wiki internally consistent. If only one page is affected, stay in ingest. See references/update-workflow.md for the precise trigger checklist.
Multi-wiki requires CLAUDE.md configuration. Before any multi-wiki operation, read the project CLAUDE.md for an ## External Wiki section that declares the global wiki path and routing rules. If the section is missing and a multi-wiki operation is requested, run Schema-evolve first to add it, then proceed. Never guess or assume the global wiki path. See references/multi-wiki-routing.md for the one-time setup block and the four canonical scenarios.
Core invariants (apply in every mode) — nine rules
These are the disciplines that make a wiki compound. Skipping them is how wikis rot.
1. The user owns raw/. The LLM owns wiki/.
Never write to raw/. Never ask the user to edit wiki/ by hand (they can if they want, but the skill never asks). When summarizing a source, the summary lives in wiki/sources/<source-slug>.md and links back to the file in raw/.
2. Every operation logs to wiki/log.md.
After any ingest, query, update, or lint, append a single entry using scripts/append_log.py --path <wiki-root>:
## [YYYY-MM-DD] ingest | <source title>
## [YYYY-MM-DD] query | <one-line question>
## [YYYY-MM-DD] update | <claim corrected, source authority>
## [YYYY-MM-DD] lint | <pages touched or "clean">Consistent prefix matters — it makes the log greppable: grep "^## \[" wiki/log.md | tail -20 shows recent activity. The script enforces the format. For lint, the script auto-logs by default — you don't need a separate append_log.py call after running lint_wiki.py. For ingest/query/update, the LLM calls the script.
3. Every new or significantly-updated page touches wiki/index.md.
Use scripts/update_index.py --path <wiki-root>. The index is content-oriented: category, title, one-line summary, link. It is the LLM's primary navigation aid in future sessions when the wiki is large. Stale index = wiki that feels lost.
One page = one index entry. A page never appears under multiple headings — grouping is by theme/category, not by tag (tag-grouped indexes duplicate every multi-tag page). Hub pages are marked with ★ after the link. The script warns when a page is about to be indexed in a second category.
4. Cross-reference aggressively.
When ingesting a source about, say, a person who already has an entity page, update that entity page with the new information. Don't leave the connection implicit in the source summary. The whole value proposition is that connections are made eagerly, while context is fresh, not lazily at query time.
Use markdown wiki-style links: [Page Title](../entities/page-title.md) or, if the user prefers Obsidian-style, [[page-title]]. Pick one convention and record it in CLAUDE.md.
5. Cite back to raw/.
Every claim in a wiki page should be traceable to a specific source. The standard pattern in source-summary pages is:
> Quote or paraphrase from the source.
> — `raw/2026-01-pollan-eat-food.pdf`, p. 14In synthesis pages (entity, concept, comparison), use inline references like (see [Pollan 2026](../sources/pollan-eat-food.md)). The reader should always be able to trace a claim back to a real source.
6. Flag contradictions, don't silently overwrite.
If a new source contradicts an existing claim on a wiki page, do not just replace the old claim. Add the new claim alongside, mark both with their source, and note the conflict — usually as a > [!warning] Sources disagree callout or a "Disputes" subsection. The user decides which to believe; the wiki records the disagreement.
7. Rewrite wiki/hot.md after every ingest.
wiki/hot.md is a ~500-word hot cache with exactly five sections: State, Last ingest, Active themes, Open items, Conventions (see assets/templates/hot.md.tmpl). It is the first file a cross-project reader sees. Rewrite entirely — do not append. Dated changelog blocks belong in log.md, never in hot. The tag inventory does NOT live here — the canonical tag list lives in the wiki's CLAUDE.md. See references/ingest-workflow.md Step 10 for the rewrite checklist; lint_wiki.py flags hot.md bloat.
8. The schema lives in CLAUDE.md and is updated when conventions change.
If a working pattern emerges in conversation ("let's always tag book chapters with chapter:N"), write it into CLAUDE.md immediately so the next session inherits it. The user shouldn't have to re-explain conventions every session.
9. If the project's CLAUDE.md declares an External Wiki, honor it.
Some users run two wikis: a per-project wiki at the working directory and a long-lived global wiki (often an existing Obsidian vault) at a fixed path. The project's CLAUDE.md declares the global wiki's location with a section like:
## External Wiki
Global knowledge base: ~/Documents/obsidian/When this section is present, read both CLAUDE.md files at session start (project + global) so you know each wiki's schema. Route writes per the user's rules: project-specific knowledge to the project wiki, portable concepts to the global wiki. Always pass --path to scripts targeting the chosen wiki — never assume the current working directory is the right target. Cross-wiki links must be absolute (~/...), never relative across wiki boundaries. See references/multi-wiki-routing.md for the four canonical scenarios (write-to-global, pull-from-global, promote, dual-lint).
Standard wiki layout
init_wiki.py produces:
<wiki-root>/
├── CLAUDE.md # Schema for the wiki itself (instructions to future Claude)
├── README.md # Human-facing overview (optional but useful)
├── raw/ # User-curated sources — LLM reads, never writes
│ └── .gitkeep
└── wiki/ # LLM-managed pages
├── index.md # Content catalog by category
├── log.md # Chronological log of operations
├── hot.md # ~500-word hot cache — rewrite after every ingest
├── sources/ # One summary page per ingested source
├── entities/ # People, organizations, products, places
├── concepts/ # Ideas, theories, frameworks, terms
├── notes/ # Loose pages that don't fit elsewhere yet
└── reports/ # Auto-generated dated lint/audit reports (scripts write here, not the LLM)The entities/, concepts/, sources/, notes/ split is the default suggestion. Many wikis converge on a different taxonomy as they grow (e.g. a research wiki might use papers/, methods/, findings/, open-questions/). When the natural taxonomy diverges, update CLAUDE.md to reflect the new convention and reorganize incrementally.
reports/ is special: it's automated output, not user content. lint_wiki.py (and future audit tooling) writes dated files here — lint-2026-05-07.md, audit-saturated-fat-2026-05-07.md — and same-day re-runs overwrite (idempotent daily). Lint excludes this folder from orphan/stub/index-drift checks.
Bundled scripts
All five are in scripts/. They are deliberately small, idempotent, and dependency-free (Python stdlib only).
init_wiki.py— scaffold a new wiki. Createswiki/index.md,wiki/log.md,wiki/hot.md, categorical subdirs,CLAUDE.md,README.md. On an existing wiki (already has.mdfiles inwiki/) only addswiki/reports/if missing — never imposes categorical dirs or overwrites files. Idempotent. Seereferences/bootstrap-workflow.md.append_log.py— append a log entry with the consistent## [YYYY-MM-DD] action | titleprefix. Use after every ingest, query, update, and lint. Auto-detectswiki/log.md(standard) orroot/log.md(flat layout). Always pass--path <wiki-root>. Valid actions:ingest,query,update,lint,audit,bootstrap,schema-evolve,note,setup,restructure.update_index.py— add or update an entry under a category inwiki/index.md. Auto-detectswiki/index.md(standard) orroot/index.md(flat layout). Matches categories case-insensitively and keeps the existing heading spelling, preserves section order and content, inserts new categories before## Meta(--tail), and follows the index's link style: markdown links or[[wikilinks]](--link-style). Keeps★hub marks on update; omit--summaryto keep the old summary. Always pass--path <wiki-root>and--page-path <path-to-page>. Idempotent on (category, page).lint_wiki.py— scan for orphan pages, broken links (markdown and[[wiki-links]]), index/filesystem drift, duplicate index entries, hot.md bloat, tag hygiene (single-use tags, over-tagged pages), ambiguous wiki-link slugs, log gaps, and schema-version drift.wiki/hot.mdexcluded from orphan/stub/index checks but gets its own health check. Auto-detects log and index in bothwiki/and root layouts. Default behavior: writes report towiki/reports/lint-<today>.md, then auto-tracks (adds Reports index entry, appendslint | Health checklog entry). Same-day re-runs overwrite the report file. Override with--stdout,--report PATH, or--no-track; thresholds via--stub-words,--log-gap-days,--hot-max-words,--max-tags. Seereferences/lint-workflow.md.migrate_wiki.py— upgrade an existing wiki to the current structural conventions when a skill update changes them. Reads theschema_versionstamp in the wiki's schema file (AGENTS.mdorCLAUDE.md; unstamped = v1), shows a dry-run of the mechanical steps plus the manual (LLM) steps, applies with--applyonly. Never touchesraw/; logs every step asrestructure; idempotent (re-running at the current version is a no-op). Seereferences/migrate-workflow.md.
Always prefer running these scripts to hand-editing wiki/index.md or wiki/log.md. They keep the format consistent across sessions and make the wiki greppable.
For update mode, no new script is needed — the workflow uses append_log.py (with --action update) and update_index.py orchestrated by the LLM following references/update-workflow.md. The diffs and multi-page sweep are LLM work, not script work, because they require semantic judgment.
For multi-wiki mode, scripts are called with --path <wiki-root> to operate on the chosen wiki. The routing decision (which wiki receives the write) comes from the project CLAUDE.md's ## External Wiki section. Never rely on the current working directory — always pass --path explicitly. See references/multi-wiki-routing.md.
Bundled templates
In assets/templates/. Use them as starting points; adapt freely:
wiki-CLAUDE.md.tmpl— the schema file dropped into a fresh wiki byinit_wiki.pyindex.md.tmpl,log.md.tmpl— initial scaffolding forwiki/index.mdandwiki/log.mdhot.md.tmpl— initial scaffolding forwiki/hot.md(five fixed sections: State, Last ingest, Active themes, Open items, Conventions)source-summary.md.tmpl— one ingested source, full structureentity-page.md.tmpl— a person, org, place, or productconcept-page.md.tmpl— an idea, framework, or termcomparison-page.md.tmpl— for "X vs Y" pages, often produced as query outputs
assets/examples/healthy-wiki-tree.txt shows what a mature wiki of ~50 sources looks like — useful when teaching the pattern or sanity-checking organization.
When in doubt
Read references/philosophy.md for the why and references/architecture.md for the what. Both are short. The workflow files are the how: bootstrap-workflow.md, ingest-workflow.md, query-workflow.md, update-workflow.md, multi-wiki-routing.md, lint-workflow.md, migrate-workflow.md, schema-design-guide.md, teaching-mode.md.
The single most important principle: the LLM does the bookkeeping. Cross-references, index updates, log entries, contradiction-flagging, stale-claim review, multi-wiki routing. That work is what makes the wiki compound. Skipping it because "the user didn't ask" is the failure mode this skill exists to prevent.
40 files
- .claude-plugin/plugin.json
- .codex-plugin/plugin.json
- .github/dependabot.yml
- .github/workflows/release.yml
- .gitignore
- AGENTS.md
- ATTRIBUTION.md
- CHANGELOG.md
- CLAUDE.md
- LICENSE
- README.md
- README.tr.md
- skills/llm-wiki-manager/SKILL.md
- skills/llm-wiki-manager/assets/examples/healthy-wiki-tree.txt
- skills/llm-wiki-manager/assets/templates/comparison-page.md.tmpl
- skills/llm-wiki-manager/assets/templates/concept-page.md.tmpl
- skills/llm-wiki-manager/assets/templates/entity-page.md.tmpl
- skills/llm-wiki-manager/assets/templates/hot.md.tmpl
- skills/llm-wiki-manager/assets/templates/index.md.tmpl
- skills/llm-wiki-manager/assets/templates/log.md.tmpl
- skills/llm-wiki-manager/assets/templates/source-summary.md.tmpl
- skills/llm-wiki-manager/assets/templates/wiki-CLAUDE.md.tmpl
- skills/llm-wiki-manager/references/architecture.md
- skills/llm-wiki-manager/references/bootstrap-workflow.md
- skills/llm-wiki-manager/references/ingest-workflow.md
- skills/llm-wiki-manager/references/lint-workflow.md
- skills/llm-wiki-manager/references/migrate-workflow.md
- skills/llm-wiki-manager/references/multi-wiki-routing.md
- skills/llm-wiki-manager/references/philosophy.md
- skills/llm-wiki-manager/references/query-workflow.md
- skills/llm-wiki-manager/references/schema-design-guide.md
- skills/llm-wiki-manager/references/teaching-mode.md
- skills/llm-wiki-manager/references/update-workflow.md
- skills/llm-wiki-manager/scripts/append_log.py
- skills/llm-wiki-manager/scripts/init_wiki.py
- skills/llm-wiki-manager/scripts/lint_wiki.py
- skills/llm-wiki-manager/scripts/migrate_wiki.py
- skills/llm-wiki-manager/scripts/schema_file.py
- skills/llm-wiki-manager/scripts/update_index.py
- tests/test_scripts.py
Advantages
- Compounding knowledge base that synthesizes information rather than re-reading raw documents on every query. evidence: README.md
- Automated bookkeeping and cross-referencing reduce manual maintenance effort. evidence: README.md
- Idempotent scripts ensure reliable operations without external dependencies. evidence: README.md
Limitations
- Requires strict adherence to the division of labor between the raw source folder and the LLM-managed wiki folder. evidence: README.md
- Multi-wiki routing requires manual configuration of paths in the schema file. evidence: README.md
Security
Risk level: No risk found
This brain runs
Agent instructions that run or fetch something (8)
AGENTS.md:`tests/test_scripts.py`: functional tests that run every script against temp wikis.AGENTS.md:`python3 -m unittest discover -s tests`AGENTS.md:Codex: install from a local marketplace in an isolated `CODEX_HOME`;skills/llm-wiki-manager/SKILL.md:Run them by path relative to this skill's directory, and always pass `--path <wiki-root>`.skills/llm-wiki-manager/SKILL.md:If it is lower than the version this skill expects, offer one sentence before starting the requested work: *"This wiki is at schema v1, the skill expects v2 — run `scripts/migrate_wiki.py` first?"* Don't block the requested operation if the user declines;skills/llm-wiki-manager/SKILL.md:If the section is missing and a multi-wiki operation is requested, **run Schema-evolve first** to add it, then proceed.skills/llm-wiki-manager/SKILL.md:Some users run two wikis: a per-project wiki at the working directory and a long-lived global wiki (often an existing Obsidian vault) at a fixed path.skills/llm-wiki-manager/SKILL.md:unstamped = v1), shows a **dry-run** of the mechanical steps plus the manual (LLM) steps, applies with `--apply` only.
Attribution and licence
- Created by
- sametbrr
- Declared authors
- sametbrr (declared in .claude-plugin/plugin.json)
- Publisher
- Samet Birer (Community)
- Source
- sametbrr/llm-wiki-manager · commit 28ad285
- Licence
- MIT License (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by sametbrr.
Download
The ZIP holds the files AutoGineer serves, with ATTRIBUTION.md and the licence. Download llm-wiki-manager.zip