Skip to main content
~/.almond/settings.json on the robot host is the robot’s one settings file. The control panel edits it and applies it to every operation it launches, the draccus CLI commands (axol teleop, gravity-comp, collect-data, …) read it by default, and the SDK constructors (Axol(), VRTeleop(), Jelly(), Mantis()) build their default configs from it. Export / Import in the panel move this exact file between robots. Values set here sit between the built-in defaults and anything you pass explicitly: defaults → settings file → --config_path file → CLI flags, later wins. On the CLI, --no_settings skips the file and --settings_path PATH reads another one; in the SDK, passing a config or channel argument overrides the corresponding setting.

Layout

The file is a nested tree with one object per section. Only values you have changed are stored; anything absent keeps the code default.
The subsystem sections have exactly the shape of the matching config dataclass, so they use the same vocabulary as a teleop --config_path file, the operation config pages, and the SDK: axol is the robot config, teleop the teleop session, kinematics the kinematics config, jelly the Jelly config, and vr_server the VR server. Any leaf of these sections may be set — the panel shows the common ones as controls and the rest under Advanced. The other operations embed the same subsystems at different paths (robot_config.axol_config.*, teleop_config.vr_teleop_config.*, …); the translation happens automatically, so one value applies everywhere.

Older files

Version-1 files (a flat values map of panel keys such as robot.left_stiffness plus an advanced map) are migrated automatically when read and rewritten in the layout above on the next save. Importing such a file into the panel works the same way.