The complete action list exposed across HTTP, MCP, and Stage doors — strict, safe, and evaluated directly through Chrome drivers without script execution.
picture
Observe the current JPEG. Refresh observation after human hand-back.
pdf
Render the target tab to a PDF artifact in the account's files dir (25 MiB cap); returns files/<name>, bytes, tabId and navigationRevision.
record_start
Start a session video recording — a dedicated pump films the front/visible tab (human takeovers record too) at `fps` (1-10, default 6) for up to `maxSeconds` (5-300, default 120); record_stop encodes it to an mp4 in the files dir. Auto-finalizes at the cap or browser close. Typed errors: record_busy, recording_unsupported.
record_stop
Stop the running session recording and encode it to an mp4 artifact in the account's files dir; returns files/<name>, bytes, frames, seconds, endedBy. Typed errors: recording_inactive, recording_empty, recording_too_large.
record_status
Report whether a session recording is running — {recording, startedAt?, elapsedMs?, fps?, maxSeconds?, frames?, bytes?}.
snapshot
Bounded interactive role snapshot — named elements resolve by accessible name, unnamed ones by role position; name is null for unlabeled controls. Elements covered at their own center by an overlay are omitted, and topmost clickable non-role elements (paragraph/listitem/heading/img) get refs labeled by their visible text. Refs expire in 60 seconds; no input values are returned.
extract
Read one fresh, unique snapshot ref — bounded innerText (4 KiB max), role and name, plus href/src/value when the element exposes them. No selectors, no HTML.
wait
Block until a fresh snapshot ref's element reaches a state — `for` is "visible" (default) or "hidden"; `timeout` ms is bounded to 30000 (default 10000). Mutation-gated but mutates nothing; a navigation mid-wait returns stale_page and a deadline miss returns wait_timeout.
select
Choose one option on a fresh combobox (<select>) ref — exactly one of value, label or index. Mutation action like a ref click; typed errors stale_ref, ambiguous_ref, bad_option.
click_ref
Click one fresh, unique role/name ref from snapshot. A click that opens a tab reports it inline — the response gains `tabsOpened` plus `frontTabId`/`agentTabId`; your target tab never silently changes.
type_ref
Fill a fresh text-input ref with bounded text.
tabs_new
Create a tab; URL must use the public network.
tabs_close
Close the identified tab; keep at least one open.
focus
Select the agent's tab by stable ID, or legacy index.
state
Observe control state. Does not clear the fresh-page observation gate.
capabilities
Discover actual browser capabilities.
request_human_help
Pause agent mutations for human help; optionally pass a snapshot `ref` (and `tabId` if the element is in another tab) so the human sees a highlight on the element that needs attention. The call waits up to `wait` seconds (default 25, max 60) and returns the moment the human hands control back (handedBack: true); on timedOut call again to keep waiting. Then picture/snapshot before continuing. The request binds its originating tab — state().help carries `tabId` and a `stale` flag once that tab navigates on or closes; clearing always stays the human's explicit hand-back.
assets
List staged account files and the pending chooser.
assets_download
Stage a bounded file from a public-network URL (relative hrefs resolve against the current page); this is not an upload confirmation.
assets_attach
Attach a staged asset to the exact pending file chooser. Verify site completion separately.
upload
Satisfy the exact pending file chooser with a file confined to the account's files dir — never a free filesystem path. An attached file is not a submitted form.
download
Download an inert artifact from a public URL; relative hrefs resolve against the current page.
click
Deliver a coordinate click (x,y) or a fresh snapshot ref; not proof of form completion. A click that opens a tab reports it inline — the response gains `tabsOpened` plus `frontTabId`/`agentTabId`; your target tab never silently changes.
click_download
Click a fresh snapshot ref or x,y point and capture the download it must trigger — the artifact lands in the account's files dir. Bounded wait (timeout ms, default 15000); a click with no download returns download_timeout.
down
Move the pointer to x,y and press the primary mouse button — the button stays held across subsequent `move` calls until `up` releases it, so down→move→up performs a real drag (HTML5 and mousedown-driven); `click` can never do this.
up
Move the pointer to x,y and release the held primary mouse button — completes a drag started by `down`.
type
Type bounded text into focused input, or fill an optional fresh textbox ref.
press
Press a fixed editing key.
clipboard_write
Store bounded text (64 KiB max) in this account's virtual clipboard — in-memory, per-account; the real OS clipboard is never touched.
clipboard_paste
Insert the account's virtual clipboard into the focused element via Input.insertText; typed error clipboard_empty when nothing was written. Never touches the OS clipboard.
fill_login
Fill a vault login the owner granted to the agent (a loginId from GET /vault/logins) into the current page's login form. The entry's origin must match the page origin; credentials are delivered to the resolved fields and never appear in the response. Typed errors: vault_disabled, vault_login_unavailable, origin_mismatch, fill_failed.
request_credential_decision
Ask the account owner for a credential decision at a login wall — WITHOUT a control handoff: the question rides state() as pendingDecision and the owner answers it on the stage. The owner may answer `manual` (they log in via the normal take-control flow) or grant a vault entry — a saved one, or a new one they type inline — approved once or always; either vault answer arrives as `existing` carrying `loginId` for you to pass to fill_login. The owner may instead dismiss the question: `dismissed` means they handled it outside the panel (e.g. logged in directly in the browser) or it no longer applies — observe the current page rather than waiting for a handback. While the owner holds browser control the question also answers itself: every agent write is refused then, so a navigation or close of the bound tab can only be the owner driving and the call returns `manual` exactly as if they had clicked it. Under agent control that same movement only marks the live pendingDecision `stale` in state() — a probably-handled hint, never an auto-resolve. Waits up to `wait` seconds (default 25, max 60) and returns resolved + choice the moment the owner answers; on timedOut call again to keep waiting. wait: 0 is fire-and-forget.
forward
Forward in history.
go
Navigate to an http(s) public-network address.