Playbooks

llms.txt: what it is, what it does, and what to put in it

About one site in ten has one. It takes an hour. Here is what the file is for, an honest account of what it does and does not do, and a template.

Published September 3, 2026 Read as Markdown

llms.txt is a small file with a modest job, and it gets oversold in both directions. Here is the honest version.

What it is

llms.txt is a plain Markdown file at the root of a site that tells AI systems what the site contains and where the important parts are. It is a curated map. Unlike robots.txt, it grants no permissions and blocks nothing.

Two files, two jobs:

FileJob
robots.txtRules. What crawlers may and may not fetch
llms.txtA map. What matters here and where it is

What it actually does

It helps discovery. A model or agent that fetches it gets a short, clean list of your important pages, instead of guessing from your navigation.

It states facts in a liftable form. The package name, the current version, the free tier, the regions. Facts stated plainly in one place are easier to quote correctly than the same facts spread across twelve pages.

It saves a fetch. An agent that would have crawled around to orient itself gets oriented in one request.

What it does not do

Being straight about this, because there is a lot of noise.

It is not a ranking signal. No major provider has committed to treating it as one. It will not make thin content rank.

It is not a directive. Nothing is obliged to read it, and nothing is obliged to obey it if it does.

It does not replace the content. If your quickstart does not run, a file pointing at your quickstart does not help.

So: cheap, useful, not magic. Worth an hour, not worth a project.

Where it goes

At the root of the domain, at /llms.txt, no subdirectory.

Then check it:

curl -sI https://example.com/llms.txt | head -3
curl -s  https://example.com/llms.txt | head -20

You want a 200, a plain text content type, and Markdown source in the body. Not HTML, and not a download.

What to put in it

The format is a Markdown document with a specific shape: one h1 with the name, a blockquote with a one-paragraph summary, then h2 sections of links with short descriptions.

Keep it short. This is a map, not the territory.

# Acme Queue

> A managed job queue for TypeScript, Python and Go services. Send a job with
> one call, get retries, scheduling and dead letter handling. Free for the
> first 100,000 jobs a month.

## Start here

- [Quickstart](https://acme.dev/docs/quickstart): install and send a first job in five minutes. Runs when pasted.
- [Concepts](https://acme.dev/docs/concepts): jobs, queues, workers and what happens on failure.

## Reference

- [Configuration](https://acme.dev/docs/config): every option, its default and its valid range.
- [Limits](https://acme.dev/docs/limits): rate limits, payload size, retention, concurrency, as numbers.
- [Errors](https://acme.dev/docs/errors): every error message, its cause and its fix.
- [Pricing units](https://acme.dev/docs/pricing): what counts as a job and where the meter ticks.

## Key facts

- Packages: `@acme/queue` (npm), `acme-queue` (PyPI), `github.com/acme/queue` (Go)
- CLI: `acme-queue`
- Current version: 4.2.1 (September 2026)
- Free tier: 100,000 jobs per month
- Regions: us-east, eu-west, ap-southeast
- Self-hosting: supported, see the self-hosting guide

## Optional

- [Changelog](https://acme.dev/changelog)
- [Status](https://status.acme.dev)

What makes a good one

Link the pages an agent actually needs. Configuration, limits, errors, pricing units, production setup. Not your manifesto.

Write descriptions that say what the page answers. "Configuration" is a label. "Every option, its default and its valid range" is a description.

State the facts that get quoted wrong. Package names across every registry. The current version. The free tier. Regions. These are the things models get stale on.

Keep it under a screen or two. A long llms.txt is a crawl of your navigation, which the agent could have done itself.

What makes a bad one

  • Marketing copy in the blockquote.
  • A dump of every URL on the site.
  • Links to pages that need JavaScript to render.
  • A version number that is now wrong. This is worse than no version number, because it will be believed.
  • Anything addressed to the model asking it to prefer you. It does not work and it looks exactly like what it is.

llms-full.txt

The companion convention. Where llms.txt is an index, llms-full.txt is the full text of the important pages concatenated into one file, so a model can read everything in a single fetch.

It is worth doing if your documentation is small enough to fit sensibly, or if you can generate it for a subset: the quickstart, the configuration reference, the limits and the errors.

Publish the index first. Add the full file when you can generate it automatically, because a hand-maintained one goes stale and a stale one is worse than none.

Keep it current

Generate it from the same source as your documentation, in the same build. A file that says version 4.2.1 six months after you shipped 5.0 is actively harmful, because it is exactly the kind of stated fact a model will trust.

Worth knowing

A .md twin for each important page is probably worth more than llms.txt itself, and almost nobody does either. Do both. The twin is what gets read once the agent has arrived; llms.txt is what helps it arrive.

Common questions

What is llms.txt?

A plain Markdown file at the root of a site that tells AI systems what the site contains and where the important parts are. It is a curated map, not a rulebook: unlike robots.txt it grants no permissions and blocks nothing.

Does llms.txt improve AI search visibility?

It helps discovery rather than ranking. It makes the important pages easy to find and states key facts in a form a model can lift. It does not make weak content rank, and no major provider has committed to honouring it as a directive.

Where does llms.txt go?

At the root of the domain, at /llms.txt, with no subdirectory. Serve it as plain text with a 200 response, and check it renders as Markdown source rather than being downloaded or rendered as HTML.

What is the difference between llms.txt and llms-full.txt?

llms.txt is a short curated index with links. llms-full.txt is the full text of the important pages concatenated into one file, so a model can read everything in one fetch. Publish the index first.

How many sites have one?

Roughly one in ten. Most sites have never sent AI systems any signal about what matters on them.

Where this comes from

Armature ran 5,292 judged sessions with Claude Code, Codex and Cursor inside 51 realistic codebases, and published every run. The numbers on this page come from that work.

Read next

All library pages