Reference
llms.txt and Copy Markdown
The Laravolt docs site publishes itself in a form that large language models (LLMs) and coding agents can consume directly — an llms.txt index, a full-text llms-full.txt, a .md mirror of every page, and an in-page Copy Markdown control with quick links to ChatGPT and Claude.
This page explains what the feature serves, where each artifact lives, and how it is implemented. It mirrors the approach used by Rspress SSG-MD but is implemented for our Remix + Markdoc pipeline.
What gets served
Unlike a static-site setup, nothing is generated at build time. The Remix server renders the artifacts on demand from the same content/**/page.md sources that power the HTML pages:
| URL | Purpose |
|---|---|
/llms.txt | Human- and LLM-readable index. Title, short description, and a list of every page grouped by version and section. Follows the llmstxt.org convention. |
/llms-full.txt | Every page concatenated, with route headers. Useful when a model can accept large context and you want the whole docs in one shot. |
/<route>.md | Per-page markdown mirror. For example /forms/overview.md returns the raw Markdoc source of that page. The home page is /index.md. |
A representative llms.txt snippet:
# Laravolt
> Laravolt is a digital empowerment platform...
## Laravolt v7 — Introduction
- [Introduction](/introduction.md): Laravolt v7 is an AI-ready Laravel...
- [Installation](/getting-started/installation.md): Install Laravolt v7...The .md mirrors are the same raw Markdoc you see in content/.../page.md. Markdoc tags ({% callout %}, {% quick-links %}) are kept intact — they do not hurt LLM comprehension and keep the response small.
The "Copy Markdown" control
Every docs page renders an action row below its title:
- Copy Markdown — fetches the current route's
.mdmirror and places it on the clipboard. - View as Markdown — opens the
.mdmirror directly; copy its URL to paste into any tool that can fetch a URL. - Open in ChatGPT — opens
chatgpt.comin a new tab with a prompt pointing at this page's.mdURL. - Open in Claude — opens
claude.aiin a new tab with the same prompt.
The prompt is intentionally conservative:
Read https://<your-domain>/forms/overview.md and help me understand,
summarize, and answer questions about the content.Feel free to adjust the phrasing in app/assets/llms-copy.ts if your users prefer a different prompt.
How routes map to files
The mirror URL is the page URL with .md appended (or /index.md at the root):
| Source | Route | Mirror URL |
|---|---|---|
content/page.md | / | /index.md |
content/v7/introduction/page.md | /introduction | /introduction.md |
content/v7/forms/overview/page.md | /forms/overview | /forms/overview.md |
Because everything is served from the live route handlers, there is no generator to run and no .gitignore bookkeeping — editing a page updates its .md mirror, llms.txt, and llms-full.txt immediately.
Pointing AI tools at the docs
Publish the following URLs once the site is deployed:
https://<your-domain>/llms.txt— index for agents that support llms.txt.https://<your-domain>/llms-full.txt— everything, concatenated.https://<your-domain>/<route>.md— per-page access.
Anecdotally, the per-page .md URL is the most useful day-to-day: it is cheap to fetch, keeps context windows small, and plays well with the View as Markdown action.
Implementation pointers
If you need to customize behaviour, these are the files to edit:
app/lib/llms.ts— buildsllms.txtandllms-full.txtfrom the navigation tree, and maps routes to.mdmirror URLs.app/actions/controller.tsx— the route handlers:llmsTxt,llmsFullTxt, and the.mdbranch of the catch-allpageaction.app/ui/docs-layout.tsx—LlmsActions, the server-rendered action row under the page title.app/assets/llms-copy.ts— client-side wiring: clipboard copy and the ChatGPT / Claude prompt links.
Limitations
- Markdoc tags are preserved verbatim. An LLM that has never seen the syntax may try to render
{% callout %}literally. In practice, recent models ignore it, but if you want strict CommonMark, strip Markdoc tags in the.mdbranch of thepageaction before responding. - Only pages linked from the navigation (
app/lib/navigation.ts) appear inllms.txtandllms-full.txt. Unlinked pages still get.mdmirrors, but are not indexed. - The prompt used for ChatGPT / Claude hints at reading a URL; both services accept the query parameter but the exact rendering depends on their product decisions at the time of click.
What to read next
- AI-ready platform — the broader stance that
llms.txtand Copy Markdown support.