Drive the whole desktop.
CDP drives the page. Real automation also needs the things outside the DOM — native file dialogs, <select> popups, browser chrome, other windows. Every headful session gets its own X display, so input can travel through the operating system, not just the render surface.
The page, or the whole machine.
Both layers ship in the same session. Reach for CDP for speed inside the DOM; flip useOs on when the target lives outside it.
Page control (CDP)
Input.dispatchMouseEvent reaches the page's render surface only. It never moves the real cursor, and it can't touch a native dropdown, a file picker, or the address bar. Fast, and enough for most in-DOM work.
OS control (useOs)
Pass useOs: true and input routes through xdotool on the session's Xvfb — real display-server events that reach native dialogs, <select> popups, browser chrome, and any other window in the VM.
The full OS-control surface.
Anchor-compatible OS-control routes under /v1/sessions/{sessionId}/…. Each returns the exact wire shape — bare {status}, with the clipboard and copy quirks preserved.
| Method | Path | What it does |
|---|---|---|
| POST | /mouse/down · /mouse/up | Separate press and release — for press-and-hold and custom gestures. |
| POST | /drag-and-drop | {startX,startY,endX,endY} — a real drag gesture across the surface. |
| POST | /keyboard/shortcut | {keys[],holdTime} — key combos (Ctrl+C) with real modifiers. |
| GET/POST | /clipboard | Read and write the clipboard; GET returns {data:{text}}. |
| POST | /copy · /paste | Copy the selection (bare {text} quirk preserved) and paste text in. |
| POST | /uploads | Multipart file into the session; optionally attached to a file input. |
| POST | /scroll | {deltaY,steps,useOs} — scroll amounts (not pixels), optional smoothing. |
Reach beyond the page.
A useOs action drives the operating system — the pointer actually moves on the session's display, verifiable and able to click things the DOM can't see. Headful sessions get their own Xvfb display and x11vnc server automatically; headless sessions keep the fast, pure-CDP path.
POST /v1/sessions/<id>/scroll
{ "x": 321, "y": 222, "deltaY": 1, "useOs": true }
# the OS pointer really moved — verifiable on the display:
$ xdotool getmouselocation
X=321 Y=222 POST /v1/sessions/<id>/keyboard/shortcut
{ "keys": ["ctrl", "c"], "holdTime": 40 }
# a real Ctrl+C combo through xdotool — copies the selection,
# then read it back with GET /clipboard -> { "data": { "text": … } } Beyond the Anchor contract.
These aren't in Anchor's REST spec — they're MCP-only there. We expose them as clearly-labeled REST extensions and as MCP tools, so any agent gets them.
hover
Move the pointer over an element by selector or coordinates.
select_option
Set a <select> value by option value or visible label.
wait_for
Block until a selector appears or text is present on the page.
tab list / new / select / close
Full multi-tab management over the browser target.
noVNC — a human at the wheel.
“Open the live-desktop URL and you get the whole browser desktop — chrome and all — as a real, bidirectional framebuffer a person can drive live.”
x11vnc server on its own X display, provisioned automatically.Give your agents real OS control
Open-source, self-hostable, and Anchor-compatible. Drive the page or the whole desktop.