BOTS AND AI AGENTS
Tell people from scripts. Including AI agents that drive a real browser.
Every identification checks for headless browsers, WebDriver and automation frameworks, and a behavioral model scores pointer movement. Detection for AI agents in a real browser is on by default, and you can switch it off for your account. The bot checks recommend a block for clear automation and a challenge for ambiguous automation.
01Hard signals
navigator.webdriver is true
pendingfactHeadless browser signals present
pendingfact
02Model fusion
Pointer movement reads as automated
pendingmodelbehavioral model, joined with the signals above
03Heuristics
Keystrokes arrive at machine-even intervals
pendinginferenceBrowser features contradict the user agent
pendinginference
- Three detection layers
- A block needs a hard signal
- Thresholds you can tune
- Agent detection per account
HOW IT WORKS
Three layers.
- 01
Hard signals.
WebDriver flags, headless browsers and automation environments. These can block on their own. - 02
Model fusion.
A behavioral model scores pointer movement and joins it with the other signals. - 03
Heuristics.
Timing and consistency checks that catch what a single signal misses.
A block from the bot layers needs at least one hard signal. Odd movement alone earns a challenge.
AI AGENTS IN A REAL BROWSER
Agents that drive a genuine browser pass the classic checks. Unless you switch this off, we look for the DevTools protocol side channel, WebDriver traces across page realms, synthetic input events, and sessions with no genuine interaction at all. Strong evidence blocks. Ambiguous evidence raises a challenge, so a person with DevTools open is not blocked. Signed agents are checked on every identification: when OpenAI's ChatGPT agent or Google-Agent signs its requests with Web Bot Auth, we verify the signature against the keys the agent publishes, and the verdict names the agent. A signature that does not verify is reported as an unverified agent, never trusted.
Talk to an engineer about itDevTools protocol side channel open
pendinginferenceClicks arrived as synthetic input events
pendinginferenceNo genuine interaction in the session
pendinginference
TYPED OR PASTED
For each form field, we count characters typed versus pasted or dropped. We never read the text itself, and autofill is not flagged. It is useful on sign-up forms and free-text answers.
See it on the survey pageLive demo
Spec
- Detection layers
- 3: hard signals, model fusion, heuristics
- Actions
- Allow, challenge, block
- Block rule
- At least one hard signal
- Thresholds
- Tunable per account
- AI agent detection
- On by default, can be switched off per account
- Input integrity
- Counts and lengths only, never text