Back to Work

HANDRAISE

2026

Four packages that came out of one measured number.

Agent InfrastructureTypeScriptCloud BrowsersBenchmarkingOpen Source
View Live Project
HANDRAISE

Solari cloud browser sessions end about ten minutes after they start. handraise lets a stuck agent hand off to a human phone and resume the same session; outlive checkpoints the session and re-enters the task after it dies; two adapters deliver the same interrupt into Slack and Telegram.

Solari runs browsers in the cloud for agents to drive. Its sessions end about ten minutes after they start, and there is no timeoutMs, no keep-alive call and no resume(). I measured six: five died between 604 and 617 seconds, one at 319. Idle, pinged every 25 seconds, or streaming a screencast made no difference. The idle one lived longest.

Four packages came out of that one number, all MIT, all on npm.

outlive: the session dies, the task does not

Checkpoints cookies, localStorage and the URL, notices the death, launches a new browser and calls your task again with attempt: 2.

  • 5 of 5 twelve-minute tasks completed against a baseline of 0 of 5. Ten runs, fifteen sessions, both arms concurrent and alternating. Every baseline run reached poll 29 or 30 and threw goto: Browser closed.
  • Five relaunches, no failures. Median 4.9 seconds of lost work, worst single death 15.0, at a 30 second checkpoint interval.
  • Replacing a browser takes 2121 ms. The checkpoint is 200 ms and 1640 bytes.

Cookies including the HttpOnly ones, localStorage, the URL and a logged-in session survive a relaunch, measured 3 of 3. The DOM, in-page state, scroll position, half-filled forms, IndexedDB and service workers do not. A checkpoint is not a snapshot of a running program, and the README says so before it says anything else.

handraise: the wall a human has to climb

An agent hits a 2FA code it cannot know. It raises its hand, a QR appears in the terminal, the live session opens on a phone, and after you type the code the agent continues in the same session.

The handoff UI runs on Solari too. handraise creates a sandbox, writes one zero-dependency Node relay into it and exposes it through port preview. Screencast frames go out, taps come back as CDP input events, and the sandbox is destroyed when the handoff ends. It never touches the browser session.

  • 19 of 20 rescued against a baseline of 0 of 20. That is 20 runs of one workflow against a sign-in portal I built, not 20 different real workflows, and the benchmark report says so in its own output.
  • Stuck to live on the phone: 3.53 s at p50 over 30 runs, of which 2.68 is relay cold start.
  • Input round trip 186 ms at p50 over 150 samples, phone to relay and back. The browser is not in that path.

Two adapters

handraise-slack and handraise-telegram put the same interrupt where the person already is: a screenshot with two buttons in the channel, and the click is the answer. No public endpoint to host.

Tech Stack

TypeScriptBunPlaywrightChrome DevTools ProtocolSolariWebSocketBiomeoxlintGitHub Actions
View Live Project

Cookie Settings

We use cookies for analytics and to improve our website. Privacy policy