Operator CLI (i99op)
The support operator's console — connect to a car over the Remote Help relay and drive it from your terminal.
i99op is a standalone CLI a support operator runs to reach any
Android car head unit through Remote Help / DashDoctor and drive it
from the terminal — no web console, no hand-rolled adb.
Car-agnostic. The relay + adb tunnel work with any Android head unit, not just BYD / i99dash — repairing the i99dash app on a BYD is the flagship case, but the shell, app-install, screen-mirror, file, and recovery flows run on any Android car.
Different audience from the rest of these docs. The i99dash SDK is for
mini-app developers; i99op is for support operators helping an
owner recover or troubleshoot their car. Both are part of the i99dash
toolchain, so they live side by side here.
How a session works
The owner starts a session on the car and reads you one short code (or
a handle + 6-digit OTP). You redeem it; the backend binds the session and
hands the CLI a signed, single-use relay ticket. From there i99op
brings up a peer-to-peer link to the car and splices it to a local adb
port:
operator's machine
i99op ──HTTP──▶ backend (redeem code / OTP → signed relay ticket)
i99op ──WSS───▶ relay ──▶ car control plane: signalling, auth,
│ kill-switch + recovery text ops
└─ P2P (WebRTC DataChannel) ─▶ car raw adb byte stream
→ `adb shell` / `scrcpy`The adb byte stream is peer-to-peer: adb and scrcpy ride a direct
WebRTC DataChannel between your machine and the car, spliced to a local
127.0.0.1 port. The relay only carries the control plane — signalling,
auth, the kill-switch, and the text-channel recovery ops. On the same LAN
the peers connect directly; across networks they use STUN/TURN to traverse
NAT. The adb stream never transits the relay.
The backend stays authoritative the whole time: the master flag, the operator allowlist, and the handle-and-role-bound ticket all gate what the session permits. Nothing in the CLI can widen the granted capability — it only drives what the session already allows.
What you can do
- Connect + shell — redeem a code and drop straight into
adb shellon the car (i99op connect <code>). - Reconnect — if a session drops while the case is still open, resume it from the GUI's Tickets tab without a new code — the open case is the owner's standing consent.
- Mirror the screen —
scrcpyover the same P2P channel, with tunable streaming quality for the car's mobile uplink. - Recover — run the DashDoctor
plan → reinstallflow to repair or replace the car app over the live tunnel, without dropping the session. - Record — capture a session (
--record) for evidence; the upload bills your operator wallet, and the owner must approve recording on the car first (two-party consent). - Wallet — each support ticket is a flat charge; check your balance and top up in the web console.