Skip to content

Detection signals ​

How Eureka tells agents, humans and bots apart. Each classification records its signals, visible in reports and in the raw data.

In the browser (tag) ​

Evidence is combined into a probability that the activity is not human. It starts at about 5%:

  • Static evidence (user agent, automation traces, environment, agent overlays) holds as long as it is present.
  • Behavioural evidence is updated on every click, keystroke and scroll, with a one-minute half-life.

The actor switches to non-human above 0.8, and back to human below 0.35 for two actions in a row. Each switch creates an actor_switch event and a new actor segment.

SignalWeightMeaning
ua:<name>6–10User agent of a known bot or user-triggered AI agent (ua:googlebot, ua:gptbot, ua:chatgpt-user, ua:google-agent…). Browsers used by both agents and humans (ChatGPT Atlas, Comet) are deliberately not listed.
webdriver5navigator.webdriver is true (WebDriver, CDP-launched Chrome, Playwright)
headless_ua5HeadlessChrome in the user agent
auto:<tool>3–5Automation globals: Selenium/ChromeDriver, PhantomJS, Nightmare, CEF, Playwright…
ext:claude6The overlay Claude in Chrome shows while it acts ([id^="claude-agent"]). Source: a third-party report, not verified by Eureka.
ext:browser_use5browser-use highlight overlay
zero_outer, no_lang, no_plugins, rtt0, swgl0.7–2Headless browser traits (no window size, no languages, no plugins, zero network latency, software graphics)
cdp_runtime, cdp_binding0.7–1A Chrome DevTools Protocol client is attached (also true when DevTools is open, hence the low weight)
untrusted3Click or input generated by a script (isTrusted false) without a real input just before
no_move_click1.5Mouse click with no pointer movement in the previous 1.5 s
teleport1.2Only 1–2 pointer moves before the click
center_click1Click within half a pixel of the element's centre
zero_press1Mouse button pressed and released in under 8 ms
idle_burst0.6More than 2 s of silence, then an instant action: the screenshot → think → act loop of vision agents
bulk_input1.54+ characters inserted without key presses
paste_nokey1Paste without Ctrl/Cmd+V or context menu
robotic_keys1.5Metronomic typing rhythm
scroll_noinput0.8Scroll without wheel, touch, key or pointer input
human_path−1.5Curved pointer path with variable speed
human_keys−1Irregular typing rhythm
touch−0.8Touch interaction

False-positive guards: touch never produces mouse signals; keyboard activation (Enter, Space) never produces click signals; input-method composition and browser autofill are excluded from typing signals; scrolls triggered by the site right after a click are ignored; weak environment signals alone (DevTools open, virtual machines) stay below the threshold.

On the server (collector and processor) ​

SignalMeaning
Web Bot AuthThe request carries a Signature-Agent header (for example ChatGPT agent: "https://chatgpt.com"): classified as a named AI agent. Signature verification is on the roadmap.
User-agent rulesFull lists of search crawlers, AI crawlers, AI search indexers, user-triggered AI fetchers and agents, automation and monitoring tools
Verified IP rangesPublished ranges of Google, Bing, OpenAI, Perplexity…, refreshed daily. A crawler outside its owner's ranges gets ua_spoof and becomes unknown_bot.
ua_mismatchThe browser's user agent differs from the one in the request header
dc_asnTraffic from a hosting provider (AWS, GCP, Azure, OVH, Hetzner…)
fetcher_runs_jsAn AI fetcher that executes JavaScript is upgraded to AI agent

Limits ​

Agents that drive the user's own Chrome (Claude in Chrome, Perplexity Comet, ChatGPT Atlas agent mode) have a normal fingerprint and user agent. Eureka recognizes them from behaviour and known page artefacts, with a confidence score, not with certainty. New artefacts and tuned thresholds are pushed through the remote configuration (detect.signatures, detect.thresholds) without redeploying the tag.

Agents & humans, every visit counts!