llms.txt is a Markdown file at the root of a website that gives AI agents a curated map of the site's content. llms-full.txt is a companion that embeds the full text of those linked pages into one file. Both are request-time responses—not static files—when a CMS generates them from live content.
Key facts
- Proposed by Jeremy Howard of Answer.AI in September 2024; the v2 spec is at llmstxt.org.
- The only required element is an H1 heading with the project name. A blockquote summary, body prose, and H2 "file list" sections follow in that order.
- File lists are markdown lists of
[name](url)links with optional one-line notes. An## Optionalsection signals links agents may skip when context is tight. - The file must be served as
text/plain; charset=utf-8, status 200, no authentication. - OpenAI, Anthropic, and the Gemini developer-docs team all publish
llms.txtfor their own documentation. - A SE Ranking study of 300,000 domains in 2026 found a 10.13% adoption rate.
- Chrome's Lighthouse 13.3 (shipped early May 2026) added an Agentic Browsing audit that flags sites missing
llms.txt.
How llms.txt works
An llms.txt file gives an agent a single small document to load before deciding which pages to fetch next. Instead of crawling HTML full of navigation, ads, and JavaScript, the agent reads a compact Markdown index and pulls only what it needs. Serving Markdown instead of HTML has shown up to 10x token reductions in real-world agent interactions.
A minimal valid file:
# Inside the Loop
> Field notes on agentic anything: Claude Code, Codex, Cursor and whatever ships next.
## Posts
- [How AI agents fetch web pages](https://insidetheloop.dev/posts/how-ai-agents-fetch-web-pages-user-agents): User agents, IP ranges, and fetch origins.
## Optional
- [Full text of every post](https://insidetheloop.dev/llms-full.txt)llms-full.txt extends this by embedding the full Markdown content of every linked page into one file, separated by --- dividers. An agent researching a site can do a single fetch instead of following every link.
Who actually reads these files
The picture is split cleanly between two types of readers.
IDE agents and MCP servers read llms.txt routinely. Cursor, Windsurf, Claude Code, GitHub Copilot, Cline, and Aider all fetch /llms.txt when pointed at a documentation site. They read the file to decide which linked pages contain the API reference or tutorial they need. LangChain's mcpdoc MCP server exposes llms.txt files to host applications (Cursor, Windsurf, Claude Desktop) via a fetch_docs tool, making the file a literal routing layer for agent-to-agent communication.
AI search bots almost never fetch it. Limy analyzed 515,382,577 LLM bot traffic events across a 90-day window in 2026. Only 408 requests targeted /llms.txt directly. GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, and Google-Extended overwhelmingly crawl HTML instead. Profound separately reported that Microsoft and OpenAI crawlers do actively fetch both files—but for agent workflows, not for search ranking.
Google's position
Google Search's May 15, 2026 AI optimization guide explicitly lists llms.txt among tactics site owners can ignore. Google's reasoning: AI Overviews and AI Mode pull from the standard Google Search index; the file has no effect on ranking or citation in those surfaces.
John Mueller called llms.txt comparable to the defunct keywords meta tag and noted that bots were not requesting the file. Gary Illyes and Amir Taboul confirmed at Search Central Live Deep Dive Asia Pacific in 2025 that Google was not pursuing the format.
The only wrinkle: Chrome's Lighthouse team added an llms.txt check to its Agentic Browsing audit category—a separate team answering a separate question about browser-agent readiness, not Search ranking.
Generating both files from a CMS at request time
Static files go stale when posts are published or updated. Generating both files dynamically from the CMS means the index is always current.
On this site (insidetheloop.dev), both files are Astro API routes backed by an EmDash CMS query:
`/llms.txt` (src/pages/llms.txt.ts):
const { entries: posts } = await getEmDashCollection("posts", {
orderBy: { published_at: "desc" },
});
const items = posts
.filter((post) => post.data.publishedAt)
.map((post) => {
const link = new URL(`/posts/${post.id}`, siteUrl).href;
const date = post.data.publishedAt!.toISOString().slice(0, 10);
const note = post.data.excerpt ? `: ${post.data.excerpt}` : "";
return `- [${post.data.title}](${link}) (${date})${note}`;
});Each published post becomes one list item with its canonical URL, ISO date, and excerpt.
`/llms-full.txt` (src/pages/llms-full.txt.ts) converts Portable Text to Markdown and concatenates every post:
const content = post.data.content
? portableTextToMarkdown(post.data.content)
: "";
return `# ${post.data.title}\n\nURL: ${link}\nPublished: ${date}\n\n${excerpt}${content}`;Both routes set Cache-Control: public, max-age=3600. Cloudflare caches the response for an hour; a new publish invalidates it at the next cache miss.
Limits and gotchas
llms.txtdescribes only the host it sits on. A file athttps://example.com/llms.txtdoes not describeshop.example.com.- The file cannot restrict any crawler or training run. Use
robots.txtfor access control. - Stale links hurt agent trust. Dynamic generation from the CMS eliminates this risk.
- The
## Optionalsection is a semantic signal agents respect: links there may be skipped when context windows are tight. Put low-value pages there.
Sources
- The /llms.txt file, v2: https://llmstxt.org/ (read 2026-10-06)
- llms.txt Specification v1.8.0: https://www.ai-visibility.org.uk/specifications/llms-txt/ (read 2026-10-06)
- LLMs.txt in 2026: The Full Guide (Limy): https://limy.ai/blog/llms-txt-in-2026-the-full-guide (read 2026-10-06)
- Should I Create an llms.txt File? Google's 2026 Guidance, Explained: https://www.getpassionfruit.com/blog/should-i-create-an-llms.txt-file-google-s-2026-guidance-explained (read 2026-10-06)
- LLMs.txt Guide: What It Does and Doesn't Do (2026): https://derivatex.agency/blog/llms-txt-guide (read 2026-10-06)
- insidetheloop.dev/llms.txt: https://insidetheloop.dev/llms.txt (read 2026-10-06)
Last verified: 2026-10-06.