*** title: Stealth Mode description: Evade bot detection with stealth patches and human-like behavior. ------------------------------------------------------------------------------ Stealth mode makes browser runtimes harder to detect as automated. It patches common detection signals and optionally adds human-like mouse movements, click timing, and scrolling. ## Enabling stealth ### humanize Enable human-like behavior simulation when launching a runtime: ```ts const runtime = await workspace.runtimes.browser("main").playwright({ mode: "ephemeral", config: { humanize: true, }, }); ``` When `humanize` is enabled: * **Mouse movements** follow natural Bezier curves instead of teleporting * **Random micro-movements** are added between actions * **Click timing** varies realistically * **Scrolling** mimics human patterns * **Typing** has variable keystroke delays ### humanizePersonaId Each persona ID (0–124) represents a distinct behavioral profile — different movement speeds, curve patterns, and interaction styles: ```ts const runtime = await workspace.runtimes.browser("main").playwright({ mode: "ephemeral", config: { humanize: true, humanizePersonaId: 42, }, }); ``` | Parameter | Type | Required | Description | | ------------------- | --------- | -------- | ----------------------------------------------------- | | `humanize` | `boolean` | No | Enable human-like behavior | | `humanizePersonaId` | `number` | No | Persona ID (0–124) for consistent behavioral patterns | Use a fixed persona ID when you want repeatable behavior across runs. Omit it for random selection. ## What stealth patches Under the hood, stealth mode patches common automation detection points: * **WebDriver flags** — Hides `navigator.webdriver` and related properties * **Browser fingerprint** — Normalizes canvas, WebGL, and audio fingerprints * **Timing patterns** — Randomizes execution timing to avoid detection * **Chrome DevTools Protocol** — Masks CDP connection signals ## Combining with other features Stealth mode works well with other anti-detection features: ```ts const runtime = await workspace.runtimes.browser("main").playwright({ mode: "profile", profileId: "my-profile", config: { humanize: true, humanizePersonaId: 7, solveCaptchas: true, proxy: { type: "http", host: "residential.proxy.com", port: 9090, }, }, }); ``` This gives you a persistent identity (profile), human-like behavior, automatic captcha solving, and residential proxy — all in one runtime.