# Verdict

```json
{
  "sessionId": "s_9f2c…",
  "class": "agent",
  "probability": { "human": 0.04, "bot": 0.03, "agent": 0.93 },
  "confidence": 0.81,
  "agent": { "family": "openai", "verified": false, "method": "marker" },
  "reasons": [{ "code": "rhythm.think_then_act", "weight": 1.1 }],
  "recommendation": "tag",
  "profile": "ecommerce", "action": "checkout",
  "stage": "provisional", "model": "doubleagent-2026.09", "ts": 1758614400000
}
```

- **Probability** says which class is most likely. **Confidence** says how much evidence it rests on.
- `recommendation` is one of `allow`, `tag`, `challenge`, `step_up`, `rate_limit` or `deny`. We never enforce it.
- Families: `claude openai perplexity google browser_use browserbase skyvern manus amazon unknown`.

| Prefix | Evidence |
|---|---|
| `auto.` `global.` `marker.` | Automation and agent-browser artefacts |
| `env.` | Environment consistency |
| `drive.` | How input is driven |
| `rhythm.` | LLM think-time |
| `bio.` `human.` | Pointer and typing biometrics |
| `edge.` `ua.` `net.` | Header evidence |
| `verified.` | Server-checked identity only. See [Declared cover](/docs/cover). |
| `judge.` | [The Handler](/docs/handler) |

## Properties and events

| Property | Values |
|---|---|
| `da_class` | `human`, `bot`, `agent` |
| `da_agent` | Family, or `none` |
| `da_score` | 0–100, non-human probability |
| `da_bucket` | `0-20`, `20-50`, `50-80`, `80-100` |
| `da_rec` | Recommendation |
| `da_verified` | `true` only after a server check returned a verified agent |

Events: `da_classified` (once), then `da_final` (only if the verdict changed).

Default policy: tag every tool; hold back ad conversions when the class is bot with p ≥ 0.8; tag agents and never block them; skip destinations without consent.
