Command Reference

Every request is a length-prefixed msgpack dict with a "cmd" key (see Protocol & Wire Format for the framing and worked examples). This page lists every command the server understands.

The "Blocked during mission" column refers to the trajectory mission running. "yes" = the server returns an error or otherwise refuses; "no" = always works; "n/a" = command belongs to a plugin that doesn't interact with the trajectory mission. Plugins are chosen at startup with --plugins (default: manual_move); several can be enabled at once.

Command Additional keys Blocked during mission Description
— Core protocol —
help -- no List available commands
connect -- no Promote a stateless socket to a robot-controlling channel; server replies with assigned id
sim_get_info -- no {"control_loop_rate_hz": int} plus rolling physics/render tick timings (physics_tick_s, render_tick_s, each {window, p50})
sim_get_state -- no Full scene state as a dict (world + cameras + plugins; same shape as on-disk save)
sim_load_state state: dict yes Load scene from a state dict (no disk roundtrip)
sim_reset -- yes Restore the initial scene state
robot_get_state robot_ix: int no Robot entity dump: {"components": [...], "data": {pose, velocity, ...}, "connected": bool}
robot_get_state_with_camera robot_ix: int no Robot dump + top-level fpv_compressed (zlib RGBA) + fpv_shape + fpv_frame_id
ManualMovePlugin (--plugins manual_move, the default) —
move control_input: list[float] (length 6, the robot's DoF) yes Apply one control input. While a mission is running, robot 0's move is overridden by the mission and the response is move_not_applied.
TrajectoryMissionPlugin (--plugins trajectory_mission) —
mission_get_state -- no Mission state, progress, or final error
mission_add_via_point -- yes* Record current robot 0 pose as a via-point
mission_clear_via_points -- yes* Drop all via-points
mission_start trajectory: list[list[float]] (shape N × 6) yes* Start mission with the supplied trajectory
RacePlugin (--plugins race) —
race_start -- n/a Start the race (one-shot, no restart)
race_status -- n/a Current race state: flag positions, per-robot next-flag index, start/end timestamps, winner

* Not hard-enforced server-side. mission_add_via_point / mission_clear_via_points still reset the mission phase to not-started mid-run (silently cancelling an in-flight mission), and mission_start validates its input but does not refuse while a mission runs (it just restarts). Clients should treat the mission as exclusive. (Tracked by task 97, folded into the ECS mission port #143; the guard itself is still TODO.)

For the response envelope (timestamps, the "error" key) and which commands are answered straight from the TCP thread, see Protocol & Wire Format. Commands are registered by plugins — see Plugins for how a plugin declares the commands it owns.