Skip to content

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), 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. 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).