end-to-end workflow·
60s
What actually happens when you text wave hello from your phone.
sequenceDiagram
autonumber
participant P as phone
participant N as neon (Jetson)
participant M as G1 MCU
P->>N: telegram: "wave hello"
N->>M: g1_get_state → {fsm:500, arm_ready:true}
N->>M: g1_arm_action(high wave), id=26
M-->>N: rc=0
N->>M: release (id=99)
N-->>P: "waved "
End-to-end: ~2-4 s, dominated by Telegram long-poll and model planning;
the motor is the fastest part. Each call lands as a tool row in the activity
log, so "waved" can be checked against rc=0.
parallel tool calls·
"wave hello and tell me what you see" fans out into g1_get_state,
g1_arm_action and take_photo in one round-trip: no data dependencies.
latency budget·
| stage | typical |
|---|---|
| telegram wake-up | 400-800 ms |
| model plan + calls | 600-2000 ms |
g1_get_state |
< 20 ms |
g1_arm_action |
300-600 ms |
use_camera |
40-100 ms |
| total | ~2-4 s |
model·
NEON runs on a Bedrock model (NEON_MODEL_ID, default
global.anthropic.claude-opus-4-8). Point it at a lighter model id to trade quality
for latency: set it in .env, or from the dashboard (Configuration, model,
then "Apply to all personas"), which writes the same line and recreates the
persona containers through the host neon-ctl service.
resilience·
- Telegram down → REPL over SSH still works.
- DDS drops → tools return
rc=3104, agent reports it. - A persona crash → compose
restart: unless-stopped; the MCU'ssport_modeis a separate box. - Model API fails → tools still run; only planning is offline.
Edit page