Skip to main content
Eight commands expose their entire configuration through draccus: teleop, gravity-comp, waypoints, collect-data, collect-dagger, replay-dataset, run-policy and inference-server. You can set every field of their config from the command line or load the whole config from a file. This page covers the syntax. Each operation mode has a Config Parameters page listing every field with its default: Teleoperation, Gravity Compensation, Data Collection, Replay Dataset, Run Policy, and DAgger Collection. waypoints and inference-server list their flags on their own CLI pages. The other commands (can.*, motor.*, zed.*, gst.*, jetson.setup, provision, tune.* and serve) use plain flags, and nothing on this page applies to them.

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

Shared settings file

Save a value once in the control panel (~/.almond/settings.json), and the panel, the CLI and the SDK all use it by default.

The shared settings file

The robot has one settings file, ~/.almond/settings.json ($ALMOND_HOME/settings.json), edited by the control panel. Every command on this page and the SDK constructors read it by default. A value you save once, such as arm stiffness, a joint gain, a gripper limit or a CAN adapter, applies the same way from the browser, the terminal or Python. The file uses the same field names as a --config_path file. Its axol, teleop, kinematics, jelly and vr_server sections match the config sections of the same name. A few more sections hold operation settings, such as robot for the CAN channels, gravity, recording and inference. Each command reads the sections it uses. See the Settings File page for the layout.
Two flags control it on every draccus command:
If ~/.almond/settings.json is missing, the command uses the built-in defaults. If the file exists but can’t be read, the command refuses to start. That covers corrupt JSON, a permission problem or a symlink in its path. Fix the file, or pass --no_settings to run without it. The SDK constructors (Axol(), Mantis(), Jelly(), VRTeleop()) raise an error in the same case. Only axol serve starts with an unreadable file, so you can repair it from the control panel.

Dotted overrides

Each command has a config dataclass. For example, TeleopCmdConfig contains the full AxolConfig. Reach nested fields 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

Values are applied in this order, and later ones win:
  1. Built-in defaults
  2. The shared settings file
  3. The --config_path file
  4. CLI flags
Operations launched from the control panel use the same order. A CLI run and a panel run agree on every value that neither overrides.

Same knob, different path

Each command places the shared configs at a different dotted path. Arm stiffness is axol.left_stiffness on teleop but robot_config.axol_config.left_stiffness on collect-data. Each mode’s Config Parameters page uses the right prefix for that command.
On a calibrated robot the defaults include that robot’s measurements. They are applied in this order, and later ones win:
  1. The built-in values.
  2. The factory calibration downloaded by calibration.pull, in ~/.almond/factory_calibration.json.
  3. Gains, friction, masses and centres of mass saved on this computer by tune.pid --save, tune.friction --save or tune.gravity --save, in ~/.almond/calibration.json.
Config files and CLI flags still override them like any other default.

Field-name conventions

Booleans need a value: --push_to_hub true, not a bare --push_to_hub. The one exception is teleop’s --sim, where a bare --sim works as well as --sim true.

Validation

Choice fields such as --log_level, --policy_type and --aggregate_fn are checked against their allowed values. A missing required field or a wrong type gives a usage error, not a traceback. axol <command> --help lists only the common fields: top-level options, stiffness and gripper limits. The nested per-joint gains are hidden, but you can still set them with their dotted paths, such as --axol.left.elbow.kp. Each mode’s Config Parameters page, such as Teleoperation, lists every field.