Promptwatch Logo

llms.txt v2: What Changed and How to Update Yours

llms.txt v2 is here. New link relations finally let AI agents find your file without guessing. Here's what changed since v1, and how to bring your existing setup up to date in an afternoon.

On 10 August 2026, Jeremy Howard published the first major revision to the llms.txt proposal, nearly two years after the original. The spec lives at llmstxt.org.

What llms.txt is

A markdown file that gives AI agents a curated map of your site: an H1 with your project name, a blockquote summary, and H2 sections listing links with short descriptions. Alongside it, you serve clean markdown versions of your pages. The file stays small enough to fit in context; the detail lives behind the links and gets fetched only when needed.

The file format is unchanged in v2. What changed is how agents find it, where it can live, and what they do with it.

llms.txt v1 vs v2: the differences

v1 (Sept 2024)v2 (Aug 2026)
DiscoveryNone — agents had to guess URLsrel="alternate" type="text/markdown" for the markdown page, rel="describedby" for the covering llms.txt, via <link> tags or HTTP Link: header
Markdown URLspage.html.md onlypage.html.md or page.md
SubpathsAllowed, undefinedA file covers everything under its path; most specific file wins
ConsumptionUnspecified; shipped llms_txt2ctx to expand files into contextAgents read or search the file, then follow links
File structureH1, blockquote, prose, H2 link listsUnchanged

The four changes

1. Agents can finally discover your files

This was the most-requested change and the most consequential one.

Under v1, an agent that landed on one of your pages had no reliable way to work out whether a clean markdown version existed, or which llms.txt described that page. It had to guess at URL patterns and hope. In practice, that meant the file only got used by agents that already knew to look for it at the site root.

v2 fixes this with two standard link relations already in the HTML spec:

  • rel="alternate" type="text/markdown" — points to the markdown version of the current page
  • rel="describedby" — points to the llms.txt file that covers it

You can ship these as <link> elements in your document head, or as an HTTP Link: response header:

Link: </docs/page.html.md>; rel="alternate"; type="text/markdown", </docs/llms.txt>; rel="describedby"

The header form is the sleeper feature. It works for resources that aren't HTML at all including the markdown files themselves and it can be configured once at the web server or CDN layer without editing a single page template. For a large site, that's the difference between a migration project and an afternoon of config.

2. Both markdown URL conventions are now valid

v1 specified exactly one form: append .md to the full page URL, producing page.html.md. The logic was that it never collides with an existing path.

But a lot of publishing tools ignored that and replaced the extension instead, giving page.md. Rather than declare most of the ecosystem non-compliant, v2 accepts both. For URLs without a filename, you append index.html.md or index.md.

If your docs platform was already doing it the "wrong" way, you have nothing to fix.

3. Subpath files have defined semantics

v1 permitted llms.txt files in subdirectories but never said what one meant. v2 spells it out: a file covers every page beneath its path, and where more than one file could apply, the most specific one wins. So /docs/llms.txt governs everything under /docs/, and a root-level file handles the rest.

Two things follow. First, you can scope your files sensibly — a documentation set, a product area, and a company overview can each have their own entry point instead of being crammed into one root file that serves none of them well. Second, anyone who controls only a path can participate: a GitHub Pages project site, or a team that owns one section of a shared corporate domain, no root access required.

That second point is also the proposal's answer to the obvious objection, why not use /.well-known/, the RFC 8615 location reserved for exactly this kind of metadata? Because well-known URIs exist only at the origin root, so they can't express "this describes the pages under here," and they're unavailable to anyone who doesn't control the whole host.

4. The consumption model is stated, and the tooling is gone

v1 said very little about how these files should actually be read, and shipped a utility called llms_txt2ctx that expanded a file and everything it linked to into one large LLM context.

v2 drops the tooling and states the expectation directly: an agent views or searches your llms.txt, decides what's relevant, and follows those links on demand. Nothing gets bulk-expanded.

The practical consequence is that your links have to point at LLM-friendly content. A tidy llms.txt whose links all lead to JavaScript-heavy HTML pages defeats the purpose, the agent still ends up scraping chrome out of markup.

One casualty: the Optional section no longer carries mechanical meaning. It existed to tell expansion tools what they could safely skip. It survives as a convention for secondary links an agent can ignore when context is tight, but nothing enforces it now.

example of llms.txt

What to do

  1. Add the rel="alternate" and rel="describedby" links, ideally via CDN headers
  2. Check your llms.txt links point to markdown versions, not HTML
  3. Consider scoped files (/docs/llms.txt) over one root file covering everything
  4. Test it: hand an agent nothing but your llms.txt and ask it questions about your product

Adoption is real, but publishing a file isn't the same as being read, ship your update, then measure whether your pages actually start appearing as citations in AI answers.

Share this article

Be the brand AI recommends

Monitor your brand's visibility across ChatGPT, Claude, Perplexity, and Gemini. Get actionable insights and create content that gets cited by AI search engines.

Promptwatch Dashboard