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
| Command | What it does |
|---|---|
bmc login | Sign 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 status | Show 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.
| Command | What it does |
|---|---|
bmc setup | Interactively add / edit / rename / remove named devices (map each to a Chrome binary; auto-detects installs). |
bmc | With 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 autostart | Install 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 --foreground | Run 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 stop | With 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 ps | List named devices + which are running (--json). |
bmc update | Install the latest bmc + refresh this machine's devices' version shown in the dashboard. |
bmc logout | Sign out (clears the saved session; device files stay). |
bmc help | Show the help (also shown when no command is given). |
Device class flags (create / edit, bmc 85)
| Flag | What it does |
|---|---|
--capture on|off | off = 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|off | on = 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)
| Flag | What 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|off | One-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):
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-cdpEnvironment variables
All optional; sensible defaults are baked in.
| Variable | Meaning (default) |
|---|---|
CDP_HOST / CDP_PORT | Chrome debug endpoint default (127.0.0.1 / 9222). |
CDP_CHROME_BIN | Chrome/Chromium binary path (same as --chrome). |
CDP_CLIENT | Client tag for captured requests (same as --client). |
CDP_USER_DATA_DIR | Chrome profile dir (default: the directory you run in). |
CDP_AUTH_URL | Dashboard auth host (https://dash.busymate.dev). |
SUPABASE_URL / SUPABASE_PUBLISHABLE_KEY | Backend URL + publishable key (defaults baked in; SUPABASE_URL defaults to https://api.busymate.net). |
CDP_USER_JWT | Headless sign-in (CI): a user access token. |
CDP_PAIR_EMAIL + CDP_PAIR_PASSWORD | Headless sign-in (CI): email + password for a full session. |
Note:
bmc createalso accepts--from <existing>,--chrome <path>,--browser <id>,--capture on|off,--autostart on|offand--start;bmc autostartaccepts--takeover,--lingerandoff;bmc list/bmc lsaccept--all(-a) and--json;bmc psaccepts--json;bmc removeaccepts--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.