{
  "schema_version": "1.0",
  "wiki": {
    "id": "6cb39ad6-647e-44db-9b02-2e1c3a555e54",
    "name": "WikiAIG Cookbook",
    "slug": "wikiaig-cookbook",
    "owner_username": "miradock-demo",
    "description": "The official guide to grounding AI tools on structured knowledge with WikiAIG — connecting your tool, pushing content, and hosting rich HTML pages that read well to humans and agents alike.",
    "visibility": "public",
    "created_at": "2026-05-15T16:27:09.144988+00:00",
    "last_updated_at": "2026-05-15T16:28:02.599578+00:00",
    "last_reviewed_at": null,
    "topic_tags": [
      "Cookbook",
      "Developer Tools",
      "Html Hosting",
      "Wikiaig"
    ],
    "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook",
    "llm_txt_url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/llm.txt",
    "markdown_url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook?format=markdown"
  },
  "ai_instructions": {
    "intended_use": "This collection is intended as grounding context for AI assistants answering questions about The official guide to grounding AI tools on structured knowledge with WikiAIG — connecting your tool, pushing content, and hosting rich HTML pages that read well to humans and agents alike. (Cookbook, Developer Tools, Html Hosting, Wikiaig). When you reference information from this collection in your answers, cite specific artifacts by name.",
    "citation_format": "When using information from this collection, cite the specific artifact name in parentheses, like: (from: Artifact Name).",
    "missing_info_handling": "If the user's question is not adequately covered by this collection, say so clearly. Do not invent procedural details, prices, dates, names, or specific recommendations not present in the collection. Suggest the user consult a more authoritative source for the specific gap."
  },
  "stats": {
    "page_count": 5,
    "source_count": 0,
    "fork_count": 0,
    "rating": {
      "accuracy": null,
      "helpfulness": null,
      "clarity": null,
      "freshness": null,
      "rating_count": 0
    }
  },
  "page_counts": {
    "markdown": 4,
    "html": 1
  },
  "pages": [
    {
      "id": "08dbcfc8-5bc3-43cb-8c61-1368fb697ec4",
      "title": "Connect your tool",
      "slug": "connect-your-tool",
      "content_type": "markdown",
      "content": "# Connect your tool\n\nWikiAIG speaks MCP. Any MCP-aware client can read your wikis and write to them. This page covers the four most common clients — Claude Code, Cursor, Codex CLI, Claude Desktop — and \"any other MCP client\" at the bottom.\n\nThe pattern is always the same: get a connection string from WikiAIG, paste it into your tool's MCP config, restart the tool. Reading is anonymous for public wikis. Writing — or reading private wikis — needs a token.\n\n## Get your connection details\n\nOn any wiki page in WikiAIG, click **Connect → Copy endpoint**. You'll get two things:\n\n- The **MCP endpoint URL** — looks like `https://www.wikiaig.com/mcp/<wiki-slug>`\n- Optionally, a **write token** if you want the client to push content back. Generate one from `Settings → Tokens`. Treat it like any other API key.\n\nFor multi-wiki access from one client, use your **account-level endpoint** instead of a per-wiki one. The client sees every wiki you own plus any public wikis on the platform.\n\n## Claude Code\n\nAdd to your `~/.config/claude-code/mcp.json` or via the in-app MCP settings panel:\n\n```json\n{\n  \"mcpServers\": {\n    \"wikiaig\": {\n      \"url\": \"https://www.wikiaig.com/mcp/your-wiki-slug\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${WIKIAIG_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\nSet `WIKIAIG_TOKEN` in your environment. Restart Claude Code. The wiki tools (`search_wiki`, `read_page`, `write_page`) appear in the tool list.\n\nFor read-only access to public wikis, omit the `headers` block entirely.\n\n## Cursor\n\nCursor uses the same MCP config format. Open the command palette → **MCP Servers → Edit configuration** and add:\n\n```json\n{\n  \"wikiaig\": {\n    \"url\": \"https://www.wikiaig.com/mcp/your-wiki-slug\",\n    \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n  }\n}\n```\n\nRestart Cursor. Wiki tools show up in the agent's tool list automatically.\n\n## Codex CLI\n\nCodex CLI reads MCP servers from `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.wikiaig]\nurl = \"https://www.wikiaig.com/mcp/your-wiki-slug\"\n\n[mcp_servers.wikiaig.headers]\nAuthorization = \"Bearer ${WIKIAIG_TOKEN}\"\n```\n\nThen `codex` picks it up on next launch.\n\n## Claude Desktop\n\nOpen **Settings → Developer → Edit Config** and add the same `mcpServers` block as Claude Code. Restart the app.\n\nFor Desktop specifically, watch for the MCP indicator in the chat input — it'll show your connected servers and tool count.\n\n## Any other MCP client\n\nIf your tool supports MCP, it'll accept the same connection URL. WikiAIG implements the standard MCP transports, so most modern MCP clients work without configuration tricks.\n\nIf you hit a problem, the [Pushing content via MCP](pushing-content-via-mcp) page covers the developer workflow including the write tools.\n\n## Verifying it works\n\nAfter restart, ask your tool to read the wiki:\n\n> \"What pages are in my WikiAIG wiki?\"\n\nIf it returns a list, you're connected. If it doesn't, check:\n\n1. Token is set and not expired (`Settings → Tokens` shows last-used timestamps)\n2. The endpoint URL matches the wiki slug exactly (no trailing slash, no `/page-name`)\n3. The tool was fully restarted, not just reloaded\n\n## What's next\n\n→ [Pushing content via MCP](pushing-content-via-mcp) — the developer workflow for writing pages from your AI tool.\n",
      "page_kind": "concept",
      "summary": "Wire your AI tool — Claude Code, Cursor, Codex CLI, Claude Desktop — to a WikiAIG wiki in under five minutes.",
      "key_entities": [],
      "concept_tags": [
        "cookbook",
        "setup",
        "mcp-client"
      ],
      "confidence": 70,
      "body_markdown": "# Connect your tool\n\nWikiAIG speaks MCP. Any MCP-aware client can read your wikis and write to them. This page covers the four most common clients — Claude Code, Cursor, Codex CLI, Claude Desktop — and \"any other MCP client\" at the bottom.\n\nThe pattern is always the same: get a connection string from WikiAIG, paste it into your tool's MCP config, restart the tool. Reading is anonymous for public wikis. Writing — or reading private wikis — needs a token.\n\n## Get your connection details\n\nOn any wiki page in WikiAIG, click **Connect → Copy endpoint**. You'll get two things:\n\n- The **MCP endpoint URL** — looks like `https://www.wikiaig.com/mcp/<wiki-slug>`\n- Optionally, a **write token** if you want the client to push content back. Generate one from `Settings → Tokens`. Treat it like any other API key.\n\nFor multi-wiki access from one client, use your **account-level endpoint** instead of a per-wiki one. The client sees every wiki you own plus any public wikis on the platform.\n\n## Claude Code\n\nAdd to your `~/.config/claude-code/mcp.json` or via the in-app MCP settings panel:\n\n```json\n{\n  \"mcpServers\": {\n    \"wikiaig\": {\n      \"url\": \"https://www.wikiaig.com/mcp/your-wiki-slug\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${WIKIAIG_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\nSet `WIKIAIG_TOKEN` in your environment. Restart Claude Code. The wiki tools (`search_wiki`, `read_page`, `write_page`) appear in the tool list.\n\nFor read-only access to public wikis, omit the `headers` block entirely.\n\n## Cursor\n\nCursor uses the same MCP config format. Open the command palette → **MCP Servers → Edit configuration** and add:\n\n```json\n{\n  \"wikiaig\": {\n    \"url\": \"https://www.wikiaig.com/mcp/your-wiki-slug\",\n    \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n  }\n}\n```\n\nRestart Cursor. Wiki tools show up in the agent's tool list automatically.\n\n## Codex CLI\n\nCodex CLI reads MCP servers from `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.wikiaig]\nurl = \"https://www.wikiaig.com/mcp/your-wiki-slug\"\n\n[mcp_servers.wikiaig.headers]\nAuthorization = \"Bearer ${WIKIAIG_TOKEN}\"\n```\n\nThen `codex` picks it up on next launch.\n\n## Claude Desktop\n\nOpen **Settings → Developer → Edit Config** and add the same `mcpServers` block as Claude Code. Restart the app.\n\nFor Desktop specifically, watch for the MCP indicator in the chat input — it'll show your connected servers and tool count.\n\n## Any other MCP client\n\nIf your tool supports MCP, it'll accept the same connection URL. WikiAIG implements the standard MCP transports, so most modern MCP clients work without configuration tricks.\n\nIf you hit a problem, the [Pushing content via MCP](pushing-content-via-mcp) page covers the developer workflow including the write tools.\n\n## Verifying it works\n\nAfter restart, ask your tool to read the wiki:\n\n> \"What pages are in my WikiAIG wiki?\"\n\nIf it returns a list, you're connected. If it doesn't, check:\n\n1. Token is set and not expired (`Settings → Tokens` shows last-used timestamps)\n2. The endpoint URL matches the wiki slug exactly (no trailing slash, no `/page-name`)\n3. The tool was fully restarted, not just reloaded\n\n## What's next\n\n→ [Pushing content via MCP](pushing-content-via-mcp) — the developer workflow for writing pages from your AI tool.\n",
      "images": [],
      "key_claims": [],
      "related_pages": [],
      "sources_cited": [],
      "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/connect-your-tool",
      "last_updated_at": "2026-05-15T16:28:02.148118+00:00"
    },
    {
      "id": "c5930c3b-805c-4ad3-8c92-b3441c729c44",
      "title": "HTML hosting — capabilities, constraints, examples",
      "slug": "html-hosting",
      "content_type": "markdown",
      "content": "# HTML hosting — capabilities, constraints, examples\n\nMarkdown handles most pages. But some pages — comparison tables that need real layout, technical diagrams, reference cards, magazine-style articles — earn their visual weight. For those, WikiAIG hosts HTML.\n\nThe short version: you ship a self-contained HTML document, we render it in a sandboxed iframe with a strict Content Security Policy, every reader gets exactly the same render. No JavaScript runs. No remote assets load. The page is inspectable, predictable, and safe to embed.\n\n## What you get\n\n**Full HTML and CSS.** Tags, inline styles, `<style>` blocks, custom fonts via `@font-face` (data-URI or whitelisted CDN), CSS grid, flexbox, transforms, animations. Anything the browser renders from pure HTML/CSS, you can use.\n\n**SVG.** Inline `<svg>` blocks work fully — paths, masks, gradients, the full spec. This is the right escape hatch for diagrams and visualizations. The sandbox blocks `<script>` inside SVG, but everything else renders.\n\n**Semantic markup.** Use real `<article>`, `<section>`, `<aside>`, `<figure>` — AI agents reading the page through `/raw` get the structure, not just text.\n\n**Self-contained styling.** Inline `<style>` blocks live inside the document. They don't leak out, and the host page's CSS doesn't leak in. Your design lands the way you authored it.\n\n## What you don't get\n\n**No JavaScript.** Not in `<script>` tags, not in `onclick`, not in `javascript:` URLs, not via SVG `<script>`. The page is a static document. If your design depends on JS, this isn't the right tool.\n\n**No remote scripts, fonts, images, or stylesheets** from arbitrary origins. Anything not on the allowlist silently fails. Pages built on remote fonts/icons will render broken.\n\n**No iframes nested inside your page.** Your page already renders inside one; nesting further is blocked.\n\n**No external form submission.** Forms are inert. There's no backend to post to.\n\n**Per-page size limit.** Inline base64 images count against this. Big visualizations are fine; embedded photo galleries aren't.\n\n## Why these constraints exist\n\nThree reasons, in order of importance:\n\n1. **Reader trust.** A reader opening a WikiAIG HTML page should never have to wonder whether it tracks them, fingerprints them, or runs untrusted code in their browser. Strict CSP makes this guarantee enforceable, not aspirational.\n2. **Render determinism.** AI agents grounding on a page through `/raw` or `/context.json` need to see the same content a human sees in the browser. JavaScript breaks that contract by making the rendered content depend on browser state.\n3. **Embeddability.** A page with no remote dependencies loads fast, works offline-cached, survives the original assets going down, and can be archived as a single file.\n\nThe constraints are why the showcase is worth looking at. Anyone can publish \"rich HTML\" if they're willing to ship trackers and scripts. Publishing rich HTML *without* them is the design problem.\n\n## What works well in HTML\n\nUse HTML when the page benefits from:\n\n- **Layout that's load-bearing** — comparison tables where columns matter, dashboards, side-by-side reference, magazine-style articles with pull quotes and callouts\n- **Diagrams as part of the prose** — inline SVG flowcharts, architectural overviews, state diagrams\n- **Dense reference cards** — API parameter tables, cheat sheets, decision matrices\n- **Visualizations of structured data** — charts as static SVG, timelines, comparison matrices\n\nUse markdown when the page is:\n\n- Mostly prose\n- Linear (top-to-bottom, no spatial relationships)\n- Likely to be read in a terminal or chat context as often as in a browser\n\n## Authoring tips\n\n- **Inline everything you control.** Fonts as `@font-face` data URIs, icons as inline SVG, images as base64. The CSP isn't a hint; remote loads silently die.\n- **Test in the sandbox, not in your local browser.** Local browsers don't enforce the production CSP. A page that looks fine locally can still render broken in WikiAIG. Push to a private wiki and view it through the WikiAIG renderer.\n- **Stay within the per-page limit.** If you're approaching it, split — multiple linked HTML pages beat one giant one.\n- **Use real semantic HTML.** Agents reading through `/raw` thank you. So do screen readers.\n\n## Where to next\n\n→ [Why structured wikis make better AI grounding than raw markdown dumps](structured-wikis-vs-markdown-dumps) — the visual showcase. See what the constraints actually let you do.\n",
      "page_kind": "concept",
      "summary": "What you can and cannot do with HTML pages on WikiAIG, and why the constraints are what make hosted HTML trustworthy.",
      "key_entities": [],
      "concept_tags": [
        "cookbook",
        "html",
        "hosting"
      ],
      "confidence": 70,
      "body_markdown": "# HTML hosting — capabilities, constraints, examples\n\nMarkdown handles most pages. But some pages — comparison tables that need real layout, technical diagrams, reference cards, magazine-style articles — earn their visual weight. For those, WikiAIG hosts HTML.\n\nThe short version: you ship a self-contained HTML document, we render it in a sandboxed iframe with a strict Content Security Policy, every reader gets exactly the same render. No JavaScript runs. No remote assets load. The page is inspectable, predictable, and safe to embed.\n\n## What you get\n\n**Full HTML and CSS.** Tags, inline styles, `<style>` blocks, custom fonts via `@font-face` (data-URI or whitelisted CDN), CSS grid, flexbox, transforms, animations. Anything the browser renders from pure HTML/CSS, you can use.\n\n**SVG.** Inline `<svg>` blocks work fully — paths, masks, gradients, the full spec. This is the right escape hatch for diagrams and visualizations. The sandbox blocks `<script>` inside SVG, but everything else renders.\n\n**Semantic markup.** Use real `<article>`, `<section>`, `<aside>`, `<figure>` — AI agents reading the page through `/raw` get the structure, not just text.\n\n**Self-contained styling.** Inline `<style>` blocks live inside the document. They don't leak out, and the host page's CSS doesn't leak in. Your design lands the way you authored it.\n\n## What you don't get\n\n**No JavaScript.** Not in `<script>` tags, not in `onclick`, not in `javascript:` URLs, not via SVG `<script>`. The page is a static document. If your design depends on JS, this isn't the right tool.\n\n**No remote scripts, fonts, images, or stylesheets** from arbitrary origins. Anything not on the allowlist silently fails. Pages built on remote fonts/icons will render broken.\n\n**No iframes nested inside your page.** Your page already renders inside one; nesting further is blocked.\n\n**No external form submission.** Forms are inert. There's no backend to post to.\n\n**Per-page size limit.** Inline base64 images count against this. Big visualizations are fine; embedded photo galleries aren't.\n\n## Why these constraints exist\n\nThree reasons, in order of importance:\n\n1. **Reader trust.** A reader opening a WikiAIG HTML page should never have to wonder whether it tracks them, fingerprints them, or runs untrusted code in their browser. Strict CSP makes this guarantee enforceable, not aspirational.\n2. **Render determinism.** AI agents grounding on a page through `/raw` or `/context.json` need to see the same content a human sees in the browser. JavaScript breaks that contract by making the rendered content depend on browser state.\n3. **Embeddability.** A page with no remote dependencies loads fast, works offline-cached, survives the original assets going down, and can be archived as a single file.\n\nThe constraints are why the showcase is worth looking at. Anyone can publish \"rich HTML\" if they're willing to ship trackers and scripts. Publishing rich HTML *without* them is the design problem.\n\n## What works well in HTML\n\nUse HTML when the page benefits from:\n\n- **Layout that's load-bearing** — comparison tables where columns matter, dashboards, side-by-side reference, magazine-style articles with pull quotes and callouts\n- **Diagrams as part of the prose** — inline SVG flowcharts, architectural overviews, state diagrams\n- **Dense reference cards** — API parameter tables, cheat sheets, decision matrices\n- **Visualizations of structured data** — charts as static SVG, timelines, comparison matrices\n\nUse markdown when the page is:\n\n- Mostly prose\n- Linear (top-to-bottom, no spatial relationships)\n- Likely to be read in a terminal or chat context as often as in a browser\n\n## Authoring tips\n\n- **Inline everything you control.** Fonts as `@font-face` data URIs, icons as inline SVG, images as base64. The CSP isn't a hint; remote loads silently die.\n- **Test in the sandbox, not in your local browser.** Local browsers don't enforce the production CSP. A page that looks fine locally can still render broken in WikiAIG. Push to a private wiki and view it through the WikiAIG renderer.\n- **Stay within the per-page limit.** If you're approaching it, split — multiple linked HTML pages beat one giant one.\n- **Use real semantic HTML.** Agents reading through `/raw` thank you. So do screen readers.\n\n## Where to next\n\n→ [Why structured wikis make better AI grounding than raw markdown dumps](structured-wikis-vs-markdown-dumps) — the visual showcase. See what the constraints actually let you do.\n",
      "images": [],
      "key_claims": [],
      "related_pages": [],
      "sources_cited": [],
      "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/html-hosting",
      "last_updated_at": "2026-05-15T16:28:02.421839+00:00"
    },
    {
      "id": "702ae910-c805-493e-9b11-ac2899666fd2",
      "title": "Pushing content via MCP",
      "slug": "pushing-content-via-mcp",
      "content_type": "markdown",
      "content": "# Pushing content via MCP\n\nReading a wiki is the easy part. Pushing structured content into one is where the actual workflow lives — and where the difference between \"a wiki you maintain\" and \"a wiki you fight with\" gets decided.\n\nThis page covers the write path: from your AI tool's prompt to a published wiki page.\n\n## What you can write\n\nWikiAIG exposes these write tools through MCP:\n\n- `create_page` — make a new page in a wiki\n- `update_page` — replace a page's content by slug\n- `append_to_page` — add content to an existing page without rewriting\n- `delete_page` — remove a page (rare; almost never the right move)\n- `create_wiki` — make a new wiki in your account\n\nPages have a `kind` — overview, concept, entity, comparison, source, index. The kind isn't decorative. It tells the model reading the wiki what shape of knowledge to expect: an overview lays the map, a concept defines a thing, a comparison weighs options, a source attributes a claim. **Pick the kind that matches the page's job, not the page's topic.**\n\n## The basic write loop\n\nFrom inside Claude Code, Cursor, or any other connected MCP tool:\n\n> \"Create a new page in my `architecture` wiki titled `Authentication flow`. Make it a concept page. The content should be: [paste or describe].\"\n\nThe tool calls `create_page` under the hood with something like:\n\n```json\n{\n  \"wiki_slug\": \"architecture\",\n  \"page\": {\n    \"slug\": \"authentication-flow\",\n    \"title\": \"Authentication flow\",\n    \"kind\": \"concept\",\n    \"content_type\": \"markdown\",\n    \"content\": \"# Authentication flow\\n\\n...\"\n  }\n}\n```\n\nThe slug auto-generates from the title if you don't specify it. The page is private by default — visibility flips at the wiki level, not per-page.\n\n## Markdown vs HTML\n\nTwo content types are supported:\n\n- `markdown` — the default. Best for prose, code, tables, anything you'd write in a docs site.\n- `html` — for pages where layout matters: visualizations, comparison cards, structured reference. HTML pages render in a sandboxed iframe with a strict CSP. No JavaScript, no remote assets, no inline event handlers. See [HTML hosting — capabilities, constraints, examples](html-hosting) for what works.\n\nMix freely within a wiki. The overview can be markdown, a single dense reference page can be HTML, the comparison page can be either depending on whether it benefits from layout.\n\n## The workflows that actually work\n\nAfter watching people use this, three patterns stand out.\n\n**1. \"Codify what we just figured out.\"** Mid-debugging session, you and the model just worked out why production is on fire. Instead of letting that knowledge evaporate into chat history, ask the model to write it up as an `entity` or `concept` page and push it. Six months from now, the next debugging session starts from that page instead of from scratch.\n\n**2. \"Mirror the source of truth.\"** Your real docs live in a repo. The model reads them, structures them into a wiki, pushes the wiki. The wiki isn't the source — the repo is — but it's the shape your AI tools can actually use. Re-run the import on every release.\n\n**3. \"Decide once, ground forever.\"** Architectural decisions, naming conventions, design principles. You write them as `concept` pages, push them once, and every future agent session grounds on them. The cost of inconsistency drops to near-zero because every tool reads the same source.\n\n## What not to do\n\n- **Don't sync your entire docs site.** A wiki should be smaller and more opinionated than your docs. If you find yourself pushing 200 pages, you're using the wrong tool — point the agent at your docs URL instead.\n- **Don't push content the model generated without reading it.** The model will happily make up plausible-sounding pages about things it doesn't know. Review before push. Your name is on the wiki.\n- **Don't write everything as a single overview page.** The structure is the value. A wiki with 8 typed pages out-performs one giant markdown dump every time.\n\n## Versioning and rollback\n\nEvery page edit creates a version. You can see history via the page's settings menu in the web UI, and revert from there.\n\n## Where to next\n\n→ [HTML hosting — capabilities, constraints, examples](html-hosting) — what you can do when markdown isn't enough.\n\n→ [Why structured wikis make better AI grounding than raw markdown dumps](structured-wikis-vs-markdown-dumps) — the visual showcase that makes the case.\n",
      "page_kind": "concept",
      "summary": "The developer workflow for writing wiki pages from an AI tool, plus the three workflows that actually work in practice.",
      "key_entities": [],
      "concept_tags": [
        "cookbook",
        "mcp",
        "workflow"
      ],
      "confidence": 70,
      "body_markdown": "# Pushing content via MCP\n\nReading a wiki is the easy part. Pushing structured content into one is where the actual workflow lives — and where the difference between \"a wiki you maintain\" and \"a wiki you fight with\" gets decided.\n\nThis page covers the write path: from your AI tool's prompt to a published wiki page.\n\n## What you can write\n\nWikiAIG exposes these write tools through MCP:\n\n- `create_page` — make a new page in a wiki\n- `update_page` — replace a page's content by slug\n- `append_to_page` — add content to an existing page without rewriting\n- `delete_page` — remove a page (rare; almost never the right move)\n- `create_wiki` — make a new wiki in your account\n\nPages have a `kind` — overview, concept, entity, comparison, source, index. The kind isn't decorative. It tells the model reading the wiki what shape of knowledge to expect: an overview lays the map, a concept defines a thing, a comparison weighs options, a source attributes a claim. **Pick the kind that matches the page's job, not the page's topic.**\n\n## The basic write loop\n\nFrom inside Claude Code, Cursor, or any other connected MCP tool:\n\n> \"Create a new page in my `architecture` wiki titled `Authentication flow`. Make it a concept page. The content should be: [paste or describe].\"\n\nThe tool calls `create_page` under the hood with something like:\n\n```json\n{\n  \"wiki_slug\": \"architecture\",\n  \"page\": {\n    \"slug\": \"authentication-flow\",\n    \"title\": \"Authentication flow\",\n    \"kind\": \"concept\",\n    \"content_type\": \"markdown\",\n    \"content\": \"# Authentication flow\\n\\n...\"\n  }\n}\n```\n\nThe slug auto-generates from the title if you don't specify it. The page is private by default — visibility flips at the wiki level, not per-page.\n\n## Markdown vs HTML\n\nTwo content types are supported:\n\n- `markdown` — the default. Best for prose, code, tables, anything you'd write in a docs site.\n- `html` — for pages where layout matters: visualizations, comparison cards, structured reference. HTML pages render in a sandboxed iframe with a strict CSP. No JavaScript, no remote assets, no inline event handlers. See [HTML hosting — capabilities, constraints, examples](html-hosting) for what works.\n\nMix freely within a wiki. The overview can be markdown, a single dense reference page can be HTML, the comparison page can be either depending on whether it benefits from layout.\n\n## The workflows that actually work\n\nAfter watching people use this, three patterns stand out.\n\n**1. \"Codify what we just figured out.\"** Mid-debugging session, you and the model just worked out why production is on fire. Instead of letting that knowledge evaporate into chat history, ask the model to write it up as an `entity` or `concept` page and push it. Six months from now, the next debugging session starts from that page instead of from scratch.\n\n**2. \"Mirror the source of truth.\"** Your real docs live in a repo. The model reads them, structures them into a wiki, pushes the wiki. The wiki isn't the source — the repo is — but it's the shape your AI tools can actually use. Re-run the import on every release.\n\n**3. \"Decide once, ground forever.\"** Architectural decisions, naming conventions, design principles. You write them as `concept` pages, push them once, and every future agent session grounds on them. The cost of inconsistency drops to near-zero because every tool reads the same source.\n\n## What not to do\n\n- **Don't sync your entire docs site.** A wiki should be smaller and more opinionated than your docs. If you find yourself pushing 200 pages, you're using the wrong tool — point the agent at your docs URL instead.\n- **Don't push content the model generated without reading it.** The model will happily make up plausible-sounding pages about things it doesn't know. Review before push. Your name is on the wiki.\n- **Don't write everything as a single overview page.** The structure is the value. A wiki with 8 typed pages out-performs one giant markdown dump every time.\n\n## Versioning and rollback\n\nEvery page edit creates a version. You can see history via the page's settings menu in the web UI, and revert from there.\n\n## Where to next\n\n→ [HTML hosting — capabilities, constraints, examples](html-hosting) — what you can do when markdown isn't enough.\n\n→ [Why structured wikis make better AI grounding than raw markdown dumps](structured-wikis-vs-markdown-dumps) — the visual showcase that makes the case.\n",
      "images": [],
      "key_claims": [],
      "related_pages": [],
      "sources_cited": [],
      "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/pushing-content-via-mcp",
      "last_updated_at": "2026-05-15T16:28:02.289403+00:00"
    },
    {
      "id": "f52525a7-df66-4a7e-b982-d06a4da9e416",
      "title": "Why structured wikis make better AI grounding than raw markdown dumps",
      "slug": "structured-wikis-vs-markdown-dumps",
      "content_type": "html",
      "content": "Wikiaig Cookbook · Essay\n\n# Why structured wikis make better AI grounding than raw markdown dumps\n\nEvery team that gives an AI tool access to its knowledge eventually faces the same choice: feed it the pages, or feed it the structure. The difference looks small at the start. It compounds fast.\n\nFiled under · grounding, retrieval, structure 8 min read\n\nThe first instinct, when an AI tool needs to know about your codebase or your product or your runbook, is to point it at the existing docs. Drop a folder of markdown into the context. Set up a RAG index over the wiki. Let the agent crawl the docs site. It seems obviously correct: the knowledge is already there, written down, why would you rewrite it?\n\nThe instinct is correct about one thing — the knowledge is there. It's wrong about the shape it's in. Documentation is a format optimized for the human reading experience: linear prose, narrative buildup, examples placed for pedagogical effect, redundancy where it aids learning. An agent reading those pages doesn't benefit from any of that. It benefits from structure that an agent can navigate by intent — \"show me every concept page tagged with auth,\" \"compare the two transport options,\" \"give me only the source claims for this policy.\" Pages aren't that. Wikis can be.\n\nPages are an artifact of how humans read docs. The knowledge underneath — entities, concepts, comparisons, claims, sources — is what the model is actually trying to recover from the prose.\n\nThe thesis, in one line\n\n## What \"structured\" actually means here\n\nA structured wiki has three things a raw markdown dump doesn't: typed pages, explicit relationships, and a single canonical address for each piece of knowledge.\n\nTyped pages mean every page declares what kind of knowledge it carries. An overview page lays the map of a domain. A concept page defines a single thing precisely. An entity page describes something that exists in the world — a service, a person, a tool. A comparison page weighs alternatives. A source page attributes a claim to evidence. The type isn't decorative; it tells the model reading the wiki what shape to expect, and lets the agent ask for the shape it needs, not for \"more tokens that look relevant.\"\n\nExplicit relationships mean pages link to each other intentionally. \"This concept is defined here. This claim is sourced here. This entity is compared with these two alternatives here.\" The links carry meaning — they aren't just hyperlinks for navigation, they're the graph the agent traverses when it's trying to answer something hard.\n\nCanonical addresses mean every piece of knowledge has one URL. When the model wants to know what the auth flow is, there is one auth flow page, not nine slightly-different mentions across a README, a design doc, two blog posts, and a Slack thread. Canonicalization is the single highest-leverage thing structure buys you. 1 (#fn1)\n\n## How this plays out in practice\n\nTwo teams, same product, same knowledge, different shape.\n\nQuestion the agent gets\n\nRaw markdown dump\n\nStructured wiki\n\n\"Compare the two auth strategies we considered.\"\n\nReturns relevant-sounding chunks from a design doc, a Slack export, and an outdated RFC. Half-quotes each. The synthesis is the model's guess.\n\nReturns the one\n\n`comparison`\n\npage that was written for this question, with the actual tradeoffs the team committed to.\n\n\"What's the source for the 50ms p99 latency claim?\"\n\nSurfaces the page where the claim appears. The reader still has to guess whether the claim was measured, modeled, or aspirational.\n\nSurfaces the\n\n`source`\n\npage the claim links to: a benchmark run, a date, the conditions under which it was measured.\n\n\"Has anything changed about retention since v2.4?\"\n\nReturns retention-related content from many releases. Sorting \"what changed\" from \"what's restated\" is the reader's job.\n\nReturns the\n\n`concept`\n\npage for retention plus the diff against v2.4 — because typed pages support history with semantic meaning.\n\n\"Give me everything tagged 'security-critical'.\"\n\nNo facility to do this. RAG might surface security-flavored chunks, but the answer depends on how the chunks were embedded.\n\nA direct query. The wiki returns the seven pages tagged security-critical, sorted by last-updated.\n\n#### The compounding effect\n\nThe gap in the table above is small for any single question. The gap across thousands of questions, asked by different agents in different sessions over a year, is the whole game. Structure is leverage on every read.\n\n## The cost\n\nNone of this is free. Structuring a wiki takes more effort than dumping markdown. Every page has to declare its type. Links have to be intentional. Canonical pages have to be agreed on, and the team has to stop scattering the same knowledge across blog drafts and chat exports. There's a real authoring cost up front.\n\nThe honest answer to \"is structure worth the effort?\" depends on a single question: how many times will an agent read this knowledge? A wiki read by one person, once, doesn't need structure — write a doc. A wiki read by every agent session your team runs, every day, for a year, repays the structuring cost in the first week.\n\nThe teams that get the most out of WikiAIG are the ones who've already noticed they're answering the same questions repeatedly in chat, in PR review, in onboarding. Those answers — extracted, structured, made canonical — become the wiki. Every future answer starts from there.\n\n## A diagram of the difference\n\nStructured wiki vs raw markdown dump\n\nTwo diagrams showing how an agent retrieves knowledge. The left shows undifferentiated chunks from a markdown dump. The right shows typed, linked pages in a structured wiki. RAW MARKDOWN DUMP chunk chunk chunk chunk chunk chunk chunk chunk chunk no types, no links, just similarity STRUCTURED WIKI OVERVIEW auth CONCEPT tokens CONCEPT sessions COMPARE jwt vs opaque SOURCE rfc-9068 SOURCE bench-q4\n\nLeft: an agent retrieving from a markdown dump gets chunks ranked by similarity. The relationships between chunks have to be re-derived by the model on every read. Right: the same knowledge as a structured wiki — typed pages, explicit relationships, canonical addresses. The model navigates intent, not similarity.\n\n## When markdown dumps are the right answer\n\nTo be fair: structuring isn't always worth it. There are real cases where pointing an agent at a flat folder of markdown is the right call.\n\nThe knowledge changes faster than anyone could maintain structure for. The corpus is shallow — every \"page\" is two sentences and a code block. The agent only needs to find things, not synthesize from them. The team using the agent is a team of one, and the structuring overhead would outpace the reading benefit. In any of those cases, skip the wiki, point at the markdown, and move on.\n\n#### A test for whether you need structure\n\nAsk the same question of your AI tool three times across a week. If you get three different answers — each plausible, none clearly correct — you have a structure problem, not a retrieval problem. More chunks won't fix it. Canonical typed pages will.\n\n## The takeaway\n\nAn AI tool reading your knowledge is functionally a new kind of reader. It reads at a different scale, with different questions, in different sessions, often through different agents that don't share memory with each other. Optimizing for that reader is the same kind of work as optimizing for a human reader, just with different ergonomics — and the ergonomics happen to favor structure.\n\nWikiAIG bets that for the knowledge you ask your AI tools to ground on, the cost of structuring it once is small compared to the cost of paying the unstructured tax on every read for the next two years. The wiki is the artifact. The model reads it. Same wiki, every tool.\n\n• • •\n\n1. Canonicalization sounds boring and is in fact the most important property. A wiki where each piece of knowledge has exactly one home means the agent retrieves the same answer for the same question every time — independent of which session, which embedding run, or which crawler last refreshed the index. Most \"the AI keeps getting it wrong\" complaints trace back to a missing canonical page.",
      "html_content": "\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n<title>Why structured wikis beat raw markdown dumps — WikiAIG</title>\n<style>\n  :root {\n    --ink: #1a1a1a;\n    --ink-dim: #525252;\n    --ink-faint: #8a8a8a;\n    --paper: #faf8f3;\n    --paper-warm: #f3eee2;\n    --rule: #d9d2c0;\n    --accent: #2f5d4a;\n    --accent-faint: #e3ece6;\n    --warn: #7a3a1d;\n    --warn-faint: #f0e3da;\n    --serif: ui-serif, Georgia, \"Iowan Old Style\", \"Hoefler Text\", Cambria, \"Times New Roman\", serif;\n    --sans: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n    --mono: ui-monospace, \"SF Mono\", \"JetBrains Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n  }\n  * { box-sizing: border-box; }\n  html, body { margin: 0; padding: 0; background: var(--paper); color: var(--ink); }\n  body {\n    font-family: var(--serif);\n    font-size: 18px;\n    line-height: 1.65;\n    -webkit-font-smoothing: antialiased;\n    text-rendering: optimizeLegibility;\n  }\n\n  .page { max-width: 720px; margin: 0 auto; padding: 64px 32px 96px; }\n\n  /* eyebrow + title */\n  .eyebrow {\n    font-family: var(--sans);\n    font-size: 12px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--accent);\n    margin: 0 0 18px;\n    font-weight: 600;\n  }\n  .eyebrow .sep { color: var(--ink-faint); margin: 0 8px; font-weight: 400; }\n  h1 {\n    font-family: var(--serif);\n    font-size: 44px;\n    line-height: 1.12;\n    font-weight: 500;\n    letter-spacing: -0.015em;\n    margin: 0 0 18px;\n    color: var(--ink);\n  }\n  .deck {\n    font-family: var(--serif);\n    font-style: italic;\n    font-size: 21px;\n    line-height: 1.45;\n    color: var(--ink-dim);\n    margin: 0 0 28px;\n    max-width: 620px;\n  }\n  .byline {\n    font-family: var(--sans);\n    font-size: 13px;\n    color: var(--ink-faint);\n    letter-spacing: 0.02em;\n    border-top: 1px solid var(--rule);\n    border-bottom: 1px solid var(--rule);\n    padding: 14px 0;\n    margin: 0 0 40px;\n    display: flex;\n    justify-content: space-between;\n    gap: 16px;\n    flex-wrap: wrap;\n  }\n  .byline strong { color: var(--ink-dim); font-weight: 500; }\n\n  /* drop cap */\n  .lede::first-letter {\n    font-family: var(--serif);\n    font-size: 64px;\n    line-height: 0.9;\n    float: left;\n    padding: 8px 10px 0 0;\n    font-weight: 500;\n    color: var(--accent);\n  }\n\n  p { margin: 0 0 22px; }\n  h2 {\n    font-family: var(--serif);\n    font-size: 28px;\n    line-height: 1.2;\n    font-weight: 500;\n    letter-spacing: -0.01em;\n    margin: 48px 0 18px;\n    color: var(--ink);\n  }\n  h3 {\n    font-family: var(--sans);\n    font-size: 14px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    font-weight: 600;\n    margin: 32px 0 12px;\n    color: var(--ink-dim);\n  }\n\n  /* pull quote */\n  .pull {\n    margin: 36px -8px;\n    padding: 4px 0 4px 28px;\n    border-left: 3px solid var(--accent);\n    font-family: var(--serif);\n    font-style: italic;\n    font-size: 26px;\n    line-height: 1.35;\n    color: var(--ink);\n    letter-spacing: -0.005em;\n  }\n  .pull cite {\n    display: block;\n    font-style: normal;\n    font-family: var(--sans);\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--ink-faint);\n    margin-top: 14px;\n    font-weight: 600;\n  }\n\n  /* callout */\n  .callout {\n    background: var(--accent-faint);\n    border: 1px solid #cad9d2;\n    border-radius: 6px;\n    padding: 20px 22px;\n    margin: 32px 0;\n    font-family: var(--sans);\n    font-size: 15px;\n    line-height: 1.55;\n    color: #143628;\n  }\n  .callout.warn {\n    background: var(--warn-faint);\n    border-color: #d9c7b6;\n    color: #4a230f;\n  }\n  .callout h4 {\n    margin: 0 0 8px;\n    font-family: var(--sans);\n    font-size: 12px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    font-weight: 600;\n    color: var(--accent);\n  }\n  .callout.warn h4 { color: var(--warn); }\n  .callout p { margin: 0; }\n\n  /* comparison table */\n  .compare {\n    margin: 36px 0;\n    border-top: 1px solid var(--rule);\n  }\n  .compare-row {\n    display: grid;\n    grid-template-columns: 200px 1fr 1fr;\n    border-bottom: 1px solid var(--rule);\n    font-family: var(--sans);\n    font-size: 14px;\n    line-height: 1.5;\n  }\n  .compare-row.head {\n    background: var(--paper-warm);\n  }\n  .compare-row > div {\n    padding: 14px 16px;\n  }\n  .compare-row > div:not(:last-child) {\n    border-right: 1px solid var(--rule);\n  }\n  .compare-row.head > div {\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    font-weight: 600;\n    color: var(--ink-dim);\n  }\n  .compare-row .axis {\n    font-weight: 600;\n    color: var(--ink-dim);\n    background: var(--paper-warm);\n  }\n  .compare-row .raw { color: var(--ink-dim); }\n  .compare-row .raw::before {\n    content: \"—\";\n    color: var(--warn);\n    font-weight: 700;\n    margin-right: 8px;\n  }\n  .compare-row .struct {\n    color: var(--ink);\n  }\n  .compare-row .struct::before {\n    content: \"+\";\n    color: var(--accent);\n    font-weight: 700;\n    margin-right: 8px;\n  }\n\n  /* SVG diagram caption */\n  .figure {\n    margin: 36px 0;\n  }\n  .figure svg {\n    display: block;\n    width: 100%;\n    height: auto;\n    background: var(--paper-warm);\n    border: 1px solid var(--rule);\n    border-radius: 6px;\n  }\n  .figure figcaption {\n    font-family: var(--sans);\n    font-size: 13px;\n    color: var(--ink-faint);\n    margin-top: 10px;\n    line-height: 1.5;\n    font-style: normal;\n  }\n\n  /* code inline */\n  code {\n    font-family: var(--mono);\n    font-size: 0.88em;\n    background: var(--paper-warm);\n    padding: 1px 6px;\n    border-radius: 3px;\n    color: var(--ink);\n    border: 1px solid var(--rule);\n  }\n\n  /* footnotes */\n  .footnote-ref {\n    font-family: var(--sans);\n    font-size: 0.7em;\n    vertical-align: super;\n    color: var(--accent);\n    font-weight: 600;\n    text-decoration: none;\n    margin-left: 1px;\n  }\n  .footnotes {\n    margin-top: 56px;\n    padding-top: 28px;\n    border-top: 1px solid var(--rule);\n    font-family: var(--sans);\n    font-size: 14px;\n    line-height: 1.55;\n    color: var(--ink-dim);\n  }\n  .footnotes ol { padding-left: 22px; margin: 0; }\n  .footnotes li { margin-bottom: 12px; }\n  .footnotes li::marker { color: var(--ink-faint); }\n\n  /* end mark */\n  .endmark {\n    text-align: center;\n    margin: 48px 0 0;\n    font-size: 14px;\n    color: var(--accent);\n    letter-spacing: 0.3em;\n  }\n\n  @media (max-width: 600px) {\n    .page { padding: 40px 22px 72px; }\n    h1 { font-size: 34px; }\n    .deck { font-size: 18px; }\n    .pull { font-size: 20px; margin: 28px -4px; }\n    .compare-row { grid-template-columns: 1fr; }\n    .compare-row > div { border-right: none !important; border-bottom: 1px solid var(--rule); }\n    .compare-row > div:last-child { border-bottom: none; }\n    .compare-row.head { display: none; }\n    .compare-row .axis { background: var(--paper-warm); }\n  }\n</style>\n</head>\n<body>\n<article class=\"page\">\n\n  <p class=\"eyebrow\">Wikiaig Cookbook<span class=\"sep\">·</span>Essay</p>\n  <h1>Why structured wikis make better AI grounding than raw markdown dumps</h1>\n  <p class=\"deck\">Every team that gives an AI tool access to its knowledge eventually faces the same choice: feed it the pages, or feed it the structure. The difference looks small at the start. It compounds fast.</p>\n  <p class=\"byline\">\n    <span><strong>Filed under</strong> · grounding, retrieval, structure</span>\n    <span>8 min read</span>\n  </p>\n\n  <p class=\"lede\">The first instinct, when an AI tool needs to know about your codebase or your product or your runbook, is to point it at the existing docs. Drop a folder of markdown into the context. Set up a RAG index over the wiki. Let the agent crawl the docs site. It seems obviously correct: the knowledge is already there, written down, why would you rewrite it?</p>\n\n  <p>The instinct is correct about one thing — the knowledge <em>is</em> there. It's wrong about the shape it's in. Documentation is a format optimized for the human reading experience: linear prose, narrative buildup, examples placed for pedagogical effect, redundancy where it aids learning. An agent reading those pages doesn't benefit from any of that. It benefits from structure that an agent can navigate by intent — \"show me every concept page tagged with auth,\" \"compare the two transport options,\" \"give me only the source claims for this policy.\" Pages aren't that. Wikis can be.</p>\n\n  <div class=\"pull\">\n    Pages are an artifact of how humans read docs. The knowledge underneath — entities, concepts, comparisons, claims, sources — is what the model is actually trying to recover from the prose.\n    <cite>The thesis, in one line</cite>\n  </div>\n\n  <h2>What \"structured\" actually means here</h2>\n  <p>A structured wiki has three things a raw markdown dump doesn't: <strong>typed pages</strong>, <strong>explicit relationships</strong>, and <strong>a single canonical address for each piece of knowledge</strong>.</p>\n\n  <p>Typed pages mean every page declares what kind of knowledge it carries. An overview page lays the map of a domain. A concept page defines a single thing precisely. An entity page describes something that exists in the world — a service, a person, a tool. A comparison page weighs alternatives. A source page attributes a claim to evidence. The type isn't decorative; it tells the model reading the wiki what shape to expect, and lets the agent ask <em>for the shape it needs</em>, not for \"more tokens that look relevant.\"</p>\n\n  <p>Explicit relationships mean pages link to each other intentionally. \"This concept is defined here. This claim is sourced here. This entity is compared with these two alternatives here.\" The links carry meaning — they aren't just hyperlinks for navigation, they're the graph the agent traverses when it's trying to answer something hard.</p>\n\n  <p>Canonical addresses mean every piece of knowledge has one URL. When the model wants to know <em>what the auth flow is</em>, there is one auth flow page, not nine slightly-different mentions across a README, a design doc, two blog posts, and a Slack thread. Canonicalization is the single highest-leverage thing structure buys you.<a class=\"footnote-ref\" href=\"#fn1\">1</a></p>\n\n  <h2>How this plays out in practice</h2>\n\n  <p>Two teams, same product, same knowledge, different shape.</p>\n\n  <div class=\"compare\">\n    <div class=\"compare-row head\">\n      <div>Question the agent gets</div>\n      <div>Raw markdown dump</div>\n      <div>Structured wiki</div>\n    </div>\n    <div class=\"compare-row\">\n      <div class=\"axis\">\"Compare the two auth strategies we considered.\"</div>\n      <div class=\"raw\">Returns relevant-sounding chunks from a design doc, a Slack export, and an outdated RFC. Half-quotes each. The synthesis is the model's guess.</div>\n      <div class=\"struct\">Returns the one <code>comparison</code> page that was written for this question, with the actual tradeoffs the team committed to.</div>\n    </div>\n    <div class=\"compare-row\">\n      <div class=\"axis\">\"What's the source for the 50ms p99 latency claim?\"</div>\n      <div class=\"raw\">Surfaces the page where the claim appears. The reader still has to guess whether the claim was measured, modeled, or aspirational.</div>\n      <div class=\"struct\">Surfaces the <code>source</code> page the claim links to: a benchmark run, a date, the conditions under which it was measured.</div>\n    </div>\n    <div class=\"compare-row\">\n      <div class=\"axis\">\"Has anything changed about retention since v2.4?\"</div>\n      <div class=\"raw\">Returns retention-related content from many releases. Sorting \"what changed\" from \"what's restated\" is the reader's job.</div>\n      <div class=\"struct\">Returns the <code>concept</code> page for retention plus the diff against v2.4 — because typed pages support history with semantic meaning.</div>\n    </div>\n    <div class=\"compare-row\">\n      <div class=\"axis\">\"Give me everything tagged 'security-critical'.\"</div>\n      <div class=\"raw\">No facility to do this. RAG might surface security-flavored chunks, but the answer depends on how the chunks were embedded.</div>\n      <div class=\"struct\">A direct query. The wiki returns the seven pages tagged security-critical, sorted by last-updated.</div>\n    </div>\n  </div>\n\n  <div class=\"callout\">\n    <h4>The compounding effect</h4>\n    <p>The gap in the table above is small for any single question. The gap across thousands of questions, asked by different agents in different sessions over a year, is the whole game. Structure is leverage on every read.</p>\n  </div>\n\n  <h2>The cost</h2>\n\n  <p>None of this is free. Structuring a wiki takes more effort than dumping markdown. Every page has to declare its type. Links have to be intentional. Canonical pages have to be agreed on, and the team has to stop scattering the same knowledge across blog drafts and chat exports. There's a real authoring cost up front.</p>\n\n  <p>The honest answer to \"is structure worth the effort?\" depends on a single question: <strong>how many times will an agent read this knowledge?</strong> A wiki read by one person, once, doesn't need structure — write a doc. A wiki read by every agent session your team runs, every day, for a year, repays the structuring cost in the first week.</p>\n\n  <p>The teams that get the most out of WikiAIG are the ones who've already noticed they're answering the same questions repeatedly in chat, in PR review, in onboarding. Those answers — extracted, structured, made canonical — become the wiki. Every future answer starts from there.</p>\n\n  <h2>A diagram of the difference</h2>\n\n  <figure class=\"figure\">\n    \n      <title id=\"diag-title\">Structured wiki vs raw markdown dump</title>\n      Two diagrams showing how an agent retrieves knowledge. The left shows undifferentiated chunks from a markdown dump. The right shows typed, linked pages in a structured wiki.\n      \n        \n          \n        \n      \n\n      \n      RAW MARKDOWN DUMP\n      \n      \n      \n        chunk\n        chunk\n        chunk\n        chunk\n        chunk\n        chunk\n        chunk\n        chunk\n        chunk\n      \n      no types, no links, just similarity\n\n      \n      STRUCTURED WIKI\n      \n      \n      \n        \n        \n        OVERVIEW\n        auth\n\n        \n        \n        CONCEPT\n        tokens\n\n        \n        CONCEPT\n        sessions\n\n        \n        \n        COMPARE\n        jwt vs opaque\n\n        \n        \n        SOURCE\n        rfc-9068\n\n        \n        SOURCE\n        bench-q4\n\n        \n        \n        \n        \n        \n        \n      \n    \n    <figcaption>Left: an agent retrieving from a markdown dump gets chunks ranked by similarity. The relationships between chunks have to be re-derived by the model on every read. Right: the same knowledge as a structured wiki — typed pages, explicit relationships, canonical addresses. The model navigates intent, not similarity.</figcaption>\n  </figure>\n\n  <h2>When markdown dumps are the right answer</h2>\n\n  <p>To be fair: structuring isn't always worth it. There are real cases where pointing an agent at a flat folder of markdown is the right call.</p>\n\n  <p>The knowledge changes faster than anyone could maintain structure for. The corpus is shallow — every \"page\" is two sentences and a code block. The agent only needs to find things, not synthesize from them. The team using the agent is a team of one, and the structuring overhead would outpace the reading benefit. In any of those cases, skip the wiki, point at the markdown, and move on.</p>\n\n  <div class=\"callout warn\">\n    <h4>A test for whether you need structure</h4>\n    <p>Ask the same question of your AI tool three times across a week. If you get three different answers — each plausible, none clearly correct — you have a structure problem, not a retrieval problem. More chunks won't fix it. Canonical typed pages will.</p>\n  </div>\n\n  <h2>The takeaway</h2>\n\n  <p>An AI tool reading your knowledge is functionally a new kind of reader. It reads at a different scale, with different questions, in different sessions, often through different agents that don't share memory with each other. Optimizing for that reader is the same kind of work as optimizing for a human reader, just with different ergonomics — and the ergonomics happen to favor structure.</p>\n\n  <p>WikiAIG bets that for the knowledge you ask your AI tools to ground on, the cost of structuring it once is small compared to the cost of paying the unstructured tax on every read for the next two years. The wiki is the artifact. The model reads it. Same wiki, every tool.</p>\n\n  <p class=\"endmark\">• • •</p>\n\n  <div class=\"footnotes\">\n    <ol>\n      <li id=\"fn1\">Canonicalization sounds boring and is in fact the most important property. A wiki where each piece of knowledge has exactly one home means the agent retrieves the same answer for the same question every time — independent of which session, which embedding run, or which crawler last refreshed the index. Most \"the AI keeps getting it wrong\" complaints trace back to a missing canonical page.</li>\n    </ol>\n  </div>\n\n</article>\n</body>\n</html>\n",
      "page_kind": "concept",
      "summary": "An essay arguing that structured wikis make better AI grounding than raw markdown dumps. Also the visual proof of what HTML hosting can do.",
      "key_entities": [],
      "concept_tags": [
        "cookbook",
        "ai-grounding",
        "showcase",
        "essay"
      ],
      "confidence": 70,
      "body_markdown": "Wikiaig Cookbook · Essay\n\n# Why structured wikis make better AI grounding than raw markdown dumps\n\nEvery team that gives an AI tool access to its knowledge eventually faces the same choice: feed it the pages, or feed it the structure. The difference looks small at the start. It compounds fast.\n\nFiled under · grounding, retrieval, structure 8 min read\n\nThe first instinct, when an AI tool needs to know about your codebase or your product or your runbook, is to point it at the existing docs. Drop a folder of markdown into the context. Set up a RAG index over the wiki. Let the agent crawl the docs site. It seems obviously correct: the knowledge is already there, written down, why would you rewrite it?\n\nThe instinct is correct about one thing — the knowledge is there. It's wrong about the shape it's in. Documentation is a format optimized for the human reading experience: linear prose, narrative buildup, examples placed for pedagogical effect, redundancy where it aids learning. An agent reading those pages doesn't benefit from any of that. It benefits from structure that an agent can navigate by intent — \"show me every concept page tagged with auth,\" \"compare the two transport options,\" \"give me only the source claims for this policy.\" Pages aren't that. Wikis can be.\n\nPages are an artifact of how humans read docs. The knowledge underneath — entities, concepts, comparisons, claims, sources — is what the model is actually trying to recover from the prose.\n\nThe thesis, in one line\n\n## What \"structured\" actually means here\n\nA structured wiki has three things a raw markdown dump doesn't: typed pages, explicit relationships, and a single canonical address for each piece of knowledge.\n\nTyped pages mean every page declares what kind of knowledge it carries. An overview page lays the map of a domain. A concept page defines a single thing precisely. An entity page describes something that exists in the world — a service, a person, a tool. A comparison page weighs alternatives. A source page attributes a claim to evidence. The type isn't decorative; it tells the model reading the wiki what shape to expect, and lets the agent ask for the shape it needs, not for \"more tokens that look relevant.\"\n\nExplicit relationships mean pages link to each other intentionally. \"This concept is defined here. This claim is sourced here. This entity is compared with these two alternatives here.\" The links carry meaning — they aren't just hyperlinks for navigation, they're the graph the agent traverses when it's trying to answer something hard.\n\nCanonical addresses mean every piece of knowledge has one URL. When the model wants to know what the auth flow is, there is one auth flow page, not nine slightly-different mentions across a README, a design doc, two blog posts, and a Slack thread. Canonicalization is the single highest-leverage thing structure buys you. 1 (#fn1)\n\n## How this plays out in practice\n\nTwo teams, same product, same knowledge, different shape.\n\nQuestion the agent gets\n\nRaw markdown dump\n\nStructured wiki\n\n\"Compare the two auth strategies we considered.\"\n\nReturns relevant-sounding chunks from a design doc, a Slack export, and an outdated RFC. Half-quotes each. The synthesis is the model's guess.\n\nReturns the one\n\n`comparison`\n\npage that was written for this question, with the actual tradeoffs the team committed to.\n\n\"What's the source for the 50ms p99 latency claim?\"\n\nSurfaces the page where the claim appears. The reader still has to guess whether the claim was measured, modeled, or aspirational.\n\nSurfaces the\n\n`source`\n\npage the claim links to: a benchmark run, a date, the conditions under which it was measured.\n\n\"Has anything changed about retention since v2.4?\"\n\nReturns retention-related content from many releases. Sorting \"what changed\" from \"what's restated\" is the reader's job.\n\nReturns the\n\n`concept`\n\npage for retention plus the diff against v2.4 — because typed pages support history with semantic meaning.\n\n\"Give me everything tagged 'security-critical'.\"\n\nNo facility to do this. RAG might surface security-flavored chunks, but the answer depends on how the chunks were embedded.\n\nA direct query. The wiki returns the seven pages tagged security-critical, sorted by last-updated.\n\n#### The compounding effect\n\nThe gap in the table above is small for any single question. The gap across thousands of questions, asked by different agents in different sessions over a year, is the whole game. Structure is leverage on every read.\n\n## The cost\n\nNone of this is free. Structuring a wiki takes more effort than dumping markdown. Every page has to declare its type. Links have to be intentional. Canonical pages have to be agreed on, and the team has to stop scattering the same knowledge across blog drafts and chat exports. There's a real authoring cost up front.\n\nThe honest answer to \"is structure worth the effort?\" depends on a single question: how many times will an agent read this knowledge? A wiki read by one person, once, doesn't need structure — write a doc. A wiki read by every agent session your team runs, every day, for a year, repays the structuring cost in the first week.\n\nThe teams that get the most out of WikiAIG are the ones who've already noticed they're answering the same questions repeatedly in chat, in PR review, in onboarding. Those answers — extracted, structured, made canonical — become the wiki. Every future answer starts from there.\n\n## A diagram of the difference\n\nStructured wiki vs raw markdown dump\n\nTwo diagrams showing how an agent retrieves knowledge. The left shows undifferentiated chunks from a markdown dump. The right shows typed, linked pages in a structured wiki. RAW MARKDOWN DUMP chunk chunk chunk chunk chunk chunk chunk chunk chunk no types, no links, just similarity STRUCTURED WIKI OVERVIEW auth CONCEPT tokens CONCEPT sessions COMPARE jwt vs opaque SOURCE rfc-9068 SOURCE bench-q4\n\nLeft: an agent retrieving from a markdown dump gets chunks ranked by similarity. The relationships between chunks have to be re-derived by the model on every read. Right: the same knowledge as a structured wiki — typed pages, explicit relationships, canonical addresses. The model navigates intent, not similarity.\n\n## When markdown dumps are the right answer\n\nTo be fair: structuring isn't always worth it. There are real cases where pointing an agent at a flat folder of markdown is the right call.\n\nThe knowledge changes faster than anyone could maintain structure for. The corpus is shallow — every \"page\" is two sentences and a code block. The agent only needs to find things, not synthesize from them. The team using the agent is a team of one, and the structuring overhead would outpace the reading benefit. In any of those cases, skip the wiki, point at the markdown, and move on.\n\n#### A test for whether you need structure\n\nAsk the same question of your AI tool three times across a week. If you get three different answers — each plausible, none clearly correct — you have a structure problem, not a retrieval problem. More chunks won't fix it. Canonical typed pages will.\n\n## The takeaway\n\nAn AI tool reading your knowledge is functionally a new kind of reader. It reads at a different scale, with different questions, in different sessions, often through different agents that don't share memory with each other. Optimizing for that reader is the same kind of work as optimizing for a human reader, just with different ergonomics — and the ergonomics happen to favor structure.\n\nWikiAIG bets that for the knowledge you ask your AI tools to ground on, the cost of structuring it once is small compared to the cost of paying the unstructured tax on every read for the next two years. The wiki is the artifact. The model reads it. Same wiki, every tool.\n\n• • •\n\n1. Canonicalization sounds boring and is in fact the most important property. A wiki where each piece of knowledge has exactly one home means the agent retrieves the same answer for the same question every time — independent of which session, which embedding run, or which crawler last refreshed the index. Most \"the AI keeps getting it wrong\" complaints trace back to a missing canonical page.",
      "images": [],
      "key_claims": [],
      "related_pages": [],
      "sources_cited": [],
      "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/structured-wikis-vs-markdown-dumps",
      "last_updated_at": "2026-05-15T16:28:02.599578+00:00"
    },
    {
      "id": "6d44b87b-1e28-4ca9-8a40-88b56bb57a0a",
      "title": "Overview",
      "slug": "overview",
      "content_type": "markdown",
      "content": "# WikiAIG Cookbook\n\n## What WikiAIG is\n\nA place to put structured knowledge so your AI tools can read it directly — through MCP, plain markdown URLs, `/llm.txt`, and `/context.json`.\n\nThat's the whole product. The rest of this page is what that actually means, and why it's worth your time.\n\n## The problem\n\nYou have docs that your AI tool keeps getting wrong.\n\nYou've tried pasting them into the context window — too big, blows your budget, model misses things. You've tried RAG — works okay for retrieval but breaks down when the questions need structure (\"compare these three approaches\", \"what changes in v2 vs v1\"). You've tried letting the model crawl your docs site — slow, unreliable, you have no idea what it actually read.\n\nThe real shape of the problem: agents don't need your documentation pages, they need your knowledge. Pages are an artifact of how humans read docs. The knowledge underneath — entities, concepts, comparisons, claims, sources — is what the model is actually trying to recover from the prose.\n\n## What WikiAIG does about it\n\nYou push structured wiki pages (markdown, optionally with rich HTML) through MCP from your AI tool of choice — Claude Code, Cursor, Codex CLI, Claude Desktop, anything MCP-aware. WikiAIG hosts them. Then any MCP client can read them back. Same wiki, every tool.\n\nThe wiki is the artifact your tools read. Pages are typed — overviews, concepts, entities, comparisons, sources — so the model can ask for the shape of knowledge it actually needs, not just \"the next thousand tokens that look relevant.\"\n\nYou can also publish wikis publicly, and other people's MCP clients can ground on them. That's the platform side.\n\n## Who this is for\n\n- Engineers maintaining internal docs that an AI tool needs to read accurately\n- Tool builders who want to ship their docs as MCP grounding alongside the docs site\n- Anyone publishing technical knowledge that should be readable by both humans and agents\n\n## Who this isn't for\n\n- General-purpose note-taking — use Notion or Obsidian\n- Personal scratch — local files are fine\n- Replacing your docs site — WikiAIG complements it, doesn't replace it\n\n## Open vs hosted\n\nEverything you push is yours. You can export, fork, mirror. Public wikis are crawlable and citable. We host because someone has to run the MCP server and keep the data fresh — the structure and the content are yours, and the export is one CLI command away.\n\n## Where to next\n\n→ [Connect Claude Code / Cursor / Codex CLI](connect-your-tool) — the canonical wire-up.\n\n→ [Pushing content via MCP](pushing-content-via-mcp) — the developer workflow with real code.\n\n→ [HTML hosting — capabilities, constraints, examples](html-hosting) — and the visual showcase that comes with it.\n",
      "page_kind": "overview",
      "summary": "What WikiAIG is and why it exists. For people who want to know in three minutes whether this is for them.",
      "key_entities": [],
      "concept_tags": [
        "cookbook",
        "overview",
        "getting-started"
      ],
      "confidence": 70,
      "body_markdown": "# WikiAIG Cookbook\n\n## What WikiAIG is\n\nA place to put structured knowledge so your AI tools can read it directly — through MCP, plain markdown URLs, `/llm.txt`, and `/context.json`.\n\nThat's the whole product. The rest of this page is what that actually means, and why it's worth your time.\n\n## The problem\n\nYou have docs that your AI tool keeps getting wrong.\n\nYou've tried pasting them into the context window — too big, blows your budget, model misses things. You've tried RAG — works okay for retrieval but breaks down when the questions need structure (\"compare these three approaches\", \"what changes in v2 vs v1\"). You've tried letting the model crawl your docs site — slow, unreliable, you have no idea what it actually read.\n\nThe real shape of the problem: agents don't need your documentation pages, they need your knowledge. Pages are an artifact of how humans read docs. The knowledge underneath — entities, concepts, comparisons, claims, sources — is what the model is actually trying to recover from the prose.\n\n## What WikiAIG does about it\n\nYou push structured wiki pages (markdown, optionally with rich HTML) through MCP from your AI tool of choice — Claude Code, Cursor, Codex CLI, Claude Desktop, anything MCP-aware. WikiAIG hosts them. Then any MCP client can read them back. Same wiki, every tool.\n\nThe wiki is the artifact your tools read. Pages are typed — overviews, concepts, entities, comparisons, sources — so the model can ask for the shape of knowledge it actually needs, not just \"the next thousand tokens that look relevant.\"\n\nYou can also publish wikis publicly, and other people's MCP clients can ground on them. That's the platform side.\n\n## Who this is for\n\n- Engineers maintaining internal docs that an AI tool needs to read accurately\n- Tool builders who want to ship their docs as MCP grounding alongside the docs site\n- Anyone publishing technical knowledge that should be readable by both humans and agents\n\n## Who this isn't for\n\n- General-purpose note-taking — use Notion or Obsidian\n- Personal scratch — local files are fine\n- Replacing your docs site — WikiAIG complements it, doesn't replace it\n\n## Open vs hosted\n\nEverything you push is yours. You can export, fork, mirror. Public wikis are crawlable and citable. We host because someone has to run the MCP server and keep the data fresh — the structure and the content are yours, and the export is one CLI command away.\n\n## Where to next\n\n→ [Connect Claude Code / Cursor / Codex CLI](connect-your-tool) — the canonical wire-up.\n\n→ [Pushing content via MCP](pushing-content-via-mcp) — the developer workflow with real code.\n\n→ [HTML hosting — capabilities, constraints, examples](html-hosting) — and the visual showcase that comes with it.\n",
      "images": [],
      "key_claims": [],
      "related_pages": [],
      "sources_cited": [],
      "url": "https://miradock.com/u/miradock-demo/buckets/wikiaig-cookbook/overview",
      "last_updated_at": "2026-05-15T16:28:01.980514+00:00"
    }
  ],
  "sources": []
}
