remote-browser
Cloud browser automation for sandboxed agents without local GUI access. Supports navigation, page inspection, interactions, JavaScript execution, and cookie management via 30+ CLI commands Includes cloud session management for running autonomous browser agents in parallel, with task monitoring and structured output options Provides local dev server tunneling via Cloudflare to expose ports from the remote machine to the cloud browser Maintains session state across commands, enabling...
npx skills add https://github.com/browser-use/browser-use --skill remote-browserRemote Browser
Use this skill when an agent runs on a machine without a usable local Chrome and needs an isolated browser. The current Browser Use CLI runs Python from stdin. Do not use the removed open, state, click, input, tab, cloud connect, or --connect commands.
Check the CLI
browser-use --doctor
browser-use skill show
If setup fails, follow the current Browser Use skill.
Start an isolated browser
Authenticate once:
browser-use auth login
Pick a short unique name. r7k2 below is only an example.
browser-use <<'PY'
start_remote_daemon("r7k2")
PY
Use the same name for every command in this browser:
BU_NAME=r7k2 browser-use <<'PY'
new_tab("https://example.com")
wait_for_load()
print(page_info())
PY
Each remote daemon is a separate Browser Use Cloud browser. Use a different name for each parallel task. Remote browsers can bill until they stop or time out.
Inspect and interact
Helpers are pre-imported. Keep multi-step work in one heredoc when practical.
BU_NAME=r7k2 browser-use <<'PY'
print(page_info())
print(js("document.title"))
fill_input('input[name="q"]', "browser automation")
press_key("Enter")
wait_for_load()
print(page_info())
PY
Useful helpers:
- Navigate:
new_tab(url),goto_url(url),wait_for_load() - Inspect:
page_info(),js(code),cdp(method, ...) - Interact:
click_at_xy(x, y),type_text(text),fill_input(selector, text),press_key(key),scroll(x, y) - Tabs:
list_tabs(),switch_tab(target),close_tab(target) - Files and proof:
capture_screenshot(),wait_for_element(selector)
Prefer the accessibility tree for element discovery:
nodes = cdp("Accessibility.getFullAXTree")["nodes"]
Use a targeted js(...) query when the accessibility tree lacks the element. Verify each action with page_info(), a focused DOM check, or a screenshot.
Stop the browser
When the work is done, stop the exact named browser:
browser-use <<'PY'
stop_remote_daemon("r7k2")
PY
Do not leave an unused remote browser running.