Real websites fight back
CAPTCHAs, 2FA prompts, cookie banners, modal dialogs, and consent walls stop otherwise capable agents cold.
BatonPass freezes the browser session, beams the blocked moment to the operator's phone, lets them clear the challenge in seconds, then resumes the agent exactly where it left off.
4.8 s
Human assist
96.2%
Recovery rate
387
Handoffs /30d
FirstNorthBank demo
Open statement center
Complete
Choose April statement
Queued
Verify session
In progress
Download PDF
Queued
Human check
Session frozen
Handoff link active · Agent paused
BatonPass
Secure agent handoff
Your agent needs help
FirstNorthBank demo is asking for human verification.
Challenge
ReadyYour agent needs help
Tap to take over for 5 seconds.
Each tile launches /demo/playground pre-configured for that interruption. Real ULIDs, real backend, real phone PWA.
Site shows reCAPTCHA / hCaptcha / Cloudflare Turnstile
→ Tap the I'm-not-a-robot checkbox
Site demands 6-digit code from authenticator app or SMS
→ Read code from your authenticator → tap to type
GDPR / CCPA cookie banner blocking interaction
→ Tap Accept / Reject (or set policy to auto-decline)
Workflow demands human sign-off (e.g., production deploy)
→ Tap Approve or Deny with optional reason
Payment provider step (3DS challenge, card verification)
→ Confirm via authenticator app, tap Continue
Novel UI pattern the agent has never seen — judgment call needed
→ Read it, decide, tap. Operator pattern saved for next time.
Run the handoff from agent failure to finished task. It is the exact moment customers understand why BatonPass exists.
Step 1: Agent is working
Agent opens FirstNorthBank demo portal and starts the statement-download workflow.
FirstNorthBank demo
Open statement center
Complete
Choose April statement
In progress
Verify session
Queued
Download PDF
Queued
Agent running
Browser agent is navigating the portal, selecting the right account, preparing the download.
BatonPass
Secure agent handoff
Your agent needs help
FirstNorthBank demo is asking for human verification.
Challenge
IdleThe agent does not need a better retry loop. It needs a graceful way to ask for help at the exact point real websites become human-only.
CAPTCHAs, 2FA prompts, cookie banners, modal dialogs, and consent walls stop otherwise capable agents cold.
Most agents fail, loop, or notify the user long after the moment has passed. Workflow feels brittle.
A single popup can turn a perfect investor demo or onboarding flow into a support ticket.
BatonPass turns stuck browser automation into a fast, secure human assist flow that preserves momentum instead of abandoning the task.
BatonPass listens for browser interruptions and classifies the point where human input is required.
The frozen browser state is streamed to the operator through an encrypted real-time handoff session.
After the operator solves the blocked step, the agent resumes only when they tap Resume.
BatonPass is not for the happy path. It is for the popups, prompts, and consent gates that decide whether an agent actually finishes.
Downloading bank statements
Handoff-ready interruption recovery
Confirming a 2FA login
Handoff-ready interruption recovery
Solving a CAPTCHA
Handoff-ready interruption recovery
Handling checkout interruptions
Handoff-ready interruption recovery
Approving sensitive actions
Handoff-ready interruption recovery
Fixing weird website popups
Handoff-ready interruption recovery
Every browser-agent vendor wants the same thing: more completed tasks, fewer confused users, and demos that survive real websites.
Higher task completion rate
Lower user churn
More trust in agents
Faster recovery from real-world failures
Better demo reliability
BatonPass is designed for sensitive workflows where the operator should stay in control. The agent pauses, the human clears only the blocked step, and automation resumes only after explicit approval.
No password storage
BatonPass never sees, requests, or stores user credentials. Operators only see what the agent already had access to.
Encrypted handoff session
Browser snapshot + control channel are end-to-end encrypted between agent-host and operator phone. WebRTC DTLS-SRTP.
User-authorized control
Each handoff requires explicit operator action — no autonomous credential entry. Session expires after solve.
Sensitive fields redacted
Pre-configured patterns (SSN, card numbers, banking PII) auto-masked in audit log + replay.
Expiring handoff links
Mobile PWA URLs are single-use, signed, and expire in 60s by default. No replay possible.
The wrapper inherits your `Page`. When the agent gets stuck, BatonPass takes over without your script noticing — the next line of code runs after the human assist completes.
import { wrapWithBatonPass } from '@batonpass/playwright';
import { chromium } from 'playwright';
const browser = await chromium.launch();
const page = await browser.newPage();
const baton = wrapWithBatonPass(page, { apiKey: process.env.BATONPASS_API_KEY, agentId: 'outbound-sf-v3' });
await baton.run(async () => {
await page.goto('https://salesforce.com/login');
await page.fill('#username', user);
await page.fill('#password', pass);
await page.click('button[type=submit]');
// 2FA modal appears here? BatonPass auto-detects, hands off to phone.
// When operator solves, this `await` returns and the agent continues.
await page.click('a[href*="/lightning"]');
});
1. Wrap
Pass your Playwright page through wrapWithBatonPass().
2. Detect
SDK detects CAPTCHA / 2FA / approval modal patterns automatically.
3. Resume
After the operator solves it on the phone, your script picks up the same `await`.
The 13-state lifecycle engine emits structured events into the audit log. Compliance teams export SOC 2 / HIPAA / GDPR-formatted JSONL from /app/audit.
+0.0s
agent.started
Resumed from checkpoint at 03:42:00
step 1 / 8
+0.2s
stuck.detected
DOM contains [data-testid='2fa-modal'], no autofill keys
step 2 / 8
+0.4s
handoff.created
State frozen, snapshot 47KB
step 3 / 8
+0.5s
notification.sent
Voice call placed to +1 415 555 0177
step 4 / 8
+5.6s
user.opened
Phone PWA loaded /m/h_01HXYZ001
step 5 / 8
+7.2s
challenge.solved
2FA code 847291 submitted
step 6 / 8
+7.3s
agent.resumed
State restored, browser at salesforce.com/lightning
step 7 / 8
+12.0s
task.completed
Original task: prospect_outreach_batch_44 finished
step 8 / 8
Tiers map to active_agents × handoffs/month × audit retention × escalation channels — the four meters that actually scale.
Prototype with one agent
$0
forever
Best for: Solo developers prototyping agent reliability
Agent teams + handoff queue
$199
per month
Best for: Sales/RevOps teams running outbound agents
High-volume automation teams
$899
per month
Best for: Research labs, ops teams, deploy automation
Security, audit, SSO, custom retention
Custom
annual contract
Best for: Regulated industries: finance, healthtech, legal
Mind2Web grounded
Built on the NeurIPS 2024 paper that quantified browser agent failure modes
WebRTC end-to-end
Sub-second peer-to-peer between agent and operator phone
SOC 2 Type II in audit
Target Q3 2026 — Enterprise customers can review architecture under NDA
GDPR + CCPA compliant
Per-tenant data deletion API, redacted audit logs
Status page
status.batonpass.dev — incident postmortems, uptime history
Each answer maps to a real subsystem — Phase 3 lifecycle engine, Phase 6 operator product, Phase 7 voice fallback.
No. Every CAPTCHA solve is performed by a human operator on their phone. We are not a CAPTCHA-bypass service — we're a human-in-the-loop handoff for moments where a human is required.
Configurable timeouts + escalation chains. If the primary doesn't respond in 60s (default), the system escalates to backup, then manager. Handoff link expires after the full chain timeout.
No. Operators only see what the agent already had access to. We never see, request, or store credentials.
Operator actions are constrained to the captured browser session. Audit log records every keystroke and click. Domain allowlist prevents handoffs from attacker-controlled pages.
Every state transition (13 lifecycle states), operator identity, timestamps, source domain, screenshot snapshot (with sensitive fields redacted), action taken. Exportable as SOC 2 / HIPAA / GDPR-formatted JSONL.
Yes — per-agent domain allowlist. Handoffs from any other domain are refused. Prevents compromised agents from being weaponized.
Default 60 seconds for the mobile PWA URL (single-use, signed). After operator solve, browser snapshot deleted within 24 hours unless you've opted into longer retention.
Yes. Our Playwright wrapper integrates with any framework that uses Playwright underneath. We're working on direct integrations for Browser-Use and OpenAI Operator (Q3 2026).
Convert stuck sessions into completed tasks with a secure, five-second human assist layer built for browser-based AI agents.
Built and maintained by @SidraMiconi.