Command reference

Every bmc command and flag.

Every bmc command and flag, transcribed from the CLI's built-in help. Run bmc help to see the same list with your installed version.

Commands

CommandWhat it does
bmc loginSign in (opens the browser). One-time per machine.
bmc start [name]Capture in this directory. First run here asks for a device name (default: folder name) or pass one; pass a different name later to rename. Reuses ./.bmc.json after.
bmc [name]Same as bmc start [name].
bmc attach [name]Attach to an already-running Chrome on the debug port — or wait for one to appear — then capture. Never launches Chrome itself; use when you start Chrome yourself.
bmc list (bmc ls)Devices configured on this machine — name, folder, CDP host:port, Chrome binary. --all for every device you own (+ live status/version); --json for scripts.
bmc statusShow sign-in + this directory's device + Chrome.
bmc remove [name]Remove this directory's device, or a named daemon device, + all its captures.

Named devices

A background daemon manages many Chromes by name.

CommandWhat it does
bmc setupInteractively add / edit / rename / remove named devices (map each to a Chrome binary; auto-detects installs).
bmcWith no arguments: bring the daemon up in the background (releases the terminal) and list this machine's devices. Run it again any time — it never starts a second daemon.
bmc autostartInstall the supervisor (launchd / systemd KeepAlive): the daemon starts at login and is relaunched on death. --takeover adopts an already-running daemon (browsers kept); --linger keeps it running after logout where supported; off removes it.
bmc daemon --foregroundRun the supervisor loop in this terminal — what the autostart unit runs.
bmc create <name>Provision a new named device (auto port + profile), control-only unless you pass --capture on. --from <existing> clones a device's binary/flags onto a fresh port + profile; --chrome <path> sets the binary; --browser <id> picks a browser profile; --capture on|off and --autostart on|off set the device class flags (below); --start starts it right away; -- <chrome flags…> passes flags to Chrome.
bmc edit <name>Re-configure a named device: --name <new>, --browser <id>, --chrome <path>, --capture on|off, --autostart on|off, -- <chrome flags…>. A running device picks up a capture / autostart flip live.
bmc start <name>Start a named device via the daemon (launches its Chrome). --headless on|off overrides this one launch only (below).
bmc stop <name>Stop a running named device.
bmc stopWith no name: stop the daemon (and every running device).
bmc front <name>Raise a running device's Chrome window and bring its tab to front, titled [<name>] … so it's identifiable among every other bmc window on screen. See Window mode.
bmc minimize <name>Send a running device's Chrome window off-screen — the reverse of bmc front.
bmc psList named devices + which are running (--json).
bmc updateInstall the latest bmc + refresh this machine's devices' version shown in the dashboard.
bmc logoutSign out (clears the saved session; device files stay).
bmc helpShow the help (also shown when no command is given).

Device class flags (create / edit, bmc 85)

FlagWhat it does
--capture on|offoff = a control-only device: Chrome launches and every remote-control command keeps working, but nothing is captured or ingested. bmc create defaults to off since bmc 87 — capture is opt-in, so pass --capture on for a device whose job is to capture. Existing devices are untouched. Same switch as the dashboard's Capture off (control-only device) toggle and the MCP tool set_device_capture_enabled. bmc ls marks it ctl-only. See Control-only devices.
--autostart on|offon = the supervised daemon starts the device on boot and relaunches it with backoff when it exits; off never stops a running device. Same switch as the dashboard's Autostart toggle and the MCP tool set_device_autostart. bmc ls marks it auto. See Autostart per device.

Options (for start)

FlagWhat it does
--host <h>Chrome host (default 127.0.0.1, or CDP_HOST).
--port <p>Chrome remote-debugging port (default 9222, or CDP_PORT). Without an explicit port, bmc auto-claims the next free port so multiple bmc instances each get their own Chrome.
--chrome <path>Chrome/Chromium binary to launch (or CDP_CHROME_BIN; auto-detected per-OS otherwise).
--client <name>Tag captured requests with this client label (or CDP_CLIENT). Internal marker shown as a dashboard badge; never sent upstream. Persisted; --client "" clears it.
--headless on|offOne-shot override for this launch only — never written to the device's row or its local mirror, so the next natural start reverts to the device's normal setting. Same on/off spelling as --capture/--autostart. E.g. bmc start cu-claude6 --headless off to sign an expired usage-probe account back in visibly, then let it revert to headless on the next restart. See Headless: one launch vs. persistent.
-- <chrome flags…>Everything after a bare -- is passed verbatim to Chrome, e.g. bmc start "Dev" -- --lang=en-US --incognito.

Chrome launch

If no Chrome is already listening on the debug port, bmc launches one itself so it can apply your device's external proxy + any -- flags. Its profile defaults to the directory you run bmc in (so it's local + persists per project; override with CDP_USER_DATA_DIR or -- --user-data-dir=…). If the device has an external proxy configured in the dashboard, Chrome starts with --proxy-server (auth proxies prompt once in Chrome); changing it in the dashboard auto-restarts Chrome. To attach to your own Chrome instead, launch it first with remote debugging (proxy/flags then ignored):

bash
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-cdp

Environment variables

All optional; sensible defaults are baked in.

VariableMeaning (default)
CDP_HOST / CDP_PORTChrome debug endpoint default (127.0.0.1 / 9222).
CDP_CHROME_BINChrome/Chromium binary path (same as --chrome).
CDP_CLIENTClient tag for captured requests (same as --client).
CDP_USER_DATA_DIRChrome profile dir (default: the directory you run in).
CDP_AUTH_URLDashboard auth host (https://dash.busymate.dev).
SUPABASE_URL / SUPABASE_PUBLISHABLE_KEYBackend URL + publishable key (defaults baked in; SUPABASE_URL defaults to https://api.busymate.net).
CDP_USER_JWTHeadless sign-in (CI): a user access token.
CDP_PAIR_EMAIL + CDP_PAIR_PASSWORDHeadless sign-in (CI): email + password for a full session.

Note: bmc create also accepts --from <existing>, --chrome <path>, --browser <id>, --capture on|off, --autostart on|off and --start; bmc autostart accepts --takeover, --linger and off; bmc list/bmc ls accept --all (-a) and --json; bmc ps accepts --json; bmc remove accepts --yes (-y); bmc start/bmc <name> also take --headless on|off (one-shot, above). bmc front <name> / bmc minimize <name> need only a running device name. See Update & remove and Named devices & the daemon for details.

Ask your mate