wiki

$npx mdskill add SethGammon/Citadel/wiki

Ingest raw notes to build a self-maintaining markdown knowledge base.

  • Transforms unstructured sources into interlinked topic files without vector databases.
  • Leverages LLM-native navigation over structured markdown up to 400K words.
  • Uses timestamped raw files and a master index to track content freshness.
  • Delivers answers via direct queries or status overviews of the knowledge graph.
SKILL.md
.github/skills/wikiView on GitHub ↗
---
name: wiki
description: >-
  Markdown-first knowledge base where the LLM acts as librarian. Ingests raw
  sources, compiles and interlinks topic files, self-maintains an index. No
  vector DB or embeddings required -- uses LLM-native navigation over structured
  markdown up to ~400K words.
user-invocable: true
auto-trigger: false
trigger_keywords:
  - wiki
  - knowledge base
  - llm wiki
  - project wiki
  - build a wiki
  - maintain knowledge
  - knowledge management
  - llm-wiki
  - karpathy wiki
last-updated: 2026-04-06
---

# /wiki -- LLM-Native Knowledge Base

## Orientation

**Use when:** building and querying a markdown-first knowledge base -- ingests raw notes, deduplicates, surfaces answers.
**Don't use when:** capturing session learnings into the evolve pipeline (use /learn); generating structured code documentation (use /doc-gen).

## Directory Structure

```text
wiki/
  index.md              # Master index
  raw/                  # Unprocessed sources (timestamped files)
  topics/               # Compiled topic files (one per topic, interlinked)
  .wiki-meta.json       # Stats: topic count, source count, last compaction
```

## Commands

| Command | Behavior |
|---|---|
| `/wiki` | Status overview: topic count, last update, pending raw sources |
| `/wiki --add [source]` | Ingest a new source into the wiki |
| `/wiki --query [question]` | Answer a question using wiki knowledge |
| `/wiki --status` | Detailed wiki health: topic count, staleness, orphan detection |
| `/wiki --compact` | Merge, deduplicate, and reorganize topics |
| `/wiki --rebuild-index` | Regenerate index.md from current topic files |
| `/wiki init [path]` | Initialize a new wiki at the specified path |

## Protocol

### Command: `/wiki init [path]`

Create `wiki/`, `wiki/raw/`, `wiki/topics/`, an empty `wiki/index.md`, and `wiki/.wiki-meta.json` with fields: `created`, `lastUpdated`, `topicCount: 0`, `sourceCount: 0`, `totalWords: 0`, `lastCompaction: null`. Default path: `wiki/` at project root.

### Command: `/wiki --add [source]`

Ingest a new source into the wiki.

**Step 1:** Determine source type — URL (fetch with WebFetch), file path (read), raw text (use directly), no argument (ask user).

**Step 2:** Write raw content to `wiki/raw/source-{timestamp}.md` with header: title/URL, ingested date, type, original reference.

**Step 3:** Identify 1-5 topics. For each: check if a topic file already exists — append to existing or create `wiki/topics/{slug}.md`.

**Step 4:** Each topic file has: title, `> Last updated`, `> Sources`, compiled content, and `## Related Topics` with `[[slug]]` cross-links. Scan existing topics for cross-links when writing.

**Step 5:** Regenerate `wiki/index.md` with stats header, Topics table (`[[slug]]` | summary | last updated), and Recent Sources table.

**Step 6:** Update `wiki/.wiki-meta.json` with new counts.

**Step 7:** Output: source description, topics created, topics updated, index counts.

### Command: `/wiki --query [question]`

1. Read `wiki/index.md`, identify 1-5 relevant topic files, explain reasoning briefly
2. Read those topics; follow `[[cross-links]]` up to 2 hops if relevant
3. Produce a clear answer citing specific topic files used
4. If the wiki lacks enough information: state what it knows, list gaps, suggest `/wiki --add` for missing areas

### Command: `/wiki --status`

Read meta, count topic files and raw sources, check for orphaned topics, broken cross-links, and stale topics (30+ days). Output: topic/source/word counts, last updated/compaction dates, and health issues with counts and lists.

### Command: `/wiki --compact`

1. Read `wiki/index.md` and all topic files
2. Identify: merge candidates (overlapping subjects), split candidates (multiple distinct subjects), stale/outdated content, duplicates
3. For each change: describe what and why, make the change, update all affected cross-links
4. Rebuild `wiki/index.md` and update `wiki/.wiki-meta.json` with `lastCompaction` and new counts
5. Output: topics merged/split/removed/resolved, final count, estimated words

### Command: `/wiki --rebuild-index`

Read all topic files, extract title/summary/date, write a fresh `wiki/index.md`. Output: "Index rebuilt with {count} topics."

## Fringe Cases

- **`.planning/` does not exist**: Run `/do setup` first to initialize the harness state directory.
- **No wiki directory**: Prompt to run `/wiki init`. Do not auto-create on query or status.
- **Source >50K words**: Split into sections, warn the user.
- **Topic name collision**: Merge into existing topic, do not overwrite.
- **Empty wiki queried**: "The wiki is empty. Add sources with `/wiki --add`."
- **Broken cross-link**: During compaction/rebuild — flag. During --add — create stub `[[missing-topic]] (stub -- needs content)` if no context.
- **URL fetch fails**: Report failure, suggest pasting content directly.
- **Wiki >~400K words**: Warn during --status, suggest archiving or `/wiki --compact`.

## Contextual Gates

**Disclosure:** "Updating wiki at `.planning/wiki/`. Files will be created or modified."
**Reversibility:** amber — creates and modifies `.planning/wiki/` files; undo by deleting or reverting changed files.
**Trust gates:**
- Any: all wiki commands (init, add, query, status, compact, rebuild-index).

## Quality Gates

- Every topic file must have a title, last-updated date, and sources list
- Every topic file must have at least one cross-link to another topic (unless it is the only topic)
- The index must accurately reflect all topic files (no orphans after --add or --compact)
- No duplicate topic files (same slug = same file)
- Raw sources are preserved in wiki/raw/ and never deleted
- The --query command must cite specific topic files, not fabricate information

## Exit Protocol

Output a summary appropriate to the command executed, then:

```
---HANDOFF---
- Wiki: {command executed} at {wiki path}
- Topics: {count} total, {new/updated/merged count} changed
- Status: {healthy | needs compaction | has orphans/broken links}
---
```
More from SethGammon/Citadel