Skip to content

tool catalog·

90s, 38 robot tools

Every robot @tool exported by tools/__init__.py, grouped by safety class. The counts on this page are read from that file at build time, so they match the code on main. The 5 cross-persona tools (memory, voice, Telegram, ...) are listed at the end.

safe, read-only / self-bounded motion, FSM/mutex-gated danger, can fall/collapse

state / 9·

tool what
g1_get_state FSM, mode, balance, height, arm_ready, SOC
g1_read_lowstate IMU (rpy/gyro/accel), joint postures, leg torque
g1_list_fsm_states static ref of all 10 FSM ids
g1_battery SOC, SOH, voltage, current, cycles
g1_mainboard CPU/GPU/MCU temp, RAM, fan
g1_pressure foot pressure (4× per foot)
g1_joint_reference, g1_joint_name, g1_joint_index joint name ⇄ index + gains

posture·

No dedicated tools since 2026-10-07: FSM changes (Damp, Squat, stand, balance, stand height) are use_unitree("loco", "SetFsmId", {"fsm_id": ...}) and the other loco operations, gated by the same danger list.

arm / 4·

Auto-release by default. rt/armsdk is single-writer, never parallelize.

tool what
g1_arm_action(action=...) any gesture by name, FSM auto-transition
g1_release_arm back to neutral
g1_list_arm_actions the SDK action_map: 15 gestures + release arm
g1_get_arm_action_list_from_robot live list from controller

audio / 3·

tool what
g1_speak bidi voice persona + one-shot TTS
g1_play_wav stream 16 kHz mono PCM to speakers
g1_asr speech-to-text from onboard mic

TTS/volume/LED → use_unitree("audio", …).

sensing / camera 2 / lidar 4 / dds 8·

tool what
use_camera RealSense / Brio / any V4L2 device → image block; pulls the shared frame from the dashboard when NEON_CAMERA_PROXY is set
capture_camera one JPEG returned as data (base64, optional save), no agent context needed: for dashboards, fleet planes, scripts
g1_lidar_state, _snapshot, _switch, _stats Livox MID-360
g1_dds_list_topics, _discover, _snapshot inspect the bus
g1_dds_subscribe, _read, _unsubscribe, _stats stateful subscriptions
g1_dds_publish(topic, payload, unsafe=True) raw publish; unsafe=True required on the five motor/BMS/hand topics

locomotion / 7·

Robot will fall if misused. An explicit request to walk is the consent; the agent looks first (take_photo), walks only in FSM 501, and every walk and turn measures its own displacement on rt/odommodestate: the result says moved=true with the metres, or moved=false and why. "Done" is only said when it moved. See safety.

tool what
g1_move_velocity(vx,vy,vyaw,duration) direct velocity, clamped
g1_walk_forward(distance,speed) distance clamped to 0.1 - 1.0 m, speed 0.05 - 0.5 m/s (at least 0.15 under 0.3 m); returns moved, requested_m, measured_m
g1_turn(angle_rad,yaw_rate) turn in place (+CCW), yaw rate clamped 0.1 - 0.6 rad/s; returns measured_rad
g1_stop_move vx=vy=vyaw=0 (always safe)
g1_wave_hand_loco, g1_shake_hand_loco walk + gesture
g1_set_task_id switch walking controller

universal / 1·

tool what
use_unitree(service, operation, parameters) any SDK RPC, AST-verified

use_unitree services: loco, arm, audio, motion_switcher, vui, robot_state.

bundles·

From tools/__init__.py:

name count includes
G1_STATE_TOOLS 9 read-only + battery + joints
G1_ARM_TOOLS 4 gestures
G1_AUDIO_TOOLS 3 speak / wav / asr
G1_SENSING_TOOLS 14 cameras + lidar + dds
G1_UNIVERSAL_TOOLS 1 use_unitree
G1_SAFE_TOOLS 31 everything above: no walking
G1_LOCOMOTION_TOOLS 7 walking (danger)
G1_ALL_TOOLS 38 everything
G1_LOOKOUT_TOOLS 5 cross-persona: memory, voice_say, telegram, take_photo, voice_control

Default: G1_TOOLS == G1_ALL_TOOLS.

cross-persona tools / 5·

The tools every persona carries besides the robot ones (G1_LOOKOUT_TOOLS).

tool what
memory kv + notes in .memory/mem.db, shared by every persona
voice_say(text, importance) queue a sentence for the chest speaker from any persona
voice_control(action, minutes, level) the agent on its own voice: mute, snooze, unmute, status, speaker volume
take_photo(question, hires) a frame from the dashboard camera into the model (audio reply in voice, image block elsewhere)
telegram(action, chat_id, text) send messages and photos to the owner's chat

who sees what·

g1.py builds three lists; every tool in them is wrapped by tools/tool_log.py so each call lands as a tool row in agent_log.

persona list contents
voice, REPL, dashboard chat build_voice_tools 5 cross-persona + 12 robot tools (state 2, arm 3, locomotion 4, audio 2, use_camera); small on purpose for realtime latency
telegram, thinker build_tools 5 cross-persona (telegram among them) + all 38 robot tools + GitHub when installed

Removed from the source (2026-10-07): shell, dispatch, phone / ADB (adb, recorder), use_spotify, prompts, manage_messages, manage_tools, make, kimodo (never reached end to end), the posture / safe-posture tools and g1_slam_*. The toolset is exactly what g1.py builds. | neon-mcp --safe | G1_SAFE_TOOLS | 31 robot tools, no walking |

dig deeper·

use_unitree use_dds composed sensing

Edit page