squirrelscan
GitHub

Agent experience (AX) audit rules: llms.txt, AI crawlers

Audit rules for agent experience (AX): can AI agents and crawlers read, reach, discover and act on your site, from robots.txt to llms.txt.

Agent experience is how well a site works for something other than a browser with a person behind it: a chat assistant, an answer engine, or an autonomous agent. These rules ask whether such a client can read the content, reach the site at all, discover an entry point, understand the policy the site declares, and act on what it finds. Agent experience is scored as one of the four groups on every report, alongside SEO, performance and security.

The five pillars

AX splits into five questions, each covered by one or more rules.

Readable

Readable asks whether an agent that fetches a URL gets the content. Most agent fetchers, such as ChatGPT-User and Claude-User, are plain HTTP clients with no JavaScript engine, so anything that only exists after hydration is invisible to them. Readable also covers token weight: a page bloated with markup relative to its text costs an agent more tokens to parse for the same information.

Reachable

Reachable asks whether legitimate agents are let in. robots.txt is the front door, and it has three different kinds of visitors to reason about: crawlers that train models (GPTBot, ClaudeBot, CCBot, Google-Extended), crawlers that back AI search results (OAI-SearchBot, Claude-SearchBot, PerplexityBot), and fetchers acting on a live user request (ChatGPT-User, Claude-User, Perplexity-User). These are separate user-agent tokens with separate policies: blocking ClaudeBot does not block Claude-User. Beyond declared policy, a WAF or bot-challenge page that 403s a verified agent breaks reachability regardless of what robots.txt says.

  • AI Crawler Access: what robots.txt declares for each crawler class
  • Agent Blocking: behavioral probe for WAF/challenge responses served to agent user-agents

Discoverable

Discoverable asks whether the site exposes a machine-readable entry point instead of making an agent guess. This is llms.txt and its neighbors: sitemaps, feeds, structured data, AGENTS.md for coding agents working in a repo or against docs, and the newer .well-known agent descriptors (MCP server cards, A2A agent cards, agent-skills manifests).

  • llms.txt: curated Markdown map of the site’s key content
  • AGENTS.md: repo and docs-oriented instructions file for coding agents
  • Well-Known Agent Files: MCP server cards, A2A agent cards, agent-skills manifests

Declared

Declared asks whether the site has said anything explicit about AI access. A Content-Signal line in robots.txt, an RSL license, or a noai tag are all ways of declaring a position. Even “no” is good AX: an explicit block is a clear answer an agent can act on. Ambiguity, or worse, contradiction (declaring ai-train=yes while blocking GPTBot), is bad AX.

Actionable

Actionable asks whether an agent can go beyond reading and transact: call an API, use an MCP endpoint, authenticate, or pay for access. This is the newest part of the category, covering OpenAPI specs, OAuth discovery documents, and HTTP 402 monetized-access responses.

  • API & OAuth Discovery: api-catalog, OpenAPI, OAuth discovery documents
  • Pay Per Crawl: HTTP 402 monetized agent access (Cloudflare Pay Per Crawl, x402)
  • Archive Indexing: presence in the Wayback Machine and Common Crawl, the archives AI training corpora are built from (cloud)

Run only these rules

squirrel audit https://example.com --rule-include ax

ax also selects the four ai/ rules, which belong to this category. Three of them are cloud rules that run only when you are signed in, and AI content detection is retired and never runs. Content Without JavaScript and Archive Indexing need a cloud audit too.

Where to start

These carry the highest severity and weight in the category.

Rules

RuleWhat it flagsSeverityScope
Accept: text/markdown: serving Markdown to AI agentsNo Markdown representation of a page, through content negotiation, a .md variant, or a link rel=alternate header. squirrel probes all three.infoSite-wide
AGENTS.md: the paths squirrel probes and what countsNo AGENTS.md at the repository root or any conventional path, or an SPA fallback served in its place. squirrel probes four paths and sniffs the body.infoSite-wide
AI content detection: why this rule is retiredThe AI-generated content check no longer runs. squirrel emits a skip on every page and never calls a model.infoPer-page
AI crawlers in robots.txt: which bots you block, by classrobots.txt blocking Claude-User or PerplexityBot alongside the training bots. squirrel classifies all 24 known AI crawlers and names what each block costs.warningSite-wide
api-catalog and OpenAPI: how an agent finds your APINo OpenAPI spec at a conventional path, or OAuth metadata with no way for an agent to register a client. squirrel probes both.infoSite-wide
Blocking AI agents at the edge: what robots.txt hidesA WAF or bot-management rule serving GPTBot or Claude-User a challenge the browser never sees. squirrel probes the homepage as all three.errorSite-wide
Common Crawl and Wayback: is your site in the archivesA site missing from the Common Crawl index or the Wayback Machine, or archived only with a capture over a year old. squirrel checks both.warningSite-wide
Content that needs JavaScript: invisible to raw-HTML agentsMost of a page’s text arriving only after JavaScript runs. squirrel compares the raw HTML against the rendered DOM and reports the gap.infoPer-page
Content-Signal in robots.txt: search, ai-input, ai-trainA Content-Signal line with a typo, or one declaring ai-train=yes while robots.txt blocks the training crawlers. squirrel parses and cross-checks both.warningSite-wide
HTTP 402 for crawlers: pay-per-crawl and x402 detectionA payment wall served to AI crawlers, and whether it also charges a live user-action fetch. squirrel probes the homepage as three user-agents.warningSite-wide
LLM parsability score: what it measures and how to raise itA page a language model reads badly, scored under 70 out of 100. squirrel scores every crawled page and names the ones below the mark.infoPer-page
llms.txt: what the file is and how squirrel validates itNo /llms.txt at the root, an SPA fallback served in its place, or a file with no H1 and no links. squirrel checks the file and its format.infoSite-wide
MCP and A2A manifests under .well-known: what squirrel findsNo MCP server card, A2A agent card or agent-skills manifest, or a leftover ai-plugin.json from the ChatGPT plugin era. squirrel probes for all four.infoSite-wide
noai and nosnippet: the AI opt-out tags squirrel reportsWhich pages declare noai, noimageai, nosnippet or max-snippet:0, and where the directive came from. squirrel reports, and never penalises.infoPer-page
Page type mismatch: when schema disagrees with the pageA page that reads as a listing but declares Product schema. squirrel compares the classified type against the declared JSON-LD.warningPer-page
robots.txt License: directive and RSL document validationA License: reference in robots.txt pointing at a document that does not resolve as valid RSL. squirrel fetches it and checks.warningSite-wide
Site profile: the per-domain classification rules readThe resolved site type, business category, country and audience for a domain. squirrel reports it, and other rules use it to decide what applies.infoSite-wide
Text to HTML ratio: the token cost of a page for an agentVisible text under 15% of the HTML, or a page over a 100,000-token budget. squirrel estimates both from the raw response.warningPer-page

Key terms

  • Agent experience (AX): How well a site serves AI agents that read it, find their way around it and act on it, the way UX serves people.
  • AGENTS.md: A Markdown file of instructions for coding agents working in a repository or against a docs site.
  • AI crawler: A bot that fetches pages for AI companies, in three classes: training crawlers, AI search indexers and user-triggered fetchers, each with its own user-agent token.
  • AI-generated content: Text written by a language model; Google’s position is that how content is made matters less than whether it is helpful. The related rule is retired and does not run.
  • Client-side rendering: Building page content in the browser with JavaScript; agents and many fetchers that do not run JavaScript see an empty page.
  • Content Signals: Content-Signal lines in robots.txt that state whether content may be used for search, AI input or AI training.
  • Generative engine optimization (GEO): Making content more likely to be retrieved, cited and quoted by AI answer engines; the term comes from a 2023 research paper.
  • llms.txt: A proposed Markdown file at /llms.txt that gives language models a curated map of a site’s key content.
  • Markdown for agents: Serving a clean Markdown version of a page, through Accept: text/markdown or a .md URL, so agents read fewer tokens.
  • noai and noimageai: Meta robots values some sites use to ask AI systems not to train on their text or images; not part of any standard search engines honour.
  • Pay per crawl: Charging AI crawlers for access with HTTP 402 Payment Required responses, as in Cloudflare Pay Per Crawl and the x402 protocol.
  • robots.txt: A plain-text file at the site root that tells crawlers which paths they may fetch, per user-agent token (RFC 9309).
  • RSL (Really Simple Licensing): A standard for publishing machine-readable licensing terms for AI use of content, referenced from robots.txt.
  • Well-known URIs: Fixed paths under /.well-known/ (RFC 8615) where sites publish machine-readable files: security.txt, api-catalog, OAuth metadata and agent manifests.

Crawlability checks robots.txt, sitemaps and indexing for all crawlers. Performance covers page speed, and Structured data covers the JSON-LD that agents and search engines parse.

Learn more

Roadmap

More AX checks are planned: WebMCP / agent-accessibility parity with Lighthouse agentic browsing.

Disable all Agent Experience rules

[rules]
disable = ["ax/*", "ai/*"]

Type to search…

↑↓ navigate↵ openesc close