- A live conversation through the robot’s own microphone and speaker. Nur hears people while it speaks and stops the moment someone cuts in.
- Events your body code follows: someone started talking, the robot started a reply, the robot was cut off.
- Actions as tools. Each one answers “started” at once and reports back when the motors finish, so the conversation never waits on a wheel or an arm.
- Voices told apart. With more than one person in the room, transcripts label
each voice
Speaker 1,Speaker 2, so the robot can turn to whoever spoke.
Run it
On the robot’s computer, or your laptop while you try it:robot.py
body.wave() returns, Nova is told and mentions it as soon as nobody is
talking. Talk over Nova and both its voice and its gestures stop.
On a real robot
- Audio.
nur.audio.local()takes the computer’s default microphone and speaker. Pick the robot’s own withinput_deviceandoutput_device. If its audio already cancels echo, passecho="off". Otherwise the SDK keeps the microphone from hearing the robot, and people cut in by speaking up. - What it sees and does. Send perception as live state, not as
conversation:
await session.context.update({"seen": {"blue mug": "on the counter"}, "holding": "nothing"}). Nur reads the latest state before each reply, and an update never starts a reply by itself. - Who is talking.
transcript.finalevents carryturns, each with itsspeakernumber. Bind a number to the direction your microphone array heard it from, and turn the head there. - Your own audio pipeline. Leave
audioout and stream 16 kHz mono PCM withawait session.send_audio(pcm); play theaudio.output.chunkevents.
Next
Characters
Personas, voices, tools, live state, memory and several people in one room.
Tools and MCP servers
How Nur calls your functions, and servers EESI runs for you.
Live conversation
The protocol underneath, for robots that speak it directly.
Languages
More than a hundred, Arabic dialects included, switching as people do.