Home
neon
a strands agent on the unitree g1+, running on the robot
live on G1 38 robot tools 500 Hz state 29 motors 8 safety gates
neon > wave hello and tell me what you see → g1_arm_action('high wave') rc=0, released → take_photo('what do you see?') 640x480 via the dashboard neon > Waved. A person at a desk, laptop open.
the whole thing in 3 minutes·
1 What it is. A Strands agent that drives a Unitree G1+ humanoid. It runs on the robot's Jetson, speaks DDS to the motor bus, and turns the SDK into 38 typed, safety-gated tools. The model is remote (Bedrock or OpenAI Realtime); everything that touches a motor is local.
2
How you talk to it. One agent, many faces: the chest speaker, Telegram, the
cockpit in a browser or on your phone, the REPL over SSH,
and a thinker that reflects every 30 s. Say wave, walk forward 30cm,
what do you see?, map this room. Every persona shares one memory and one log.
3
Why it's safe. Walking is FSM-gated and only on your explicit request; the
arm bus is mutex-locked; raw motor publishes need unsafe=True. After a walk
the robot measures its own displacement and says "done" only when it moved.
flowchart LR
U(["you"]) -->|"voice, telegram, cockpit, REPL"| A
subgraph G1["Unitree G1+, Jetson Orin"]
direction TB
A["neon<br/>strands, 38 robot tools"]
C["MCU controllers"]
M["motors, arms<br/>audio, LEDs"]
S[("lidar, imu<br/>bms, cameras")]
A -->|"DDS"| C --> M
A -.->|"read-only"| S
end
classDef brain stroke:#007a3d,stroke-width:1.5px
classDef io stroke:#666464,stroke-width:1.5px
class A brain
class C,M,S io
at a glance·
| robot | Unitree G1+, 29 motors, 2 arms, Livox MID-360 lidar, RealSense + Brio cameras |
| compute | Jetson Orin NX, the agent runs on the robot |
| transport | CycloneDDS over eth0 (no ROS) |
| tools | 38 robot tools + 5 cross-persona tools, counted from the code at build time |
| model | any Bedrock model id (NEON_MODEL_ID, default global.anthropic.claude-opus-4-8), changed live from the cockpit; voice on OpenAI Realtime, Nova Sonic or Gemini Live |
| surfaces | voice (chest speaker), Telegram, cockpit (browser, phone, tiny app), REPL, thinker |
| safety | eight gates: allowlist, prompt, tool class, FSM, arm mutex, clamps, request + look, measured motion |
the recommended path·
-
Run it: clone, add a Bedrock key, wave hello. 60 s.
-
See it: gestures, a measured walk, a Telegram message end to end.
-
Do it: recipes you can say: wave, walk, look, map, text.
-
Operate it: the cockpit, voice snooze, model switch, passkeys.
-
Dig in: 38 tools,
use_unitree,use_dds, the eight gates, the runtime.
built with strands-agents, devduck, unitree_sdk2
