HexaShell: A Thin Harness for Exploring the Limits of VLM Agents as Robot Coding Agents
Abstract
Agents built on vision language models (VLMs) now compete with learned policies on robot manipulation leaderboards. We ask how far a coding agent can go when it controls a robot instead of a computer, and where it stops. Our system, HexaShell, keeps the harness thin: it only turns the agent's commands into robot motion. The agent drives a robot with two arms through one command line. It sees three RGB cameras and knows their calibration. After each failed attempt, the agent reads the log, finds the cause, and writes or fixes small programs called tools. In this way it keeps what it learns as code, as a coding agent does when it fixes a failing test. The tools may use only what the robot observes. They use triangulation to find where objects are, relative to each other and to the gripper. If two cameras see the same point, the point lies where the two camera rays meet. If a point lies on a known plane, such as the table or the top of a block, it lies where its ray meets that plane. When the head camera is not enough, the robot moves a wrist camera to get a second view. We build the tools on only ten layouts of one seed per task, then freeze them and test them on ten new layouts of the same seed. We use Codex with GPT-6-Astra at medium reasoning effort. On all 42 RoboDojo tasks, HexaShell reaches a success rate of 39.7% and a progress score of 48.0, averaged in the same way as the leaderboard. This is a new state of the art on RoboDojo. The limit is contact, not reasoning: pushing reaches 92.5% and memory tasks 65.0%, but tight insertion only 8.3%. When the agent fails, it usually sees the failure but cannot make the motion work. We open source the tools evolved so far at https://github.com/HexaFuture/HexaShell.
Figures & tables
| Triangulation | Depth Anything | Rendered depth | ||||
| Type | Succ. | Prog. | Succ. | Prog. | Succ. | Prog. |
| Generalization | 34.2 | 37.7 | 26.7 | 30.0 | 45.4 | 51.5 |
| Precision | 21.3 | 28.4 | 7.5 | 11.9 | 41.3 | 47.3 |
| Long-Horizon | 18.8 | 32.2 | 13.8 | 29.2 | 32.5 | 44.2 |
| Memory | 73.3 | 73.3 | 55.0 | 58.0 | 66.6 | 66.6 |
| Open | 43.8 | 46.6 | 45.0 | 48.1 | 58.5 | 60.7 |
| Triangulation | Depth network | |
| Executed steps spent on viewing | 3.6% | 0.7% |
| Episodes with a viewing move | 180 (43%) | 40 (10%) |
| viewing steps per step limit, median | 4.9% | 2.9% |
| Successes | 152 | 118 |
| step limit used, median | 70.0% | 63.1% |
| Failures that used 75% of the limit or more | 189 / 268 | 228 / 302 |
| Success % | Failed episodes, % | ||||||||
| Class | Var. | None | DN | Ours | VPP2 | At 0 | Decl. | Exh. | Gave up |
| R rigid pick, place, stack | 22 | 36.9 | 44.1 | 50.0 | 30.0 | 3 | 29 | 60 | 9 |
| Pu push, slide, press | 4 | 60.0 | 67.5 | 92.5 | 24.7 | 0 | 33 | 33 | 33 |
| Mv moving objects | 2 | 33.0 | 30.0 | 40.0 | 43.0 | 0 | 46 | 15 | 38 |
| In tight insertion | 12 | 1.7 | 1.7 | 8.3 | 28.1 | 7 | 32 | 53 | 15 |
| Df deformable, fluid | 6 | 26.0 | 30.0 | 33.3 | 49.4 | 2 | 15 | 77 | 8 |
| Task | Layout | Class | Fails | Found | Changed | Edit | Min. | Next | Retest | |
|---|---|---|---|---|---|---|---|---|---|---|
| Push T | 2 | Pu | 2 | area check counted grid cells, so cameras with different pixel sizes disagreed; height refused | area from each pixel’s footprint on the plane | +49/ 11 | 7 | 354/600 | pass | 10/10 |
| Swap T | 0 | R, M | 2 | colour mask mixed top and side faces; height failed seven times | match colour by hue, keep the bright top face | +75/ 5 | 8 | 285/400 | pass | 10/10 |
| Play Xylophone | 1 | Ar | 4 | one camera put the held mallet head 23 mm off | match a second view and triangulate | +109/ 7 | 5 | 377/500 | pass | 6/10 |
| Match and pick from conveyor | 4 | Mv | 1 | pick schedules shorter than the arm’s motion; two aborts | estimate motion cost first, close later | +132/ 5 | 6 | 587/700 | pass | 7/10 |
| Play tic tac toe | 0 | R, S | 3 | last ring needed 146 steps, 84 left | turn the gripper while moving | +194/ 5 | 11 | 1028/1100 | pass | 9/10 |
| Fold clothes, cluttered | 1 | Df | 1 | grasp point 1.5 mm from the cloth edge | require 12 mm of cloth around the point | +112/ 12 | 9 | 344/500 | fail | 6/10 |
Appendix figures & tables5 assets
Supplementary material from the paper’s appendix.
Appendix
| Type | Task | Phys. | Dec. | RGB | Depth net. | Rendered % | VPP2 % | PhysicalRSI % |
| Generalization | arrange largest number | R | S | 1/5 / 1/5 | 3/5 / 2/5 | 80 / 40 | 4 / 0 | 1.3 / 21.3 |
| fold clothes § | Df | G | 4/5 / 1/5 | 2/5 / 1/5 | 30.7 / 18.7 ⋆ | 74.7 / 61.3 | 41.3 / 34.7 | |
| hang mugs § | In | G | 0/5 / 0/5 | 0/5 / 0/5 | 40 / 0 | 64 / 0 | 0 / 0 | |
| make toast § | Ar | G | 0/5 / 0/5 | 0/5 / 0/5 | 0 / 0 | 56 / 22.7 | 0 / 0 | |
| pack objects into box § | R | S | 0/5 / 0/5 | 0/5 / 0/5 | 0 / 40 | 10.7 / 2.7 | 5.3 / 0 | |
| pour liquid into cup § | Df | G | 0/5 / 0/5 | 1/5 / 2/5 | 94.7 / 58.7 ⋆† | 68 / 32 | 93.3 / 9.3 |
| Type | Task | Commands | Lines | Rounds | View | Retest |
| Generalization | arrange largest number | 7 | 1,785 | 23 | 0.9 | 3/10 |
| fold clothes | 7 | 2,310 | 21 | 0.0 | 6/10 | |
| hang mugs | 13 | 2,944 | 12 | 12.4 | 0/10 | |
| make toast | 15 | 2,022 | 11 | 4.5 | 1/10 | |
| pack objects into box | 7 | 1,758 | 16 | 0.2 | 0/10 | |
| pour liquid into cup | 4 | 2,548 | 31 | 20.3 | 1/10 |
| Task | Round 1 | Round 2 | % | What the note supplied |
|---|---|---|---|---|
| press by number | 0/10 | 10/10, 10/10 | 100 | confirm after each group; no extra press |
| pour liquid into cup | 0/5 / 2/5 | 5/5 / 5/5 | 94.7 / 58.7 | judged once the bottle is upright again |
| pour balls into vase | 2/10 | 10/10, 9/10 | 82.7 | three end conditions; reach failures |
| deposit coin | 3/10 | 6/10 | 29.3 | coin must fall through; wrist roll drops it |
| fold clothes | 3/5 / 0/5 | 2/10, 4/10 | (30.7 / 18.7) | keypoint windows and fold order |
| make kong | 0/10 | 8/10 | 11.0 | a second, unstated stage |