# SuffectRunner, for site operators

If `SuffectRunner` appears in your logs, an agent asked for an account at your service on a human's behalf, the human approved your terms and a budget on a consent sheet with a passkey, and Suffect's hosted browser is completing your own signup form as that human's tool.

## What it sends

**On every request to your hosts**

- **User-Agent**: `the real browser's string with SuffectRunner/0.1 (+https://suffect.com) appended`
- **Signature-Agent**: `"https://api.suffect.com"`
- **Signature-Input and Signature**: `an RFC 9421 HTTP Message Signature, Ed25519, five minutes of life, a fresh nonce, tag web-bot-auth`
- **Suffect-Attestation**: `on the requests your server handles: a five-minute JWS naming the human's signed consent record`


## How to verify it

- Fetch the key directory at `https://api.suffect.com/.well-known/http-message-signatures-directory`: a JWK Set of Ed25519 public keys, each proven by a signature over the directory's own authority, with the key id as the JWK thumbprint. Verify the request's signature with the key its `keyid` names. Cloudflare's Web Bot Auth verifier takes this profile as is.
- Read the Signature Agent Card at `https://api.suffect.com/.well-known/signature-agent-card`: who the agent is, its purpose, the product token `SuffectRunner` and the one well-known URL it reads at every vendor.
- Read the human's record: `GET https://api.suffect.com/v1/consents/by-hash/{sha256}` with `Authorization: Suffect-Attestation <the header's value>` returns the signed consent record the attestation names, for the five minutes the attestation lives.

## What it does

- Fills your signup form with the human's name, country and an email address, an alias Suffect runs for that human or the human's own by their choice, and reads the verification code you mail there.
- Pays for nothing today: the card program is not live (see [where things stand](/security#not-yet)), so it signs up only for plans that cost nothing. Once it is live, a plan is paid with a card issued for that human with a limit equal to the budget they approved.
- Creates an API key on the human's new account and stores it in a vault; the human's agent never receives it by default.
- Reads `/.well-known/suffect.json` on your domain and the terms documents it cites, to verify them. Nothing else is crawled or collected.

## What it never does

- Solve a CAPTCHA, pass a two-factor challenge or finish any step your site reserves for a person; those go to the human with a link to take over the live session.
- Spoof a fingerprint, hide behind a residential proxy or rotate identities: one product token, one signing origin, one User-Agent suffix.
- Leave your domain: the browser is pinned to the hosts of the vendor whose sheet the human approved.
- Create more than one account per human at your service, share credentials between humans, or resell access.
- Scrape: the form is filled as the human's tool, and no page content is extracted beyond the manifest and the terms.

## How to decline

Blocking the product token or any unsigned request at your edge stops the runner at once: it does not retry around a block, and the human is told to finish by hand or to choose another vendor. If you would rather be removed from the registry so no sheet is ever shown for your service, write to [hello@suffect.com](mailto:hello@suffect.com). Publishing a manifest at `/.well-known/suffect.json` does the opposite: it turns these signups into one signed call to an endpoint of yours (see [for vendors](/vendors)).

---

Canonical: https://suffect.com/bot. Every page of this site has a Markdown twin at the same path plus `.md`; the index is https://suffect.com/llms.txt.
