Skip to content

CLI command surface

# Daily-driver verbs (5 direct commands)
tether chat # natural-language interface to every command below
tether go # one-command deploy: probe → resolve → pull → serve
tether serve # explicit-config server (full flag surface)
tether doctor # diagnose env + GPU + per-deploy issues
tether eval # LIBERO benchmark on Modal
# Sub-app groups (9 visible)
tether models {list, pull, info} # curated VLA registry
tether train {finetune, distill} # training operations
tether validate {dataset, export} # pre-flight checks
tether inspect {traces} # forensic queries on recorded traces
tether traces {query, summary} # query and aggregate trace storage
tether pro {activate, status, deactivate} # Pro license management
tether contribute # opt into Tether Curate data contribution
tether curate # quality / uncertainty scoring for collected data
tether data # raw episode storage operations

Total 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.

These verbs still work as documented but are removed from --help:

VerbWhy hiddenStill useful for
tether export <hf_id>Composed by tether goPower-users who want manual ONNX export without auto-serve
tether bench <export>Internal latency microbenchTether maintainers reproducing perf numbers
tether replay <trace>Niche; superseded by tether traces queryForensics on a single recorded trace
tether inspect benchDuplicate of tether benchDiscoverability via inspect namespace
tether inspect replayDuplicate of tether replaySame
tether inspect targetsUsed once during installListing hardware target profiles
tether inspect guard --urdf <path>Niche diagnosticGenerating safety_config.json from URDF
tether inspect doctorDuplicate of top-level tether doctorSame
tether calibrate so100 {corners,surface,tap}SO-ARM 100 specific (~3 customers)SO-ARM 100 calibration
tether bench-gameSO-ARM 100 hardware bench rigsSO-ARM 100 customers
tether config {show,set}Stub — config knobs scoped for Phase 2n/a today
tether statusps aux | grep tether does the sameLazy listing of running serves
tether ros2-serve <export>First-class --transport ros2 lands in v1.0Existing ROS2 customers — see Roadmap
tether turbo, tether split, tether adapt, tether check, tether validate-legacy, tether validate-datasetLegacy or internal-onlyn/a

Top-level flags (apply to every subcommand)

Section titled “Top-level flags (apply to every subcommand)”
FlagPurpose
--versionPrint version + exit
--helpShow help for any subcommand
--verbose / -vIncrease log level (repeatable: -vv, -vvv)
--quiet / -qErrors only
--output-jsonEmit machine-readable JSON instead of human output (where applicable)
--no-colorDisable ANSI color codes

One-command deploy. See Deploy a model in one command.

tether go --model <hf_id> [--embodiment <name>] [--device-class <target>]

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 [--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.

SubcommandPurpose
tether models listBrowse 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).

SubcommandPurpose
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
SubcommandPurpose
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

See Pre-flight validation.

Forensic queries on recorded traces. Other diagnostics that were registered here in earlier releases are now hidden — see the power-user table above.

SubcommandPurpose
tether inspect traces <export>Query recorded /act traces (alias for tether traces query)
SubcommandPurpose
tether traces query [--latency-gt <ms>] [--exit-code <int>] [--limit <N>]Filter recorded /act traces by predicate
tether traces summaryAggregate p50/p95/p99 latency + exit-code distribution across all traces
SubcommandPurpose
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 statusShow current license tier, expiry, last heartbeat
tether pro deactivateRemove the on-disk license

LIBERO benchmark with cost transparency. See tether eval.

tether eval <export_dir> [--suite libero] [--num-episodes 3] [--video] [--cost-preview]
  • Exit code 0 = success
  • Exit code 1 = command-specific failure (e.g. validation failed, doctor reported a fail check)
  • Exit code 2 = setup error (missing arg, bad config)
  • Exit code 3 = subcommand-specific failure (e.g. replay --fail-on triggered)
  • 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)