Which AI Fetchers Send Which Headers, Measured on a Live Site A live test on September 3, 2026, recorded headers from ten AI fetchers hitting a Cloudflare Worker, finding that Grok sent no identifying token and used rotating residential and mobile IPs with browser headers, making its requests indistinguishable from humans, while DuckDuckGo's DuckAssistBot was the only fetcher to sign requests with a published Ed25519 key. The test also revealed that Gemini's fetcher used a User-Agent of 'Google' from an IP not in Google's published lists, and that Perplexity, Copilot, and Codex reported page results without ever requesting the page. Which AI Fetchers Send Which Headers, Measured on a Live Site A header-by-header record of what ten AI fetchers sent to one Cloudflare Worker on September 3, 2026, checked against each vendor's own documentation, IP lists and signing keys, with the raw captures published. When a person asks an AI assistant to read a web page, the assistant sends a request to that page's server. Whether the site owner can tell that request apart from a human visitor depends entirely on what the assistant chooses to put in it. I asked ChatGPT, Claude, Gemini, Grok, Perplexity, Copilot, Mistral, DuckDuckGo, Claude Code and OpenAI's Codex to each open a unique URL on this site and recorded every header the server saw. Five identify themselves in a way you can verify against a vendor list. One, DuckDuckGo's, goes further and signs every request with a published key, the only fetcher in the set that proves who it is. One identifies itself with a single word that appears in no documentation. Three reported a result about the page without ever requesting it. And one does not identify itself at all: Grok fetched the page eight times in twelve seconds from eight networks on four continents, including a mobile carrier in Ireland and a home ISP in Brazil, wearing Safari and Chrome headers that pass every browser check my analytics have. A second run an hour later produced eight more, from eight different networks. If you count readers on your own server, those sixteen requests were sixteen people. The findings, each explained below: ChatGPT-User is the best-behaved classic fetcher: documented User-Agent, published IP range that the request matched, browser-shaped Accept and Accept-Language , over HTTP/2 from Microsoft's network. Claude-User identifies itself and its IP matches Anthropic's published list, but the request carries almost nothing else: Accept: / , no language, HTTP/1.1, from Google Cloud. MistralAI-User matches its documentation and IP list and sends the most complete browser header set of any declared fetcher, Fetch Metadata included, from Azure. DuckAssistBot is the only fetcher that signed: a Web Bot Auth signature whose key id matches the Ed25519 key at its well-known directory. Its documentation does not mention this. Gemini sends User-Agent: Google and Accept: / from a Google address that is in none of Google's five published crawler and fetcher IP lists, and "Google" matches none of the twelve user-triggered fetchers Google documents. Grok on the web sends no token, no signature, and full browser headers from rotating proxy exits, several of them residential or mobile. There is no request fact that separates it from a person. The pattern reproduced exactly on a second run. Logged in, on the phone app and on the website alike, Grok used a different path entirely: a self-declared HeadlessChrome/148 on Google Cloud that rendered the page and fetched its stylesheet and logo. Perplexity reported "HTTP 200 OK" and the correct heading for a real page without any request reaching the origin, and reported a fetch failure for an unknown path, also without a request. Logged in, it did the same, and instead dispatched its search crawler to robots.txt , /about and /essays . Copilot , logged in, reported twice that its fetch tool "returned an empty result". No request reached the origin, and Cloudflare's edge firewall log shows nothing was blocked. Claude Code's fetch tool runs on the user's own machine, not on Anthropic's, and asks for Markdown before HTML. Codex's web search answered correctly about the page without ever requesting it. Three of these matter beyond this site. The Grok result means that server-side "human versus bot" counts on any site are inflated by an unknowable amount whenever people use Grok to read pages. The Gemini result means the largest search company in the world runs a consumer fetcher that its own crawler documentation does not describe. The DuckDuckGo result means the mechanism that would fix both already runs in production at a mainstream assistant, and the others have simply not adopted it. The captures Each assistant was given a fresh chat and asked to open a URL unique to it, either https://gkoreli.com/does-llms-txt-work?probe=