Intel track · AI Infra Summit Hackathon 2026

“Set the table.”

Say it out loud or type it. Two SO-101 arms work out what you meant, hand the cutlery between them, and check their own work. Every model runs on one Intel CPU.

183/200tables it had never seen, set completely
9/10pre-registered demonstrations done as asked
16 msper policy step, OpenVINO INT8
390/400spoon and fork placed after a hand-off

Say or type “set the table”, or “no fork today, set the rest”. In MuJoCo, arm A pulls the cutlery drawer open and hands the spoon and the fork across to arm B, which places them with the plate and the cup. A vision-language model reads the command and the top camera and writes a plan; a verifier repairs it; five learned ACT policies — one per skill — drive both arms from three cameras at 25 Hz; a camera classifier checks every step and re-queues what did not hold. Grasps are friction contact only (~17 N gripper), and at run time the robot sees cameras and joint angles, never simulator object poses.

Two arms at a fully set table; the side panel lists the
verified plan with all five steps done and the line: no skill for, light a candle.
Demonstration seed 6. The command was “Set the table and light a candle.” — the five steps it can do are done, and the candle is named as something no skill does.
One run end to end, 60 seconds, with its own audio: the command is spoken into a live microphone, the plan is changed out loud part-way through, and the cup is missed and retried without anyone touching anything.
183 / 200held-out tables set completely, four sets of 50
92%of control steps come from the learned policies
2.44 cmworst placement error over 200 tables, inside a 2.5 cm tolerance
15.5–15.8 msper policy step on the CPU, OpenVINO INT8 weights

Demonstration runs

9 of 10 pre-registered runs did exactly what was asked. The ten tables and their ten requests were fixed in configs/demo_seeds.json before any of them was recorded — two spoken, one changed mid-run by a second sentence sent at a fixed time — and each was then run once by the full agent on OpenVINO. Two further runs, recorded the same way and listed with them below: a table already half set (1/1), and a live take with the plan changed by voice while the arms were moving (1/1).

Ten demonstration runs tiled in two rows, each stamped PASS
except seed 2, which is stamped wrong refusal.
All ten pre-registered runs, pass or fail, each with its own randomised table. The one marked wrong refusal planned and ran every step correctly and ended with the table set; what failed was the separate check on impossible requests, which announced it could not “set the rest”. The scorer counts any unasked-for refusal as a failed run.
All twelve demonstration runs at once, each on its own randomised table, stamped as it ends.
The same twelve runs one after another, full size and unabridged, 9.6 minutes: every command, every placement and every retry, including the run that refused wrongly.
Jump to any command in the reel
TimeSeedCommandHowResult
0:000"Set the table."typed, read aloud (Speechmatics TTS)done as asked
1:011"Could you set everything out for dinner?"live microphone (Speechmatics STT)done as asked
2:052"No fork today, set the rest."typed, read aloud (Speechmatics TTS)table set correctly - scored a failure for wrongly saying it could not "set the rest"
2:533"I'm having soup tonight."typed, read aloud (Speechmatics TTS)done as asked
3:264"Just the plate and the cup."typed, read aloud (Speechmatics TTS)done as asked
4:005"Set the table." + "Skip the cup." mid-runtyped, read aloud (Speechmatics TTS)done as asked
4:586"Set the table and light a candle."typed, read aloud (Speechmatics TTS)done as asked
6:007"Just my cup, thanks."typed, read aloud (Speechmatics TTS)done as asked
6:148"Put out the spoon and the plate."live microphone (Speechmatics STT)done as asked
6:579"Set the table."typed, read aloud (Speechmatics TTS)done as asked
8:0110"Set the table." (half-set table)typed, read aloud (Speechmatics TTS)done as asked
8:3511"Set the table, please." (live, plan changed mid-run)live microphone (Speechmatics STT)done as asked

Every command in these clips is audible, and all twelve runs use Speechmatics on both sides. A spoken command is the person's own microphone, transcribed live by Speechmatics real-time speech-to-text; a typed one is read aloud by a second Speechmatics text-to-speech voice, deliberately different from the robot's, so the two are never confused. The robot then answers in its own Speechmatics voice in every run — the plan it chose, the reason for a correction, and what it could not do.

seedhowcommand (heard)plandonesaid it cannotfirst planresult
0typedSet the table.drawer → spoon → plate → fork → cupdrawer, spoon, plate, fork, cup–8.0 sPASS
1spokenCould you set everything out for dinner? (heard: Could you set everything out for dinner ?)drawer → spoon → plate → fork → cupdrawer, spoon, plate, fork, cup–8.2 sPASS
2typedNo fork today, set the rest.drawer → spoon → plate → cupdrawer, spoon, plate, cupset the rest7.8 stable set correctly, every step done — scored a failure because it wrongly announced it could not “set the rest” (grader's cause: FAIL: wrong refusal)
3typedI'm having soup tonight.drawer → spoondrawer, spoon–6.4 sPASS
4typedJust the plate and the cup.drawer → plate → cupdrawer, plate, cup–6.3 sPASS
5typedSet the table. + said “Skip the cup.”drawer → spoon → plate → fork → cupdrawer, spoon, plate, fork–8.1 sPASS
6typedSet the table and light a candle.drawer → spoon → plate → fork → cupdrawer, spoon, plate, fork, cuplight a candle11.8 sPASS
7typedJust my cup, thanks.cupcup–7.5 sPASS
8spokenPut out the spoon and the plate.drawer → spoon → platedrawer, spoon, plate–7.2 sPASS
9typedSet the table.drawer → spoon → plate → fork → cupdrawer, spoon, plate, fork, cup–10.6 sPASS
10typedSet the table. [table prepared: drawer, spoon]plate → fork → cup (seen done: drawer, spoon)drawer, spoon, plate, fork, cup–7.8 sPASS
11spokenSet the table, please.drawer → spoon → plate → fork → cupdrawer, spoon, plate, cup–9.1 sPASS

The one miss is a sentence, not a motion — nothing was refused. On seed 2, “No fork today, set the rest”, the plan was right (drawer, spoon, plate, cup), all four steps were carried out, and the table ended exactly as asked. What went wrong is the impossible-part check, which runs separately to name anything no skill can do: it read the phrase “set the rest” as one of those things and announced it — after having done it. The scorer counts any unasked-for claim of that kind as a failed run, so this run is counted against the total above rather than quietly excused.

Held-out tables

Four sets of 50 randomised tables, never used for training or tuning, every selection frozen before the run and each table run once. The full agent plans, checks after each skill, retries and re-queues; the fixed five-step sequence runs the same policies in a fixed order on the same tables.

Held-out setFull agentFixed sequence
seeds 0–4945/5048/50
seeds 200–24946/5044/50
seeds 250–29946/5044/50
seeds 850–89946/5044/50
All 200 tables183/200180/200

Which steps, and where it lost

StepDone, of 200Placement error, medianLargest
drawer200/200––
spoon197/2000.33 cm2.27 cm
plate191/2000.38 cm1.87 cm
fork193/2000.44 cm2.36 cm
cup192/2000.29 cm2.44 cm

Every placed object landed inside the 2.5 cm tolerance; the largest error over all 200 tables was 2.44 cm. The spoon and the fork are each handed from one arm to the other, and were placed on 390 of 400 attempts.

17 tables were not completed. Counting each at its first step still undone at the end: spoon 3, plate 8, cup 6. Never the first step to fail: drawer, fork.

Every one of the 200 held-out tables
SeedSetResultSteps First step undonePlacement error (cm)
00–49set5/5–spoon 0.7, plate 0.2, fork 0.4, cup 0.4
10–49set5/5–spoon 0.4, plate 0.2, fork 0.4, cup 0.1
20–49set5/5–spoon 0.3, plate 0.6, fork 0.2, cup 0.1
30–49set5/5–spoon 0.2, plate 0.3, fork 0.6, cup 0.2
40–49set5/5–spoon 0.4, plate 0.3, fork 0.5, cup 0.3
50–49set5/5–spoon 0.3, plate 0.6, fork 0.6, cup 0.4
60–49set5/5–spoon 0.4, plate 0.7, fork 0.3, cup 0.2
70–49set5/5–spoon 0.5, plate 0.4, fork 0.0, cup 0.4
80–49set5/5–spoon 0.2, plate 0.4, fork 0.4, cup 0.4
90–49set5/5–spoon 0.2, plate 0.2, fork 0.3, cup 0.1
100–49set5/5–spoon 0.3, plate 0.3, fork 0.6, cup 0.1
110–49set5/5–spoon 0.3, plate 0.4, fork 0.4, cup 0.4
120–49set5/5–spoon 0.3, plate 0.7, fork 0.4, cup 0.2
130–49set5/5–spoon 0.3, plate 0.6, fork 0.3, cup 0.3
140–49set5/5–spoon 0.3, plate 0.3, fork 0.5, cup 0.3
150–49set5/5–spoon 0.4, plate 0.5, fork 0.5, cup 0.5
160–49set5/5–spoon 0.4, plate 0.4, fork 0.5, cup 0.2
170–49set5/5–spoon 0.3, plate 0.5, fork 0.3, cup 0.4
180–49set5/5–spoon 0.4, plate 0.4, fork 0.5, cup 0.6
190–49set5/5–spoon 0.3, plate 0.3, fork 0.4, cup 0.2
200–49set5/5–spoon 0.2, plate 0.4, fork 0.7, cup 0.1
210–49set5/5–spoon 0.4, plate 0.5, fork 0.4, cup 0.3
220–49set5/5–spoon 0.3, plate 0.3, fork 0.5, cup 0.5
230–49set5/5–spoon 0.4, plate 0.4, fork 0.2, cup 0.2
240–49set5/5–spoon 0.1, plate 0.4, fork 0.2, cup 0.3
250–49incomplete4/5cupspoon 0.5, plate 0.4, fork 0.5
260–49incomplete2/5spooncup 2.4
270–49set5/5–spoon 0.2, plate 0.6, fork 0.1, cup 0.2
280–49set5/5–spoon 0.3, plate 0.4, fork 0.7, cup 0.5
290–49set5/5–spoon 0.4, plate 0.4, fork 0.1, cup 0.5
300–49set5/5–spoon 0.1, plate 0.4, fork 0.4, cup 0.6
310–49set5/5–spoon 0.3, plate 0.9, fork 0.3, cup 0.6
320–49set5/5–spoon 0.1, plate 0.3, fork 0.4, cup 0.1
330–49set5/5–spoon 0.3, plate 0.1, fork 0.5, cup 0.4
340–49set5/5–spoon 0.4, plate 0.1, fork 0.7, cup 0.4
350–49set5/5–spoon 0.4, plate 0.4, fork 0.5, cup 0.4
360–49set5/5–spoon 0.2, plate 0.1, fork 0.4, cup 0.2
370–49incomplete4/5spoonplate 1.9, fork 1.0, cup 0.3
380–49set5/5–spoon 0.5, plate 0.6, fork 0.4, cup 0.2
390–49set5/5–spoon 0.4, plate 0.3, fork 0.4, cup 0.5
400–49incomplete4/5platespoon 0.7, fork 1.6, cup 0.1
410–49incomplete4/5cupspoon 0.4, plate 0.3, fork 0.7
420–49set5/5–spoon 0.3, plate 0.5, fork 0.2, cup 0.4
430–49set5/5–spoon 0.5, plate 0.5, fork 0.6, cup 0.4
440–49set5/5–spoon 0.5, plate 0.3, fork 0.2, cup 0.1
450–49set5/5–spoon 0.3, plate 0.5, fork 0.3, cup 0.6
460–49set5/5–spoon 0.4, plate 0.4, fork 0.9, cup 0.4
470–49set5/5–spoon 0.5, plate 0.3, fork 0.7, cup 0.3
480–49set5/5–spoon 0.1, plate 0.5, fork 0.2, cup 0.5
490–49set5/5–spoon 0.7, plate 0.3, fork 0.9, cup 0.2
200200–249set5/5–spoon 0.2, plate 0.3, fork 0.1, cup 0.2
201200–249set5/5–spoon 0.5, plate 0.3, fork 0.3, cup 0.2
202200–249set5/5–spoon 0.4, plate 0.3, fork 1.1, cup 0.1
203200–249set5/5–spoon 0.3, plate 0.4, fork 0.4, cup 0.1
204200–249set5/5–spoon 0.2, plate 1.3, fork 1.2, cup 0.6
205200–249set5/5–spoon 0.3, plate 0.2, fork 1.1, cup 0.5
206200–249set5/5–spoon 0.5, plate 0.3, fork 0.6, cup 0.2
207200–249set5/5–spoon 0.2, plate 0.4, fork 0.6, cup 0.2
208200–249set5/5–spoon 0.5, plate 0.4, fork 0.6, cup 0.5
209200–249set5/5–spoon 0.6, plate 0.4, fork 0.6, cup 0.4
210200–249set5/5–spoon 0.1, plate 0.4, fork 0.6, cup 0.0
211200–249set5/5–spoon 0.0, plate 0.4, fork 0.1, cup 0.1
212200–249set5/5–spoon 0.2, plate 0.7, fork 0.3, cup 0.4
213200–249set5/5–spoon 0.5, plate 0.6, fork 0.4, cup 0.7
214200–249set5/5–spoon 0.1, plate 0.4, fork 0.1, cup 0.2
215200–249set5/5–spoon 0.2, plate 0.2, fork 0.6, cup 0.3
216200–249set5/5–spoon 0.4, plate 0.3, fork 0.4, cup 0.5
217200–249incomplete3/5platespoon 1.4, cup 1.0
218200–249set5/5–spoon 0.5, plate 0.4, fork 0.6, cup 0.3
219200–249set5/5–spoon 0.4, plate 0.3, fork 0.6, cup 0.8
220200–249set5/5–spoon 0.3, plate 0.1, fork 0.6, cup 0.1
221200–249set5/5–spoon 0.4, plate 1.0, fork 0.5, cup 0.4
222200–249set5/5–spoon 0.2, plate 0.3, fork 0.3, cup 0.2
223200–249set5/5–spoon 0.2, plate 0.5, fork 0.3, cup 0.2
224200–249set5/5–spoon 0.4, plate 0.4, fork 0.5, cup 0.1
225200–249set5/5–spoon 0.4, plate 0.3, fork 0.1, cup 0.4
226200–249set5/5–spoon 0.3, plate 0.5, fork 0.2, cup 0.5
227200–249set5/5–spoon 0.3, plate 0.3, fork 0.4, cup 0.4
228200–249set5/5–spoon 0.3, plate 0.4, fork 0.2, cup 0.1
229200–249set5/5–spoon 0.4, plate 0.1, fork 0.5, cup 0.4
230200–249incomplete3/5platespoon 0.1, cup 0.5
231200–249set5/5–spoon 0.4, plate 0.5, fork 0.5, cup 0.4
232200–249set5/5–spoon 0.4, plate 0.3, fork 0.4, cup 0.3
233200–249set5/5–spoon 0.4, plate 0.4, fork 0.6, cup 0.9
234200–249set5/5–spoon 0.5, plate 0.6, fork 1.0, cup 0.6
235200–249set5/5–spoon 0.3, plate 0.8, fork 0.4, cup 0.2
236200–249incomplete4/5spoonplate 0.2, fork 0.7, cup 0.1
237200–249set5/5–spoon 0.6, plate 0.3, fork 0.8, cup 0.6
238200–249set5/5–spoon 0.3, plate 0.2, fork 0.4, cup 0.7
239200–249set5/5–spoon 0.4, plate 0.2, fork 0.4, cup 0.2
240200–249set5/5–spoon 0.5, plate 0.3, fork 1.2, cup 0.5
241200–249set5/5–spoon 0.4, plate 0.3, fork 0.5, cup 0.3
242200–249set5/5–spoon 0.1, plate 0.5, fork 0.4, cup 0.2
243200–249incomplete4/5cupspoon 0.1, plate 0.5, fork 0.3
244200–249set5/5–spoon 0.4, plate 0.6, fork 0.3, cup 0.2
245200–249set5/5–spoon 0.2, plate 0.5, fork 0.2, cup 0.3
246200–249set5/5–spoon 0.1, plate 0.1, fork 0.6, cup 0.5
247200–249set5/5–spoon 0.3, plate 0.6, fork 0.4, cup 0.3
248200–249set5/5–spoon 0.4, plate 0.2, fork 0.5, cup 0.2
249200–249set5/5–spoon 0.3, plate 0.6, fork 0.5, cup 0.2
250250–299set5/5–spoon 0.2, plate 0.3, fork 0.4, cup 0.3
251250–299set5/5–spoon 0.2, plate 0.5, fork 0.4, cup 0.4
252250–299set5/5–spoon 0.3, plate 0.4, fork 0.1, cup 0.7
253250–299set5/5–spoon 0.4, plate 0.4, fork 0.4, cup 0.4
254250–299set5/5–spoon 0.1, plate 0.1, fork 0.3, cup 0.2
255250–299set5/5–spoon 0.4, plate 0.1, fork 0.8, cup 0.3
256250–299incomplete4/5platespoon 2.3, fork 2.4, cup 2.2
257250–299set5/5–spoon 0.3, plate 0.1, fork 0.8, cup 0.2
258250–299set5/5–spoon 0.5, plate 0.5, fork 0.1, cup 0.5
259250–299set5/5–spoon 0.3, plate 0.3, fork 0.5, cup 0.4
260250–299set5/5–spoon 0.4, plate 0.3, fork 0.6, cup 1.0
261250–299set5/5–spoon 0.2, plate 0.1, fork 0.3, cup 0.2
262250–299incomplete4/5cupspoon 0.3, plate 0.3, fork 0.6
263250–299set5/5–spoon 0.1, plate 0.7, fork 0.3, cup 0.4
264250–299set5/5–spoon 0.4, plate 0.5, fork 0.4, cup 2.4
265250–299set5/5–spoon 0.3, plate 0.5, fork 0.2, cup 0.2
266250–299set5/5–spoon 0.3, plate 0.1, fork 0.3, cup 0.2
267250–299set5/5–spoon 0.1, plate 0.4, fork 0.5, cup 0.3
268250–299set5/5–spoon 0.5, plate 0.4, fork 0.5, cup 0.1
269250–299set5/5–spoon 0.4, plate 0.2, fork 0.5, cup 0.6
270250–299set5/5–spoon 0.4, plate 0.6, fork 0.1, cup 0.1
271250–299set5/5–spoon 0.3, plate 0.3, fork 0.6, cup 0.3
272250–299set5/5–spoon 0.2, plate 0.3, fork 0.5, cup 0.1
273250–299set5/5–spoon 0.4, plate 0.2, fork 0.6, cup 0.6
274250–299set5/5–spoon 0.3, plate 0.4, fork 0.6, cup 0.1
275250–299set5/5–spoon 0.3, plate 0.5, fork 0.6, cup 0.0
276250–299set5/5–spoon 0.5, plate 0.1, fork 0.9, cup 0.8
277250–299set5/5–spoon 0.3, plate 0.3, fork 0.2, cup 0.1
278250–299set5/5–spoon 0.3, plate 0.6, fork 0.2, cup 0.4
279250–299set5/5–spoon 0.3, plate 0.3, fork 0.2, cup 0.1
280250–299set5/5–spoon 0.4, plate 0.5, fork 0.3, cup 0.4
281250–299incomplete4/5cupspoon 0.4, plate 0.6, fork 0.2
282250–299set5/5–spoon 0.6, plate 0.6, fork 0.4, cup 0.2
283250–299set5/5–spoon 0.3, plate 0.2, fork 0.5, cup 0.1
284250–299set5/5–spoon 0.4, plate 0.3, fork 0.7, cup 0.3
285250–299set5/5–spoon 0.5, plate 0.7, fork 0.2, cup 0.2
286250–299set5/5–spoon 0.5, plate 0.3, fork 0.6, cup 0.4
287250–299set5/5–spoon 0.6, plate 0.1, fork 0.9, cup 0.1
288250–299set5/5–spoon 0.3, plate 0.2, fork 0.6, cup 0.6
289250–299set5/5–spoon 0.3, plate 0.5, fork 0.1, cup 0.5
290250–299set5/5–spoon 0.4, plate 0.6, fork 0.3, cup 0.5
291250–299set5/5–spoon 0.1, plate 0.4, fork 0.4, cup 0.1
292250–299set5/5–spoon 0.5, plate 0.2, fork 0.8, cup 0.2
293250–299set5/5–spoon 0.6, plate 0.4, fork 0.4, cup 0.1
294250–299set5/5–spoon 0.5, plate 0.2, fork 0.7, cup 0.5
295250–299set5/5–spoon 0.3, plate 0.7, fork 0.2, cup 0.3
296250–299set5/5–spoon 0.1, plate 0.3, fork 0.2, cup 1.4
297250–299set5/5–spoon 0.1, plate 0.5, fork 0.2, cup 0.5
298250–299incomplete3/5platespoon 0.2, cup 0.4
299250–299set5/5–spoon 0.6, plate 0.1, fork 0.6, cup 0.8
850850–899set5/5–spoon 0.1, plate 0.5, fork 0.5, cup 0.5
851850–899set5/5–spoon 0.1, plate 0.4, fork 0.5, cup 0.5
852850–899set5/5–spoon 0.1, plate 0.2, fork 0.5, cup 0.2
853850–899set5/5–spoon 0.4, plate 0.5, fork 0.2, cup 0.1
854850–899set5/5–spoon 0.2, plate 0.4, fork 0.3, cup 0.2
855850–899set5/5–spoon 0.4, plate 0.5, fork 0.1, cup 0.2
856850–899set5/5–spoon 0.3, plate 0.2, fork 0.5, cup 0.2
857850–899incomplete3/5platespoon 0.3, cup 0.5
858850–899set5/5–spoon 0.4, plate 0.4, fork 0.3, cup 0.3
859850–899set5/5–spoon 0.3, plate 0.4, fork 0.3, cup 0.2
860850–899set5/5–spoon 0.2, plate 0.5, fork 0.6, cup 0.2
861850–899set5/5–spoon 0.3, plate 0.1, fork 0.9, cup 0.2
862850–899set5/5–spoon 0.3, plate 0.4, fork 0.5, cup 0.4
863850–899set5/5–spoon 0.7, plate 0.2, fork 0.6, cup 0.2
864850–899set5/5–spoon 0.1, plate 0.5, fork 0.3, cup 0.2
865850–899set5/5–spoon 0.3, plate 1.0, fork 0.1, cup 0.5
866850–899set5/5–spoon 0.4, plate 0.4, fork 0.6, cup 0.4
867850–899set5/5–spoon 0.5, plate 0.1, fork 0.8, cup 0.2
868850–899set5/5–spoon 0.2, plate 0.3, fork 0.7, cup 0.6
869850–899set5/5–spoon 0.3, plate 0.5, fork 0.2, cup 0.3
870850–899set5/5–spoon 0.3, plate 0.2, fork 0.5, cup 0.5
871850–899set5/5–spoon 0.2, plate 0.4, fork 0.5, cup 0.2
872850–899set5/5–spoon 0.6, plate 0.4, fork 0.9, cup 0.2
873850–899set5/5–spoon 0.4, plate 0.5, fork 0.7, cup 0.4
874850–899incomplete2/5platespoon 0.6
875850–899set5/5–spoon 0.3, plate 0.3, fork 0.2, cup 0.2
876850–899set5/5–spoon 0.6, plate 0.6, fork 0.5, cup 0.2
877850–899set5/5–spoon 0.3, plate 0.4, fork 0.4, cup 0.2
878850–899set5/5–spoon 0.2, plate 0.3, fork 0.4, cup 0.3
879850–899set5/5–spoon 0.4, plate 0.2, fork 0.4, cup 0.2
880850–899set5/5–spoon 0.0, plate 0.6, fork 0.2, cup 0.3
881850–899incomplete4/5cupspoon 0.4, plate 0.8, fork 0.2
882850–899set5/5–spoon 0.4, plate 0.6, fork 0.2, cup 0.4
883850–899set5/5–spoon 0.2, plate 0.1, fork 0.6, cup 0.5
884850–899incomplete2/5platespoon 0.2
885850–899set5/5–spoon 0.5, plate 0.5, fork 0.2, cup 0.5
886850–899set5/5–spoon 0.3, plate 0.8, fork 0.2, cup 0.4
887850–899set5/5–spoon 0.4, plate 0.1, fork 0.4, cup 0.5
888850–899set5/5–spoon 0.4, plate 0.3, fork 0.5, cup 0.4
889850–899set5/5–spoon 0.1, plate 1.3, fork 2.3, cup 0.6
890850–899set5/5–spoon 0.4, plate 0.7, fork 0.1, cup 0.1
891850–899set5/5–spoon 0.3, plate 0.3, fork 1.0, cup 0.4
892850–899set5/5–spoon 0.3, plate 0.4, fork 0.4, cup 0.3
893850–899set5/5–spoon 0.4, plate 0.3, fork 0.5, cup 0.2
894850–899set5/5–spoon 0.3, plate 0.6, fork 0.4, cup 0.5
895850–899set5/5–spoon 0.4, plate 0.7, fork 0.7, cup 0.3
896850–899set5/5–spoon 0.3, plate 0.1, fork 0.8, cup 0.9
897850–899set5/5–spoon 0.2, plate 0.3, fork 0.2, cup 0.2
898850–899set5/5–spoon 0.4, plate 0.7, fork 0.1, cup 0.0
899850–899set5/5–spoon 0.2, plate 0.3, fork 0.4, cup 0.2
Wrist camera view of a gripper closing on the spoon as it
is handed across.
Arm B's wrist camera during a hand-off — one of the three views the policy sees. At run time there are no simulator object poses, only cameras and joint angles.

Where it degrades

The same 50 held-out tables (seeds 200–249) with the scene pushed past what the policies were trained on. Each row is paired against the first: same tables, one thing changed.

ConditionFixed sequenceFull agent
Training ranges and sizes — the baseline these are paired against44/5046/50
Friction, masses, light, colours widened ×1.545/50–
The same, widened ×2.040/5040/50
Plate and cup sizes ±10%, cutlery length ±10%35/50–
Plate and cup sizes ±20%, cutlery length ±10%25/5027/50
Cup size only ±20%38/50–

Widening friction, masses, lighting and colours is survivable. Object sizes are not: the plate and the cutlery were each trained at a single size, and at ±20% a clear majority of the loss is the plate and the cup being missed outright. Two further size fine-tunes lost the trained size and were not shipped. The grader itself is size-proof — an object set on its target passes on all 50 tables at ±20%.

On the Intel CPU

An Intel Core i5-13600KF desktop CPU, no discrete GPU and no Core Ultra iGPU or NPU. Everything that runs the robot runs there: the Qwen3-VL-4B INT4 planner on OpenVINO GenAI, the five ACT policies on OpenVINO INT8 weights, and the ResNet18 camera classifier. Training and one PyTorch reference row used a GPU; nothing at run time does.

The latency that buys closed-loop control

Median over the five deployed skill policies, idle machine, batch 1.
VariantLatency, medianIR size
PyTorch FP32 eager, same CPU38.9–44.8 ms–
OpenVINO INT8 weights — deployed15.5–15.8 ms33.0 MB

At 15.5–15.8 ms a forward pass fits inside every 40 ms control step, so the policy re-runs each step and blends overlapping action chunks. That is what makes the hand-off work: re-planning every ten actions instead froze the spoon at the pause before arm A lets go.

The rungs that were rejected

The ladder stops at INT8 weights, chosen on task success rather than on output error.

Two models, one CPU, at the same time

The policy has a 40 ms budget per control step while the 4B planner is generating.

SchedulingControl step p50 / p99Steps over 40 ms Planner answer, median
Control alone24.46 / 35.62 ms0.13%–
Control + planner, default scheduling52.84 / 70.29 ms97.26%4.18 s
Control on the P-cores, planner on the E-cores30.29 / 54.34 ms11.06%5.55 s
The same, threads pinned — deployed29.31 / 55.44 ms5.99%5.86 s

Left to the default scheduler the planner makes almost every control step late. Putting control on the P-cores and the planner on the E-cores fixes it, and costs the planner about a second. The first plan is different: the arms are still, so it runs on every core — a median of 7.1 s against 14.3 s on the E-cores alone, same plan on all ten demonstration commands.

Energy, CPU package power above idle: 3.50 J per inference in PyTorch, 1.43 J on OpenVINO INT8 weights.

How it was built

Each skill on its own reached about 90–100%. Chained together, the first run set 0 of 10 tables. The loop that closed the gap was the same every time.

Three attempts met that bar and were not shipped:

AttemptBar, written firstResult
Cup, 100 more size demonstrationsfull tables at the trained size ≥ 47 of 5045 of 50
Spoon trained on its own failed graspsspoon first attempt ≥ 95 of 10094 of 100
Putting a knocked plate back (classifier v4 + plate fine-tune)≥ 60 of 80 knocked plates put back30 of 80

The hand-off itself is not a design flourish: arm A sits at x = −0.30 m and arm B at +0.30 m, and over 50 held-out tables inverse kinematics reaches the other arm's targets on 0 of 50. Neither arm can do any part of the other's work, so cutlery from A's drawer changes hands mid-air.

The repository