Install
openclaw skills install llm-wikiLLM-maintained personal knowledge base. Compile raw sources into a structured markdown wiki, auto-lint for consistency, serve as a browsable website. Inspired by Karpathy's 'LLM Knowledge Bases' workflow. Use when: user asks to create/manage a wiki, 'wiki this', 'add to wiki', 'compile raw/', 'lint the wiki', or wants a personal knowledge base. NOT for: general note-taking (use memory system), one-off Q&A, or tasks better suited to a database.
openclaw skills install llm-wikiYou maintain a personal wiki for the user. The wiki is a collection of markdown articles organized by topic. You are the compiler, editor, and librarian.
If the wiki doesn't exist yet, run scripts/bootstrap.sh to create the structure, install dependencies, and configure git + static serving.
The wiki lives at ~/wiki/ with this structure:
~/wiki/
├── mkdocs.yml
├── docs/
│ ├── index.md ← master index (you maintain)
│ ├── log.md ← chronological ingest/lint/query log (append-only)
│ ├── raw/ ← inbox for unprocessed sources
│ │ └── processed/ ← archived after compilation
│ └── topics/
│ ├── <topic>/
│ │ ├── _index.md ← topic overview + article list
│ │ └── <article>.md ← individual articles
│ └── ...
└── site/ ← built static site (gitignored)
When conversations produce durable knowledge, file it directly:
docs/topics/<topic>/<article>.mddocs/topics/<topic>/_index.md with the new article linkdocs/index.md stats if a new topic/article was addedmkdocs.yml nav sectiondocs/log.mdscripts/build.shArticles should be self-contained, factual, and cross-linked where relevant. Use See also: [Title](relative-path.md) for connections.
When the user drops sources in docs/raw/ or gives you a URL:
docs/raw/processed/docs/log.mdscripts/build.shScan ~/wiki/docs/ for:
See also linksFix within ~/wiki/docs/: broken links, typos, missing cross-links, orphan pages (add links from related articles).
Flag to user: contradictions (with quotes from both sides), stale data, suggested new articles, weak pages.
Append a lint entry to docs/log.md.
When a conversation produces a solid synthesized answer (comparison, analysis, deep-dive), proactively offer to file it as a wiki page. Good candidates:
These shouldn't disappear into chat history — they compound in the wiki.
The wiki is served as a static MkDocs site. After any content change, run scripts/build.sh to regenerate.
*Tested: 2026-04-02 on Mac mini M4 16GB*)See also: [Article](relative-path.md) at bottomdocs/topics/<topic>/ directorydocs/topics/<topic>/_index.md with overview + article listdocs/index.md topic listmkdocs.yml nav sectionThis skill requires or will install the following:
| Dependency | Purpose | Installed by |
|---|---|---|
| Python 3 | MkDocs runtime | Must be pre-installed |
| mkdocs + mkdocs-material | Static site generator | bootstrap.sh via pipx or pip3 |
| git | Version control | Must be pre-installed |
bootstrap.sh does~/wiki/ directory structuremkdocs + mkdocs-material via pipx/pip3 if not already installed~/wiki/site/ on 127.0.0.1 only (not publicly accessible)build.sh does--push to also push to a configured git remote (requires SSH keys or stored HTTP credentials)You can integrate wiki linting into your agent's heartbeat cycle. This is opt-in and requires adding config to your HEARTBEAT.md. The heartbeat integration reads heartbeat-state.json (for timing) and optionally memory/ daily notes (to detect wiki gaps). See references/heartbeat-integration.md for setup.
docs/log.md)Append-only chronological record of wiki activity. Every ingest, lint, and filed answer gets an entry. Format:
## [YYYY-MM-DD] ingest | Article Title
- Source: <URL or filename>
- Pages touched: page1.md, page2.md, ...
- Summary: one-line description of what was added/changed
## [YYYY-MM-DD] lint
- Fixed: <list of silent fixes>
- Flagged: <list of issues reported to user>
## [YYYY-MM-DD] filed | Article Title
- Origin: conversation / Q&A synthesis
- Summary: one-line description
The log is parseable with grep: grep "^## \[" docs/log.md | tail -10 gives the last 10 entries.
Always run scripts/build.sh after content changes. This: