# 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.

Source: https://armature.tech/library/llms-txt-guide
Published: 2026-09-03
Publisher: Armature, Inc. (https://armature.tech)

---

`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:

| File | Job |
| --- | --- |
| `robots.txt` | Rules. What crawlers may and may not fetch |
| `llms.txt` | A 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:

```bash
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.

```md
# 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.

## Read next

- [Documentation for coding agents](https://armature.tech/library/documentation-for-coding-agents) (Markdown: https://armature.tech/library/documentation-for-coding-agents.md)
- [Audit your documentation for coding agents](https://armature.tech/library/audit-your-docs-for-coding-agents) (Markdown: https://armature.tech/library/audit-your-docs-for-coding-agents.md)
- [Generative engine optimization for developer tools](https://armature.tech/library/generative-engine-optimization-for-developer-tools) (Markdown: https://armature.tech/library/generative-engine-optimization-for-developer-tools.md)
- [Answer engine optimization, explained](https://armature.tech/library/answer-engine-optimization) (Markdown: https://armature.tech/library/answer-engine-optimization.md)
- [robots.txt for AI crawlers](https://armature.tech/library/robots-txt-for-ai-crawlers) (Markdown: https://armature.tech/library/robots-txt-for-ai-crawlers.md)

---

Armature helps software products get discovered and used by coding agents.
Service: https://armature.tech/discoverability · Results: https://armature.tech/leaderboards/sectors · Contact: contact@armature.tech
