Stealth Browse
Use the stealth_browser tool for web automation that requires anti-bot bypass or human-like interaction fidelity.
When to use this over cdp_browser
| Scenario | Use |
|---|---|
| Control a browser the user already opened | cdp_browser |
| Automate a site with Cloudflare/Turnstile protection | stealth_browser |
| Screenshot an internal tool page | cdp_browser |
| Log into a web service, scrape content | stealth_browser |
| Export a page to PDF | cdp_browser |
| Fill forms with human-like delays and mouse movement | stealth_browser |
Session lifecycle
The first session-using action launches Chromium. Subsequent calls reuse the session. The add-on checks for five minutes of inactivity about five minutes after session creation; activity does not reset or reschedule that check. close and extension unload always stop Chromium.
Actions
Navigation
stealth_browser action=goto url="https://example.com"
Interaction (human-like)
stealth_browser action=click selector="#login-button"
stealth_browser action=type selector="#email" text="user@example.com"
stealth_browser action=scroll to="bottom"
Content extraction
stealth_browser action=text selector="article"
stealth_browser action=evaluate expr="document.querySelectorAll('.item').length"
stealth_browser action=screenshot fullPage=true outPath="/workspace/tmp/page.png"
Network (through Chrome TLS stack)
stealth_browser action=fetch url="https://api.example.com/data" method="GET"
Session management
stealth_browser action=cookies save="/workspace/tmp/cookies.json"
stealth_browser action=cookies load="/workspace/tmp/cookies.json"
stealth_browser action=status
stealth_browser action=close
Configuration
Set via environment variables:
| Variable | Description | Default |
|---|---|---|
PICLAW_STEALTH_SEED |
Fingerprint seed (identity stability) | hostname |
PICLAW_STEALTH_PROFILE |
Profile ID override | auto-detected per OS |
PICLAW_STEALTH_PROXY |
Proxy URL (http://user:pass@host:port) |
none |
PICLAW_STEALTH_HEADLESS |
Headless mode (true/false) |
true |
Prerequisites
Chromium must be installed. On first use:
bunx @mochi.js/cli browsers install
Key constraints (from mochi API)
- No
page.click()— alwayshumanClick(realistic trajectory) - No per-surface fingerprint randomization — one (profile, seed) pair determines everything
evaluatetakes zero-arg functions only — return JSON-serializable values- One session per Chromium process — no shared contexts