Skip to content

behavioral-identity

Fresh

Source: BIBLE.md (Phase 12 Phase 4, behavioral-identity 5 routes), ROADMAP.md (Phase 4.4)

Persistent behavioral fingerprint per account. Typing speed, mouse movement patterns, scroll behavior, session duration, time-of-day habits. "This person" always types at 47 WPM, scrolls slowly, browses 8am to 11pm Central.

Consistent across sessions, unique per account. Goes beyond browser fingerprinting into behavioral fingerprinting.

Per-account profile

Each account gets a deterministic behavioral profile generated from its ID seed:

yaml
behavioral_identity:
  typing_wpm: 47               # consistent typing speed
  typing_typo_rate: 0.04       # how often they typo
  mouse_speed_multiplier: 0.85 # slower or faster than baseline
  scroll_speed_multiplier: 0.95
  scroll_pause_rate: 0.12      # how often re-reading happens
  session_duration_avg_min: 23
  session_duration_stddev_min: 8
  active_hours:
    start_local: 8
    end_local: 23
  reading_pause_multiplier: 1.15

Deterministic from account ID

javascript
import crypto from 'crypto';

function generateBehavioralIdentity(accountId) {
  const hash = crypto.createHash('sha256').update(accountId).digest();
  return {
    typing_wpm: 30 + (hash[0] % 50),
    typing_typo_rate: (hash[1] % 10) / 100,
    mouse_speed_multiplier: 0.7 + (hash[2] % 60) / 100,
    // ...
  };
}

Same account, same identity. Forever.

Routes (5)

MethodRouteWhat
GET/behavioral-identity/:accountIdGet the identity for one account
POST/behavioral-identity/regenerateForce regenerate (rare)
POST/behavioral-identity/applyApply identity to a browser session
GET/behavioral-identity/listList all profiles
POST/behavioral-identity/scoreScore how distinct an identity is

How it integrates

The identity is applied to human-mouse, human-keyboard, human-scroll options at session launch:

javascript
const identity = await getBehavioralIdentity(accountId);
humanType(page, text, {
  outputMode: 'os',
  speedMultiplier: identity.typing_wpm / 60, // chars/sec
  typoRate: identity.typing_typo_rate
});

Uses existing human-behavior sleeve

Built on top of _sleeves/human-behavior.mjs (Bezier mouse, variable typing, scroll with reading pauses).