Skip to main content
Six commands — teleop, gravity-comp, collect-data, replay-dataset, run-policy, and inference-server — expose their entire configuration through draccus instead of a fixed set of argparse flags. Every field of the underlying config dataclass is reachable from the command line, and the whole config can also be loaded from a file. The remaining commands (can.*, motor.*, zed.*, gst.*, jetson.setup, provision, tune.*, and serve) still use plain argparse flags and are unaffected by anything on this page.

Two ways to set any field

Dotted CLI overrides

Override any nested field with --dotted.path VALUE, e.g. --axol.left.elbow.kp 60.

Whole-config file

Load a complete JSON/YAML config with --config_path run.json, then layer CLI overrides on top.

Dotted overrides

Each command is backed by a config dataclass (for example TeleopCmdConfig wraps the full AxolConfig). Nest into it with dots:
Any field you don’t override keeps its default — overriding --axol.left.elbow.kp leaves every other per-joint gain at its tuned default.

Config files

Precedence is defaults → --config_path file → CLI flags (later wins), so flags always override file values, which override the built-in defaults.

Field-name conventions

Booleans are value-taking under draccus (--push_to_hub true, not a bare --push_to_hub). The one exception is teleop’s --sim, which is normalized so a bare --sim works as well as --sim true.

Validation

Choice fields (e.g. --log_level, --policy_type, --aggregate_fn) are validated against their allowed values, and missing required fields or type mismatches are reported as a clean usage error rather than a traceback. axol <command> --help lists only the common fields (top-level options plus stiffness and gripper limits) to keep the output readable — the deeply-nested per-joint gains are hidden but remain fully overridable with their dotted paths (e.g. --axol.left.elbow.kp). This page is the complete reference for the override syntax.