WorldSketch: Sketching World Models for Zero-Shot Mobile Manipulation
Abstract
Most agentic robotic systems use vision-language models (VLMs) either to orchestrate predefined skills or to directly generate actions, constraints, and control programs. The former is limited by the available skill library, while the latter requires VLMs to reason about precise geometry and contact. In this paper, we propose WorldSketch, a new paradigm for agentic robotics in which a VLM constructs a world model rather than generating robot actions. The VLM acts as an agent that actively queries perception tools to build and visually validate a minimal kinematic world model, capturing only task-relevant objects, their interaction geometry, and possible motions. A geometric planner then jointly optimizes contact and whole-body motion on the resulting model. Moreover, the world model is self-improving: execution feedback verifies outcomes, updates uncertain hypotheses, and enables the agent to revise the model when its predictions are contradicted. We demonstrate the generality of this paradigm across RoboCasa, LIBERO-PRO, and R2R-CE navigation, achieving zero-shot success rates of 91%, 97%, and 76%, respectively. On RoboCasa, WorldSketch outperforms the next-best zero-shot agent baseline by 58 percentage points while using 10 times fewer VLM input tokens; on LIBERO-PRO, it exceeds CaP-X by 82 percentage points. In navigation, it matches the success rate of step-by-step VLM agents while using 6 times fewer input tokens.
Figures & tables
| method | drawers | doors | knobs | buttons | levers | pick & | all | calls | input | output | time | false |
| & racks | & spout | place | tokens | tokens | (min) | |||||||
| trained on demonstrations of the tasks | ||||||||||||
| GR00T N1.5, 3 runs ( Bjorck et al., 2025 ) | 8.7 | 8.3 | 6.0 | 4.7 | 8.0 | 4.3 | 40.0 (44%) | – | – | – | 0.8 | – |
| ( Black et al., 2025a ) | 10 | 5 | 2 | 1 | 8 | 9 | 35 (39%) | – | – | – | 1.2 | – |
| zero-shot, GPT-6.1-Sol | ||||||||||||
| Code as Policies ( Liang et al., 2023 ) | 3 | 0 | 2 | 2 | 1 | 0 | 8 (9%) | 6.1 | 31k | 1.5k | 1.9 | – |
| object | goal | spatial | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| method | pos. | task | pos. | task | pos. | task | all | calls | time | false |
| ( Black et al., 2025a ) | 4 | 0 | 9 | 7 | 6 | 16 | 42 | – | 0.3 | – |
| CaP-X, single turn ( Fu et al., 2026 ) | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1.9 | 1.6 | – |
| CaP-Agent0 (CaP-X) ( Fu et al., 2026 ) | 4 | 3 | 4 | 1 | 8 | 3 | 23 | 48 | 13.1 | 1 |
| our coding agent | 25 | 25 | 25 | 23 | 24 | 25 | 147 | 5.8 | 0.9 | 1 |
| WorldSketch | 25 | 25 | 23 | 24 | 24 | 25 | 146 | 3.2 | 1.4 | 1 |
| change | correct | success |
|---|---|---|
| final system, 90 episodes | ||
| no overlay check † | 80 58 | – |
| grounding, 50 ep., 2 runs | ||
| masks instead of points | 71 46 | 77 65 |
| hybrid: masks for panels | 71 75 | 77 75 |
| inventory, 50 ep., mask requests | ||
| VLM and effort | success | correct | part | calls | input | output | reasoning |
|---|---|---|---|---|---|---|---|
| GPT-6-Astra medium, run 1 | 82 | 72 | 88 | 5.5 | 90k | 1.4k | 0.3k |
| GPT-6-Astra low | 77 | 69 | 84 | 5.3 | 86k | 1.2k | 0.2k |
| GPT-6.1-Sol medium | 82 | 68 | 87 | 5.4 | 88k | 1.8k | 0.7k |
| ours | CaP | CaP-Agent0 | ReKep | |
|---|---|---|---|---|
| failures (episodes) | 18/180 | 82/90 | 60/90 | 85/90 |
| world model wrong | 11% | 67% | 23% | 78% |
| wrong part or contact site | 11% | 52% | 5% | 56% |
| wrong mechanism or direction | 0% | 5% | 13% | 13% |
| wrong goal or end state | 0% | 10% | 5% | 8% |
| execution failed | 89% | 13% | 77% | 6% |
| method | VLM | SR | SPL | NE | OSR | nDTW |
|---|---|---|---|---|---|---|
| Open-Nav ( Qiao et al., 2025 ) | GPT-4 | 19 | 16.1 | 6.70 | 23 | 45.8 |
| SmartWay ( Shi et al., 2025 ) | GPT-4o | 29 | 22.5 | 7.01 | 51 | – |
| Three-Step Nav ( Zheng et al., 2026 ) | GPT-5 | 34 | 29.1 | 5.87 | 39 | 57.7 |
| STRIDER ( He et al., 2025 ) | GPT-4o | 35 | 30.3 | 6.91 | 39 | 51.8 |
| LaViRA ( Ding et al., 2026 ) | Gemini 2.5 Pro | 38.3 | 28.3 | 6.54 | 48.7 | – |
| EvoNav ( Dai et al., 2026b ) | Gemini 2.5 Pro | 43 | 37.8 | 5.04 | 51 | 62.4 |
Appendix figures & tables17 assets
Supplementary material from the paper’s appendix.
Appendix
| family | tasks |
|---|---|
| drawers, racks | OpenDrawer, CloseDrawer, SlideOvenRack , SlideToasterOvenRack , CloseFridgeDrawer |
| doors | OpenCabinet, CloseCabinet, OpenMicrowave, CloseMicrowave, OpenToasterOvenDoor |
| knobs | TurnOnStove, TurnOffStove, PreheatOven , TurnOnToasterOven , LowerHeat |
| buttons | TurnOnMicrowave, TurnOffMicrowave, StartCoffeeMachine , TurnOnBlender , OpenElectricKettleLid |
| levers, spout | TurnOnSinkFaucet, TurnOffSinkFaucet, TurnSinkSpout, TurnOnElectricKettle , AdjustWaterTemperature |
| pick & place | PickPlaceCounterToSink, PickPlaceMicrowaveToCounter , PickPlaceCabinetToCounter , PickPlaceCounterToDrawer , CoffeeSetupMug |
| tool | the VLM writes | grounding | returned | uses |
|---|---|---|---|---|
| surface point | name, image, pixel | a plane fitted to the depth around the pixel (6 mm RANSAC); the point is where the pixel’s ray meets it | 3-D point, normal | 78 |
| part point | name, image, pixel | a plane fitted to the ring around the pixel; depth more than 6 mm in front of it is clustered, and the nearest cluster’s centroid is the point | point, protrusion, size, long axis | 195 |
| corner | name, image, pixel | depth along the pixel’s ray; when a panel’s corners come from one image, they are placed on the plane fitted inside them, preferring a front plane (glass) | point | 291 |
| raw point | name, image, pixel | median depth along the pixel’s ray | point, normal | 199 |
| wrist view | pixel, distance (0.4, 0.65 or 0.9 m) | the wrist camera looks at the 3-D point under the pixel, from a pose with a free line of sight that the arm can reach | new image | 83 |
| label view | pixel | the wrist camera straight in front of the surface under the pixel, about 45 cm away (the base backs off if needed) | high-resolution image | 35 |
| outcome | same | flipped | other |
|---|---|---|---|
| verified | 0.80 | 0.01 | 0.03 |
| satisfied, unconfirmed | 0.10 | 0.05 | 0.10 |
| moved without effect | 0.04 | 0.25 | 0.40 |
| moved the full amount, no effect | 0.15 | 0.25 | 0.40 |
| moved along another joint | 0.05 | 0.20 | 0.50 |
| resisted | 0.04 | 0.60 | 0.40 |
| method | think | model | plan | execute | other | total |
|---|---|---|---|---|---|---|
| kitchen tasks | ||||||
| WorldSketch | 91 | 37 | 157 | 143 | 0 | 429 |
| WorldSketch, GPT-6-Astra | 78 | 36 | 112 | 149 | 0 | 374 |
| Code as Policies | 56 | 25 | 3 | 33 | 0 | 117 |
| CaP-Agent0 | 792 | 65 | 8 | 154 | 0 | 1019 |
| ReKep | 35 | 30 | 5442 | 334 | 0 | 5842 |
| set | episodes | correct | type | axis | point | path | goal | truth among hypotheses |
|---|---|---|---|---|---|---|---|---|
| kitchen tasks (2 runs) | 180 | 81% | 97% | 94% | 88% | 93% | 92% | 82/89 |
| grounding | correct | axis | pivot (cm) | path cm | direction | success | |
|---|---|---|---|---|---|---|---|
| median / p90 | right | given correct / not | |||||
| points | 220 | 68% | 92% | 1.7 / 3.2 | 76% | 92% | 85% / 66% |
| hybrid | 100 | 75% | 93% | 1.5 / 3.1 | 80% | 92% | 77% / 68% |
| masks | 100 | 46% | 93% | 2.9 / 35.2 | 67% | 73% | 80% / 52% |
| cause | failures | examples |
|---|---|---|
| small part the fingers slip off or cannot enter | 6 | 6.6 mm cabinet bars inside a thicker visual handle; a small faucet lever; a toaster tray’s thin lip; a kettle button recessed 1–2 mm in the handle |
| no reachable contact | 3 | a cabinet door open flat against the fridge; a plate deep inside a microwave |
| wrong functional site in the sketch | 2 | the lid of a coffee machine pressed instead of its start button; a mug placed at the drip tray, 10 cm from the dispenser |
| placement settles off target | 2 | a mug released within 0.5 cm of the dispenser settled 4.2–4.4 cm away (limit 4 cm) |
| held object slipped out | 2 | a cup dropped during the carry; a mug lost at the release |
| object wider than the gripper | 2 | a translucent container, 9.7 cm wide, whose depth hits the shelf behind it |
| ours | ours | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| task | Astra | Sol | CaP | A0 | ReKep | coding | task | Astra | Sol | CaP | A0 | ReKep | coding | ||
| OpenDrawer | 3 | 3 | 1 | 2 | 0 | 2 | 3 | TurnOnMicrowave | 3 | 3 | 0 | 3 | 0 | 1 | 3 |
| CloseDrawer | 3 | 3 | 1 | 2 | 0 | 2 | 3 | TurnOffMicrowave | 3 | 3 | 1 | 3 | 0 | 0 | 3 |
| SlideOvenRack | 3 | 2 | 0 | 1 | 1 | 1 | 2 | StartCoffeeMachine | 2 | 3 | 1 | 3 | 0 | 0 | 3 |
| SlideToasterOvenRack | 3 | 3 | 0 | 0 | 0 | 2 | 1 | TurnOnBlender | 3 | 3 | 0 | 1 | 0 | 0 | 0 |
| CloseFridgeDrawer | 3 | 3 | 1 | 1 | 1 | 3 | 2 | OpenElectricKettleLid | 2 | 3 | 0 | 2 | 0 | 0 | 3 |
| set | functions |
|---|---|
| perception | get_observation (RGB-D, intrinsics and pose of each camera), segment_sam3_text_prompt , segment_sam3_point_prompt , point_prompt_molmo (answered by the VLM), get_oriented_bounding_box_from_3d_points , plan_grasp (Contact-GraspNet), get_robot_state |
| motion | solve_ik , move_to_joints , goto_pose , navigate_to_pose , goto_home_joint_position , open_gripper , close_gripper |
| skill library (CaP-Agent0) | rotation_matrix_to_quaternion , decompose_transform , depth_to_point_cloud , mask_to_world_points , pixel_to_world_point , transform_points , interpolate_segment , normalize_vector , select_top_down_grasp |
| high level (CaP) | get_object_pose , get_object_poses , sample_grasp_pose , goto_pose , move_to_pose , open_gripper , close_gripper , get_robot_state , goto_home_joint_position |
| method | success | ours, same | (95% CI) | calls | input tokens | |
|---|---|---|---|---|---|---|
| WorldSketch (earlier version) | 50 | 38.5 | – | – | 4.2 | 0.13M |
| direct poses | 47 | 28 | 37 | ( , ) | 7.3 | 0.23M |
| skill orchestrator | 50 | 26 | 38.5 | ( , ) | 6.9 | 0.21M |
| keypoint constraints | 26 | 16 | 21.5 | ( , ) | 7.4 | 0.35M |
| multi-turn coding agent | 21 | 14 | 16.5 | ( , 3.5) | 17.9 | 0.58M |
| requests | selection | coarse | full | |
| successes / finished | 26/40 | 14/34 | 4/50 | 11/22 |
| right part bound | 18/40 | 17/27 | 6/27 | 8/21 |
| vs requests, shared | – | /31 | /40 | /22 |
| McNemar | – | 0.02 | 0.22 | |
| primitives extracted | 7 | 1361 | 91 | 118 |
| primitives in model | 2.8 | 3.0 | 1.8 | 52 |
| requests | exhaustive | coarse | |
|---|---|---|---|
| primitives extracted | 7 | 1213 | 94 |
| primitives in model (mean) | 2.1 | 10.9 | 3.4 |
| correct binding | 25/30 | 17/30 | 3/30 |
| binding error | 1.0 cm | 3.1 cm | 25 cm |
| construction time | 70 s | 97 s | 52 s |
| uncached input and output tokens | 55k | 79k | 22k |
| family | points | hybrid | masks | union | |
|---|---|---|---|---|---|
| drawers | 8 | 12 | 14 | 14 | 14 |
| doors | 20 | 28 | 23 | 21 | 30 |
| knobs | 6 | 10 | 9 | 7 | 10 |
| buttons | 6 | 12 | 11 | 11 | 12 |
| levers, spout | 8 | 12 | 15 | 12 | 16 |
| pick & place | 2 | 3 | 3 | 0 | 4 |
| arm | success | model correct as built |
|---|---|---|
| full system (3 runs) | 78% (141/180) | 69% |
| no verifier | 81% (48/59) | – |
| no requested views | 80% (47/59) | 71% |
| single hypothesis | 78% (46/59) | 66% |
| no overlay check | 76% (45/59) | 59% |
| episodes | VLM | WorldSketch | coding agent | note |
| 60 | GPT-6-Astra (default) | 78% of 180 | – | |
| Claude Sonnet 5.5 | 61% of 90 | – | models correct as built 38% against 69% | |
| Qwen3.5-9B (open weight) | 2% of 57 | – | copies the prompt’s example coordinates | |
| 30 | GPT-6 (Astra; Sol for the agent) | 19 | 22 | first sketch correct 23/30 |
| Gemini 4 Argon | 17 | 24 | first sketch correct 18/30; paired | |
| Qwen3.6-35B (open weight) | 1 | 0 |
| condition | success | clean, same episodes |
|---|---|---|
| clean replay | 20/30 | – |
| depth noise cm | 17/28 | 19 |
| depth noise cm | 9/23 | 16 |
| depth noise cm | 4/30 | 20 |
| range-proportional noise 2% | 1/29 | 20 |
| 10% of pixels dropped | 21/30 | 20 |
| episodes | SR (%) | SPL (%) | NE (m) | OSR (%) | nDTW (%) | VLM calls | |
|---|---|---|---|---|---|---|---|
| Open-Nav | all (100) | 75.7 1.2 | 57.5 | 2.86 | 83.0 | 67.4 | 5.7 |
| outside dev. (87) | 74.7 1.2 | 55.9 | 2.86 | 82.8 | 67.2 | 5.7 | |
| path-disjoint (63) | 77.8 2.8 | 57.7 | 2.49 | 83.6 | 67.5 | 5.9 | |
| unused | all (376) | 76.9 | 56.6 | 2.60 | 82.2 | 67.2 | 6.3 |
| single-floor (306) | 75.8 | 56.5 | 2.79 | 81.0 | 66.6 | 5.7 | |
| multi-floor (70) | 81.4 | 57.4 | 1.79 | 87.1 | 69.6 | 9.3 |