Browser
remoteclaw browser
Manage RemoteClaw’s browser control surface and run browser actions (lifecycle, profiles, tabs, snapshots, screenshots, navigation, input, state emulation, and debugging).
Related:
- Browser tool + API: Browser tool
Common flags
--url <gatewayWsUrl>: Gateway WebSocket URL (defaults to config).--token <token>: Gateway token (if required).--timeout <ms>: request timeout (ms).--expect-final: wait for a final Gateway response.--browser-profile <name>: choose a browser profile (default from config).--json: machine-readable output (where supported).
Quick start (local)
remoteclaw browser profilesremoteclaw browser --browser-profile remoteclaw startremoteclaw browser --browser-profile remoteclaw open https://example.comremoteclaw browser --browser-profile remoteclaw snapshotAgents can run the same readiness check with browser({ action: "doctor" }).
Quick troubleshooting
If start fails with not reachable after start, troubleshoot CDP readiness first. If start and tabs succeed but open or navigate fails, the browser control plane is healthy and the failure is usually navigation SSRF policy.
Minimal sequence:
remoteclaw browser --browser-profile remoteclaw doctorremoteclaw browser --browser-profile remoteclaw startremoteclaw browser --browser-profile remoteclaw tabsremoteclaw browser --browser-profile remoteclaw open https://example.comDetailed guidance: Browser troubleshooting
Lifecycle
remoteclaw browser statusremoteclaw browser doctorremoteclaw browser doctor --deepremoteclaw browser startremoteclaw browser start --headlessremoteclaw browser stopremoteclaw browser --browser-profile remoteclaw reset-profileNotes:
doctor --deepadds a live snapshot probe. It is useful when basic CDP readiness is green but you want proof that the current tab can be inspected.- For
attachOnlyand remote CDP profiles,remoteclaw browser stopcloses the active control session and clears temporary emulation overrides even when RemoteClaw did not launch the browser process itself. - For local managed profiles,
remoteclaw browser stopstops the spawned browser process. remoteclaw browser start --headlessapplies only to that start request and only when RemoteClaw launches a local managed browser. It does not rewritebrowser.headlessor profile config, and it is a no-op for an already-running browser.- On Linux hosts without
DISPLAYorWAYLAND_DISPLAY, local managed profiles run headless automatically unlessREMOTECLAW_BROWSER_HEADLESS=0,browser.headless=false, orbrowser.profiles.<name>.headless=falseexplicitly requests a visible browser.
If the command is missing
If remoteclaw browser is an unknown command, check plugins.allow in
~/.remoteclaw/remoteclaw.json.
When plugins.allow is present, list the bundled browser plugin explicitly
unless the config already has a root browser block:
{ plugins: { allow: ["telegram", "browser"], },}An explicit root browser block, for example browser.enabled=true or
browser.profiles.<name>, also activates the bundled browser plugin under a
restrictive plugin allowlist.
Related: Browser tool
Profiles
Profiles are named browser routing configs. In practice:
remoteclaw: launches or attaches to a dedicated RemoteClaw-managed Chrome instance (isolated user data dir).user: controls your existing signed-in Chrome session via Chrome DevTools MCP.- custom CDP profiles: point at a local or remote CDP endpoint.
remoteclaw browser profilesremoteclaw browser create-profile --name work --color "#FF5A36"remoteclaw browser create-profile --name chrome-live --driver existing-sessionremoteclaw browser create-profile --name remote --cdp-url https://browser-host.example.comremoteclaw browser delete-profile --name workUse a specific profile:
remoteclaw browser --browser-profile work tabsTabs
remoteclaw browser tabsremoteclaw browser tab new --label docsremoteclaw browser tab label t1 docsremoteclaw browser tab select 2remoteclaw browser tab close 2remoteclaw browser open https://docs.remoteclaw.org --label docsremoteclaw browser focus docsremoteclaw browser close t1tabs returns suggestedTargetId first, then the stable tabId such as t1,
the optional label, and the raw targetId. Agents should pass
suggestedTargetId back into focus, close, snapshots, and actions. You can
assign a label with open --label, tab new --label, or tab label; labels,
tab ids, raw target ids, and unique target-id prefixes are all accepted.
When Chromium replaces the underlying raw target during a navigation or form
submit, RemoteClaw keeps the stable tabId/label attached to the replacement tab
when it can prove the match. Raw target ids remain volatile; prefer
suggestedTargetId.
Snapshot / screenshot / actions
Snapshot:
remoteclaw browser snapshotremoteclaw browser snapshot --urlsScreenshot:
remoteclaw browser screenshotremoteclaw browser screenshot --full-pageremoteclaw browser screenshot --ref e12remoteclaw browser screenshot --labelsNotes:
--full-pageis for page captures only; it cannot be combined with--refor--element.existing-session/userprofiles support page screenshots and--refscreenshots from snapshot output, but not CSS--elementscreenshots.--labelsoverlays current snapshot refs on the screenshot.snapshot --urlsappends discovered link destinations to AI snapshots so agents can choose direct navigation targets instead of guessing from link text alone.
Navigate/click/type (ref-based UI automation):
remoteclaw browser navigate https://example.comremoteclaw browser click <ref>remoteclaw browser click-coords 120 340remoteclaw browser type <ref> "hello"remoteclaw browser press Enterremoteclaw browser hover <ref>remoteclaw browser scrollintoview <ref>remoteclaw browser drag <startRef> <endRef>remoteclaw browser select <ref> OptionA OptionBremoteclaw browser fill --fields '[{"ref":"1","value":"Ada"}]'remoteclaw browser wait --text "Done"remoteclaw browser evaluate --fn '(el) => el.textContent' --ref <ref>remoteclaw browser evaluate --timeout-ms 30000 --fn 'async () => { await window.ready; return true; }'Use evaluate --timeout-ms <ms> when the page-side function may need longer
than the default evaluate timeout.
Action responses return the current raw targetId after action-triggered page
replacement when RemoteClaw can prove the replacement tab. Scripts should still
store and pass suggestedTargetId/labels for long-lived workflows.
File + dialog helpers:
remoteclaw browser upload /tmp/remoteclaw/uploads/file.pdf --ref <ref>remoteclaw browser waitfordownloadremoteclaw browser download <ref> report.pdfremoteclaw browser dialog --acceptremoteclaw browser dialog --dismiss --dialog-id d1Managed Chrome profiles save ordinary click-triggered downloads into the RemoteClaw
downloads directory (/tmp/remoteclaw/downloads by default, or the configured temp
root). Use waitfordownload or download when the agent needs to wait for a
specific file and return its path; those explicit waiters own the next download.
When an action opens a modal dialog, the action response returns
blockedByDialog with browserState.dialogs.pending; pass --dialog-id to
answer it directly. Dialogs handled outside RemoteClaw appear under
browserState.dialogs.recent.
State and storage
Viewport + emulation:
remoteclaw browser resize 1280 720remoteclaw browser set viewport 1280 720remoteclaw browser set offline onremoteclaw browser set media darkremoteclaw browser set timezone Europe/Londonremoteclaw browser set locale en-GBremoteclaw browser set geo 51.5074 -0.1278 --accuracy 25remoteclaw browser set device "iPhone 14"remoteclaw browser set headers '{"x-test":"1"}'remoteclaw browser set credentials myuser mypassCookies + storage:
remoteclaw browser cookiesremoteclaw browser cookies set session abc123 --url https://example.comremoteclaw browser cookies clearremoteclaw browser storage local getremoteclaw browser storage local set token abc123remoteclaw browser storage session clearDebugging
remoteclaw browser console --level errorremoteclaw browser pdfremoteclaw browser responsebody "**/api"remoteclaw browser highlight <ref>remoteclaw browser errors --clearremoteclaw browser requests --filter apiremoteclaw browser trace startremoteclaw browser trace stop --out trace.zipExisting Chrome via MCP
Use the built-in user profile, or create your own existing-session profile:
remoteclaw browser --browser-profile user tabsremoteclaw browser create-profile --name chrome-live --driver existing-sessionremoteclaw browser create-profile --name brave-live --driver existing-session --user-data-dir "~/Library/Application Support/BraveSoftware/Brave-Browser"remoteclaw browser --browser-profile chrome-live tabsThis path is host-only. For Docker, headless servers, Browserless, or other remote setups, use a CDP profile instead.
Current existing-session limits:
- snapshot-driven actions use refs, not CSS selectors
browser.actionTimeoutMsdefaults supportedactrequests to 60000 ms when callers omittimeoutMs; per-calltimeoutMsstill wins.clickis left-click onlytypedoes not supportslowly=truepressdoes not supportdelayMshover,scrollintoview,drag,select,fill, andevaluatereject per-call timeout overridesselectsupports one value onlywait --load networkidleis not supported- file uploads require
--ref/--input-ref, do not support CSS--element, and currently support one file at a time - dialog hooks do not support
--timeout - screenshots support page captures and
--ref, but not CSS--element responsebody, download interception, PDF export, and batch actions still require a managed browser or raw CDP profile
Remote browser control (node host proxy)
If the Gateway runs on a different machine than the browser, run a node host on the machine that has Chrome/Brave/Edge/Chromium. The Gateway will proxy browser actions to that node (no separate browser control server required).
Use gateway.nodes.browser.mode to control auto-routing and gateway.nodes.browser.node to pin a specific node if multiple are connected.
Security + remote setup: Browser tool, Remote access, Tailscale, Security