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