Agent permissions and your data: llms.txt, Web Bot Auth, and letting agents act safely
Landscape as of September 2026. Web Bot Auth remains an individual IETF Internet-Draft (dated 18 August 2026) even though Cloudflare, AWS WAF, and Akamai already verify its signatures in production and an IETF working group was chartered in early 2026 - treat exact header names and the verification flow as moving, not settled.
What it is
llms.txt and robots.txt-style directives answer "can a crawler read or train on this content" - a content-licensing question. An acting agent, one that clicks, fills a form, completes a purchase, or reads a page specifically to carry out a task for a person, raises a different question: what is this specific requester allowed to do here, and how do you know the request is really from the agent it claims to be. Web Bot Auth (an IETF individual draft using RFC 9421 HTTP Message Signatures, with a working group chartered in early 2026 and already live in production at Cloudflare, AWS WAF, and Akamai) answers the identity half. AP2 and its Mandates answer the authorization half for one specific class of action, payments. Together they're the emerging permission layer for agents that act, not just crawlers that read.
When you need it
You already publish llms.txt for AI-crawler indexing and a stakeholder is asking whether that also covers an agent that fills out a form or completes a purchase on your site - it doesn't, and this guide is the explanation of why.
You're deciding whether to adopt Web Bot Auth, or a similar signed-request scheme, to stop trusting a spoofable user-agent string for anything more consequential than serving a page.
Privacy or security wants one place that explains how content-licensing permission (llms.txt), request identity (Web Bot Auth), and action authorization (AP2 Mandates) relate, instead of three vendor pages that each only cover their own layer.
How to implement it
- 1
Keep llms.txt scoped to what it actually governs
llms.txt, including this site's own /llms.txt referenced on the AI-crawler integration guide, tells a crawler which content is meant for retrieval or training. It says nothing about whether a different kind of request, an agent trying to submit a form or complete a checkout, should be allowed to act. Don't extend llms.txt's syntax to try to express action permissions; it wasn't built for that, and a crawler-focused parser won't apply it that way regardless.
- 2
Add request-identity verification for anything beyond serving a page
A user-agent string is trivially spoofed - the exact debugging problem this site's sibling page on spoofed agent signatures covers. If a verified agent gets to skip a friction step (a form, a rate limit) that a human or unverified bot still faces, that decision needs an actual cryptographic signal, not a string match. Web Bot Auth is the current candidate, still an individual IETF Internet-Draft as of August 2026 even with a working group in place and real production deployments at Cloudflare, AWS WAF, and Akamai.
// conceptual - verifying a signed request per the Web Bot Auth draft. // Exact header names and the verification flow are still moving; confirm // against the current draft and your edge/CDN vendor's implementation // before shipping a hard dependency on it. if (verifyWebBotAuthSignature(request)) { // treat as a verified, identified agent - not the same as "authorized to act" } - 3
Separate "verified identity" from "authorized to act" explicitly in your logic
A signed Web Bot Auth request tells you which agent this claims to be, cryptographically - not what that agent's operator, or the customer behind it, has actually authorized. Don't collapse the two checks into one boolean. An agent can be genuinely who it says it is and still be attempting something nobody authorized.
- 4
For anything that reads as a transaction or a customer-authorized action, require the AP2-style authorization chain, not just identity
See the companion guide on the AP2 mandate model for what that chain actually proves. The short version here: identity verification (Web Bot Auth) and action authorization (AP2 Mandates) are two separate gates, and an implementation that only covers one has left the other half of the permission question unanswered.
- 5
Route the "should we allow this at all" policy decision to privacy and security, not to whichever team ships the integration first
Which agents get elevated access - skip a rate limit, complete a transaction, read gated content - is a policy decision with real exposure if it's wrong, reviewed alongside privacy and security, not a default that falls out of whichever SDK happened to be easiest to integrate.
How to verify it worked
Confirm your llms.txt and any action-permission logic are implemented as genuinely separate systems - a test that changes llms.txt's listed paths should have zero effect on whether a form submission or checkout is accepted from a given requester.
Send a request with a known agent user-agent string but no valid signature and confirm it is treated as unverified, not as an automatically trusted agent - a passing result shows the string alone grants nothing.
If Web Bot Auth verification is implemented, send a validly signed test request and confirm it's recognized as verified identity only, with any elevated-access decision still requiring whatever separate authorization check - an AP2 Mandate, an explicit allowlist - your policy actually requires.
Related
Elsewhere in the agentic-traffic cluster
Want this scoped against your specific OneTrust tenant?
We scope every engagement in discovery, before implementation - no assumptions about your stack.