How unsurf works
The problem
Section titled “The problem”Agents often need to use websites that are already authenticated in a real browser. Fresh headless containers do not inherit that state, and copied credentials create a new security problem.
Unsurf starts from a different premise:
the browser is the authThe model
Section titled “The model”authenticated browser ↓agent action ↓video + trace + receipt ↓optional typed API seam1. Browser runtime
Section titled “1. Browser runtime”The local runtime attaches to an already-open Chrome/CDP session. Nearby agents can discover it through unsurf-local-mcp, or application code can use recordAttachedLocal(...) directly.
2. Proof artifacts
Section titled “2. Proof artifacts”Recording wraps a browser run and produces:
- video
- action trace
- result metadata
- viewer links with grant-gated access
observeVideo() inspects those recordings. loop() composes record + observe + refine until a yes/no North Star is met.
3. Reusable seams
Section titled “3. Reusable seams”When a website reveals a stable API beneath the UI, Unsurf can capture it:
scoutobserves traffic and stores a typed seamworkerreplays it directly over HTTPhealrepairs it when the site drifts
That path still matters. It is now one layer in a broader browser-runtime product, not the entire pitch.
Hosted vs local
Section titled “Hosted vs local”| Surface | Best for |
|---|---|
| cmux browser | Canonical local authenticated investigation, snapshots, screenshots, and human takeover |
| Local browser MCP | Driving an attached Chrome/CDP session when that adapter is needed |
| Browser Run provider | Hosted isolated Cloudflare Worker-side BrowserHandle flows and native replay |
record / loop | Producing inspectable proof from video-capable browser work |
| Hosted MCP / REST | Scouting, search, planning, and shared hosted surfaces |
| API replay | Repeated work that can skip the browser after discovery |
Infrastructure
Section titled “Infrastructure”Hosted Unsurf runs on Cloudflare:
- Workers
- Workers AI
- Browser Rendering for hosted scouting
- D1 + R2 for stored specs, runs, and trace bundles
Browser providers are swappable behind Unsurf’s browser abstraction. The canonical local investigation provider is now cmux’s in-app browser. The agent-browser adapter remains available for attached Chrome/CDP and playable local video; it is not required for the normal investigation workflow.
Why this shape
Section titled “Why this shape”- real browser auth beats invented delegation layers
- video makes browser work reviewable
- loops turn visual evidence into a stop condition
- typed API seams reduce repeat browser work when the web app gives you one