VERIQ
A bot built to pass as a person, to show that activity monitoring measures the wrong thing.

Workforce monitoring rests on one assumption: activity equals work. Mouse moved, keys pressed, timesheet turns green. VERIQ is the counter-argument, built rather than argued: a bot whose input is statistically indistinguishable from a human’s, pointed at real trackers to find out exactly where the illusion breaks.
- Year
- 2026
- Role
- Research, system design, data visualisation
- Type
- Self-initiated, adversarial
- Stack
- Python · pyautogui · SVG
- Subject
- Activity monitoring & proctoring
Theproblem
The assumption is trivially cheap to fake, and a counter-market already sells the lie: software jigglers, USB-HID devices, mechanical rigs, all openly on Amazon. In 2024 Wells Fargo fired employees for simulating keyboard activity. If a ten-minute script can pass as a full workday, the question is what the monitoring is actually measuring.
WhatIdid

A billion-dollar industry on one assumption
The research starts by sizing what rests on it: a $4.5B+ monitoring and proctoring market, three classes of evasion already for sale, and ten minutes to build the first working faker from scratch. Rather than trust marketing claims, I built the adversary and pointed it at real trackers. The bot is not the product, it is the instrument: what comes out of it is a map of where every defence gives way.
The tell is in the motion
The synthetic path is rigid and right-angled, the human one wanders and wobbles and never repeats itself. On the raw shape of the movement alone the difference is obvious, which is the first thing any detector reaches for. It is also the first thing a good enough model erases, which is where the whole project starts.
Engineering a believable human
A naïve bot betrays itself instantly: perfect lines, clockwork timing, zero fatigue. Four models did the work. Motion follows Fitts’s Law, so reach time scales with the logarithm of distance. Pauses are log-normal rather than uniform, because people burst and then drift, and a flat random interval is a fingerprint of automation. A circadian curve gives the day a morning peak, a lunch dip and evening fatigue, because a bot that works eight hours flat is itself the anomaly. Under all of it sits a 10 Hz physiological tremor, replacing the machine’s unnatural smoothness. Layered together with Bézier sub-movements, on movement statistics alone, it passed.
The cheapest signal, classified live at the OS
Below the statistics sits one bit that needs no model at all. The operating system marks every input event as physical or injected, and a pyautogui-class bot trips it the instant it moves, curved path or not. It is the cheapest and most brutal signal there is, and it dies the moment an attacker drops to a driver or a hardware device that emits events a real mouse would.

Three layers, and only one that cannot be dodged
Detection stacks in three tiers. The operating system flags synthetic events, which is one bit, instant and brutal, and useless the moment an attacker drops to a driver or a physical device. Movement and timing statistics catch the polished software bot and lose to a good enough model. Correlating activity against real artifacts, commits and tickets and documents, is the only signal a perfect input-faker cannot satisfy without actually doing the work.

What each layer actually catches
Laid out as a matrix, the ceiling is obvious. A software jiggler is caught by everything. The human-like bot from this project is caught by the injection flag and gameable on statistics. A USB-HID dongle is invisible to the flag. A mechanical mover that physically pushes the mouse is invisible to both input layers. Every one of them is caught by output correlation, and nothing else catches all four.

The market check that killed the product idea
Before designing a detector, I checked whether anyone would buy one. Fake-activity detection already ships bundled inside Teramind, ActivTrak, Monitask, CurrentWare, Time Doctor and Kickidler. It is a feature, not a product. That reframed the work: the opportunity is not another dashboard, it is adversarial audit, proving to a vendor exactly how their own detection is fooled and where the input-layer ceiling leaves them exposed.

What a serious detector looks like
Tracker-agnostic by design, listening one layer below the monitoring tool at the operating system input stream. A collector taps input and tags every event injected or physical, extracting motion and timing features. A scorer fuses the flag, the statistics and the output correlation into one probability. A dashboard reports the result. The whole point is where it sits: under the tracker, not inside it.

A dashboard judged on its false positives
The concept scores the session, not the event: a suspicion number with the evidence trail behind it, sessions sorted by risk, the flagged one carrying the reason it was flagged. The number on screen is not the value. The false-positive rate under it is, because on a tool that accuses people a wrong call is a lawsuit rather than a bug.
Underthehood
The best fake converges on doing the work
Every layer defeated pushed the bot closer to producing real output. A perfect faker ends up working, which is both the natural ceiling of the attack and the strongest defence available. That is the finding the whole project exists to state.
Research beats a demo
A ten-minute bot was enough to prove the point. The value was never the tool, it was the map of where each defence breaks, and turning injection flags, jerk and log-normal tails into something a manager reads in thirty seconds is the actual deliverable.
Why publish the attack
The point is not a better jiggler. It is that a metric this easy to satisfy cannot be evidence of work, and the industry selling it already knows the counter-market exists. Naming the failure is more useful than pretending the measurement is sound.
Scope and ethics
Conducted as authorised, self-initiated security research on my own machines. No production monitoring system was attacked and no evasion tooling is published or distributed. The intent is defensive: understanding activity integrity well enough to measure it honestly.