Skip to main content
The cyberwave CLI sets up edge devices and manages twins, workflows, and workers from a terminal. You use it mostly on the machine that is wired to your robot or camera: a laptop, a Raspberry Pi, or a Jetson. The CLI is not the Python SDK. The SDK (pip install cyberwave) is what your scripts import. The two authenticate differently, as Log in explains.

Install

On an edge device, use the install script. cyberwave pair then sets the device up as an edge node.
Check the install:
Every command prints its own help with --help, for example cyberwave edge install --help.

Log in

login asks for your email and password. If your account has more than one workspace, it also asks which one to use. The CLI then saves an API token and the selected workspace to credentials.json in its config directory (~/.cyberwave by default; run cyberwave config-dir to see it). Every later command acts in that workspace. To switch workspaces, run cyberwave login again. Already have a token from the dashboard? Pass it directly: cyberwave login --token <token> or cyberwave configure --token <token>. See API tokens to create one.
The Python SDK does not read your CLI login. Cyberwave() looks for an api_key= argument or the CYBERWAVE_API_KEY environment variable, and raises No API key found! otherwise. Export the key in the shell that runs your script:
It works the other way round too. Most CLI commands use only the saved login. The one exception is cyberwave edge install (and its alias cyberwave pair), which falls back to CYBERWAVE_API_KEY when no login is saved.

Quick start

The four commands the CLI’s own help leads with:

Pair a device

cyberwave pair is an alias for cyberwave edge install. Both commands take the same options and do the same thing. They log in if needed, let you pick the environment and the twins wired to this device, install cyberwave-edge-core, and register it as a boot service.
Run it with sudo. It installs a systemd service, and exits with This command requires root privileges without root. On Debian, Ubuntu, and Raspberry Pi OS it installs Docker with apt-get if Docker is missing.
On Linux, cyberwave edge start, stop, and restart also need sudo once the systemd service is installed. First time on a board? See Raspberry Pi setup or Jetson Orin Nano setup.

Headless and scripted installs

To provision a device with no prompts, pass the token, the environment, and -y:
  • -e, --environment takes the environment’s UUID or its full slug (workspace/envs/name). The name alone is not enough. The environment must already exist in the token’s workspace. -e selects an environment and never creates one.
  • --token always wins over a saved login and over CYBERWAVE_API_KEY. A rejected token stops the install. Tokens passed this way show up in shell history and in ps, so on shared machines prefer exporting CYBERWAVE_API_KEY.
  • -y skips every prompt. Without -e, it attaches to the first environment the API returns. Twin selection still happens under -y: it picks the first twin in the environment that has a Docker driver. A fully scripted install is only reliable in an environment with exactly one such twin.
cyberwave pair

cyberwave twin

Create, pair, and inspect digital twins.

Create and pair in one step

ASSET is a registry ID (unitree/go2, cyberwave/standard-cam), a short alias (go2, camera), a local JSON file, or a URL. Without -e, the twin goes into a Quickstart Environment in your workspace. The CLI reuses that environment or creates it, just like cw.twin() does in the SDK. --pair binds this device to the new twin and writes a .env file to --target-dir (the current directory by default). Start streaming with cyberwave edge start. twin create and twin pair also accept any field from the asset’s edge configuration schema as --field-name value. Those fields depend on the asset, so they are not listed in the table below. cyberwave twin create ASSET

cyberwave edge

Manage the Edge Core service on this device: lifecycle, logs, cameras, drivers, and workflow sync. See Edge Core for what the service does.

Logs

On Linux, edge logs reads the cyberwave-edge-core unit from journalctl. If you see no output, run it with sudo. On macOS, it reads the LaunchAgent’s logs. Worker containers have their own logs: cyberwave worker logs.

Driver containers

edge driver start restarts an existing container with a --restart=on-failure Docker policy. edge driver stop removes that policy first, so the container stays stopped. To launch a new driver, let Edge Core do it by pairing the twin.

cyberwave environment

cyberwave workflow

Manage workflows from the terminal. Commands that take a UUID show an arrow-key picker when you leave it out. Every cyberwave workflow subcommand except templates also accepts -u, --base-url: Backend API URL (e.g. http://192.168.10.101:8000). Defaults to CYBERWAVE_BASE_URL or https://api.cyberwave.com. If an edge workflow never reaches the device, run cyberwave workflow compile <uuid> to see whether the backend could compile it, then cyberwave workflow sync <uuid>.

cyberwave worker

Manage the Python edge workers on this device. Worker files live in the workers/ folder of the config directory. Files named wf_*.py are generated from workflows and get replaced on the next sync, so copy one to a new name before you edit it. If a worker reports frames: 0, start with cyberwave worker doctor. It checks file permissions, the driver containers, and environment variables, then listens on the data bus to compare live traffic with your worker’s hooks.

cyberwave model

Bind catalog models to a camera for local inference without building a workflow. For most setups, a workflow’s Call Model node is the simpler path. Every cyberwave model subcommand except list also accepts --env-file: Path to .env file (default .env).

cyberwave plugin

cyberwave compute

Run a cloud node on a GPU machine. The commands mirror cyberwave edge, and compute install has the same sudo rule: required on Linux, not allowed on macOS.

Cameras, projects, and manifests

cyberwave so101 clones the SO-101 starter template into ./so101-project (or the path you give) and runs its setup script. It needs git. To pair a real arm, follow Get started with the SO-101 arm. See cyberwave.yml manifest for the schema that manifest validate checks.

Shell completion

Tab completion is available for bash and zsh. Install it in one step:
This reads your shell from $SHELL, adds a completion block to ~/.bashrc or ~/.zshrc, and tells you which file to source. Running it twice is safe. It updates the existing block instead of adding a second one.
generate prints the completion script to stdout, so you can store it where you like:
  • Shell not detected: pass --shell bash or --shell zsh.
  • Permission denied on the rc file: pass a writable --rc-file path, then source that file.
  • Other shells: only bash and zsh are supported.

Configuration

The CLI and Edge Core share one config directory: $CYBERWAVE_EDGE_CONFIG_DIR if set, otherwise ~/.cyberwave. Installs that used /etc/cyberwave are migrated on first run. cyberwave workflow sync and other commands that publish over MQTT refuse to run when the saved CYBERWAVE_ENVIRONMENT doesn’t match the broker host. To fix it, run cyberwave login again against the right backend.

Next steps

Python SDK

Script twins, cameras, and models from Python.

Edge Core

What runs on a paired device, and how drivers start.

Get started with the SO-101 arm

Use cyberwave pair on a real arm, end to end.

Tutorials

Builds that use the CLI, grouped by the hardware you have.