> ## Documentation Index
> Fetch the complete documentation index at: https://docs.almond.bot/llms.txt
> Use this file to discover all available pages before exploring further.

# The Robot's Settings File

> The layout of ~/.almond/settings.json and what each section controls.

`~/.almond/settings.json` on the robot host is the robot's **one** settings file. The [control panel](/guides/control-panel#settings) edits it and applies it to every operation it launches, the [draccus CLI commands](/cli/configuration#the-shared-settings-file) (`axol teleop`, `gravity-comp`, `collect-data`, …) read it by default, and the [SDK constructors](/api/robot#shared-settings) (`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.

```json theme={null}
{
  "version": 2,
  "axol": {
    "left_stiffness": 0.8,
    "has_gripper": true,
    "left": { "elbow": { "kp": 60 }, "gripper": { "torque_limit": 0.4 } }
  },
  "teleop": { "frequency": 240, "rest_pose_left": [-0.15, 0, 0, 0.31, 0, 0, -0.15] },
  "kinematics": { "pos_weight": 100 },
  "robot": { "left_channel": "can0", "right_channel": "null" },
  "gravity": { "kd": 0.5 },
  "recording": { "fps": 30, "root": "/data/lerobot" },
  "cameras": { "serials": { "overhead": "12345" } }
}
```

The subsystem sections have **exactly the shape of the matching config dataclass**, so they use the same vocabulary as a teleop [`--config_path`](/cli/configuration) file, the operation config pages, and the SDK: `axol` is the [robot config](/operations/teleop-config#robot), `teleop` the [teleop session](/operations/teleop-config#teleop), `kinematics` the [kinematics config](/operations/teleop-config#kinematics), `jelly` the [Jelly config](/operations/teleop-config#jelly), 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.

| Section | Contains | Applies to |
| - | - | - |
| `axol` | the robot config: `left_stiffness` / `right_stiffness`, `has_gripper`, `gripper` (`parallel` / `parcel` — the Robot tab's **Gripper**; box mode's settings show only with `parcel`), per-joint gains, masses and gripper limits (`left.gripper.torque_limit`, `right.gripper.max_speed`, …) | every operation |
| `teleop` | the teleop session: `frequency` (also sets `teleop_hz` on data collection), `position_multiplier`, `rotation_multiplier`, `hold_to_engage`, `rest_pose_left` / `rest_pose_right` (the **Rest pose** editor), `reset_torque_threshold` (also run policy and replay), `teleop_torque_threshold` (also replay), … | teleop, data collection, DAgger |
| `kinematics` | the IK config: `pos_weight`, `ori_weight`, `elbow_weight`, `rest_weight`, `max_joint_delta`, … | teleop, data collection, DAgger |
| `jelly` | the Jelly config: `wheels`, `lift` (the Robot tab's **Jelly wheels** / **Jelly lift** switches), `max_speed`, … | teleop, data collection, DAgger |
| `vr_server` | the VR WebSocket server: `port`, … | teleop, data collection, DAgger |
| `lerobot` | the LeRobot `robot_config.*` fields: `observe_torques`, `observe_cartesian`, `id`, `calibration_dir`, … | data collection, DAgger, run policy, replay |
| `lerobot_teleop` | the LeRobot `teleop_config.id` / `teleop_config.calibration_dir` | data collection, DAgger |
| `robot` | `left_channel` / `right_channel` — the arms' CAN interfaces (`"null"` disables an arm) | every operation, diagnostics dashboard |
| `gravity` | `kd` / `rate_hz` of the gravity-comp loop | gravity comp, waypoints |
| `mantis` | `source` (`lighthouse` / `ultimate` / `quest`), `quest_tracker_key` (Quest only), `left_channel` / `right_channel` of the Mantis grippers (default `can_mantis_l` / `can_mantis_r`) | data collection (Mantis), teleop (Mantis channels) |
| `recording` | `fps` (data collection, run policy), `replay_fps` (replay's `fps`), `vcodec`, `root` (also replay), `push_to_hub`, `rerun_ip`, `rerun_port` | data collection, DAgger, run policy |
| `inference` | the [run policy](/operations/run-policy-config) keys: `device`, `server_host`, `server_port`, `episode_time_s`, `actions_per_chunk`, `chunk_size_threshold`, `aggregate_fn`, `temporal_ensemble_coeff`, `policy_torque_threshold` | run policy |
| `system` | `hardware_profile` (`axol` or `mantis`, the panel's device selection), `log_level` | teleop, data collection (`log_level`: every operation) |
| `cameras` | the panel's camera assignment | data collection, DAgger, run policy, teleop |

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.