Stealth & Physics — Weavetab Docs

Ghost Cursor Bézier kinematics, typing jitter, and anti-fingerprinting.

Stealth & Physics

Ghost Cursor Bézier kinematics, typing jitter, and anti-fingerprinting.

# Stealth & Kinematic Physics

Weavetab is built from the ground up to make AI automation indistinguishable from human input at the browser and DOM event levels.

## 1. Ghost Cursor Bézier Kinematics

Standard automation tools warp cursor coordinates instantaneously (`x: 0` → `x: 500` in 0ms), which triggers modern anti-bot heuristics.

Weavetab's **Ghost Cursor** engine generates dynamic **cubic Bézier curves** with randomized control points for every movement:

```text
P0 (Current Pos) ──────► P1 (Control Pt 1) ──────► P2 (Control Pt 2) ──────► P3 (Target)
```

- **Acceleration Profiling**: Gaussian velocity distribution with natural ramp-up and ramp-down.
- **Micro-Jitter**: Per-frame sub-pixel deviations mimicking human muscle tremor.
- **Overshoot & Correction**: Intentional minor overshoots past the target element followed by corrective micro-adjustments.
- **Visual Overlay**: Real-time canvas overlay rendering the glowing Ghost Cursor path in the browser window.

---

## 2. Human Keystroke Synthesis

The `browser_type` engine dispatches native CDP `Input.dispatchKeyEvent` calls with realistic human timing profiles:

- **Temporal Jitter**: Per-character delays sampled between 35 ms and 95 ms.
- **Burst Profiling**: Common character digraphs (e.g., `th`, `er`, `ing`) are typed faster in bursts.
- **Word Boundary Pauses**: Natural pauses (120–250 ms) after spaces and punctuation marks.
- **Stuck-Input Breaking**: DOM diffing detects if keystrokes are failing to register and breaks out of deadlocks.

---

## 3. Layer 0 Fingerprint Spoofing

Weavetab's early-script CDP injection guarantees that the following patches execute **before any page JavaScript runs**:

```typescript
// navigator.webdriver is permanently undefined
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });

// Native plugin and mime-type arrays spoofed
Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5] });

// WebGL vendor and renderer noise injection
const getParameter = WebGLRenderingContext.prototype.getParameter;
WebGLRenderingContext.prototype.getParameter = function(parameter) {
  if (parameter === 37445) return 'Google Inc. (Intel)';
  if (parameter === 37446) return 'ANGLE (Intel, Intel(R) UHD Graphics Direct3D11)';
  return getParameter.apply(this, arguments);
};
```