PULSE
The continuous behavioral heartbeat that re-verifies a session every 4 seconds.
What PULSE is
PULSE is a lightweight heartbeat the collector SDK sends every 4 seconds for the entire duration a protected page is open. Each tick carries a small, hybrid payload:
- Mouse behavior — either an "idle" marker (no movement this window), a "micro" statistical summary (bounding box, direction changes, speed variance, point count) for movement under 100px, or a compressed "macro" delta-encoded path for movement over 100px.
- Scroll deltas — the scroll distance covered in the window.
- Keystroke inter-tap intervals — timing between keypresses, if any.
This is deliberately a much smaller payload than the initial FORGE collection — PULSE is designed to run indefinitely without meaningful overhead, not to do the heavy lifting of the first challenge.
Why continuous, not once
A one-shot challenge answers "was a real browser present at page load?" It does not answer "is a human still driving this session three minutes later?" A bot that solves an initial JS challenge and then runs unattended — no real mouse movement, machine-precise timing — is invisible to any detector that only checks once. PULSE closes that gap by treating liveness as a property that has to be continuously re-earned, not proven once and assumed for the rest of the session.
What makes a tick "clean" vs. "robotic"
Each tick is scored independently against a small set of rules, and the strongest single firing rule wins (never averaged down by other, weaker signals in the same tick):
| Signal | Fires when | Score |
|---|---|---|
| Dead hand | Fewer than 10 micro-movement events in the whole window | 0.60 |
| Robot constant speed | Movement detected but zero speed variance | 0.80 |
| Straight-line micro-movement | More than 10px moved with zero direction changes | 0.70 |
| Scroll/keystroke uncanny score | Scroll or keystroke timing below an uncanny-value threshold, with enough samples to trust it | 0.70 |
| Legacy uncanny (flat array format) | Same uncanny threshold on the older payload format | 0.75 |
A tick scoring 0.70 or above is robotic; anything below is clean. Note
what's not here: an "idle" tick (no movement at all in the window) scores
zero, not suspicious — a user who's reading, not moving their mouse, is
not penalized for the absence of movement. This is the same completeness-gate
principle from the scoring engine, applied at the
single-tick level.
Standing accumulates — and resets on a single bad tick
The session tracks a rolling count of consecutive clean ticks. A clean tick increments it; a robotic tick doesn't just fail to increment — it resets the counter to zero. The reasoning: a single robotic tick is real, specific evidence (someone or something drove this session non-humanly for at least one 4-second window), not noise that should be averaged away by a long prior streak of clean ticks. This clean-tick count is exactly what gates ack token issuance — a session needs a genuine, recent, sustained run of clean behavior, not just a good record from minutes ago.
What PULSE defeats that fingerprinting alone doesn't
Static fingerprint harvesting — capturing a real device's fingerprint once and replaying it across a farm of automated sessions — produces sessions that pass an initial check perfectly (the fingerprint is real) but can't sustain a real, varied, continuously-clean PULSE history across the session, because the thing being replayed is a snapshot, not a live human. See Why KaizoCore for the fuller argument.
What PULSE does not defeat
PULSE raises the cost of automation — it does not make automation impossible. An attacker willing to run genuinely slow, attended, real browser sessions (a human occasionally nudging the mouse, or a sophisticated replay tool with real jitter) produces real behavioral data, and real behavioral data is exactly what PULSE is built to read faithfully. See FAQ for the honest limits.
Session states
PULSE ticks drive two session-mode transitions, both readable from the decision layer:
PULSE:ALIVE— the session has a recent clean tick; the deadline keeps extending.PULSE:SUSPENDED— the most recent tick was robotic. The deadline is not extended, so a suspended session ages out on its own rather than being explicitly killed — letting a session that recovers with a genuinely clean tick continue rather than being permanently flagged for one bad window.
See Session modes for how this fits with FORGE, GHOST, and MIRROR.