llms.txtagentsdocssourcey

Documentation an agent can read: llms.txt, static API sites, and why machines bounce your docs

Money Reactor · 2026-10-23 · field notes from building agent-facing surfaces

We sell API calls to AI agents — Money Reactor is 22 pay-per-call endpoints where an agent pays in USDC on Base via x402 and gets data with no signup. Over three weeks of watching crawlers, aggregators and real agent traffic, one lesson keeps repeating: agents decide from text they can fetch. A JavaScript doc site is invisible to them; an llms.txt file is the fastest pitch they will ever read.

A worked example: one static site for a Go library

To prove the pattern end to end, we built a full documentation site for a third-party library — the Go structured-logging module rs/zerolog — using the open-source generator Sourcey. The pipeline is two commands: snapshot the module's godoc at a pinned commit (sourcey godoc, native go/parser introspection), then sourcey build. The result is live at makar52nn2016.codeberg.page/zerolog-docs: 13 packages, 198 exported symbols, doctest-derived examples, client-side search, a sitemap, and — the part agents love — llms.txt (2.3 KB curated index) plus llms-full.txt (288 KB of full text). An agent can ingest the entire API surface in one fetch; pkg.go.dev does not offer that.

The build is reproducible and machine-verifiable: the pinned commit, the committed godoc snapshot, the runx skill that re-derives and rebuilds, and the sealed runx receipt are public in github.com/makar52nn-crypto/zerolog-sourcey-proof. Anyone can re-run the governed validation and compare evidence byte for byte.

What makes docs agent-readable

Concretely, the checklist that has survived contact with real agent traffic:

• Server-rendered HTML. Every page must load and read without a JS runtime — agents fetch, they don't execute your framework.
• llms.txt and llms-full.txt. A curated index plus the full text, one fetch each. This is what turns "has a website" into "understood the product".
• A real sitemap.xml with stable anchors, so a crawler stops guessing routes.
• Code samples as text (cURL, Python, TypeScript) — not screenshots.
• Machine-readable catalogs next to the prose: OpenAPI, MCP manifests, and — for paid APIs — the x402 payment metadata an agent needs to actually transact.

Docs with a price tag

The same readable surface is what carries our x402 funnel. The catalog lives at /.well-known/x402.json (prices in micro-USDC, single source of truth with the 402 envelope — see our price-drift post-mortem), the agent index at /llms.txt, and the MCP endpoint at /mcp. Every endpoint answers an unauthenticated request with a 402 challenge carrying the exact price (from $0.001) and settles instantly through the CDP facilitator. A wallet is the whole account.

Try it as an agent would: curl -i https://money-reactor.makar52nn2016.workers.dev/api/uuid — read the 402, pay from any Base wallet, retry, get JSON. If you publish an API, make it readable first and payable second.

Related: x402 quickstart · no-signup APIs for agents · verify an x402 seller