CLI command surface
# Daily-driver verbs (5 direct commands)tether chat # natural-language interface to every command belowtether go # one-command deploy: probe → resolve → pull → servetether serve # explicit-config server (full flag surface)tether doctor # diagnose env + GPU + per-deploy issuestether eval # LIBERO benchmark on Modal
# Sub-app groups (9 visible)tether models {list, pull, info} # curated VLA registrytether train {finetune, distill} # training operationstether validate {dataset, export} # pre-flight checkstether inspect {traces} # forensic queries on recorded tracestether traces {query, summary} # query and aggregate trace storagetether pro {activate, status, deactivate} # Pro license managementtether contribute # opt into Tether Curate data contributiontether curate # quality / uncertainty scoring for collected datatether data # raw episode storage operationsTotal visible top-level surface: 14 verbs (5 direct commands + 9 sub-app groups). The CLI was intentionally cut from 18 → 14 in v0.9.5 (2026-05-07) to make tether --help learnable. Commands moved to hidden=True are still callable directly for power-user scripts — see the “Power-user (hidden but callable)” section below.
Power-user (hidden but callable)
Section titled “Power-user (hidden but callable)”These verbs still work as documented but are removed from --help:
| Verb | Why hidden | Still useful for |
|---|---|---|
tether export <hf_id> | Composed by tether go | Power-users who want manual ONNX export without auto-serve |
tether bench <export> | Internal latency microbench | Tether maintainers reproducing perf numbers |
tether replay <trace> | Niche; superseded by tether traces query | Forensics on a single recorded trace |
tether inspect bench | Duplicate of tether bench | Discoverability via inspect namespace |
tether inspect replay | Duplicate of tether replay | Same |
tether inspect targets | Used once during install | Listing hardware target profiles |
tether inspect guard --urdf <path> | Niche diagnostic | Generating safety_config.json from URDF |
tether inspect doctor | Duplicate of top-level tether doctor | Same |
tether calibrate so100 {corners,surface,tap} | SO-ARM 100 specific (~3 customers) | SO-ARM 100 calibration |
tether bench-game | SO-ARM 100 hardware bench rigs | SO-ARM 100 customers |
tether config {show,set} | Stub — config knobs scoped for Phase 2 | n/a today |
tether status | ps aux | grep tether does the same | Lazy listing of running serves |
tether ros2-serve <export> | First-class --transport ros2 lands in v1.0 | Existing ROS2 customers — see Roadmap |
tether turbo, tether split, tether adapt, tether check, tether validate-legacy, tether validate-dataset | Legacy or internal-only | n/a |
Top-level flags (apply to every subcommand)
Section titled “Top-level flags (apply to every subcommand)”| Flag | Purpose |
|---|---|
--version | Print version + exit |
--help | Show help for any subcommand |
--verbose / -v | Increase log level (repeatable: -vv, -vvv) |
--quiet / -q | Errors only |
--output-json | Emit machine-readable JSON instead of human output (where applicable) |
--no-color | Disable ANSI color codes |
tether go
Section titled “tether go”One-command deploy. See Deploy a model in one command.
tether go --model <hf_id> [--embodiment <name>] [--device-class <target>]tether serve
Section titled “tether serve”Full-flag-surface server. See serve — runtime + safety for the wedge composition.
tether serve <export_dir> [--port 8000] [--host 0.0.0.0] [--embodiment <name>] [--safety-config <path>] [--cuda-graphs] [--auto-calibrate] [--slo p99=150ms] [--slo-mode {log_only,503,degrade}] [--robot-id <id>] [--policy-a <path> --policy-b <path> --split <int> --no-rtc] [--a2c2-checkpoint <path>] [--mcp --mcp-transport {stdio,http} --mcp-port 8001] [--otel-endpoint <url> --otel-sample 1.0] [--record <dir> --record-images {full,hash_only,none}] [--max-batch-cost-ms 100] [--batch-timeout-ms 5] [--max-consecutive-crashes 5] [--cloud-fallback <url>] [--inject-latency-ms 0] [--adaptive-steps] [--deadline-ms <int>] [--action-similarity-threshold <L2>] [--max-similar-skips <N>]tether doctor
Section titled “tether doctor”tether doctor [--model <export_dir>] [--format {text,json}] [--show-calibration]10 registered deploy-diagnostic checks plus inline system-probe rows (Blackwell ORT version, JetPack version, cuDNN-vs-driver skew, ORT-TRT EP empirical session test, multi-GPU mixed-architecture warning). See tether doctor.
tether models
Section titled “tether models”| Subcommand | Purpose |
|---|---|
tether models list | Browse the curated registry (pi0, pi05, smolvla, gr00t-n1.6, openvla-7b) |
tether models info <id> | Show benchmarks + supported targets for a specific model |
tether models pull <id> | Download weights from HuggingFace |
ONNX export is composed inside tether go (recommended), or available as tether export <hf_id> (hidden top-level — see the power-user table above).
tether train
Section titled “tether train”| Subcommand | Purpose |
|---|---|
tether train finetune <export_dir> --data <path> | LoRA fine-tune on customer data |
tether train distill <teacher_export> --output <student_dir> | SnapFlow 1-step distillation |
tether validate
Section titled “tether validate”| Subcommand | Purpose |
|---|---|
tether validate dataset <path> [--strict] [--embodiment <name>] | 8 falsifiable checks against a LeRobot v3.0 corpus |
tether validate export <export_dir> [--reference <hf_id>] [--threshold 1e-4] | ONNX vs PyTorch parity |
tether inspect
Section titled “tether inspect”Forensic queries on recorded traces. Other diagnostics that were registered here in earlier releases are now hidden — see the power-user table above.
| Subcommand | Purpose |
|---|---|
tether inspect traces <export> | Query recorded /act traces (alias for tether traces query) |
tether traces
Section titled “tether traces”| Subcommand | Purpose |
|---|---|
tether traces query [--latency-gt <ms>] [--exit-code <int>] [--limit <N>] | Filter recorded /act traces by predicate |
tether traces summary | Aggregate p50/p95/p99 latency + exit-code distribution across all traces |
tether pro
Section titled “tether pro”| Subcommand | Purpose |
|---|---|
tether pro activate <activation_code> | Redeem a one-time activation code, store license at ~/.tether/pro.license (the legacy ~/.reflex/pro.license path is still read for back-compat) |
tether pro status | Show current license tier, expiry, last heartbeat |
tether pro deactivate | Remove the on-disk license |
tether eval
Section titled “tether eval”LIBERO benchmark with cost transparency. See tether eval.
tether eval <export_dir> [--suite libero] [--num-episodes 3] [--video] [--cost-preview]Output conventions
Section titled “Output conventions”- Exit code 0 = success
- Exit code 1 = command-specific failure (e.g. validation failed, doctor reported a
failcheck) - Exit code 2 = setup error (missing arg, bad config)
- Exit code 3 = subcommand-specific failure (e.g. replay
--fail-ontriggered) - Exit code 5 = adapter error (e.g. eval runner couldn’t classify all episodes)
- Exit code 6 = external dependency missing (e.g. modal CLI not on PATH)