> For an index of all Botscent documentation, see https://botscent.nibnalin.me/llms.txt.

# Reasons

Every reason id a verdict can carry, strongest first, and what each one means.

{/* Generated by scripts/docs-generate.mjs from the library's README. Do not edit. */}

A verdict lists its reasons in the order of this table. The **Half** column says where Botscent reads the evidence. The **Names** column says whether the reason can name the agent.

| Reason                                | Half    | Names                 | What it means                                                                                                                                                                                                                                          |
| ------------------------------------- | ------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `signer.web-bot-auth.verified`        | request | yes, signer           | A Web Bot Auth signature on the request verified against a key bundled with this release.                                                                                                                                                              |
| `signer.edge-verified-bot`            | request | no                    | The hosting platform verified the request as a known bot (Cloudflare's verified-bot category).                                                                                                                                                         |
| `signer.web-bot-auth.declared`        | request | yes, signer           | The request carries a Web Bot Auth signature that did not verify here: an unknown or expired key, a signature outside its window, or a check that failed.                                                                                              |
| `ua.declared-agent-token`             | request | yes, token            | The user agent contains a token that declares software: an agent or an agent's in-app browser, a fetcher, crawler, link previewer or HTTP client.                                                                                                      |
| `ua.page-declared-engine`             | page    | yes, page-declaration | The page's own navigator declares an agent's browser: a hosted browser engine, or an agent's in-app browser by its user-agent token.                                                                                                                   |
| `browser.webdriver-flag`              | page    | no                    | navigator.webdriver is true: the browser declares that automation controls it.                                                                                                                                                                         |
| `ua.headless-chrome`                  | request | no                    | The user agent declares headless Chrome.                                                                                                                                                                                                               |
| `muse.cloud-browser.password-manager` | page    | yes, muse             | 1Password's accessor family on the credential methods, in Chrome 139 or later on Linux x86_64 rendering WebGL with SwiftShader: Muse's cloud browser.                                                                                                  |
| `instinct.credentials.wrappers`       | page    | yes, instinct         | The credential methods are wrapped the way Instinct's cloud desktop wraps them; counts only together with the GeeTest pair.                                                                                                                            |
| `instinct.geetest.accessor-pair`      | page    | yes, instinct         | The GeeTest initialisers are the accessor pair Instinct installs; counts only together with the credential wrappers.                                                                                                                                   |
| `grok.cloud-computer.environment`     | page    | yes, grok-bot         | Grok Bot's cloud computer: Chrome 139 or later on Linux x86_64 rendering WebGL with SwiftShader, with at least 5 of 6 signs (a 1280x800 screen, the Ubuntu, Droid Sans and Cambria fonts, conditional mediation unavailable, the Google Chrome brand). |
| `codex.prompt.anonymous-native`       | page    | yes, codex-browser    | window\.prompt has the Codex in-app browser's shape; counts only with a second Codex shell signal.                                                                                                                                                     |
| `codex.keyboard.empty-layout-map`     | page    | yes, codex-browser    | The keyboard layout map is empty, as in the Codex in-app browser; counts only with a second Codex shell signal.                                                                                                                                        |
| `codex.overlay.shadow-root`           | page    | yes, codex-browser    | The Codex in-app browser's overlay is attached to the document; counts only with a second Codex shell signal.                                                                                                                                          |
| `chatgpt.badge.active`                | page    | yes, chatgpt-chrome   | ChatGPT for Chrome's activity badge was drawn on the page while its agent acted.                                                                                                                                                                       |
| `claude.marker.active`                | page    | yes, claude-chrome    | Claude for Chrome's activity marker was drawn on the page while its agent acted.                                                                                                                                                                       |
| `hidden.input.focus-emulated`         | page    | no                    | Trusted input arrived while the document was hidden yet reported focus, which needs focus emulation.                                                                                                                                                   |
| `hidden.input.trusted-pointerdown`    | page    | no                    | A trusted pointerdown arrived while the document was hidden, which no person can produce.                                                                                                                                                              |
