Wiki Creator
One rule: every claim on a published page survived being checked against a source snapshot
fetched this run, or it was cut. This skill writes one MediaWiki wikitext article per invocation,
aware of the rest of the wiki it's joining. A page that fails its verification or QA gate is not
published in a degraded state — it's filed as needs_attention with a report explaining why. See
ARCHITECTURE.md at the repo root for the full reasoning; this file only points to what to read and
do.
On activation
- Read
references/pipeline.md in full before doing anything else. It is
the normative, stage-by-stage procedure (intake → research → outline → draft → blind verification
→ QA lint → publish → report). This file is a shim, not a substitute for it.
- If the
zero-assumption skill is active in this session, compose with it rather than duplicating
it: references/sourcing-policy.md is a stricter superset for
wiki content, and zero-assumption's ledger (if present) gets facts registered into it as this
pipeline's own research confirms them.
- Treat parametric memory as unverified for every factual claim, exactly as zero-assumption does —
it may guide reasoning (what to research, how to structure an outline) but never substantiate a
sentence on the page.
Tool binding priority
The pipeline's "fetch a source" step means, in this order:
mcp__webproxy__search_web / fetch_url / fetch_json — the primary path. search_web is
globally serialized with a ~2.5-second minimum gap between calls, so budget queries deliberately
(references/pipeline.md stage 1 gives the exact numbers) rather than fanning out. Always call
fetch_url with max_length=50000 when the result will be cited — its default of 8000 characters
is too small and will silently truncate source text a claim might depend on.
- Native
WebSearch / WebFetch, if webproxy isn't available.
mcp__workspace__browse (headless browser) — only for pages that genuinely require JavaScript
rendering, never as a way around access controls or paywalls.
- If none of these are available: refuse to produce the page. Do not draft an article from
parametric memory — that is the exact failure mode this project exists to prevent.
Store convention
The skill writes into ./wiki/ in the invoking project's working directory, initialized on
first use from assets/registry.template.json and assets/store.gitignore (see
references/registry-spec.md for the full layout and schema).
The pipeline, at a glance
| Stage |
Reference |
Artifact |
Gate |
| 0. Intake |
pipeline.md |
00-intake.json |
slug canonicalized, type detected |
| 1. Research |
pipeline.md, article-blueprint.md |
snapshots + 15-search-log.md |
every kept source snapshotted |
| 2. Outline |
pipeline.md, article-blueprint.md |
20-outline.md |
every section has src-ids or a gap note |
| 3. Draft |
pipeline.md, wikitext-format.md |
30-draft.wiki, 35-claims.json |
every sentence bound to a src-id |
| 4. Blind verification |
verification-protocol.md |
40-verification.json |
all claims supported or cut; check_quotes.py passes |
| 5. QA lint |
qa-checklist.md |
50-lint.json, 55-qa-judge.json |
lint_page.py exits 0; QA judge passes |
| 6. Publish |
pipeline.md, registry-spec.md |
60-publish.log |
only if stages 4 and 5 both passed |
| 7. Report |
verification-protocol.md |
reports/<slug>.verification.md |
— |
References
| File |
Read it for |
references/pipeline.md |
The full procedure — budgets, exact artifacts, resumability |
references/article-blueprint.md |
What to research: MOS:LEAD rules, per-type section sets, infobox field checklists |
references/wikitext-format.md |
How to write it: element order, citation syntax, link rules |
references/sourcing-policy.md |
What sources are allowed, the two-source rule, NPOV, words to watch |
references/verification-protocol.md |
The blind verifier and QA-judge subagent contracts |
references/registry-spec.md |
registry.json schema, slug rules, registry.py command reference |
references/qa-checklist.md |
The full stage-5 checklist, split into lint items and judgment items |
Scripts
All stdlib-only Python, invoked from skills/wiki-creator/scripts/:
| Script |
Invocation |
registry.py |
python registry.py <command> ... — sole mutation path for registry.json; see registry-spec.md §4 |
snapshot.py |
<fetched text> | python snapshot.py <url> --title "..." [--fetch-tool ...] — persists already-fetched text, never fetches itself |
lint_page.py |
python lint_page.py <path.wiki> --type <type> --title "..." --store wiki |
check_quotes.py |
python check_quotes.py <claims.json> <verification.json> |
linkify.py |
python linkify.py --store wiki pass-a <path.wiki> / pass-b "<Title>" |
Reminder
Research live, cite every claim to a snapshot fetched this run, and let the blind verifier and QA
judge — not the writer — decide whether a claim survives. A page that fails either gate becomes
needs_attention, not a published page with hedged language. Full procedure, schemas, and subagent
contracts are in references/.
1---2name: wiki-creator3description: This skill should be used whenever the user wants a wiki page, encyclopedia article, or Wikipedia-style article on a topic — "write a wiki page on X", "add X to the wiki", "create an article about X", "start a wiki about Y" — or wants to grow or maintain the project's wiki store (interlinks, red links, backlinks, verification reports, rendering pages in a local MediaWiki). It researches the topic live on the internet, writes one MediaWiki wikitext article with every claim cited to a fetched and snapshotted source, blind-verifies every claim against the snapshots, and files the page into ./wiki/ with links to existing pages, backlinks from them, and a verification report for human review. Not for prose research reports or multi-source investigations without a wiki artifact — use researching-topics for those.4---56# Wiki Creator78One rule: **every claim on a published page survived being checked against a source snapshot9fetched this run, or it was cut.** This skill writes one MediaWiki wikitext article per invocation,10aware of the rest of the wiki it's joining. A page that fails its verification or QA gate is not11published in a degraded state — it's filed as `needs_attention` with a report explaining why. See12`ARCHITECTURE.md` at the repo root for the full reasoning; this file only points to what to read and13do.1415## On activation16171. Read [`references/pipeline.md`](references/pipeline.md) in full before doing anything else. It is18 the normative, stage-by-stage procedure (intake → research → outline → draft → blind verification19 → QA lint → publish → report). This file is a shim, not a substitute for it.202. If the `zero-assumption` skill is active in this session, compose with it rather than duplicating21 it: [`references/sourcing-policy.md`](references/sourcing-policy.md) is a stricter superset for22 wiki content, and zero-assumption's ledger (if present) gets facts registered into it as this23 pipeline's own research confirms them.243. Treat parametric memory as unverified for every factual claim, exactly as zero-assumption does —25 it may guide reasoning (what to research, how to structure an outline) but never substantiate a26 sentence on the page.2728## Tool binding priority2930The pipeline's "fetch a source" step means, in this order:31321. `mcp__webproxy__search_web` / `fetch_url` / `fetch_json` — the primary path. `search_web` is33 globally serialized with a ~2.5-second minimum gap between calls, so budget queries deliberately34 (`references/pipeline.md` stage 1 gives the exact numbers) rather than fanning out. Always call35 `fetch_url` with `max_length=50000` when the result will be cited — its default of 8000 characters36 is too small and will silently truncate source text a claim might depend on.372. Native `WebSearch` / `WebFetch`, if `webproxy` isn't available.383. `mcp__workspace__browse` (headless browser) — only for pages that genuinely require JavaScript39 rendering, never as a way around access controls or paywalls.404. If none of these are available: refuse to produce the page. Do not draft an article from41 parametric memory — that is the exact failure mode this project exists to prevent.4243## Store convention4445The skill writes into `./wiki/` in the **invoking project's** working directory, initialized on46first use from `assets/registry.template.json` and `assets/store.gitignore` (see47[`references/registry-spec.md`](references/registry-spec.md) for the full layout and schema).4849## The pipeline, at a glance5051| Stage | Reference | Artifact | Gate |52|---|---|---|---|53| 0. Intake | `pipeline.md` | `00-intake.json` | slug canonicalized, type detected |54| 1. Research | `pipeline.md`, `article-blueprint.md` | snapshots + `15-search-log.md` | every kept source snapshotted |55| 2. Outline | `pipeline.md`, `article-blueprint.md` | `20-outline.md` | every section has src-ids or a gap note |56| 3. Draft | `pipeline.md`, `wikitext-format.md` | `30-draft.wiki`, `35-claims.json` | every sentence bound to a src-id |57| 4. Blind verification | `verification-protocol.md` | `40-verification.json` | all claims supported or cut; `check_quotes.py` passes |58| 5. QA lint | `qa-checklist.md` | `50-lint.json`, `55-qa-judge.json` | `lint_page.py` exits 0; QA judge passes |59| 6. Publish | `pipeline.md`, `registry-spec.md` | `60-publish.log` | **only if stages 4 and 5 both passed** |60| 7. Report | `verification-protocol.md` | `reports/<slug>.verification.md` | — |6162## References6364| File | Read it for |65|---|---|66| `references/pipeline.md` | The full procedure — budgets, exact artifacts, resumability |67| `references/article-blueprint.md` | What to research: MOS:LEAD rules, per-type section sets, infobox field checklists |68| `references/wikitext-format.md` | How to write it: element order, citation syntax, link rules |69| `references/sourcing-policy.md` | What sources are allowed, the two-source rule, NPOV, words to watch |70| `references/verification-protocol.md` | The blind verifier and QA-judge subagent contracts |71| `references/registry-spec.md` | `registry.json` schema, slug rules, `registry.py` command reference |72| `references/qa-checklist.md` | The full stage-5 checklist, split into lint items and judgment items |7374## Scripts7576All stdlib-only Python, invoked from `skills/wiki-creator/scripts/`:7778| Script | Invocation |79|---|---|80| `registry.py` | `python registry.py <command> ...` — sole mutation path for `registry.json`; see `registry-spec.md` §4 |81| `snapshot.py` | `<fetched text> \| python snapshot.py <url> --title "..." [--fetch-tool ...]` — persists already-fetched text, never fetches itself |82| `lint_page.py` | `python lint_page.py <path.wiki> --type <type> --title "..." --store wiki` |83| `check_quotes.py` | `python check_quotes.py <claims.json> <verification.json>` |84| `linkify.py` | `python linkify.py --store wiki pass-a <path.wiki>` / `pass-b "<Title>"` |8586## Reminder8788Research live, cite every claim to a snapshot fetched this run, and let the blind verifier and QA89judge — not the writer — decide whether a claim survives. A page that fails either gate becomes90`needs_attention`, not a published page with hedged language. Full procedure, schemas, and subagent91contracts are in `references/`.