Zero-real Agent Policy (ZAP)
A 27B model trained only in simulation beats SOTA VLAs & matches GPT-6 Astra on a real bimanual robot. It is 3× faster and 17× cheaper per task, with zero real-world training data, is as steerable as an LLM, and generalizes to new objects, tasks, and strategies.
Introduction
Pretraining knows what, simulation teaches how
GPT-6 Astra [1] has changed what the robotics community expects from frontier vision-language models. Controlling a robot through a tool harness, it significantly outperforms state-of-the-art vision-language-action models (VLAs) and world-action models (WAMs) [2, 3], and many now expect that robot policies will need frontier-scale models [4]. Yet a trillion-parameter model is slow and costs dollars per task.
Could a much smaller vision-language model already have most of what is needed, given the right factorization and post-training?
We argue a robot policy composes two things:
What the task asks for in this scene
How the robot moves to do it
Zero-real Agent Policy
We introduce Zero-real Agent Policy (ZAP), which teaches a pretrained vision-language model the one skill it lacks: motion control. ZAP acts through a minimal harness: it sets end-effector poses and gripper openings, with no grasp macros or motion primitives, and the same harness runs in simulation and on hardware.
We teach it entirely in simulation, on deliberately simple pick-and-place tasks. The model learns from its own successes, first by fine-tuning on them and then with GRPO [5]. There is no frontier teacher to distill from, and no real-world robot data, whether teleoperation, demonstrations or real rollouts.
On a real robot
Trained in simulation, tested on a real robot
ZAP never sees a real robot during training. It learns to move on simple simulated tasks, then runs zero-shot on a real bimanual robot, on tasks whose objects, goals and strategies appear nowhere in training.
3× faster and 17× cheaper
On real-world tasks selected from RoboLab-120 [6], ZAP matches the performance of GPT-6 Astra running in our harness.
Show per-task results (3 trials per task)
ZAP is far cheaper and faster. Below, both models tackle the same task, placing a can into the grey bin, side by side.
ZAP and Astra solve tasks in a similar number of tool calls, but ZAP executes each tool call much faster and cheaper.
| ZAP | GPT-6 Astra | |
|---|---|---|
| Total time to solve a task | 146 s ± 83 | 397 s ± 159 |
| Turns taken | 21.9 ± 10.9 | 19.4 ± 8.0 |
| Time per turn | 6.2 s ± 4.5 | 19.0 s ± 8.6 |
| Cost per task | $0.29 ± 0.16 | $4.87 ± 3.03 |
Composing the two skills on new real tasks
What we find most exciting is that training only on simulated pick-and-place and stacking tasks carries over to a wide range of harder real-world tasks. The same model handles objects it never saw, goals it was never given, and kinds of manipulation it never practiced.
New objects, new goals
The test tube, the rack and the goal are all new. The model works out the strategy itself: it turns the tube upright in the gripper and seats it in a hole that is hidden from its cameras at the moment of placement.
Steered by the prompt
A VLA's behavior is tightly tied to its training distribution, so changing what you ask for often changes little about what it does [10]. ZAP inherits all the language steerability of language models: change the instruction and the strategy changes with it. Figure 5 used the default prompt, which lets the model pick any hole. Below, we ask it to place the tube in a hole at the top left of the rack instead.
A bimanual handoff it never trained on
We push this further by asking for a completely different strategy: hand the test tube from one arm to the other in mid-air, then place it in the rack. Training contains no bimanual interaction even close to a handoff.
Even so, the model carries out the whole sequence. Getting it right means timing the two grippers against each other: if the giving arm lets go too early the tube falls, and if the receiving arm comes in too low the two grippers collide.
In this episode the model:
- Turns the tube so it points the right way, cap up.
- Brings the right arm, holding the tube, to the middle of the table, above the rack.
- Brings the left arm over the tube and descends from above, just far enough to grasp the cap but not so low that it hits the right arm.
- Closes the left gripper, then opens the right one.
- Moves the right arm out of the way.
- Lowers the tube into a hole in the rack.
Reasoning past what the scene shows
Not only can ZAP manipulate new objects to reach new goals, it can also reason about what a goal means. We ask it to draw an X in the center of a tic-tac-toe board. This is a new task, and it requires reasoning about two things: what a tic-tac-toe board is and where the X should go, and how to draw on a board with a marker.
The second is harder than it sounds. The model has to keep enough contact to leave a line throughout each stroke, without pressing so hard that it breaks or dislodges the marker. It does this with the same move tools it learned on pick-and-place tasks.
We also ask the model to make the winning move in a chess position. This again requires precise manipulation of an object, in a scene it has never seen: chess pieces are small, light and top-heavy, and tip over easily if grasped badly. It also requires reasoning about the rules and strategy of chess itself, to find the one move that delivers checkmate.
None of these objects, scenes or goals appear in training, and neither does drawing, a mid-air handoff or board-game reasoning. Pretraining brings the understanding of the world; simulation only had to teach the model how to move the robot.
Harness
One harness, in simulation and on hardware
The model acts only through tools. We frame each task as a conversation between the model and its environment: the model first writes a plan and names the objects to locate, then repeatedly issues perception and movement tool calls. On every turn it sees fresh camera images, perception results and the robot's measured state. It does not write a program that then runs blind. Because it decides again after every action, it can notice when a grasp slips or an object moves, and adjust.
Everything robot-specific lives in a declarative description, so the same harness runs on the simulated YAM, the real YAM and a Franka the model never trained on.
head + 2 wrist cameras
overhead + 2 wrist cameras
2 overview + 1 wrist camera
- Observe
"red bowl"#2 conf=0.942 … surface_centroid=<0.584,0.135,0.026> … top_z=0.058- Act
move_to(arm: x=0.584, y=0.135, z=0.18, slot_yaw=245, tilt=0)- Result
controller-reached, … TCP off-target 3mm, … rot-off 0deg
The harness has five tools. There are no grasp macros or motion primitives: we found that they raise the floor but also cap the ceiling. Every approach, grasp, lift and release is a sequence of move_to and set_gripper calls the model plans itself.
| Tool | Effect |
|---|---|
move_to | Moves one or both arms to a complete end-effector pose. |
set_gripper | Sets each jaw opening, from 0 (closed) to 1 (fully open). |
change_query | Sets the text descriptions of the objects that perception segments. |
update_todo | Writes a short plan that is repeated in every later observation, so it survives when old turns are dropped from context. |
done | Ends the episode. |
What the base model lacks
Pretraining knows what, but not how
The harness works very well with frontier models like GPT-6 Astra but not with smaller VLMs. In the same harness, base Qwen 3.6 27B [11] succeeds on just 8.3% of RoboLab-120 scenes and 16.7% of real-world trials. A model can fail by missing either semantic reasoning, what the task asks for, or motion control, how to move the robot. We look at how base Qwen 3.6 27B does on both.
It understands the task
In 95% of scenes, the base model's plan correctly identifies the target objects, the destination and the object order. In 70% of scenes, its perception query returns every target and destination object. But even in episodes where both hold, it completes the task only 9% of the time.
It cannot move the robot
Only 36% of the base model's motion calls are correct. 32% are refused by the controller because the requested pose is physically impossible, 15% are misdirected (the right intent but the wrong pose, such as a grasp that stops above the object), and 16% are pointless, such as carrying an empty gripper. The failures mostly come from motion, not from understanding.
The same pattern holds on the real rig: the base model reads the scene and plans the right pick, but cannot turn that plan into the right motion.
Pretraining brings the semantic reasoning, the what of a task, but not the motion control, the how. So motion control is the only skill ZAP has to teach, and it teaches it from first principles, without distilling from a frontier model.
Training in simulation
Simulation teaches how
We close that gap by teaching motion control in simulation, and nothing else. We build our simulated tasks in Isaac Sim [12], with simulated YAM arms whose cameras and arm dynamics are calibrated against the real ones. We design 40 tasks, none of which appear in RoboLab-120, that exercise everyday object manipulation: grasping and lifting, single- and multi-object pick and place, stacking, and reorientation.
The goals are deliberately simple, and none requires deep reasoning. That lets us test whether motion control learned on simple tasks can combine with pretrained semantic reasoning to solve tasks with new goals and strategies. We never introduce any real-world action or teleoperation data; all learning is performed in simulation.
Seeding the model with its own successes
A model that already covers the task space well is much easier to improve with RL, so we first fine-tune on successful agent traces. One option is rejection sampling from the base model or a larger open model. But this is prohibitively inefficient, and many tasks never succeed even after hundreds of samples per task.
Instead, we run a short GRPO warm-up from the off-the-shelf Qwen 3.6 27B, oversample the harder tasks, and mine its successful rollouts for fine-tuning. As the policy improves, harder tasks start to yield successes, so the data comes from a slightly evolved version of the model itself: a self-distillation loop that is close to on-policy. Prior compact robot agents distill from frontier-model trajectories [13, 14, 15]; ZAP has no teacher, so it is not bounded by one.
For tasks that never succeed even after the warm-up, we search a tree over partial episodes. A node is added each time a move_to or set_gripper call finishes and the scene comes to rest. To expand a node, we reset the simulator to the task's deterministic start, replay the node's stored actions, restore the agent's context, and sample a new continuation. Nodes are scored by how often their branches have succeeded, by task progress, and by how rarely they have been tried, and branches that keep failing are pruned. This found successful traces for several tasks that RL sampling never solved.
Reinforcement learning with dense reward
The main GRPO run starts from the fine-tuned checkpoint and trains on all 40 tasks. The simulator knows exactly where every object is, so success can be checked automatically. But some tasks start with zero successes, and on those a pass/fail reward gives no signal at all: if every attempt fails, there is nothing to prefer. We instead give the model a dense ladder of partial credit to climb, designed per task type and judged on the final state of the scene.
We found it crucial that completing the task is rewarded far more than any intermediate step. Otherwise the model can settle for reliably collecting partial credit instead of finishing. The success checker is hardened against reward hacking, for example by requiring that the goal hold for at least half a second.
More on the RL setup
- GRPO in the style of prime-rl [16] and Dr. GRPO [17]: no standard-deviation normalization and no per-sequence length normalization.
- Partial credit: approach scales with the fingertip-to-object distance closed, lift with height up to 8 cm, and transport with the distance to the goal closed. The success reward includes a length penalty that favors faster finishes.
- Turns without a tool call, and turns whose motion command fails validation, get a negative advantage regardless of the episode's score. Only those turns are penalized, not the whole episode. In earlier runs without these penalties, the two error rates reached 4% and 34%; with them, they fall to 0% and 3%.
Results
RoboLab-120 results
To test generalization to unseen tasks at scale, we evaluate on our bimanual YAM adaptation of RoboLab-120, none of whose 120 tasks are in training: ZAP reaches 74.0%, matching GPT-6 Astra and ahead of Claude Opus 5.5 [18].
Same checkpoint, new robot
We take the same checkpoint, trained only on two YAM arms, and run it in simulation on a single-arm Franka. From the agent's point of view, only the system prompt describing the robot changes; the harness stays exactly the same. The Franka differs from the YAM in most of the ways that matter to a policy that outputs joint angles or action chunks: one arm instead of two, seven joints instead of six, a different gripper, different reach and different cameras.
ZAP is unaffected by these differences, because it commands end-effector poses and the harness handles the joints. On RoboLab-120 it reaches 55.9%, ahead of Lakeside and FLUX 3 Action [19], the leading VLA and WAM policies on the current leaderboard [20]. What the model learned in simulation is not a mapping tied to the YAM arms, but how to move a gripper through space to get an object where it needs to go.
Ablations
Same recipe, better data: fine-tuning on 3.9k traces mined from a longer run, especially on the harder tasks, works far better than on 455 traces mined early in GRPO.
The recipe also holds at a smaller scale on another robot. We train a Qwen 3.5 9B directly on single-arm Franka tasks, none of them in RoboLab-120, with fine-tuning on 4.6k mined traces and then GRPO.
Motion, not understanding
Training changes motion, not understanding
If training had changed semantic reasoning, the base model and ZAP would disagree on goals and perception. They do not. The two models agree on the target objects, destination and object order in more than 90% of scenes, and their perception calls return the same objects in 70%. Even when we restrict the comparison to episodes with matching perception, the gap in task success stays large: 9.0% for the base model against 73.6% for ZAP.
The difference is motion control. 85% of ZAP's motion calls are correct, against 36% of the base model's (Figure 11). Below, both models identify the butter box and plan the same pick-and-place, but only one of them can grasp it.
Where the VLA breaks
MolmoAct2 [21], a public VLA for bimanual YAM arms, shows the opposite pattern to the base VLM: it can execute the required motions on these tasks, but struggles with semantic reasoning. It places a Rubik's cube in a bowl in all three trials, but fails all three when asked to place it behind the bowl, putting it inside instead. Although VLAs also start from VLMs, their ability to turn concepts such as behind into actions is constrained by the coverage of their robot training data.
Under the hood
Orientation
Each move_to gives an absolute position of the tool center point, in meters, and a full orientation, in a world frame shared by both arms. Perception reports object positions in the same frame and units, so a measured centroid can be used directly as a target. Orientation is given by three angles:
- Slot yaw ψ is the heading of the jaw slot, the axis a held object lies along between the fingers. It is set along the object to be grasped.
- Tilt τ is the angle of the tool axis from straight down: 0° is top-down and 90° is horizontal. It chooses between a top-down and a side approach.
- Tilt direction ϕ is the compass direction the fingertips tip toward. It picks the side the tool comes in from.
Why not Euler angles or quaternions?
Neither states directly where the gripper points or how its jaws are aligned, the two quantities that decide a grasp. And a horizontal tool, as in a side grasp, lies at an Euler singularity, where a few degrees of physical error can show up as a change of about 100° in the reported angles. Our angles are ambiguous only when the tool points straight down or straight up, where tilt direction has no physical meaning.
What the model sees
At every turn the model sees each camera's image, perception results, and the state of the robot. Perception runs continuously and asynchronously in the background on every camera stream, rather than as a tool the model calls and waits on. The model steers it only through change_query, which it can call at any time, for example to find a missed object or to segment part of one, such as the cap of a tube. Detections are not fused across cameras; the model decides which ones refer to the same object. In simulation, perception runs on the rendered images and depth, never on privileged object poses.
Inside one real episode
To make this concrete, you can step through a real-rig episode turn by turn: what the model saw, what it thought, the tool call it made, and the report it got back.
Failures
Where it still slips
The model is not perfect on these new tasks, and its failures are informative. Below are two examples where it gets most of a task right but fails on one part of it.
In the second, the model must sort fruit into bins by color: orange on the left, yellow in the middle, red on the right. It reasons correctly about color, location and manipulation, and moves most of the fruit to the right place. However, it misses the last remaining red fruit in the left bin, possibly because of the bin's shadow.
What didn't work
Several choices in this report came from trying the obvious thing first. These are the ones we would most want to know about if we were starting again.
- Grasp macros. Relative moves and approach primitives raised the floor but capped the ceiling. We removed them and let the model plan each phase.
- Euler angles and quaternions. Side grasps sit near the Euler singularity, so small errors looked large. Slot yaw, tilt and tilt direction fixed this.
- Binary reward. On tasks with no successes, pass/fail gives no signal. The dense reward ladder does.
- Overhead depth on the real rig. In the real world, depth from the height of the overhead camera is often not accurate enough, and the policy would falsely rely on these perception coordinates. We found that simply turning off overhead depth allowed the policy to focus on the wrist-camera perception measurements. Surprisingly, the policy had no issue adjusting to this, even though in simulation it had reliable depth from all three cameras.
Takeaway
With the right factorization and post-training, a small open model is enough. Pretraining already knows what a task asks for; simulation only has to teach how to move. Trained on 40 simple simulated tasks, from its own successes, with no frontier teacher and no real robot data, a 27B open model matches GPT-6 Astra on real hardware at 3× the speed and 1/17 the cost. Adding a skill to ZAP means writing new simulated tasks, not collecting new robot demonstrations.
References
All references
- OpenAI. GPT-6 Astra System Card. 2026.
- J. X. Yang, A. Khetan and S. Zhang. Astranomy: An Empirical Study of GPT-6 Astra as a Native Robot Policy. NVIDIA Research project page, 2026.
- W. Zhang et al. An Unexpected Robot Policy: Early Evaluations of GPT-6 Astra on RoboDojo and Beyond. arXiv:2609.24170, 2026.
- K. Williams. OpenAI's Astra Model Is Shockingly Good at Robotics. Understanding Robots, October 1, 2026.
- Z. Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300, 2024. (Introduces GRPO.)
- J. X. Yang et al. RoboLab: A High-Fidelity Simulation Benchmark for Analysis of Task Generalist Policies. RSS, 2026. arXiv:2604.09860.
- Robocurve. Inspect Robots: The open-source evaluation framework for physical AI. Software, 2026.
- A. Menon et al. GPT-6 Astra on robot arms. Robocurve, 2026.
- W. Kwon et al. Efficient Memory Management for Large Language Model Serving with PagedAttention. SOSP, 2023. (vLLM.)
- M. Watts and Y. Cui. Rephrase Before You Act: Characterizing and Mitigating Language Sensitivity in Vision-Language-Action Models. arXiv:2610.10526, 2026.
- Qwen Team. Qwen3.6-27B: Flagship-Level Coding in a 27B Dense Model. Blog post and model release, 2026.
- NVIDIA. Isaac Sim. Software, version 6.0.1.
- H. Liu et al. Guava: Distilling Frontier VLMs into a Compact Agent through a Robotic Manipulation Harness. arXiv:2606.18363, 2026.
- Z. Li et al. RACaP: Agentic Reasoning, Acting, and Coding as Policies for Evolvable Robot Learning. arXiv:2609.29394, 2026.
- Z. Li et al. Robo-Harness K1: Harnessing Robot-Use Agents via Perception Augmentation. arXiv:2609.29389, 2026.
- Prime Intellect. prime-rl. Software, 2025.
- Z. Liu et al. Understanding R1-Zero-Like Training: A Critical Perspective. COLM, 2025. arXiv:2503.20783. (Introduces Dr. GRPO.)
- Anthropic. Claude Opus 5.5. Model release, 2026.
- Black Forest Labs. FLUX 3 Action: A 7B World Action Model for Robot Control. 2026.
- NVIDIA. RoboLab Leaderboard. 2026. Accessed October 18, 2026.
- H. Fang et al. MolmoAct2: Action Reasoning Models for Real-world Deployment. arXiv:2605.02881, 2026.
Citation
@misc{pikus2026zap,
title = {Pretraining Knows What, Simulation Teaches How: Compositional Generalization for Agentic Robotics},
author = {Pikus, Benjamin and Saunders, Daniel and Mironenco, Mircea and
Mohammadi, Salman and Mathew, Mathew and Zhu, Sirou and Makkar, Divya and
Huang, Xuhua and Li, Qinbo and Narasimhaswamy, Supreeth and
Cen, Siyuan and Xu, Dejia and Buch, Shyamal and Neff, Thomas},
year = {2026},
eprint = {2610.35817},
archivePrefix = {arXiv},
note = {Luma AI}
}