Bundle Spec v1.0
When an AI fetches a bundle URL with Accept: text/markdown, it gets a stable, parseable payload. This is what's in it.
URL shapes
memory.wiki/b/<id>for the human-rendered bundle viewermemory.wiki/b/<id>.mdfor the raw markdown payloadmemory.wiki/raw/bundle/<id>(same as.md)
The .md and /raw/bundle/<id> paths are aliases. AI bots (ChatGPTBot, Claude-Web, etc.) get the raw payload automatically when they hit /b/<id> because the User-Agent triggers a rewrite.
Frontmatter
yaml---
mw_bundle: 1
id: <bundleId>
title: "<bundle title>"
url: https://memory.wiki/b/<bundleId>
document_count: <N>
updated: <ISO timestamp>
source: "Memory.Wiki"
---
mw_bundle: 1 is the spec version marker. Future spec changes will bump it.
Body shape
markdown# <bundle title>
> <bundle description, if any>
## 1. <doc title>
*Source: https://memory.wiki/<docId>*
> <per-doc annotation, if any (why this doc is in this bundle)>
<doc 1 markdown body>
## 2. <next doc title>
*Source: https://memory.wiki/<docId>*
<doc 2 markdown body>
...
Privacy
Member docs that became private after the bundle was created are filtered out at fetch time. The bundle structure stays intact (numbered sections), but unfetchable members are replaced with a neutral notice. Drafts, password-protected, expired, and email-restricted member docs never leak via the raw payload.
Why this shape
- Numbered sections so an AI knows the intended reading order.
- Per-doc
*Source: <URL>*so the AI can cite individual docs back to the user, not just "the bundle." - Per-doc annotation is the bundle creator's chance to bias retrieval. "This one is the canonical reference, the others are alternatives."
Status
v1.0 is the current shape. The next spec change (v1.1, planned) adds optional reading_order_reason and per-doc relevance_score fields. Existing bundles will continue to render with the v1 contract.
Verification
Bundle URLs are part of the MWBench cross-AI eval. Same URL works at 100% accuracy across Claude, OpenAI, and Gemini, including on truly unseen content.