Remote control

Drive a captured Chrome remotely from the dashboard, MCP, or BusyBro — navigate, evaluate, screenshot.

Drive a captured Chrome remotely — navigate, evaluate JavaScript, take screenshots, snapshot the page — from the dashboard, MCP, or BusyBro.

What it does

A captured Chrome isn't just a traffic source. With remote control on, you can send Chrome DevTools Protocol commands to it from anywhere Busymate runs — tell it to navigate to a URL, run a script, capture a screenshot, or snapshot the DOM — and get the result back. The browser stays right where it is on your machine; the commands ride a Realtime channel.

This powers the browser_* tools in MCP and the browser-driving BusyBro capabilities, as well as remote-control actions in the dashboard.

It's off by default

Remote control is a per-device opt-in. Until you enable it, bmc refuses every incoming command before it ever touches Chrome — so a device just streaming traffic can't be driven by anyone.

To turn it on, open Devices → your device, and enable Browser Control (the per-device cdpControlEnabled setting). The toggle pushes live over Realtime — no need to restart bmc. Only the device's owner (or an admin) can flip it, and the captured Chrome only accepts commands while it's on.

Heads up: Enabling Browser Control lets the dashboard, MCP, and BusyBro run arbitrary CDP commands against that Chrome — navigation, script evaluation, screenshots. Leave it off for devices you only want to observe.

How it flows

Dashboard / MCP / BusyBro  ──cdp-command──▶  bmc  ──▶  Chrome
                           ◀──cdp-result──   bmc  ◀──

Commands arrive on the device's private Realtime channel as cdp-command messages and the results come back as cdp-result, correlated by id. Each command is gated by the opt-in and by ownership before it runs.

What you can do

Commands are Chrome DevTools Protocol methods, forwarded verbatim. The common ones the higher-level tools use:

  • Navigate — open a URL in the captured page.
  • Evaluate — run JavaScript in the page and read the result.
  • Screenshot — capture the rendered page as a PNG.
  • Snapshot — capture the page's structure (DOM / accessibility tree).

There's also a small connector-side helper namespace for discovering what to drive:

  • bmc.targets — list the attached page targets.
  • bmc.activePage — resolve the page to drive.

Large results (a screenshot, a PDF) are too big for a single Realtime frame, so bmc uploads them to storage and returns a short-lived signed URL instead of giant inline data — so a screenshot comes back as a renderable link in the dashboard, in MCP, or in a Telegram reply from BusyBro.

Using it

You don't send raw commands by hand — you use the surfaces built on top:

  • Dashboard — remote-control actions on a device under Devices.
  • MCP — the browser_* tools at MCP tools.
  • BusyBro — ask it to navigate or screenshot a device; see BusyBro capabilities.

In every case, the same gate applies: the device must have Browser Control enabled, and you must own it (or be an admin).

Next