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.
~/.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:
--axol.left.elbow.kp leaves every other per-joint gain at its tuned default.
Config files
- Built-in defaults
- The shared settings file
- The
--config_pathfile - CLI flags
Same knob, different path
Each command places the shared configs at a different dotted path. Arm stiffness isaxol.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:
- The built-in values.
- The factory calibration downloaded by
calibration.pull, in~/.almond/factory_calibration.json. - Gains, friction, masses and centres of mass saved on this computer by
tune.pid --save,tune.friction --saveortune.gravity --save, in~/.almond/calibration.json.
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.