AI agents read and act on the web without a human loading the page. People ask ChatGPT, Claude, or Perplexity to find them something, compare options, even order it, and the agent goes and reads sites directly. If an agent can't read yours, you're not in the answer.

Being readable takes three small, machine-readable pieces. None of them are hard. The knowledge is just scattered across half-finished specs, so I packaged the setup from my own production site into an MIT template you can copy in about 30 minutes: agent-ready-starter.

This post is the whole method. You don't need the template to follow it.

The three layers

Discovery: llms.txt. A plain-text file at your site root that tells agents what you are, what matters, and where your machine-readable stuff lives. Think robots.txt, but for comprehension instead of permission. Must be served as text/plain, not swallowed by your app's catch-all route (that's the most common failure I see: the file "exists" but arrives as HTML).