From wiki-toolkit
Ingest one explicitly identified input into the wiki as a single transaction. A URL, file, pasted text, command output, stated fact, or an investigation result from the current session. Use when the user asks to add a specific input or finding to the wiki, says "wiki this" or "ingest this into the wiki", or asks to record a conclusion, decision, or finding permanently. Generic "ingest this" or "file this" without wiki context is not this skill. Not for behavioural rules or memory updates, not for end-of-thread or pre-compaction knowledge sweeps (use wiki-checkpoint), and not for wiki health checks (use wiki-lint).
How this skill is triggered — by the user, by Claude, or both
Slash command
/wiki-toolkit:wiki-ingestThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
One input, one ingest transaction: capture, reconcile, write, lint, commit. This is Karpathy's canonical ingest operation applied to the destination wiki's own conventions.
One input, one ingest transaction: capture, reconcile, write, lint, commit. This is Karpathy's canonical ingest operation applied to the destination wiki's own conventions.
Authority: the destination wiki's SCHEMA.md. This file is the procedure; on any conflict the destination's schema wins. The skill complements wiki-checkpoint (the end-of-thread sweep with retrospective and memory routing): this skill writes no memory files and runs no retrospective. If the input is a behavioural rule ("next time, do X"), it routes to memory: say so and point the user at the checkpoint. That hand-off happens before any transaction starts, so no ingest report is printed.
Project root: the workspace root the harness reports; otherwise the nearest ancestor of the working directory containing .git, CLAUDE.md, or AGENTS.md; otherwise the working directory itself.
Same cascade as the checkpoint: <project root>/wiki/ when it exists, otherwise ~/wiki/. Neither exists: report not written: no wiki found and stop. No other directory (docs/, .wiki/, notes/, handbook/) counts.
SCHEMA.md when present, otherwise sniff the layout. Its conventions govern; never impose global-wiki conventions. Invoking this skill authorises non-destructive writes of this input only; destructive rewriting is forbidden without exception, and no confirmation overrides that ban. When write scope is unclear, report not written: write scope unclear.pages/<project>/ (the schema's routing exception). Before routing there, check each project-root CLAUDE.md, AGENTS.md, and README: if one references an external knowledge system (Confluence, Notion, Linear, Jira), report not written: external knowledge system, manual filing required.git -C ~/wiki pull before reading its schema or pages. A failed pull blocks all writes; report not written: global wiki pull failed.git status. If any of them already carries uncommitted changes, the whole transaction is blocked before the first write: report not written: blocked by pre-existing local changes and name the dirty files. Never sweep pre-existing uncommitted changes into the ingest commit.Read the input in full before extracting claims; never infer content from a filename, URL title, search snippet, or memory. An input that is missing, inaccessible, or unreadable makes no wiki writes: report not written: input unavailable or unreadable.
Retention mode decides what survives in the destination's source layer (raw/ for the global wiki):
sources; nothing in the source layer.sources when the input has one.The user overrides per ingest ("retain nothing", "keep the whole thing"). Captures land at a non-colliding path following the destination's naming (global: raw/<topic>-YYYY-MM-DD.md; conversation extracts raw/sessions/YYYY-MM-DD-<topic>.md) and are captured verbatim, never style-corrected. Choose extracts that exclude secrets and unrelated personal data; when full retention cannot avoid them, drop to evidence or locator and say so in the report. Never call a redacted copy verbatim.
In this order, always all three:
rg over the page store for concrete terms (names, IDs, slugs, dates).mcp__qmd__query, collection global-wiki for ~/wiki/). No matching collection or tool: a separate text search using synonyms and paraphrases of the topic is the fallback; repeating step 2's exact terms does not satisfy step 3.Step 3 is not optional at any scale and "the index grep found nothing" does not skip it: lexical search misses paraphrased overlap, which is exactly the duplicate this step exists to catch. Open every page you might touch before deciding anything.
For each candidate claim, choose one action: ignore (already covered), strengthen (adds support), qualify (adds conditions or nuance), replace (supersedes; record the supersession), contradict (conflicts without superseding), create (genuinely new), or link (missing cross-reference only).
<!-- CONTRADICTION -->), never silently pick a winner.Pause and confirm with the user before applying when the ingest involves any of: a contradiction with an existing page, replacing or removing substantive existing content, merging or renaming pages, or sensitive material (personal, confidential, or secret-bearing). Confirmation never overrides a destination's hard rules: a project wiki's ban on destructive rewrites stands regardless. Otherwise apply and report; the user can ask for a preview first at any time.
Order: raw capture (before any page that cites it), then pages, then index, then log.
SCHEMA.md, body starts at H2, lead with the conclusion, no em or en dashes).sources. Nothing retained and conversation-derived: cite [source: conversation, weak] exactly as written; never plain [source: conversation], never an invented phrasing, never a fabricated source.## [YYYY-MM-DD] ingest | <title> entry, one to five lines, existing entries untouched.Only after the ingest made wiki writes: the destination's own lint script when present; for the global wiki, ~/wiki/scripts/lint_wiki.sh (it also refreshes the qmd index). Fix errors the ingest introduced; report pre-existing warnings without fixing unrelated content. A project wiki without a lint script: report Lint: not run (no project lint script). A blocked, paused, or no-write outcome reports Lint: not run (<reason>).
When the ingest made writes: exactly one commit, path-limited to the files this ingest touched; no writes means no commit, reported as not run with the reason. Global wiki: conventional format, signed off, push after commit; a failed push is reported with the local commit hash. Project wikis: the project's commit conventions, no push mandate. Never leave a half-applied ingest behind; a rollback undoes only the files this ingest wrote and never restores, cleans, or discards pre-existing changes.
Always print (except the pre-transaction behavioural-rule hand-off):
Wiki ingest: complete / paused (awaiting confirmation) / not written.
- Input: <type>, retention: <mode>
- Raw captures: N (files)
- Pages created: N / updated: N (each with its reconcile action)
- Index: updated / no change needed / not kept by destination
- Log: updated / no change needed / not kept by destination
- Contradictions flagged: N (files)
- Lint: clean / N issues (list) / not run (reason)
- Commit: <hash> pushed / <hash> (push failed) / not run (reason) / not a git repository
- Not written: N (one reason each)
- Failures/manual action: none / list
A paused report shows the state so far (no writes have happened yet) and the pending question. Not-written reasons, first applicable: no wiki found; global wiki pull failed; input unavailable or unreadable; blocked by pre-existing local changes; write scope unclear; external knowledge system, manual filing required.
npx claudepluginhub marjovanlier/claude-plugins --plugin wiki-toolkitGuides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Runs a structured interview session to sharpen plans or designs, producing ADRs and a glossary as output.
Applies curated color/font themes to slides, docs, and HTML artifacts. Includes 10 preset themes and can generate custom themes on demand.