4× speedOpus 5.5 + MCP
384 teleoperated demos: D1 + D2 + D3 Combined, 128 per task (one sponge, several sponges, distractors), 64 at marked and 64 at random positions. ACT, SmolVLA and Pi0.5 were each trained on all of it. Scored /20: 8 marked trials ×1.0 + 8 random ×1.5.
Zero demos, no training. Every scene is a new random layout, so every success counts 1.5: 10 runs = 15, scaled to /20. A human checked every run.


| K | R | Mixed | Combined | Cross-task | |
|---|---|---|---|---|---|
| T1 | D1-K | D1-R | D1-Mixed | D1-Combined | D_Universal · D_D2D3 D_D1D2-Half · D_D1D3-Half |
| T2 | D2-K | D2-R | D2-Mixed | D2-Combined | |
| T3 | D3-K | D3-R | D3-Mixed | D3-Combined |








--policy.type=act · 60 000 steps · batch 32--policy.path=lerobot/smolvla_base · 20 000 steps--policy.path=lerobot/pi05_base · BF16 · H200claude -p · effort high · robot tools onlyhuggingface/lerobot-gputrain_matrix.sh all & train_combo_matrix.sh-all + 4 combo)--policy.dtype=bfloat16 · batch size 32train_expert_only=true, vision encoder frozenGets the one-line task, loads its project memory, then plans, acts and checks one tool call at a time.
Stored on the Jetson, per project. Every run starts by loading it and ends by adding to it. Run 1 started empty; after 21 runs it held:
pick_sponge_to_bowl: hover, align on the wrist image, descend, close, check the grip load, lift, carry, release.bowl_drop, the release point above the bowl, and max_direct_grasp_x = 33 cm.| System | Training | Score /20 | Median time | API cost per run | Decision speed | ||
|---|---|---|---|---|---|---|---|
| Task 1 | Task 2 | Task 1 | Task 2 | ||||
| ACT | 384 demostrained from scratch | 19.0 | 15.5 | 112.0 s | 29.0 s | ≈ $0* | ~30 Hzaction chunks |
| SmolVLA | 384 demosfine-tuned | 20.0 | 5.0 | 64.5 s | 38.5 s | ≈ $0* | ~30 Hz |
| Pi0.5 | 384 demosfine-tuned | 20.0 | 13.0 | 113.5 s | 48.5 s | ≈ $0* | ~6 Hz |
| Opus 5.5 + MCP | 0 demosno training | 20.0 | 20.0 | 123 s | 95 s | $0.56 · $0.46Task 1 · Task 2, list price | 3.5 s per LLM call~12 calls per run; the arm moves at 50 Hz |
4× speed# saved in run 1, used whenever x > 33 cm drag_sponge_closer(x, y) set_gripper 0 # close the jaws travel x, y, z=10 move_by dx=+1.5 dz=-6.5 # just beyond it move_by dz=-2.7 # down to the table move_by dx=-9 speed=0.2 # pull 9 cm closer move_by dz=+6 # lift, then re-detect


“The saved drop point was for the old orange bowl at (24, 16), so I didn’t use it. I checked the new bowl with the wrist camera before letting go.”Claude’s report after the run. Nobody told it what had changed.
4× speedThe study, the 384 demos and every IL rollout, open on GitHub and Hugging Face.