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
- Install script
- pip
- From source
On an edge device, use the install script.
cyberwave pair then sets the device up as an edge node.--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.
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.
- Linux
- macOS
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.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, --environmenttakes 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.-eselects an environment and never creates one.--tokenalways wins over a saved login and overCYBERWAVE_API_KEY. A rejected token stops the install. Tokens passed this way show up in shell history and inps, so on shared machines prefer exportingCYBERWAVE_API_KEY.-yskips 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
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 forbash and zsh. Install it in one step:
$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.
Pick the shell explicitly
Pick the shell explicitly
Write to a different rc file
Write to a different rc file
Generate the script yourself
Generate the script yourself
generate prints the completion script to stdout, so you can store it where you like:Troubleshooting
Troubleshooting
- Shell not detected: pass
--shell bashor--shell zsh. - Permission denied on the rc file: pass a writable
--rc-filepath, then source that file. - Other shells: only
bashandzshare 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.