Het meeste geautomatiseerde verkeer is makkelijk weg te sturen. Een user-agentcontrole en een fingerprinttest stoppen het overgrote deel ervan voordat gedrag er ook maar toe doet. Het verkeer waartegen het de moeite waard is om te bouwen is die kleine fractie die dat allemaal vervalst, en dat verkeer moet nog steeds één ding doen dat het niet makkelijk kan veinzen: een cursor bewegen zoals een mens.
Dit is een blik op cursor_v2, een compacte neurale detector die scoort hoe een muis daadwerkelijk bewoog. Het is klein genoeg, ongeveer tienduizend parameters, om op elk gebaar te draaien, en in onze tests houdt het stand tegen elke methode die we kennen om een mensachtige cursor te synthetiseren. Omdat dit een securitymodel in productie is, gaat dit artikel over resultaten: wat het vangt, hoe weinig het kost en waar de grenzen eerlijk liggen. Het beschrijft niet de interne werking van de beslissing.
De korte versie:
- cursor_v2 zet één muisbeweging om in een mens/bot-score in minder dan een milliseconde, vanuit een model van ~10.600 parameters dat ~0,12 MB groot is.
- Tegen zeven onafhankelijke cursorgeneratoren (geometrisch, fysiek, neurale menselijke imitatie en paden die specifiek zijn geoptimaliseerd om het te verslaan) markeert het 86 tot 100% van de botbewegingen terwijl het ongeveer 0% van de echte mensen markeert.
- Op een generator waarop het nooit is getraind, scoort het AUC 0,999 tegenover 0,920 voor de vorige generatie.
- We richtten een LLM-agent op een stealth-browser (Camoufox), een die detectie op fingerprintniveau verslaat, op een teststorefront. cursor_v2 markeerde 100% van de bewegingen, zelfs met bewegingshumanisatie aan.
De tegenstander waartegen het de moeite waard is om te bouwen
Botdetectie is een stapel filters, en het grootste deel van het volume valt weg bij de goedkope: een duidelijk geautomatiseerde user-agent, een headless-browserfingerprint, een datacenter-IP. De bots die deze lagen overleven zijn gebouwd door mensen die hetzelfde onderzoek lezen als wij. Ze draaien echte browsers, wissen de fingerprintaanwijzingen weg en routeren via residentiële netwerken. Tegen de tijd dat zo'n sessie een pagina bereikt, zien de statische signalen er schoon uit.
Wat overblijft is gedrag. Een echte persoon die een site doorloopt produceert een continue stroom invoer, en menselijke cursorbeweging is het product van een ruizige biologische regelkring die echt moeilijk te reproduceren is. Een fingerprint kun je exact kopiëren. De manier kopiëren waarop een hand een muis beweegt, overtuigend en over duizenden gebaren, is een ander probleem, en een apart probleem. Een bot kan perfect zijn op de fingerprintlaag en zichzelf verraden op het moment dat hij beweegt.
Een detector klein genoeg om op iedereen te draaien
cursor_v2 neemt één cursorpad, de samples die een beweging achterlaat terwijl ze van het ene punt naar het andere reist, en geeft één kans terug dat de beweging door automatisering is geproduceerd. Het is volledig neuraal, geëxporteerd naar ONNX, en draait op een CPU. Geen GPU, geen serviceaanroep, geen modelserver per verzoek.
De reden dat dit ertoe doet is economisch. Een detector die je je alleen kunt veroorloven op verdachte sessies is een detector waar aanvallers leren onder te blijven. Een detector die een fractie van een milliseconde en een tiende van een megabyte kost, kan op elke beweging van elke sessie draaien, precies daar waar het gedragssignaal leeft.
De uitgerolde voetafdruk:
- Ongeveer 10.600 parameters in totaal.
- 0,74 ms per beweging op één CPU-thread.
- ~0,12 MB modelgewicht.
- ~64 MB piekgeheugen bij inferentie.
Met die voetafdruk scoort één core in de orde van duizend bewegingen per seconde, goedkoop genoeg om altijd aan te staan.
Elke nepcursor heeft een buurt
Intern stelt het model elke beweging voor als een compacte vector. We onthullen niet wat in die voorstelling gaat, maar we kunnen wel laten zien wat eruit komt. Projecteer een grote steekproef van bewegingen naar drie dimensies en er ontstaat vanzelf een structuur: echte menselijke beweging beslaat één gebied, en elke afzonderlijke manier om een cursor te synthetiseren landt in een eigen gebied, weg van de mensen. Een geometrische humanizer, een fysiek muismodel en een neuraal netwerk getraind om mensen na te bootsen zien er anders uit dan elkaar, en allemaal anders dan een persoon.
In een interactieve 3-D-projectie van die bewegingsembedding vormen mensen één buurt terwijl elke botgenerator een eigen gescheiden wolk vormt, inclusief het neurale model dat direct op menselijke beweging is getraind. De projectie-assen zijn willekeurig; het punt is dat de klassen scheiden, niet hoe het model beslist.
Het generatorparcours
Scheiding in een projectie is suggestief, geen bewijs. De echte vraag is wat het uitgerolde model doet wanneer het beweging krijgt die het nooit heeft gezien. Dus bouwden we een parcours: zeven onafhankelijke manieren om een cursorpad te genereren, end-to-end gescoord door het exacte model dat we uitrollen, tegen een controleset van achtergehouden echte menselijke bewegingen.
De families vallen in drie groepen. Achtergehouden families gebruiken een generator waarop het model nooit is getraind, de eerlijke test van generalisatie. Geharde families zijn die welke we het model bewust hebben getraind te weerstaan, waaronder een corpus van paden die via zoeken specifiek zijn geoptimaliseerd om deze detector te ontwijken; een hoog vangstpercentage daar bevestigt dat de harding standhield. En een triviale ondergrens als sanity check.
| Generatorfamilie | Regime | n | AUC | Recall @ FPR ≤ 1% | Gevangen @ uitgerold |
|---|---|---|---|---|---|
| Niet-gehumaniseerde generator | sanity-ondergrens | 500 | 0,995 | 98,6% | 98,2% |
| Geometrische humanizer | achtergehouden | 500 | 0,999 | 99,6% | 99,6% |
| Gekwantiseerde humanizer | achtergehouden | 500 | 0,999 | 99,6% | 99,6% |
| Fysiek bewegingsmodel | gehard | 499 | 1,000 | 99,4% | 97,0% |
| Neurale menselijke imitatie | gehard | 500 | 1,000 | 100,0% | 100,0% |
| Voor ontwijking geoptimaliseerde paden | gehard | 500 | 0,999 | 97,6% | 85,6% |
| Adversarieel exploitcorpus | gehard | 500 | 1,000 | 100,0% | 96,0% |
Controle: 160 achtergehouden menselijke bewegingen, gescoord via dezelfde pijplijn, met een percentage valse positieven van 0,0% bij de uitgerolde drempel en een mediane score van 0,000. Elk botgetal hierboven is gemeten tegen diezelfde controle.

Het eerlijke gegeven: zelfs het corpus dat is gebouwd door te zoeken naar paden die deze detector verslaan, wordt 85,6% van de tijd gemarkeerd, terwijl echte mensen op nul worden gemarkeerd. Adversariële druk verschuift het getal; het breekt het niet.
Hetzelfde resultaat gezien als een scoreverdeling: mensen en bots stapelen zich op aan de tegenovergestelde uiteinden van de schaal, met heel weinig ertussen. De menselijke uitvoer klapt samen bij nul, de gepoolde botbewegingen over alle generatoren klappen samen bij één, en de beslissingsdrempel zit in de lege kloof daartussen.

De echte test: een stealth-browser aangestuurd door een agent
Een padgenerator is een schoon laboratoriumsubject. Een moderne stealth-browser aangestuurd door een AI-agent is de echte tegenstander, dus draaiden we er een. We bouwden een door een LLM aangestuurde crawler bovenop Camoufox, een stealth-browser die specifiek is gebouwd om detectie op fingerprintniveau te verslaan, gaven hem een doel en lieten hem winkelen in een teststorefront: een product vinden, in het mandje leggen, naar de afrekenpagina. Terwijl hij navigeerde, legden we zijn echte muisbewegingen vast en scoorden elke met de uitgerolde detector.
| Camoufox-agent | Bewegingen | Gemarkeerd als bot | Sessie gemarkeerd |
|---|---|---|---|
| Standaardmodus | 6 | 6 (100%) | ja, na 3 bewegingen |
| Bewegingshumanisatie aan | 6 | 6 (100%) | ja, na 3 bewegingen |
Elke beweging werd gemarkeerd, in de standaardmodus van de agent en met de ingebouwde bewegingshumanisatie expliciet ingeschakeld. Dezelfde scorer markeert minder dan 1% van de echte menselijke bewegingen, dus dit is geen detector die simpelweg alles wantrouwt.
Camoufox is uitstekend in waarvoor het is gebouwd, en zou hoogstwaarschijnlijk vlot voorbij een controle komen die alleen op fingerprint berust. Het werd toch gevangen, omdat stealth op de fingerprintlaag geen stealth op de bewegingslaag koopt. De twee falen onafhankelijk, en die onafhankelijkheid is precies het punt van detectie in de diepte. Voor meer over hoe deze tools werken, zie stealth-browsers en anti-detectiebrowsers uitgelegd en hoe cside AI-agents op stealth-browsers detecteert.
Generaliseren voorbij de trainingsverdeling
Eén getal verdient het te worden uitgelicht, want het is het getal dat makkelijk te faken en makkelijk verkeerd te lezen is. Bijna elke cursordetector scoort rond 0,99 AUC op het soort beweging waarop hij is getraind; dat cijfer is bijna betekenisloos. Het cijfer dat ertoe doet is transfer, de prestatie op een generator die volledig uit de training is gehouden.
Op een humanizerfamilie waarop geen van beide modellen is getraind, bereikt cursor_v2 AUC 0,999, terwijl de detector van de vorige generatie zakt naar 0,920 en het grootste deel van zijn recall verliest. De winst zit in de generalisatie, niet in het bijschaven binnen de verdeling.

Wat we kunnen bewijzen, en wat niet
Een securityverslag is alleen het lezen waard als het eerlijk is over zijn randen, dus hier zijn de onze.
Nauwkeurigheid binnen de verdeling is geen robuustheid. Elk getal over beweging die het model heeft gezien is bijna perfect en we leunen op geen ervan. De beweringen hier rusten op achtergehouden generatoren en een live stealth-browsertest.
Het resultaat tussen generatoren is een sterke puntschatting, geen universele garantie. Het is gekalibreerd op een eindige steekproef van echte mensen en één achtergehouden humanizerfamilie. Lees de 0,999 als goedgekeurd voor die familie, niet voor elke cursor die ooit zal bestaan. De eerlijke open hefboom is de breedte van echte menselijke beweging om tegen te kalibreren, meer dan het model zelf.
In productie passen we debounce toe. Eén vreemd gebaar markeert nooit een persoon; de uitgerolde scorer wacht op meerdere als bot gescoorde bewegingen op rij voordat hij ingrijpt. De getallen in dit artikel zijn de hardere weergave per beweging, vóór die afvlakking.
Wat dit betekent voor teams die detectie draaien
Haal de details weg en de les generaliseert. De bots die ertoe doen zijn degene die je statische controles al hebben verslagen, en de manier om ze te vangen is met een signaal dat onafhankelijk faalt van het signaal dat zij verslaan. Gedrag, hoe een sessie daadwerkelijk beweegt, klikt en scrolt, is dat signaal, en het is de laag waarvoor aanvallers het minst budgetteren. Dezelfde redenering loopt door bots vangen die niet gevangen willen worden en hoe OpenClaw-agents botdetectie omzeilen.
De praktische ontgrendeling is kosten. Een gedragsmodel klein en snel genoeg om op elke bezoeker te draaien, niet alleen de verdachte, verwijdert de blinde vlek die steekproeven creëren. cursor_v2 is zo'n signaal: orthogonaal aan fingerprinting, goedkoop genoeg om altijd aan te staan en, tot nu toe, standhoudend tegen de beste cursorvervalsers die we kunnen bouwen.
Hoe cside past
cside geeft je volledig zicht op elk script, verzoek en derde partij die je site raakt, plus het gedragssignaal om echte gebruikers te onderscheiden van de automatisering die zich ertussen verstopt. Het cursormodel is één laag in een detectiestapel die mensen, goede bots en kwaadaardige agents al scheidt op de browserlaag, waar de statische aanwijzingen al zijn vervalst.






