Recreating and aggregating

verified-as-of: 2026-08-30

Contents

  1. Decide what you are allowed to make
  2. Acquire clean markdown — the ladder
  3. Build the index for ONE product
  4. Build llms-full.txt (and whether to)
  5. Parse other people’s files — a lenient reader
  6. Scale to a family: nested indexes, hub-and-spoke
  7. Keep it honest: CI checks, size, drift
  8. References

1. Decide what you are allowed to make

2. Acquire clean markdown — the ladder

Try in this order; each step is cheaper and cleaner than the next:

  1. An existing llms.txt — at the root and at the docs subpath (/docs/llms.txt); spec v2 says the most specific file wins, and many hosts (Mintlify, Fern) publish per-subpath files.46 Verify the response is markdown, not an HTML app shell that a redirect produced (Cursor’s own file once did this).7
  2. An existing llms-full.txt — check the size header before fetching (41.6 MB at docs.anthropic.com, 57 MB at Cloudflare) and confirm it actually contains page blocks (PayPal’s redirects to its 1.5 KB index).8 Split by the producer’s grammar (§5).
  3. Per-page .md twins — from the llms.txt links (Mintlify appends .md), or by trying page.md / page.html.md / index.md per spec v2.4
  4. Accept: text/markdown — supported by Mintlify, GitBook, Fern and by any Cloudflare zone with “Markdown for Agents” on; expect Content-Type: text/markdown, Vary: Accept and x-markdown-tokens. There is no advance discovery; just try.910
  5. A docs API — e.g. GitHub’s Article Body API returns rendered markdown for any page.5
  6. Readability-class extraction of the HTML — r.jina.ai/<url> (Readability → Turndown, x-target-selector to drop nav, headless engine for JS sites), Screaming Frog’s Readability.js + Turndown snippet, or trafilatura with formatting kept.1112 This is the lossy tier: tab panels, step widgets and code fences are what it drops.13

Seed the URL list from sitemap.xml (expand index sitemaps; include/exclude globs as dotenvx/llmstxt does) or from a crawl map (create-llmstxt-py uses Firecrawl /map); platform generators instead walk the docs nav tree, which is why their section structure is better than any crawler’s.141516

3. Build the index for ONE product

Structure (spec v2): H1 = product name; blockquote = one-paragraph summary; optional prose “how to interpret the files”; H2 sections, each a list of - [name](url): description.4

What goes in (converging guidance from the spec, Mintlify, GitDoc and llms-text.com):4171819

What stays out: marketing pages, individual changelog entries, SEO duplicates, login-gated pages, anything without a clean markdown target.18

Descriptions when you are recreating — three sources, in decreasing quality: the page’s own description frontmatter/meta (what platform generators use); an extractive first sentence under the H1; a small-model summary (Firecrawl’s generator uses GPT-4o-mini for a 3–4-word title and 9–10-word description). Treat model-written descriptions as drafts and audit the page list.1522

Test it the way the spec says: give an agent only the llms.txt and ask it questions about the product.4

4. Build llms-full.txt (and whether to)

5. Parse other people’s files — a lenient reader

6. Scale to a family: nested indexes, hub-and-spoke

Spec v2 gives the mechanism: “The file can be placed at the site root, or at any path within it, covering the pages under that path … where more than one file applies, agents should use the most specific one.”4 The live exemplar is Cloudflare: developers.cloudflare.com/llms.txt holds ~105 entries under nine H2 sections (seven product categories plus “Docs collections” and “Other”), each entry linking a per-product …/<product>/llms.txt (/workers/llms.txt alone has ~25 sections and 500+ .md links).3536 Mintlify’s /_llms/ split is the automated version of the same shape.17 Counter-example: Anthropic’s platform.claude.com/llms.txt (~650 links, 11 languages) does not link its sibling code.claude.com — separate products keep separate roots, so a family index across hosts has to be authored.3738

Pattern for a family (organisation, monorepo, or a curated group of products you do not own):

# Acme Platform docs

> One index per product below; each product's own llms.txt is the authoritative map of that product.

## Products
- [Payments API](https://docs.acme.com/payments/llms.txt): charges, subscriptions, webhooks (240 pages)
- [Identity](https://docs.acme.com/identity/llms.txt): OAuth, SSO, SCIM (85 pages)

## Shared
- [Errors and status codes](https://docs.acme.com/errors.md): every error across products
- [Changelog](https://docs.acme.com/changelog.md)

## Optional
- [Legal and pricing](https://acme.com/legal.md)

Rules that follow from the spec and the exemplars:

7. Keep it honest: CI checks, size, drift

References

Footnotes

  1. https://blog.cloudflare.com/content-signals-policy/ — Content Signals, 2025-09-24 (docs) 2

  2. https://www.scrapingbee.com/blog/is-web-scraping-legal/ — robots.txt and republication norms (blog) 2 3

  3. https://www.seroundtable.com/google-cloudflare-content-signals-41631.html — “no effects whatsoever”, 2026-07-06 (docs)

  4. https://llmstxt.org/ — spec v2, modified 2026-08-10 (spec) 2 3 4 5 6 7 8 9 10

  5. https://docs.github.com/llms.txt — API-first index (docs) 2 3

  6. https://buildwithfern.com/learn/docs/ai-features/llms-txt — per-subdirectory files (docs)

  7. https://forum.cursor.com/t/docs-cursor-com-llms-txt-serves-an-html-page-instead-of-the-llms-txt-file/167800 (forum)

  8. Live samples 2026-08-30: https://docs.anthropic.com/llms-full.txt (41.6 MB), https://developers.cloudflare.com/llms-full.txt (57 MB, frontmatter blocks), https://developer.paypal.com/llms-full.txt (→ llms.txt index), https://platform.claude.com/docs/llms-full.txt (YAML blocks) 2 3

  9. https://vercel.com/blog/making-agent-friendly-pages-with-content-negotiation (blog); https://www.mintlify.com/blog/context-for-agents (vendor)

  10. https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ (docs) 2 3

  11. https://github.com/jina-ai/reader (readme)

  12. https://www.screamingfrog.co.uk/blog/generate-markdown-at-scale/ (vendor)

  13. Measured on code.claude.com 2026-08-30: trafilatura crawl 122 code fences vs 5,250 from llms-full.txt (local measurement)

  14. https://github.com/dotenvx/llmstxt (readme)

  15. https://github.com/firecrawl/create-llmstxt-py (readme) 2 3 4

  16. https://www.mintlify.com/docs/ai/llmstxt (docs)

  17. https://www.mintlify.com/docs/ai/llmstxt — 100k-char split into /_llms/ (docs) 2 3

  18. https://gitdoc.ai/blog/llms-txt-ai-readable-documentation — 2026-05-22 (vendor) 2 3 4

  19. https://www.llms-text.com/blog/how-to-create-llms-txt — 2025-07-25 (vendor) 2

  20. https://www.mintlify.com/blog/real-llms-txt-examples (vendor)

  21. https://dev.to/lab451/complete-llmstxt-guide-for-2026-57d (blog)

  22. https://weventure.de/en/blog/llms-txt (blog)

  23. https://buildwithfern.com/learn/docs/ai-features/llms-txt (docs)

  24. https://github.com/godotengine/godot-docs/issues/10549 (forum)

  25. https://github.com/orgs/mantinedev/discussions/8523 (forum)

  26. https://forum.cursor.com/t/is-there-any-size-limit-for-llms-txt-indexed-as-docs/148660 (forum)

  27. https://www.mintlify.com/docs/llms-full.txt — page-block sample (docs)

  28. https://delucis.github.io/starlight-llms-txt/configuration/ (docs)

  29. https://llmstxt.site/ — token-count column (vendor) 2 3

  30. https://nuxt.com/docs/4.x/guide/ai/llms-txt (docs)

  31. https://github.com/AnswerDotAI/llms-txt/blob/main/llms_txt/core.py (spec)

  32. https://code.claude.com/docs/en/hooks.md — twin with prepended index blockquote (docs)

  33. https://github.com/AnswerDotAI/llms-txt/issues/152 (forum)

  34. https://ahrefs.com/blog/llmstxt-study/ (study)

  35. https://developers.cloudflare.com/llms.txt (docs) 2

  36. https://developers.cloudflare.com/workers/llms.txt (docs)

  37. https://platform.claude.com/llms.txt (docs)

  38. https://code.claude.com/docs/llms.txt (docs)

  39. https://llmstxthub.com/ (vendor)

  40. https://directory.llmstxt.cloud/ (vendor)

  41. https://github.com/BerriAI/litellm/issues/36342 (forum)

  42. https://github.com/bridgetoagent/llms-txt-validator (readme)

  43. https://alejandrorioja.com/tools/llms-txt-validator/ (docs)

  44. https://toddmorourke.com/learn/markdown-for-agents/ (blog)

  45. https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt (docs)