AgentShield AI Defense

Detected automatically by ai_agent_arrival · 2026-07-25 20:42:34 UTC

We asked Claude-User to read this page, and it did

A client declaring Claude-User made 4 requests across 4 distinct paths on 2026-07-25. Every one of them arrived inside a window in which we had asked this vendor to read a page here, so this is the result of a trial rather than an unprompted visit.

What was observed

First request 2026-07-25 20:33:22 UTC, most recent 2026-07-25 20:43:00 UTC.

Declared agentClaude-User
How many fetches it made4
How many different paths it took4
How many different addresses it came from1
How many of those we caused ourselves, by asking this vendor to read a page4 of 4
How many came from an address the vendor publishes for this crawlernot checkable — see below

What it means

We caused this. All 4 requests arrived inside a window in which we had asked this vendor to read a page here, so nothing on this page describes a client finding the site on its own. What it does describe is what that vendor's fetcher actually did once asked — which paths it took, whether it read robots.txt first, whether it ran the script — and that is worth recording even though we started it.

Strictly, arriving inside the window is correlation and not proof of cause; an unrelated visit could land in the same ten minutes. Here the correlation is not the reason for the claim — we know we asked, and the trial log says so.

This identity cannot be checked against anything

Anthropic publishes no machine-readable range list at any URL we could find (checked 2026-07-26)

So the declaration stands unexamined — not contradicted, and not corroborated either. This is a gap in what the vendor publishes rather than anything observed about the client, and it is stated here because the difference between "checked and consistent" and "not checkable" is invisible in a table of counts.

Limits

Evidence chain

This finding was not written from memory. Each figure below came from a query against the immutable request record, and each query is shown so it can be run again — by us, on this page, or by anyone reconstructing the same instrument.

StageWhat it produced
1. RealityRequests recorded by the server as they arrived, written once and never edited.
2. EvidenceThe rule ai_agent_arrival selected the observations that bear on this question and emitted each figure with the means of reproducing it.
3. StatementA fixed template turned that evidence into the prose above. No language model was involved and no figure was altered.
4. VerificationEvery figure was recomputed against the record. A single mismatch would have discarded the draft.
5. Publication2026-07-25 20:42:34 UTC, automatically.

What was measured

Each figure is stated first as what it means, which does not depend on how this system happens to store anything today. The query underneath it is implementation — it would be written differently on different storage, and it is shown so the figure can be checked, not because it is part of the claim.

Evidence

requests declaring Claude-User from addresses with no contradictory identity

At publication: 4 · recomputed now: 6 window still open

Implementation — how this is computed on today's storage

SELECT COUNT(*) FROM RequestReality WHERE siteId = ? AND cfRay IS NOT NULL AND userAgent LIKE ? AND 
  cfConnectingIp IS NOT NULL
  AND cfConnectingIp NOT LIKE '192.0.2.%'
  AND cfConnectingIp NOT LIKE '198.51.100.%'
  AND cfConnectingIp NOT LIKE '203.0.113.%'
  AND cfConnectingIp NOT LIKE '10.%'
  AND cfConnectingIp NOT LIKE '192.168.%'
  AND cfConnectingIp NOT LIKE '127.%'
  AND cfConnectingIp NOT LIKE '::1'
  AND cfConnectingIp NOT LIKE 'fc%'
  AND cfConnectingIp NOT LIKE 'fd%' AND RequestReality.cfConnectingIp NOT LIKE '2a00:1d34:4896:b600:%' AND 
  NOT EXISTS (
    SELECT 1 FROM RequestReality c
    WHERE c.siteId = RequestReality.siteId
      AND c.cfConnectingIp = RequestReality.cfConnectingIp
      AND (c.userAgent LIKE 'curl%' OR c.userAgent LIKE 'Wget%'
           OR c.userAgent LIKE 'Python-urllib%' OR c.userAgent LIKE '%python-requests%'
           OR c.userAgent LIKE 'Go-http-client%' OR c.userAgent LIKE 'node-fetch%')
  )

Evidence

distinct paths taken by Claude-User

At publication: 4 · recomputed now: 4 unchanged

Implementation — how this is computed on today's storage

SELECT COUNT(DISTINCT path) FROM RequestReality WHERE siteId = ? AND cfRay IS NOT NULL AND userAgent LIKE ? AND 
  cfConnectingIp IS NOT NULL
  AND cfConnectingIp NOT LIKE '192.0.2.%'
  AND cfConnectingIp NOT LIKE '198.51.100.%'
  AND cfConnectingIp NOT LIKE '203.0.113.%'
  AND cfConnectingIp NOT LIKE '10.%'
  AND cfConnectingIp NOT LIKE '192.168.%'
  AND cfConnectingIp NOT LIKE '127.%'
  AND cfConnectingIp NOT LIKE '::1'
  AND cfConnectingIp NOT LIKE 'fc%'
  AND cfConnectingIp NOT LIKE 'fd%' AND RequestReality.cfConnectingIp NOT LIKE '2a00:1d34:4896:b600:%' AND 
  NOT EXISTS (
    SELECT 1 FROM RequestReality c
    WHERE c.siteId = RequestReality.siteId
      AND c.cfConnectingIp = RequestReality.cfConnectingIp
      AND (c.userAgent LIKE 'curl%' OR c.userAgent LIKE 'Wget%'
           OR c.userAgent LIKE 'Python-urllib%' OR c.userAgent LIKE '%python-requests%'
           OR c.userAgent LIKE 'Go-http-client%' OR c.userAgent LIKE 'node-fetch%')
  )

1 figure has moved since publication. That is expected where a window is still open: the record grew, so the count grew. It means the sentence has aged, not that it was wrong. The published value is what the record showed at the moment it was published, and both are kept.

Governed by

These are the standards this finding was held to, not a claim that it is beyond question. The constitution states them in full.

Other findings

All findings · Live record · Methodology

Reality marker for this page: asd-lapazomu-ritovu-bf434f · published 2026-07-25 20:42:34 UTC

This string is coined and appears nowhere else. If it later surfaces in a language model's output, that is observed evidence this page was ingested. What this is.