Using vision-language models (VLMs) to control robots is not a new idea. What is new is how easy and capable it has become. With models as strong as GPT-6 Astra and Opus 5.5, you no longer need a special system or careful prompt engineering. Give a coding agent a robot SDK, and it can follow commands like "put the fruit in the basket" or "open the door", often getting the job done.
Developers have shown many such demos. Agents have inserted a plug after one video demonstrationGPT-Policy-Eval One-shot Plug Insertion, learned to type on a keyboardLearning to Type and Self-express on a Keyboard, painted with a brushPainting the Golden Gate Bridge from a Semantic Prompt, controlled a robot they had never seenRapid Adaptation to an Unseen Robot Embodiment, copied a mobile-manipulation task from a single videoMobile Manipulation with In-context Learning, and solved tabletop and Rubik’s-cube tasks in simulationLLM Harness for Tabletop Robot Control,Robot Hands Solve a Rubik’s Cube. Others have benchmarked models and agents on real robotsRobocurve. “GPT‑6 Astra on robot arms.” September 4, 2026. Robocurve,XDOF Ember-0,RoboQuest. Closest to our study, Agent as PolicyJia et al. “Agent as Policy for Robotic Manipulation.” arXiv:2609.12541, 2026. Agent as Policy runs Codex and Claude Code as the robot policy and shows that saved experience makes later trials faster. AA-RoboticsAA-Robotics v0.1 Artificial Analysis, 2026. reports about 30 minutes per task for most models, against about 20 seconds for a person.
Still, few have looked closely at how a coding agent solves a robot task. What steps does it take? What tools does it build? What does it do well, and where does it struggle? We care because the answer tells us what to build. Some gaps are worth filling with better tools. Others the next, stronger model will close anyway, so building for them would be wasted work. One thing to emphasise: this study does not compare models or companies. We just want to understand how the agent works.
Experiment setup
We picked three tasks:
A coding agent solves a robot task in two stages. We test each one on its own:
- Agent learning: the agent meets the task for the first time. It checks what tools and environment it has, builds the tools it is missing, and works out how to solve the task. At the end, we ask it to "summarize your method and create tools". It writes these into a skill folder: notes for its future self, plus the code that worked.
- Agent execution: we reset the scene and start a fresh session. The new agent has no memory of the first one. It gets the same task plus one line: "A skill from an earlier attempt at this task is in your skills." We run it once in the same scene, then once after moving things around, to see whether the skill still works when the world changes a little.
- checks tools and environment
- builds missing tools: pixel → 3D point
- solves the task
- new session loads the skill
- little left to build
- does the task again
Our robot is a Dexmate Vega, a wheeled bimanual mobile manipulator: a wheeled base, a torso, two arms with grippers, a camera in its head and one on each wrist. For the agent, we use Claude Code with Opus 5.5 at medium effort, a balance of speed and thinking, and Codex with GPT-6 Astra at Ultra effort, which thinks the most.
Instead of letting the agent drive the robot with code, we give it a small set of MCP tools: move a hand to a pose, turn the head, open or close a gripper, step the base, and take a look (camera images with depth, plus where each joint is). Every motion goes through our control service, which checks joint limits and self-collision. That's all it gets. There is no object detector, so to find the banana the agent has to look at the image and work out where it is. There is no path planner, so a hand moves in a straight line, and if the table is in the way, that's the agent's problem. The agent can write and run code to help itself think, but it can only move the robot through the tools. The whole system prompt is one sentence: "You control a real Dexmate VEGA robot through the MCP tools." We wanted to see what the agent does when it is on its own.
Results and findings
With the original tool interface, both models succeeded in all 24 fruit and door trials. The bowl-rack task, which requires more precise manipulation, had no successful trials in this condition and is discussed separately. Runs also varied substantially within a model and task. One Opus door learning run took 4.58 minutes and another 9.13 minutes. Executions reusing the first skill took 2.92 and 4.44 minutes, while those reusing the second took 6.45 and 6.65 minutes.
Learning a task took 4–13 minutes and cost $1.9–9.4. But the cost of learning matters less than the cost of execution. Learning is paid once. Execution is paid every time the robot does the task, and it is still expensive. With Opus, it takes about 2.5 minutes and $1.2 to put one fruit in a basket, and about 5 minutes and $2 to walk through one door. At this speed and cost, clearing a table of 20 objects would take nearly an hour and cost about $25. If the robot had to pass 5 doors to come find you, that’s about 25 minutes and $10. With Astra, the table would take over 3 hours and nearly $90, and the 5 doors nearly an hour and almost $40. These results made us look at what the agent actually does during learning and execution.
Where does the agent spend its time and effort?
Take away
A ready plan still leaves substantial work in checking, adapting, and coordinating execution.
- Recorded robot actions occupy only 20–36% of task time across the task/model groups; repeated checks, code writing, and response gaps fill much of the interval between actions.
- Saved procedures reduce some work, but execution still requires local decisions. Fixed sleeps can add waiting even after motion finishes.
The agent solves tasks through a repeated loop: observe → plan and calculate → act and monitor → verify and adjust. Here we show the full process of an agent learning and executing the fruit pick-and-place task. Each return to the model adds time: in measured observation-to-next-tool cycles with visible model output, the next tool request arrives after an average of 5.6 seconds for Opus and 12.1 seconds for Astra. These gaps include input handling, reasoning, response generation, and latency. The agent repeats these cycles as it checks the scene and prepares the next action; writing or adapting code counts toward task time in both learning and execution.
Observe and locate
The agent reads the task and control interface, requests camera images, and selects pixels for the banana and basket.
The model identifies the objects and chooses where to measure.
Read the skill and observe
The agent loads the saved fruit-placement procedure and requests camera images and robot state. It identifies the banana and basket in the new scene.
The skill explains how to pick and place; the current images determine where to act.
Planned procedures can be ready long before the task is finished.
In one fruit execution run, a saved planner produces the waypoint sequence by 19 seconds, yet completion takes 161 seconds. Across the successful fruit and door trials with the original interface, recorded robot actions occupy only 20–36% of task time on average across the four task/model groups. Much of the elapsed time falls between actions.
Another fruit execution shows what can fill that time. Moving above the basket takes 4.2 seconds, followed by 126 seconds before a centering correction is requested. The recording below follows that interval: the agent obtains one fresh RGB-D observation, writes and runs four Python checks on the saved data, and prepares an enlarged crop before choosing a 6.5 cm sideways correction.
Fruit execution · time since arrival above the basket
Observe and save the scene
At +0.4 s, the agent requests one fresh RGB-D observation and saves the images, depth, camera pose, and robot state.
The following checks reuse this observation while the robot waits above the basket.
The 126 seconds span repeated rounds of choose a check → compose code → run it → interpret the result → refine the next pose. Coding therefore continues during execution: even with a saved skill, the agent writes new code to check the current geometry and adapt the next move.
Motion completion does not end a fixed sleep.
After issuing a motion, the agent receives a message that execution has started and can call sleep while the robot continues moving. The agent chooses the sleep duration; the timer does not end automatically when motion completes. In this door example, the action finishes at 4.2 seconds, the sleep returns at 6.6 seconds, and the next command arrives at 8.6 seconds: 2.4 seconds of sleep after completion, followed by a further 2.0-second response gap.
Motion starts
The agent requests a left-hand approach pose for the door task. The control service returns while the movement is still underway.
The agent can make another tool call before the robot finishes.
Across eight Opus trials using fixed sleeps, waiting outside recorded actions consumes at least 42.5 seconds per trial on average, about 14% of task time. The mismatch comes from estimating a duration and starting the timer after motion is already underway. Some Astra runs instead use an automated status-polling loop, which can react to completion.
Saved skills reduce agent task time.
Opus’s task time falls by about 33% on average, while Astra saves only about 10%. Astra’s traces show that it continues to write checking code, revisit geometry, and reason through local corrections during execution, even with a saved procedure. This additional work may explain why reuse produces only modest time savings. Next, we examine what agents package into those tools and skills.
What tools and skills do agents build?
Take away
Reusable tools reduce some work, but key decisions and supervision remain with the model.
- Agents save geometry helpers, task procedures, and lessons, while the model still chooses targets, contact strategies, and corrections.
- Providing more tools replaces some calculations but does not reliably improve time, cost, or success: interpreting outputs and adapting the plan still takes work.
Agents build helpers and retain key decisions
Across tasks and models, agents repeatedly build helpers for the same operations: converting camera measurements into robot coordinates, calculating poses from chosen targets and alignments, preparing command sequences, and checking what happened. Common tools include:
- Locate an object in 3D: combine depth, camera intrinsics, and camera pose to turn an image pixel into a point in the robot’s coordinate frame.
- Calculate hand poses and prepare moves: quaternion helpers convert the agent’s chosen alignment into rotations. Scripts produce command sequences from measured object positions.
- Check motion completion: watchers check whether the robot has settled and a commanded action has finished.
- Inspect geometry and outcomes: depth-cloud and gap checks help inspect a doorway. Other helpers preserve camera snapshots, compare observations, or calculate the space occupied by the robot’s body.
The details follow the task. For fruit, helpers calculate grasp and basket poses and support checks after a short test lift. For doors, they estimate lever contact and whether the whole robot will fit. Examples include a top-down depth view, a gap estimate, and a helper that uses the robot description to calculate link positions and clearance against the door frame.
Many important decisions remain with the core model. For example, in the learning stage, the agent often identifies the object and selects image pixels itself; its projection helper converts those pixels into robot coordinates. This division of work appears across four capabilities:
Capability | Decisions made by the core model | Support from generated tools |
|---|---|---|
Visual grounding | Identify the relevant object or part and select image pixels or regions. | Sample depth, project pixels into 3D, and sometimes extract color masks. |
Choosing an interaction | Choose where and how to make contact—for example, grasp across the banana or press down on the door lever. | Calculate rotations and generate parameterized pose sequences. |
Adapting the procedure | Decide when to change the approach, insert an intermediate pose, or retry a failed grasp. | Calculate revised poses and check candidate routes using the available motion services. |
Interpreting outcomes | Judge whether the object is held, the door is open, or another correction is needed. | Check motion completion, preserve observations, and quantify geometric changes. |
This distinction also separates motion completion from task success: a helper can report that the commanded movement has finished, while the model must still judge whether it achieved the intended result.
Skills combine procedures, tools, and lessons
During the learning stage, the agent develops a method and supporting tools, then records them for a fresh execution session. A saved skill combines a written procedure, reusable code, and lessons from the attempt. For example, one learning run on the fruit task saves the following files:
File | What it contains |
|---|---|
| The pick-and-place procedure, instructions for using the tools, example measurements, and lessons from the attempt. |
| Converts selected image pixels and depth into positions in the robot’s coordinate frame. |
| Converts between rotation matrices and quaternions for hand orientation. |
| Takes fruit and basket positions and the fruit’s orientation, then prints a sequence of hand-pose and gripper commands. |
Inside the SKILL, the agent records the following five-step procedure (condensed):
- Perceive. Identify fruit and basket pixels in the head-camera image, then use
pixel_to_base.pywith depth and camera pose to calculate their positions in the robot’s coordinate frame. - Plan. Pass the fruit and basket positions and the fruit’s orientation to
plan_pick_place.py. The script prints a command sequence; the agent issues the commands one at a time and checks that each motion has finished. - Grasp. Approach from above with the fingers closing across the fruit’s width. Check the wrist-camera image to confirm that the fruit is centered between the fingers before closing the gripper.
- Transfer. Back out through a tilted intermediate pose, then approach the basket with the hand yawed 45 degrees toward it. This records the route used to overcome the arm’s difficulty reaching sideways in the original orientation.
- Release and verify. Lower to about 0.20 m above the table, open the gripper, retreat upward, and check in the head-camera image that the fruit is inside the basket.
The SKILL also preserves example fruit and basket coordinates, table and rim heights, and a hand orientation used for the transfer. Its lessons explain why the procedure includes intermediate moves: a large hand rotation was refused, so the agent split it with a 45-degree tilted waypoint. When packaging the skill, the agent encoded this intermediate waypoint in plan_pick_place.py and explained its purpose in the written procedure. It also notes that torso movement changes the head-camera pose, requiring fresh projection when the observation changes. These details describe the recorded attempt; the next session must check them against its own scene.
Providing tools does not reliably improve results
If agents repeatedly build similar helpers, can we save work by providing those capabilities in advance? We compare the original tool interface with an expanded interface. The original interface already provides camera images, depth, robot state, and Cartesian hand motion; inverse kinematics is handled by the control service in both conditions. The added tools expose object localization and more explicit motion planning:
Capability | Previous version | Added method and tool |
|---|---|---|
Locate objects | Model-selected pixels or custom image masks, followed by pixel-to-3D code. | SAM3 text-prompted segmentation (perception.segment), followed by RGB-D back-projection into robot coordinates. Returns masks, confidence, 3D centroids, axes and extents; object_cloud and overlay expose points and visual checks. |
Find reachable hand poses | Agent proposes poses; the control service solves IK when a motion is submitted. | Orientation sampling with damped-least-squares IK from multiple joint configurations (control.reachable_poses). Returns feasible orientations, joint solutions and joint-limit margins without moving the robot. |
Check a proposed path | Agent reacts to refused motions and constructs intermediate waypoints. | Sampled trajectory checks (control.check_waypoints): joint limits, robot collision spheres, table clearance, and agent-supplied obstacle or held-object geometry. Reports the failing step and clearance. |
Execute coordinated motion | Individual Cartesian hand commands, with service-side IK. | Explicit arm-and-torso commands (control.move_whole_body), using joint-space interpolation or Cartesian waypoint IK with smooth minimum-jerk timing. |
To our surprise, more tools did not translate into better overall results in these runs. Mean completion time and model cost both increased in 75% of task/model/stage comparisons.
Task / model | Learning: Δ time / cost | Execution: Δ time / cost | Success rate: original → expanded |
|---|---|---|---|
Fruit / Opus | -18% / -9% | +15% / +32% | 100% → 100% |
Fruit / Astra | -2% / +44% | +9% / +66% | 100% → 100% |
Door / Opus | +22% / +8% | +8% / +26% | 100% → 100% |
Door / Astra | +18% / +32% | +61% / +56% | 100% → 66.7% |
Changes are relative to the original interface; “+” means more time or cost. Means include successful runs only, and sample sizes are small. Learning is the initial attempt; execution reuses its saved skill in a fresh session. Time excludes subsequent skill packaging; model-session cost may include in-session writing, but excludes separate skill writing, judging and tool-service costs.
The agents did adopt the supplied tools: all fruit and door attempts used waypoint checks and whole-body motion, and more than 90% used segmentation. The traces show both the work these tools replace and the decisions they leave to the agent:
Perception replaces some calculations but still needs interpretation. In one fruit run, the agent used the 3D centroids returned by SAM3-based perception to set target positions, replacing manual pixel selection and projection for that localization step. It still rejected an uncertain extra basket detection as a shadow and worked out the hand’s alignment. In another run, an uncertain “banana” result prompted another query with “yellow banana” and “yellow fruit” and a zoomed crop. The tool supplies masks and geometry; the agent selects detections and judges whether the grasp worked.
Planning can expand into repeated search and revision. In one fruit execution run, the agent made five reachability queries and nine waypoint checks before its first motion, about 2.7 minutes into the attempt. Those calls occupied only about 23 seconds; the agent also inspected results, recomputed orientations, and revised the approach. Some checks caught paths too close to the table. The run succeeded in 4.79 minutes: the tools returned quickly, but using them still required substantial planning.
The supplied tools replace some helper calculations, while interpreting their outputs and adapting the plan still takes work. Agents continue to write task-specific geometry and pose code; some door runs even bypassed segmentation. These examples do not establish that SAM3 is worse than the model’s vision or that the checks were unnecessary. They show that tool use did not reliably produce faster, cheaper, or more successful task completion.
For the bowl task, the expanded toolbox was still insufficient: all provided-tools trials without simulation failed. One learning run placed the bowl on the rack, but seven attempts to regrasp the rim missed, leaving it unable to return the bowl to the table. The extra tools supplied localization and motion checks, but did not resolve the contact and regrasp decisions needed to complete the task. We next test whether building a simulation helps with this delicate manipulation.
Can building a simulation help?
Take away
Rehearsal can improve the solution, while simulation assumptions limit what a successful test proves.
- In the successful recording, failed rehearsals led the agent from a diameter grasp to a rim pinch before physical execution.
- The agent also chooses geometry, friction, and grasp assumptions. A simulated pass needs validation against real contact, support, and release.
Simulation gives the agent a way to test an interaction before trying it on the robot. Since the earlier bowl-rack trials had not completed the task, even with the expanded toolbox, we added an instruction to build a simulation and rehearse the solution first:
You must build a physics simulation of the real scene and run your whole solution in it first, then do it on the real robot. Blender and Isaac Sim (conda env
behavior) are installed.
With simulation, agents achieved a 25% overall success rate. In a separate successful recording, shown below, observation, simulation building, and rehearsal took 46.6 minutes, followed by 2.4 minutes of physical execution. The head and wrist views are aligned by task stage.