Skip to main content
The CLI is a thin client over the same control plane the agent surface uses, with 20 commands. It installs from npm as phonebase, and the same program runs from a checkout: corepack pnpm cli <command> during development, or the phonebase entry point after corepack pnpm build. See installation for the details. Bad input never crashes the CLI: it prints the usage block and exits 2, and that includes a flag used on a command that does not read it. phonebase --help lists every command; phonebase <command> --help prints that one command’s arguments, flags and an example. Both come from the same table this page is generated from, so the terminal and this page cannot disagree.

Commands

Global options

These apply wherever they make sense rather than to one command. Authentication: run phonebase login once and the CLI stores an API key for that --server in the system keychain. PHONEBASE_API_KEY overrides the stored key, which is what CI and scripts use; PHONEBASE_DEV_TOKEN is sent only to a control plane on your own machine (a loopback --server).

phonebase apps

Inspect phone app inventory, refresh it, and recover an original request. Install approved apps through the managed app store.
phonebase apps library capabilities
phonebase apps library check
phonebase apps library refresh
phonebase apps library refresh-status
phonebase apps library refresh-results
phonebase apps library request

phonebase login

Log in from this terminal: approve the request in the console and the CLI stores a new API key for your organization in the system keychain. Run it again whenever you need a new key.

phonebase whoami

Show the organization, key id, scopes and expiry of the key this CLI sends, and where that key came from.

phonebase logout

Revoke the key phonebase login stored and remove it from this machine. A key in PHONEBASE_API_KEY is left alone. Keys can also be deleted on the console’s Keys page.
Takes no arguments or options.

phonebase devices

List every device your org can see, with its status and capabilities.

phonebase acquire

Claim exclusive use of a device and print the lease it returns.

phonebase renew

Push a lease’s expiry back before it runs out, keeping the same lease id. A lease that expires mid-session strands whatever you were doing, so renew it rather than acquiring again.

phonebase release

Give a device back by the lease id acquire returned.

phonebase tap

Tap one point on a device.

phonebase swipe

Drag from one point to another on a device: scroll a list, pull a sheet down, page sideways.

phonebase long-press

Press and hold one point on a device, for the context menus and drag handles a tap never opens.

phonebase type

Type text into whatever input the device has focused. Focus it first: this types, it does not aim.

phonebase key

Press one of the phone’s own keys on a device: home, back, enter, delete, app_switch, power, volume_up, volume_down.

phonebase open

Launch an app on a device by its OS-level id, instead of tapping through a home screen to find it.

phonebase screenshot

Capture a device’s screen and write the image to a file.

phonebase ui

Print the device’s UI tree, the text-and-elements view a screenshot cannot give you. The tree goes to stdout and its metadata to stderr, so redirecting the output leaves a clean file.

phonebase doctor

Check this machine: node version, device rows, the credential in use and control-plane reachability.
Takes no arguments or options.

phonebase rows

Read and edit the device rows file a control plane running on this machine serves (a local rig, not the hosted fleet).
phonebase rows list
phonebase rows add
phonebase rows remove

phonebase mcp

Serve the MCP tool surface on stdio from this process.

phonebase run

Start an agent run on a device for one natural-language goal. phonebase drives it for you; with —executor self_hosted nothing happens on the device until your own worker connects to the run’s VisualRemote base url.