Robots by voice

Tell the arm. It moves.

A realtime agent in a thread gets the arm's channel as tools. It sends a goal, reads the joints back, and moves again, inside the bounds the channel declares.

Open the arm cellScroll moves the page. Click in to use the wheel and keys.Esc gives the page back.

world.tsx
world.tsxOpen it in CommandAGI

Try it live

Live. The arm cell that ships with the workbench, in simulation.

Command, then read back

The agent checks before it moves on.

The servo channel's driver enforces its limits and refuses what is out of bounds. A reply is only the driver's read-back, never an assumption that the arm got there.

How a realtime agent drives an armThe person speaks or types to the realtime agent in a thread. The agent calls the channel's tools, torque and goal, each recorded as a command before it is sent. The driver checks the channel's bounds and moves the servos, in this run the simulated arm's. The agent reads the joints back before its next move, and ends the session when the read-back shows the goal.The instructionspoken or typedThe realtimeagentgpt-realtime-2.1command: goalrecorded before itis sentThe servo driverbounds ·read-backThe read-backthe next movestarts hereHow a realtime agent drives an armThe person speaks or types to the realtime agent in a thread. The agent calls the channel's tools, torque and goal, each recorded as a command before it is sent. The driver checks the channel's bounds and moves the servos, in this run the simulated arm's. The agent reads the joints back before its next move, and ends the session when the read-back shows the goal.The instructionspoken or typedThe realtime agentgpt-realtime-2.1command: goalrecorded before it is sentThe servo driverbounds · read-backThe read-backthe next move starts here

Six commands, each one checked.

The goal, as the test typed it: turn shoulder_pan to at least 3000 steps, at most 300 steps a command, looking at the read-back after each; then open the gripper fully. The arm's stream, each command followed by the driver's read-back (hlc and salt left out).

runs/20261023t103311z-j57x/streams/arm.servosreal records · a simulated arm · 2026-10-23
10:33:15.262 command agent:openai-gpt-realtime-2-1@live: torque on
10:33:15.262 state   torque on  shoulder_pan=2048
10:33:19.437 command agent:openai-gpt-realtime-2-1@live: goal shoulder_pan=2348
10:33:20.024 state   torque on  shoulder_pan=2348
10:33:20.547 command agent:openai-gpt-realtime-2-1@live: goal shoulder_pan=2648
10:33:21.094 state   torque on  shoulder_pan=2648
10:33:22.661 command agent:openai-gpt-realtime-2-1@live: goal shoulder_pan=2948
10:33:23.183 state   torque on  shoulder_pan=2948
10:33:23.888 command agent:openai-gpt-realtime-2-1@live: goal shoulder_pan=3000
10:33:24.168 state   torque on  shoulder_pan=3000
10:33:25.257 command agent:openai-gpt-realtime-2-1@live: goal gripper=2700
10:33:25.333 state   torque on  shoulder_pan=3000  gripper=2700

Case study · a live run

At its goal in 14 seconds.

OpenAI's gpt-realtime-2.1 drove the arm cell's simulated SO-101 through its servo channel. It ended the session itself: "the read-back showed shoulder_pan at 3000 … so the goal is satisfied".

Voice or text. In this run the instructions were typed: the session took 11 texts and no audio. A spoken session takes the same tools. The arm was the simulation's, not a real one: no hardware took part.

Simulated

commands, 0 refused
6
tool calls, each with its result recorded
12
for the session (0.227 min)
14 s
for the session
$0.060
ProcedenciaArchivo cloud://global/worlds/arm-cell/world.tsxEjecución runs/20261023t103311z-j57xResultado case-studies/realtime/stats.jsonHerramienta tests/workbench/realtime-robot-live.mjs, read by scripts/sites/case-studies.mjs realtimeSe ejecutó en This computer (dell-gb10-1), OpenAI's realtime APICuándo

Talk to the arm cell.

Open the arm cell and start a thread with a realtime agent. A simulated arm needs no grant; a real arm needs a standing grant on its channel.