# Declared cover

A verified agent is one that proved who it is. Only the server can confirm it.

| Proof | Checked by |
|---|---|
| Web Bot Auth (RFC 9421, `tag="web-bot-auth"`) | The API, against `<Signature-Agent>/.well-known/http-message-signatures-directory` |
| Published agent IP ranges | The API, refreshed daily |

- `agent.verified` and `da_verified` turn true only after `check()`, `getToken()` or `protect()` returns a verified agent.
- A declared user agent (`ChatGPT-User`, `Claude-User`) names the family but proves nothing.
- For access decisions, trust the token, not the browser.

## Edge hints

```http
Server-Timing: doubleagent;desc="v=1&wba=1&ua=claude&cfv=1&cfs=12&dc=1"
```

| Hint | Signal |
|---|---|
| `wba=1` | `edge.web_bot_auth_present` |
| `ua=<family>` | `ua.declared_agent` |
| `cfv=1` | `edge.cf_verified_bot` |
| `cfs<30` | `edge.cf_score` |
| `dc=1` | `net.datacenter_asn` |

Hints can only raise suspicion, and their weight is capped. They never produce `verified.*`.
