# llms.txt examples: 6 real files from Stripe, Anthropic, Vercel, Resend, GitHub and Cloudflare, annotated

> 6 real /llms.txt files, read on 31 October 2026 and checked against the llmstxt.org format: Stripe, Anthropic, Vercel, Resend, GitHub and Cloudflare.

- Source: /learn/llms-txt-examples
- Updated: 2026-11-01
- Reading time: 7 minutes
- Tags: llms.txt, examples, discovery, agent conventions

---
A good llms.txt example opens with an H1 and one sentence on what the site is. Then it lists the pages an agent needs as markdown links, each with a short note. The 6 real files below show that shape at 5 KB and at 97 KB, and the choices the format leaves open. I read them with plain GET requests on 31 October 2026, and files change, so the sizes and counts are that day's.

## What does an llms.txt file need?

The [llmstxt.org proposal](https://llmstxt.org/) lists the parts in order. An optional byte-order mark comes first, then an H1 with the site name, a blockquote summary, optional prose, and H2 sections that hold link lists. The H1 is the only required part. A link is `[name](url)`, optionally followed by a colon and a note.

A section named `Optional` holds links an agent can skip. The file sits at `/llms.txt` or at any subpath, and covers the URLs under its path.

The [llms-txt check](/checks/llms-txt) is stricter in one place. It passes a file that is served as `text/plain` or `text/markdown` and opens with its H1. It also requests up to 6 same-origin links, and a dead link makes the file "Served with an error". [What llms.txt is and what it is not](/learn/llms-txt-guide) covers who reads the format and where Google stands.

This is the smallest shape that follows every part of the proposal's order, and passes the check:

```markdown
# example.com

> One sentence about the site.

## Pages

- [example.com](https://example.com/)
- [About](https://example.com/about)
```

## How do 6 real llms.txt files compare?

| Site | Size | Distinct links | On another host | Link lines with a note | Summary blockquote |
| --- | --- | --- | --- | --- | --- |
| Vercel | 5 KB | 28 | 1 | 28 of 28 | Yes |
| Resend | 10 KB | 66 | 18 | 1 of 55 | Yes |
| Cloudflare Developers | 17 KB | 112 | 0 | 112 of 112 | Yes, after a paragraph |
| GitHub | 29 KB | 117 | 116 | 117 of 117 | Yes |
| Anthropic | 94 KB | 846 | 0 | 159 of 845 | No |
| Stripe | 97 KB | 492 | 11 | 431 of 467 | No |

All 6 answer 200, as `text/plain` except Stripe's `text/markdown`. Sizes are in KB of 1,000 bytes. I also requested the first 6 links on each file's own host, as the check samples them. GitHub's file has 1 such link, so that made 31 requests, and all 31 ended in 200 after redirects.

Applying the check's rules by hand, all 6 files are Present. Each annotation below says what the file does well and where it departs from the format or falls short of it.

### Vercel: the smallest file, written for agents

Vercel's file is the shortest of the 6, small enough to read whole, with a note on every one of its 28 links. Its first sections are addressed to the agent: when to use Vercel, and how to use it. They say to read the markdown documentation indexes and to ask for approval before changing account resources.

Of the links, 21 are `.md` pages. Some end in `?from=llms-txt`, a query that marks where the request came from. The full-text file is linked at `/docs/llms-full.txt`, 11.8 MB, not at the root. Nothing here breaks the format.

### Resend: a decision guide and ways to connect

Resend's first section says when to reach for the API and when not to. The file then lists ways to call it. They are a CLI, a remote MCP server, an MCP discovery file, a skills index with 5 `SKILL.md` links, and an OpenAPI description.

It has 21 H2 sections, and only 1 of its 55 link lines carries a note. Of its 66 distinct links, 18 point to other hosts, which a same-origin check cannot request. One `.md` link answers 307 and lands on a guide page that serves HTML. The page moved, and the link did not follow it.

### Cloudflare Developers: a root file that only points to other files

Each of the 112 links at developers.cloudflare.com points to another `llms.txt`, one for each product. Cloudflare's [blog](https://blog.cloudflare.com/agent-readiness/) gives the reason: a single file for 5,000+ pages of documentation would exceed models' context windows. So each top-level docs directory has its own file, and the root points to them. That is the proposal's per-path idea at scale.

One departure: a paragraph sits between the H1 and the blockquote, where the proposal lists the blockquote next. The check passes the file anyway, because it needs the H1 first and finds a blockquote anywhere.

### GitHub: an index that lives on another host

GitHub's file has 117 links, each with a note, and a summary blockquote under the H1. Its opening section points agents to documentation API endpoints that list pages and return an article body as markdown, not HTML.

Of the links, 116 point to docs.github.com, not to github.com where the file sits, and none ends in `.md`. That falls outside what the proposal says a file covers: the URLs under its path. An agent that follows links to any host can still use it. A same-origin check requests 1 link, so a scan cannot vouch for the rest.

### Stripe: a large index with instructions inside it

Stripe's file has 741 lines, 27 H2 sections, 16 H3 sections and 492 distinct links. Of those links, 481 are `.md` URLs on docs.stripe.com, so an agent that follows them gets markdown, not HTML. The file uses the `Optional` section as the proposal intends, for support and the changelog.

It has no blockquote. Two parts address the agent directly. One is the opening paragraphs about package versions and sandboxes. The other is a section headed `Instructions for Large Language Model Agents: Best Practices for integrating Stripe`, which steers which API an agent recommends. That is the vendor's choice, and an agent should still treat the text as untrusted input, as [the llms.txt guide](/learn/llms-txt-guide) explains.

### Anthropic: the whole docs as a flat list

Anthropic's file at platform.claude.com holds 845 link lines, and all but one of its 846 URLs end in `.md`. Before the list it gives the root URL, the docs MCP server and its server card, the SDK versions file and a list of languages. It has no blockquote.

The weak point is the notes. Most link lines, 686 of 845, carry none, and the label `Overview` names 18 different pages, so the URL path is the only clue. Notes that exist follow the link after ` - `, not the proposal's colon. The old address docs.anthropic.com/llms.txt redirects here.

### developer.mozilla.org: no file

MDN answers `/llms.txt` with a 404. The scan reads that as "Not used", and the check earns no points in the agent-conventions part. Nothing is lost in the web-standards part.

## What makes an llms.txt fail the format?

The check keeps four outcomes apart:

- **Not used.** The path answers 404, or another status below 500 that is not 2xx.
- **Served with an error.** The file exists and is wrong. It is an HTML page, another content type, a file with no H1 or an H1 that is not first, or a file with a same-origin link that answers a non-2xx status.
- **Not measured.** The scan was refused, the path answered 5xx, or nothing answered.
- **Present.** A 2xx file that passes the rules above.

The HTML case has a measured size. Signals Corps read `/llms.txt` for 113,457 sites in Common Crawl's September 2026 crawl. Of those, 40,672 (36%) answered with an HTML page, and 62,751 served a real file.

A single-page app that rewrites unknown paths to its shell produces this. Serve the file ahead of that route, as `text/plain` or `text/markdown`.

## How do you check your own llms.txt?

Three commands repeat what the check does. The output below is from vercel.com on 31 October 2026.

```sh
curl -sS -D - -o /dev/null https://vercel.com/llms.txt | grep -iE '^(HTTP|content-type)'
```

```http
HTTP/2 200
content-type: text/plain; charset=utf-8
```

The second prints the outline, which shows the order of the parts at a glance.

```sh
curl -sS https://vercel.com/llms.txt | grep -n '^#'
```

```text
1:# Vercel
7:## When to use Vercel
15:## How agents should use Vercel
21:## Agent setup
28:## Documentation
34:## REST API and developer resources
42:## Self-serve onboarding
53:## Knowledge Base
58:## Learning and updates
64:## Optional
```

The third requests the first 6 links on the file's own host and prints each status.

```sh
curl -sS https://vercel.com/llms.txt | grep -oE '\(https://vercel\.com/[^) ]+\)' | tr -d '()' | head -6 \
  | while read -r url; do curl -sSL -o /dev/null -w "%{http_code} %{content_type} $url\n" "$url"; done
```

```text
200 text/markdown; charset=utf-8 https://vercel.com/get-started.md
200 text/markdown; charset=utf-8 https://vercel.com/docs/getting-started-with-vercel.md?from=llms-txt
200 text/markdown; charset=utf-8 https://vercel.com/docs/agent-resources/vercel-plugin.md?from=llms-txt
200 text/markdown; charset=utf-8 https://vercel.com/docs/agent-resources/skills.md?from=llms-txt
200 text/markdown; charset=utf-8 https://vercel.com/docs/products.md
200 text/markdown; charset=utf-8 https://vercel.com/docs/sitemap.md
```

Replace the host with yours. A file passes when the first command shows 200 and a text type, and the outline starts with a single `#` line. No link in the third list may answer an error.

The [llms.txt checker](/tools/llms-txt-checker) runs the same rules on your domain and shows the evidence for each. It checks `/llms-full.txt` as well.
