Created Modified

Full development log · see the summary

Improving the Newton MCP harness for simulation setup and tuning

Software
Newton experimental fork · live MCP hosting unmodified example scripts
Agents
Claude Opus 5.5 (Claude Code) · GPT-6 Astra (Codex), both at xhigh effort

Abstract

Can Newton's live MCP harness be tuned until agents set up and tune simulations more efficiently with it than without it? This page tracks an ongoing improvement loop on thirteen tasks: six drawn from earlier reports, six from a real-robot dataset (ABC), and a humanoid model-predictive-control task. They cover tuning humanoid controllers (including a hard clip that plain gain tuning cannot pass), fixing a grasp that slips, calibrating models against real-robot data (a DFKI double pendulum and 570 real cube tosses), adding a material-removal capability to an SDF grinding scene, modeling a real bimanual robot station from its camera frames, and replaying a real pick-and-place episode physically. Each iteration runs Claude Opus 5.5 and GPT-6 Astra in pairs (concurrently through h11, one trial at a time from h12, each from the same compile-cache seed). The same agent solves the same task either with the live MCP or by editing and rerunning scripts, and every submission is verified in a fresh process. The transcripts are then mined for friction, and the harness is changed. After sixteen harness versions and 122 pairs, the loop has turned the MCP from a token cost (1.19× input tokens with h1) into a time and token saving. Across all pairs the MCP was faster in 77 (time ratio 0.87, 95% interval 0.81–0.94), and GPT-6 Astra used fewer tokens in 39 of 56 (0.78×). In iteration 7 the MCP was faster in all six pairs (0.64×). The hard humanoid task briefly separated success rates. Opus passed one of two runs with the MCP and none without, because three of those four runs quit after about 12 of their 60 minutes, believing time was up. Once h7 reported the remaining budget in MCP results and both prompts stated the start time, Opus passed all twelve runs across both conditions, finishing about a third faster with the MCP (1,039 s vs 1,559 s on average) at similar cost ($4.53 vs $4.21), because the faster live loop let it take more turns. The loop also found five ways results could silently mislead. In the live session, resets reverted the agent's own settings, quick edits could reload stale bytecode, and re-recording a CUDA graph around an already-captured MuJoCo solver corrupted memory; the last was a Newton bug, now fixed in newton-physics/newton#4377. In the study itself, the agents' sense of time was wrong, and a G1 verifier penalized controllers that precompute their plan (all G1 submissions have been re-verified). A new phase models a real robot station from its camera frames. There, every agent passed with and without the MCP, all of them fitted against the task's own image score rather than looking at screenshots, and a tuned Blender render matched the real frames about as well as the tuned ray-cast sensor (18.6 vs 18.2 dB color PSNR, with slightly lower structural scores). The latest phase replays a real pick-and-place episode physically: driven only by the recorded commands, the simulated robot must grasp, carry, and place three fruits as in the video, and the replay is verified on unseen episodes of the same station. Over twelve pairs on two such tasks (a fruit bowl and a screwdriver put into a bin), success did not depend on the MCP (9 of 12 runs passed in each condition). For Opus the MCP cut the time spent waiting on tools to 0.60× but raised thinking time and tokens (time 0.88×, cost 1.25×); for GPT-6 Astra it changed little (time 1.06×). In the screwdriver pairs no agent put a single image into its context. The newest phase starts agents from a nearly clean plate: they build the fruit-bowl scene from photos and logs, or develop a humanoid tracking controller with model predictive control. On the controller every run passed and the MCP was faster in all four pairs (0.77–0.94×); on the scene from photos 2 of 4 MCP and 3 of 4 restart runs passed, and time went both ways (0.54–1.94×).

Completed studies remain available unchanged: the registered visual-calibration study (v3), the three-way study with IPython and measured Panda identification (v2), and the original two-way study.

1. The improvement loop

The previous study showed that a live MCP makes photo-based calibration cheaper in tokens. This loop asks a broader question. Can the harness be tuned until it reliably helps on the setup and tuning work that earlier coding agents often failed at? The three tasks are rebuilt from earlier reports. One tunes a controller for reference-motion following (from the G1 whole-body-control report). One debugs a slipping grasp (from grasp-shake-drift and FeatherPGS). One calibrates a model against measurements from a real robot.

Each task starts from a runnable Newton example script with a realistic defect, together with a goal checked by a hidden verifier. The same agent (Claude Opus 5.5 in Claude Code, or GPT-6 Astra in Codex, both at xhigh effort) receives the same task in two conditions. In the MCP condition the script is already running live under python -m newton.mcp host. The agent can execute Python inside it, observe it, and reload the edited file, and it keeps its shell. In the no-MCP baseline it edits files and reruns scripts, so every run starts a fresh simulator process. Through h11, both trials of a pair started together on the same machine; from h12 they run one at a time, each from a fresh copy of the same compile-cache seed and inside its own sandbox. Budgets are 30 to 60 minutes depending on the task.

One iteration runs the pairs, reads the transcripts for friction (wasted turns, errors, source-code spelunking, redundant checks), and changes the harness. The change is committed as a new harness version, and the next iteration reruns the pairs. We report success, elapsed time (split into model and tool time), input and output tokens, API cost, and tool calls. Paired ratios below 1 favor the MCP.

Table 1. Loop tasks. Every submission is verified in a fresh process against checks the agent cannot see.
TaskKindStarting problemVerified goal
Grasp driftDebug a contact setupFranka FR3 grasps a 4 cm cube and shakes it (scene from the grasp-shake-drift report). A robot-wide soft contact default (ke = 250) is imposed on the cube through the fingers' higher MuJoCo geom priority, so a 10 cm shake drops the cube.Cube drift in the hand frame below 1 mm over 11.5 s of 3 cm shaking and below 5 mm over 6 s of 10 cm shaking. Motion, gains, grip, timestep, and cube are unchanged.
G1 trackingTune a controllerUnitree G1 (29 DoF, SolverMuJoCo) follows a Kimodo wave clip with joint PD servos at 10 Hz bandwidth and falls within about a second.Robot stays upright, with root RMSE ≤ 4 cm and joint RMSE ≤ 0.05 rad on the clip and on an unseen 1.4× faster playback. No forces on the floating base; robot model unchanged. A harder clip (high5) is reported but not required.
Real pendulumIdentify a system from real dataModel of the DFKI torque-controlled double pendulum (design C.0) built from nominal CAD point masses without friction, armature, or damping. Ten real recordings (measured joint angles, velocities, and motor torques at about 500 Hz) are provided.Multiple-shooting error on two held-out recordings, using 0.5 s open-loop windows started from measured states and driven by measured torques. It must be ≤ 0.060 rad on a 20 s excitation run and ≤ 0.150 rad on a 75 s run with full swings.
Cube toss (from i3)Identify contact parameters from real dataA 0.1048 m, 0.37 kg acrylic cube tossed onto a wooden table (ContactNets dataset, 148 Hz tracking). The starter uses untuned contact settings (μ = 0.5, ke = 2.5 kN/m, kd = 100 N·s/m). 400 real tosses are provided, one Newton world per toss.Open-loop rollout of 170 held-out tosses from their first frame. Mean time-averaged position error must be ≤ 0.020 m and orientation error ≤ 0.45 rad. Cube size, mass, inertia, and gravity are unchanged.
SDF grinding (from i4)Build a new capabilityKinematic grinding wheel crossing an ellipsoidal workpiece whose collision geometry is a sparse texture SDF; hydroelastic collision reports the normal load, but no material is removed (scene from the sdf-grinding report, with its removal code stripped). 45-minute budget.After the full pass, the removed volume of the SDF the collision pipeline uses must match the swept wheel within 15%. Groove probes must be clear and base probes solid (≥ 90% each). The wheel placed back into the groove must see ≤ 25% of the unground normal load. Tool path, geometry, and stiffness are unchanged.
G1 hard (from i6)Design a controllerSame G1 scene, but the gated clips include high5, in which the root turns and shifts its weight. Plain joint-space PD tuning falls on it. 60-minute budget.Upright, root RMSE ≤ 4 cm, and joint RMSE ≤ 0.05 rad on wave, high5, and an unseen 0.9× high5 playback, with no forces on the floating base. Calibrated on the one controller known to pass: Astra's iteration-4 inverse-dynamics QP.
ABC station twin (from i9)Model a real sceneThe YAM bimanual station of the ABC-130k dataset in its CAD form: nominal camera mount, CAD enclosure, empty table, default colors and light. The agent gets six recorded top-camera frames (640 × 480) from 1.4 s of an episode in which the arms move and the objects stay still, the joint log, and the camera calibration. 45-minute budget.Five held-out frames, rendered through the calibrated camera with the robot posed from the log: mean edge correlation ≥ 0.67, SSIM ≥ 0.64, and color PSNR ≥ 17 dB. The arm kinematics must be unchanged, at most 60 shapes may be added, and the model must build without the recorded frames.
ABC arm replay (from i10)Calibrate against real-robot dataThe 6-DoF YAM arm of the ABC stations, whose joints track teleoperation position commands at about 30 Hz. The agent gets 64 arm logs from 32 episodes (about 87 minutes per arm) with measured joint positions, velocities, and torques and the commanded positions. The starter uses the gains, armature, and friction of the ABC simulation model. 30-minute budget.Mean joint-angle RMSE ≤ 0.023 rad over 1 s open-loop windows of 16 held-out logs from 8 other episodes, driven by the logged commands. The starter scores 0.0385 rad, gains from a torque regression 0.0256, and a coordinate-descent fit 0.0212. Arm kinematics, gravity, and valid mass properties are checked.
ABC look matching (from i11)Tune appearance in BlenderThe fitted ABC station twin with fixed geometry and neutral object colors, rendered in Blender EEVEE through the real top camera. The agent writes look.py, bpy code for materials, lights, world, and exposure. With the MCP a Blender worker can stay warm across turns; without it, each render script starts Blender afresh. 45-minute budget.Five held-out frames rendered with only look.py in a fresh Blender worker: mean per-region color error ≤ 33 (sRGB 0–255) and color PSNR ≥ 18.5 dB. The starter scores 45.8 and 17.6 dB, the operator's reference look 28.6 and 19.2 dB. Added or reshaped meshes, loaded images, and compositing are rejected.
ABC physical replay (from i12)Reproduce a real manipulation episode physicallyA 9.4 s ABC-130k episode in which two YAM arms pick up a pear, an orange, and a dark fruit and place them into a tray, driven open loop by the recorded joint and gripper commands. The agent gets the episode with its top and wrist videos and the fruit positions tracked in them, four more recordings of the same station at 10 fps, 64 arm logs, and helpers to replay, score, render through the real cameras, and summarize contacts. The starter keeps the ABC simulator's defaults and holds no fruit. 60-minute budget.A batch of 44 worlds replayed by the verifier over whole episodes. Main episode, 8 copies (6 with jittered fruit starts): every fruit held through the carry in ≥ 7 and in the tray at the end in ≥ 6, with medians for lift-off and release timing, carry track (≤ 3.4 cm), finger gap (≤ 5 mm), final position, and arm tracking (≤ 0.0261 rad). Six unseen episodes, 4 copies each: ≥ 89.2% of gated fruit copies held and placed, arm tracking ≤ 0.0308 rad. Two negative controls (gripper never closes; all friction 0.02): no fruit rises more than 1 cm. Robot kinematics, finger geometry, fruit mass, inertia, size and starts, materials, and actuators are checked; the reference holds and places 53–54 of 56 unseen fruit copies, the starter 7.
ABC screwdriver in bin (from i14)Reproduce a real manipulation episode physicallyA 4.6 s ABC-130k episode in which the right YAM arm picks up a screwdriver by its tapered handle and puts it into a bin, driven open loop by the recorded commands. The agent gets the episode with its top and right wrist videos, four more recordings of the same station, 64 arm logs, and helpers to replay, score, render through the real cameras, and summarize contacts. The real gripper pinches with 40–50 N; the starter keeps the ABC simulator's 2.5 N grip, so the screwdriver swings about 24° in the fingers. 60-minute budget.A batch of 68 worlds replayed by the verifier. Main episode, 8 copies: held and placed in ≥ 7, medians for in-hand rotation during the carry (≤ 6°; the real wrist videos show a rigid grasp in all 56 recordings of this station), slip, finger gap, lift-off, carry track, final tip, and arm tracking (≤ 0.0346 rad). Twelve unseen episodes, 4 copies each: ≥ 90% of copies held, placed, and rotated at most 12°. Controls: gripper forced open, and friction 0.002 everywhere (not held). Screwdriver, bin, pinch force, contact stiffness, and materials are audited; the reference passes every unseen copy, the starter none.
ABC scene from photos (from i15)Build a physical scene from photosThe fruit-bowl episode again, from a nearly clean plate: 11 photos from the top and wrist cameras, the recorded arm and gripper commands and measurements, the calibrated cameras, the station's robot model without any objects, and 64 arm logs. The agent adds the three fruits and the tray with plausible sizes, masses, start poses, and materials, and tunes the physics, so that the open-loop replay grasps, carries, and places every fruit as in the recording. No replay helpers, scorers, or renderers are given. 90-minute budget.The verifier's own replay in fresh processes, 8 copies (6 with fruit starts moved by up to 3 mm and 5°): each fruit held between the fingers through the real carry and at rest in the tray within 5 cm of the real fruit in ≥ 6 copies; two negative controls (gripper forced open; friction 0.02) lift no fruit by more than 1 cm. Fruits must start within 5 cm of where the top camera saw them, weigh 20–300 g, have plausible inertia and size (±30% of the tracked size), and receive no drives or forces; worlds must be identical and solver arrays must match the model. A private reference passes; the starter fails.
G1 tracking controller (from i15)Develop a controller from a clean plateThe Unitree G1 humanoid (29 actuated joints) on SolverMuJoCo at 2 ms, three reference clips (walk, dance, jumping jacks), and a baseline that servos the joints toward the reference and falls within a second. The agent develops a controller that returns joint targets, gains, and feedforward torques every 10 ms, investigating model predictive control. No controller library or MPC code is given. 90-minute budget.Each clip in a fresh process: the three given clips, two unseen clips, and walk played 0.85–0.95× slower. On every clip the robot stays upright with only its feet on the floor, with root position RMSE ≤ 6 cm, root orientation RMSE ≤ 10°, joint RMSE ≤ 0.12 rad, and sole RMSE ≤ 7 cm; setup ≤ 120 s and rollout ≤ 180 s per clip on an idle machine, scaled by measured load (at most 2.5×). The plant is fingerprinted every step. A strong earlier controller passes; the baseline fails.

2. MCP versus no MCP, per iteration

Across 122 completed pairs, the MCP reduced elapsed time (geometric-mean ratio 0.87, 95% interval 0.81–0.94; faster in 77 pairs) and input tokens (0.98, 0.88–1.08; fewer in 66 pairs). Opus's API cost was 1.02× overall; GPT-6 Astra used fewer tokens in 39 of its 56 pairs (0.78×, 0.68–0.90). Of 246 verified trials, 228 passed. Three failures are iteration-6 Opus runs on the hard humanoid task; the other 6 are physical replays that failed the unseen episodes (3 with the MCP, 3 without).

The harness iterations moved these numbers. With h1, the MCP cost more tokens (1.19×) and saved little time (0.94×). h2 made it much cheaper for GPT-6 Astra (0.57× tokens, 0.69× time) but more expensive for Opus (1.63× tokens) through a tool-loading setting; h3 fixed that. With h3 (12 pairs, including second Opus replicates), the MCP was faster in 9 (0.76×, 0.60–0.94) and used fewer tokens in 8 (0.74×). With h4 (10 pairs, now including the grinding task), it was faster (0.80×), used fewer tokens (0.81×), and cut Opus's API cost to 0.78×. On G1 tracking, Opus took 220 s and $0.59 instead of 639 s and $1.16, and Astra 278 s and 0.44M tokens instead of 681 s and 1.7M. On grasp drift, Opus took 405 s and $1.20 instead of 698 s and $2.04.

The MCP did not win everywhere. On the SDF grinding task both conditions finished in about five minutes at similar cost. Astra's iteration-4 cube-toss MCP run used more tokens (2.3M vs 1.5M) after it broke its live session with the MuJoCo capture bug and spent turns restarting the host by hand, which drove the h5 changes. Iteration 5 (h5, 10 pairs) came out close to parity: 0.97× time and 0.94× tokens. Astra still saved tokens (0.71×), with G1 tracking at 273 s instead of 619 s. Opus's ratio rose to 1.24×, mainly because of two runs. In one grasp run, 900 of its 1,466 s went to a shell loop waiting on its own background fresh-process check (the MCP calls took 207 s). In one grinding run it chose more self-verification calls. Neither is a harness defect, but together they show how one agent-side detour can swing a five-pair iteration. Iteration 6 (h6) is running with two replicates of the harder humanoid task.

The hard humanoid task (iteration 6, h6). Gating the high5 clip changed the picture. GPT-6 Astra passed all four runs, with and without the MCP. Each time it wrote a whole-body inverse-dynamics balance controller from scratch, and it was faster and cheaper with the MCP in the first replicate (508 s and 0.9M tokens vs 719 s and 1.9M). Opus passed one of two runs with the MCP (root RMSE 3.3 cm, just inside the limit) and neither without it. The transcripts show why the Opus runs failed: they did not run out of ideas, but judged that their time was up. Three of the four Opus runs stopped after 11–16 minutes of a 60-minute budget, saying “I'm out of time to crack high5” or “Time's nearly up”; the one success also believed only ten minutes were left at minute 12. Agents see no wall clock, and a turn-heavy search seems to feel long to them. On the other iteration-6 tasks the MCP was faster or equal for both agents, and Astra's cube-toss run took 357 s and 0.54M tokens instead of 656 s and 2.5M.

Iteration 7 (h7): a clock for the agent. With the remaining budget in every MCP result and the start time in both prompts, all six pairs passed, and the MCP was faster in every one (0.64×, 0.51–0.80). On the hard humanoid task, Opus passed all three runs in both conditions. With the MCP it finished in 903–1,089 s; without it, in 1,370–1,669 s. Its token use and API cost were similar ($4.47 vs $4.18 per run on average), because the MCP runs used the time they now knew they had for more live experiments (up to 85 tool calls). Without the MCP, the agent now checked date -u and also kept working. Iteration-6's success gap therefore measured time awareness, not the MCP. On the other iteration-7 pairs, Opus's cube toss took 246 s and $0.44 instead of 611 s and $0.78, and Astra's grasp 229 s and 0.45M tokens instead of 388 s and 1.1M.

Verifier correction. Three iteration-7 hard-task runs first failed only on the unseen slower playback, with the robot upright but a joint RMSE of 0.14 rad. The G1 verifiers produced that playback by lowering motion.fps on an already-built example, so controllers that precompute a plan from their input clip (which the task allows) kept tracking a stale 30 fps plan. The verifiers now pass the time-scaled clip as an ordinary file through --motion. All 40 G1 submissions from every iteration were re-verified. Exactly those three changed (all to pass), and every other outcome, including the iteration-6 failures, stayed the same. The tables report the re-verified results.

Iteration 8 (h8). All eight pairs passed, and the MCP was faster in six (0.80×, 0.65–0.95), but Opus used more tokens (1.21×). Across the six hard-task pairs that ran with a clock (iterations 7–8), Opus passed every run in both conditions. With the MCP it averaged 1,039 s against 1,559 s, using 6.1M against 5.2M input tokens ($4.53 vs $4.21). The live loop makes each experiment cheaper in time, so Opus runs more of them: 54–87 tool calls with the MCP against 42–75 without. The visible clock has a similar side effect on easy tasks. After passing G1 tracking, one Opus MCP run noted “With time left, I'm briefly looking at why high5 falls (it's optional)” and spent 2.2M tokens against 0.9M without the MCP. The best real-robot model of the loop also came from an iteration-8 MCP run, at 0.092 rad on the 75 s held-out pendulum recording (the reference fit reached 0.131 rad).

Iteration 9 (h9): a real scene. All eight ABC station-twin runs passed, most with a wide margin (edge correlation 0.71–0.78, SSIM 0.68–0.71, color PSNR 19.2–20.4 dB against limits of 0.67, 0.64, and 17 dB), so the task does not separate the conditions. Time was mixed (0.86× overall): Opus took 796 s with the MCP and 1,540 s without in the first replicate, but 1,060 s and 749 s in the second, and Astra 1,841 s and 1,354 s, then 647 s and 1,154 s. The clearer signal is time to a first passing score on the given frames: Opus reached it after 401 s with the MCP and 1,131 s without; the restart run spent 600 s in a single camera-fit script, while the MCP run's longest fitting call took 40 s. Astra reached it at about the same time in both conditions (589 s and 646 s) and then kept refining for another 20 minutes with the MCP. Opus paid 1.35× more with the MCP, in more turns.

Iteration 10 (h10): calibrating a real arm. All eight ABC arm-replay runs passed, with held-out errors of 0.016–0.019 rad against a limit of 0.023 (the starter scores 0.0385 and the operator's reference fit 0.0212). The agents went beyond the reference: GPT-6 Astra fitted per-link gravity-compensation factors (1.09 on the upper links, 0.75 on the wrist) and a 21 ms command delay, validated on episodes it held out itself. The MCP was faster in two of four pairs (0.88× overall; Opus 634 s instead of 968 s in the second replicate, but 1,081 s against 1,065 s in the first). In this task about two thirds of each run is the same heavy batched rollout in both conditions (around 730 s of tool time in both Opus first-replicate runs), so a live session has little overhead to save.

Iteration 11 (h11): tuning a look in Blender. All eight ABC look-matching runs passed, most far inside the limits (per-region color error 4.3–24.1 against 33, color PSNR 19.5–20.8 dB against 18.5). Opus was clearly faster with the MCP: 379 and 334 s against 716 and 540 s (0.57×), at 0.69× the API cost. Astra took about as long in both conditions (708 and 869 s with the MCP, 647 and 876 s without) but matched the object colors much more closely with it (region error 6.6 and 5.2 against 24.1 and 18.3), and used 0.63× the input tokens. The agents did not use the MCP's built-in Blender backend. With the MCP they created the task's own Blender renderer inside the live session and kept it warm across turns. Without it, they ran the same renderer in scripts that started Blender afresh. The two best looks (Opus, both conditions) lit the white enclosure with a uniform white world, turned the directional lamps off, and calibrated one matte color per object, which beat the operator's reference look (region error 28.6). Two caveats: research agents of a parallel design workflow loaded the machine during this iteration, and one Astra MCP run was misclassified as an infrastructure failure because it printed the task file, which contains the token the runner looked for. It was rerun automatically; the original run, which ran concurrently with its partner, is the pair's trial, and the rerun (748 s, region error 7.6) is listed separately.

Table 2. Paired MCP/no-MCP ratios per harness iteration (geometric mean over pairs, 95% bootstrap interval). Below 1 favors the MCP. Cost ratios cover Claude Code pairs only.
IterationPasses MCP · no MCPTimeInput tokensOutput tokensTool callsCost
i0 (h0)2/2 · 2/20.91 [0.74, 1.12]; n=21.30 [1.25, 1.35]; n=21.03 [0.89, 1.19]; n=21.25 [1.21, 1.30]; n=21.07 [0.97, 1.18]; n=2
i0 (h0) · Opus 5.52/2 · 2/20.91 [0.74, 1.12]; n=21.30 [1.25, 1.35]; n=21.03 [0.89, 1.19]; n=21.25 [1.21, 1.30]; n=21.07 [0.97, 1.18]; n=2
i1 (h1)6/6 · 6/60.94 [0.66, 1.29]; n=61.19 [0.99, 1.44]; n=60.95 [0.74, 1.21]; n=61.09 [0.95, 1.26]; n=60.92 [0.74, 1.04]; n=3
i10 (h10)4/4 · 4/40.88 [0.71, 1.10]; n=40.81 [0.56, 1.17]; n=40.80 [0.60, 1.08]; n=40.98 [0.84, 1.16]; n=40.81 [0.60, 1.09]; n=2
i10 (h10) · GPT-6 Astra2/2 · 2/20.95 [0.76, 1.19]; n=20.75 [0.50, 1.13]; n=20.87 [0.68, 1.10]; n=20.92 [0.78, 1.08]; n=2–
i10 (h10) · Opus 5.52/2 · 2/20.82 [0.66, 1.02]; n=20.88 [0.64, 1.22]; n=20.74 [0.52, 1.05]; n=21.05 [0.89, 1.24]; n=20.81 [0.60, 1.09]; n=2
i11 (h11)4/4 · 4/40.77 [0.57, 1.04]; n=40.66 [0.52, 0.79]; n=40.76 [0.63, 0.92]; n=40.90 [0.83, 0.98]; n=40.69 [0.69, 0.70]; n=2
i11 (h11) · GPT-6 Astra2/2 · 2/21.04 [0.99, 1.09]; n=20.63 [0.47, 0.84]; n=20.92 [0.88, 0.97]; n=20.98 [0.94, 1.03]; n=2–
i11 (h11) · Opus 5.52/2 · 2/20.57 [0.53, 0.62]; n=20.68 [0.65, 0.71]; n=20.63 [0.58, 0.68]; n=20.83 [0.79, 0.86]; n=20.69 [0.69, 0.70]; n=2
i12 (h12)3/4 · 3/40.87 [0.67, 1.28]; n=40.99 [0.64, 1.52]; n=40.93 [0.68, 1.27]; n=40.97 [0.74, 1.24]; n=40.94 [0.79, 1.11]; n=2
i12 (h12) · GPT-6 Astra1/2 · 1/21.06 [0.72, 1.54]; n=20.98 [0.55, 1.77]; n=20.93 [0.60, 1.43]; n=20.78 [0.66, 0.93]; n=2–
i12 (h12) · Opus 5.52/2 · 2/20.72 [0.63, 0.83]; n=20.99 [0.75, 1.30]; n=20.94 [0.88, 1.00]; n=21.19 [1.04, 1.36]; n=20.94 [0.79, 1.11]; n=2
i13 (h13)2/4 · 3/40.86 [0.64, 1.10]; n=41.44 [0.96, 2.13]; n=41.15 [0.85, 1.59]; n=41.61 [1.17, 2.13]; n=41.56 [1.34, 1.81]; n=2
i13 (h13) · GPT-6 Astra1/2 · 2/21.00 [0.85, 1.17]; n=20.98 [0.77, 1.24]; n=20.93 [0.77, 1.13]; n=21.30 [1.03, 1.66]; n=2–
i13 (h13) · Opus 5.51/2 · 1/20.75 [0.54, 1.04]; n=22.13 [1.83, 2.47]; n=21.41 [1.10, 1.80]; n=21.99 [1.72, 2.31]; n=21.56 [1.34, 1.81]; n=2
i14 (h14)4/4 · 3/41.19 [0.81, 1.76]; n=41.29 [0.87, 2.24]; n=41.23 [0.89, 1.71]; n=41.48 [1.14, 2.14]; n=41.33 [0.91, 1.94]; n=2
i14 (h14) · GPT-6 Astra2/2 · 2/21.13 [0.91, 1.40]; n=20.99 [0.80, 1.23]; n=21.09 [0.87, 1.37]; n=21.31 [1.20, 1.43]; n=2–
i14 (h14) · Opus 5.52/2 · 1/21.26 [0.73, 2.19]; n=21.68 [0.94, 2.98]; n=21.39 [0.92, 2.11]; n=21.68 [1.09, 2.59]; n=21.33 [0.91, 1.94]; n=2
i15 (h15)7/8 · 8/80.96 [0.76, 1.24]; n=81.10 [0.81, 1.61]; n=80.98 [0.81, 1.22]; n=81.31 [1.06, 1.71]; n=81.17 [0.84, 1.76]; n=4
i15 (h15) · GPT-6 Astra4/4 · 4/41.00 [0.83, 1.26]; n=40.84 [0.64, 1.10]; n=40.91 [0.74, 1.19]; n=41.13 [0.91, 1.39]; n=4–
i15 (h15) · Opus 5.53/4 · 4/40.92 [0.61, 1.54]; n=41.43 [0.92, 2.49]; n=41.05 [0.79, 1.44]; n=41.51 [1.13, 2.34]; n=41.17 [0.84, 1.76]; n=4
i16 (h16)9/12 · 11/120.90 [0.71, 1.07]; n=111.30 [0.90, 1.85]; n=111.00 [0.77, 1.23]; n=111.30 [1.05, 1.61]; n=121.37 [1.10, 1.69]; n=6
i16 (h16) · GPT-6 Astra4/6 · 5/60.81 [0.50, 1.13]; n=50.82 [0.52, 1.13]; n=50.80 [0.51, 1.10]; n=51.00 [0.81, 1.20]; n=6–
i16 (h16) · Opus 5.55/6 · 6/60.98 [0.88, 1.14]; n=61.89 [1.31, 2.73]; n=61.20 [0.99, 1.44]; n=61.70 [1.39, 2.12]; n=61.37 [1.10, 1.69]; n=6
i17 (h17)7/10 · 9/101.07 [0.79, 1.48]; n=101.04 [0.74, 1.50]; n=100.95 [0.75, 1.27]; n=101.08 [0.88, 1.37]; n=100.84 [0.61, 1.19]; n=4
i17 (h17) · GPT-6 Astra4/6 · 5/61.12 [0.69, 1.83]; n=61.16 [0.73, 1.85]; n=61.05 [0.74, 1.62]; n=61.08 [0.81, 1.57]; n=6–
i17 (h17) · Opus 5.53/4 · 4/41.02 [0.81, 1.28]; n=40.89 [0.57, 1.48]; n=40.82 [0.64, 1.08]; n=41.08 [0.86, 1.41]; n=40.84 [0.61, 1.19]; n=4
i1 (h1) · GPT-6 Astra3/3 · 3/31.24 [0.80, 1.69]; n=31.38 [0.99, 1.67]; n=31.03 [0.61, 1.39]; n=31.03 [0.79, 1.39]; n=3–
i1 (h1) · Opus 5.53/3 · 3/30.71 [0.46, 1.03]; n=31.03 [0.93, 1.23]; n=30.88 [0.65, 1.05]; n=31.16 [1.06, 1.25]; n=30.92 [0.74, 1.04]; n=3
i2 (h2)6/6 · 6/60.81 [0.67, 1.01]; n=60.97 [0.63, 1.49]; n=60.75 [0.58, 1.03]; n=60.99 [0.70, 1.36]; n=61.19 [0.84, 1.61]; n=3
i2 (h2) · GPT-6 Astra3/3 · 3/30.69 [0.54, 0.84]; n=30.57 [0.48, 0.75]; n=30.58 [0.45, 0.79]; n=30.76 [0.48, 1.42]; n=3–
i2 (h2) · Opus 5.53/3 · 3/30.97 [0.74, 1.28]; n=31.63 [1.30, 2.23]; n=30.97 [0.74, 1.50]; n=31.29 [1.08, 1.58]; n=31.19 [0.84, 1.61]; n=3
i3 (h3)12/12 · 12/120.76 [0.60, 0.94]; n=120.74 [0.55, 1.02]; n=120.72 [0.55, 0.94]; n=120.79 [0.63, 1.00]; n=120.89 [0.67, 1.16]; n=7
i3 (h3) · GPT-6 Astra5/5 · 5/50.80 [0.51, 1.13]; n=50.59 [0.41, 0.77]; n=50.58 [0.38, 0.82]; n=50.62 [0.53, 0.71]; n=5–
i3 (h3) · Opus 5.57/7 · 7/70.73 [0.55, 0.93]; n=70.88 [0.56, 1.31]; n=70.85 [0.61, 1.15]; n=70.93 [0.65, 1.26]; n=70.89 [0.67, 1.16]; n=7
i4 (h4)10/10 · 10/100.80 [0.60, 1.03]; n=100.81 [0.57, 1.11]; n=100.71 [0.53, 0.90]; n=100.83 [0.66, 1.03]; n=100.78 [0.60, 1.02]; n=5
i4 (h4) · GPT-6 Astra5/5 · 5/50.88 [0.58, 1.24]; n=50.75 [0.41, 1.27]; n=50.71 [0.43, 1.04]; n=50.69 [0.49, 0.93]; n=5–
i4 (h4) · Opus 5.55/5 · 5/50.73 [0.48, 1.03]; n=50.87 [0.62, 1.28]; n=50.71 [0.53, 0.94]; n=51.00 [0.82, 1.25]; n=50.78 [0.60, 1.02]; n=5
i5 (h5)10/10 · 10/100.97 [0.69, 1.41]; n=100.94 [0.68, 1.30]; n=100.83 [0.62, 1.07]; n=100.98 [0.77, 1.27]; n=100.99 [0.79, 1.23]; n=5
i5 (h5) · GPT-6 Astra5/5 · 5/50.93 [0.64, 1.26]; n=50.71 [0.48, 1.05]; n=50.74 [0.46, 1.07]; n=50.81 [0.60, 1.12]; n=5–
i5 (h5) · Opus 5.55/5 · 5/51.01 [0.59, 1.94]; n=51.24 [0.91, 1.71]; n=50.94 [0.70, 1.26]; n=51.19 [0.87, 1.61]; n=50.99 [0.79, 1.23]; n=5
i6 (h6)7/8 · 6/80.88 [0.73, 1.06]; n=80.84 [0.51, 1.35]; n=80.81 [0.58, 1.10]; n=80.89 [0.64, 1.24]; n=81.11 [0.88, 1.49]; n=4
i6 (h6) · GPT-6 Astra4/4 · 4/40.86 [0.62, 1.18]; n=40.52 [0.30, 0.85]; n=40.65 [0.38, 1.08]; n=40.63 [0.47, 0.90]; n=4–
i6 (h6) · Opus 5.53/4 · 2/40.90 [0.78, 1.05]; n=41.35 [0.88, 2.09]; n=41.00 [0.71, 1.42]; n=41.26 [0.92, 1.73]; n=41.11 [0.88, 1.49]; n=4
i7 (h7)6/6 · 6/60.64 [0.51, 0.80]; n=60.82 [0.54, 1.24]; n=60.77 [0.58, 1.01]; n=60.90 [0.61, 1.33]; n=60.91 [0.66, 1.20]; n=4
i7 (h7) · GPT-6 Astra2/2 · 2/20.75 [0.59, 0.96]; n=20.61 [0.41, 0.91]; n=20.64 [0.45, 0.91]; n=20.57 [0.44, 0.75]; n=2–
i7 (h7) · Opus 5.54/4 · 4/40.60 [0.47, 0.76]; n=40.95 [0.58, 1.55]; n=40.85 [0.58, 1.09]; n=41.12 [0.74, 1.69]; n=40.91 [0.66, 1.20]; n=4
i8 (h8)8/8 · 8/80.80 [0.65, 0.95]; n=81.09 [0.70, 1.70]; n=81.02 [0.79, 1.33]; n=81.17 [0.90, 1.55]; n=81.08 [0.78, 1.49]; n=6
i8 (h8) · GPT-6 Astra2/2 · 2/20.90 [0.70, 1.14]; n=20.81 [0.45, 1.44]; n=20.81 [0.62, 1.07]; n=21.01 [0.75, 1.35]; n=2–
i8 (h8) · Opus 5.56/6 · 6/60.77 [0.59, 0.93]; n=61.21 [0.73, 2.00]; n=61.10 [0.82, 1.48]; n=61.23 [0.89, 1.71]; n=61.08 [0.78, 1.49]; n=6
i9 (h9)4/4 · 4/40.86 [0.54, 1.39]; n=41.05 [0.62, 1.70]; n=41.02 [0.66, 1.38]; n=41.13 [0.94, 1.36]; n=41.35 [1.20, 1.52]; n=2
i9 (h9) · GPT-6 Astra2/2 · 2/20.87 [0.56, 1.36]; n=20.68 [0.49, 0.95]; n=20.81 [0.54, 1.21]; n=21.04 [0.86, 1.25]; n=2–
i9 (h9) · Opus 5.52/2 · 2/20.86 [0.52, 1.42]; n=21.60 [1.24, 2.07]; n=21.29 [1.15, 1.46]; n=21.23 [1.02, 1.48]; n=21.35 [1.20, 1.52]; n=2
All iterations111/122 · 115/1220.87 [0.81, 0.94]; n=1210.98 [0.88, 1.08]; n=1210.88 [0.82, 0.95]; n=1211.04 [0.97, 1.12]; n=1221.02 [0.93, 1.11]; n=65
All iterations · GPT-6 Astra51/57 · 54/570.92 [0.83, 1.03]; n=560.78 [0.68, 0.90]; n=560.80 [0.71, 0.90]; n=560.88 [0.79, 0.97]; n=57–
All iterations · Opus 5.560/65 · 61/650.83 [0.75, 0.92]; n=651.18 [1.03, 1.35]; n=650.95 [0.87, 1.04]; n=651.22 [1.11, 1.33]; n=651.02 [0.93, 1.11]; n=65
Input-token ratio MCP / no MCP per iteration and agent (geometric mean, 95% interval)0.4×0.5×0.7×1×1.4×2×2.5×← favors MCPfavors restart →i0 · Opusi0 · Opus: 1.30× (95% interval 1.25–1.35), n=2 pairs, MCP cheaper in 01.30×i10 · Astrai10 · Astra: 0.75× (95% interval 0.50–1.13), n=2 pairs, MCP cheaper in 10.75×i10 · Opusi10 · Opus: 0.88× (95% interval 0.64–1.22), n=2 pairs, MCP cheaper in 10.88×i11 · Astrai11 · Astra: 0.63× (95% interval 0.47–0.84), n=2 pairs, MCP cheaper in 20.63×i11 · Opusi11 · Opus: 0.68× (95% interval 0.65–0.71), n=2 pairs, MCP cheaper in 20.68×i12 · Astrai12 · Astra: 0.98× (95% interval 0.55–1.77), n=2 pairs, MCP cheaper in 10.98×i12 · Opusi12 · Opus: 0.99× (95% interval 0.75–1.30), n=2 pairs, MCP cheaper in 10.99×i13 · Astrai13 · Astra: 0.98× (95% interval 0.77–1.24), n=2 pairs, MCP cheaper in 10.98×i13 · Opusi13 · Opus: 2.13× (95% interval 1.83–2.47), n=2 pairs, MCP cheaper in 02.13×i14 · Astrai14 · Astra: 0.99× (95% interval 0.80–1.23), n=2 pairs, MCP cheaper in 10.99×i14 · Opusi14 · Opus: 1.68× (95% interval 0.94–2.98), n=2 pairs, MCP cheaper in 11.68×i15 · Astrai15 · Astra: 0.84× (95% interval 0.64–1.10), n=4 pairs, MCP cheaper in 20.84×i15 · Opusi15 · Opus: 1.43× (95% interval 0.92–2.49), n=4 pairs, MCP cheaper in 21.43×i16 · Astrai16 · Astra: 0.82× (95% interval 0.52–1.13), n=5 pairs, MCP cheaper in 30.82×i16 · Opusi16 · Opus: 1.89× (95% interval 1.31–2.73), n=6 pairs, MCP cheaper in 11.89×i17 · Astrai17 · Astra: 1.16× (95% interval 0.73–1.85), n=6 pairs, MCP cheaper in 31.16×i17 · Opusi17 · Opus: 0.89× (95% interval 0.57–1.48), n=4 pairs, MCP cheaper in 30.89×i1 · Astrai1 · Astra: 1.38× (95% interval 0.99–1.67), n=3 pairs, MCP cheaper in 11.38×i1 · Opusi1 · Opus: 1.03× (95% interval 0.93–1.23), n=3 pairs, MCP cheaper in 21.03×i2 · Astrai2 · Astra: 0.57× (95% interval 0.48–0.75), n=3 pairs, MCP cheaper in 30.57×i2 · Opusi2 · Opus: 1.63× (95% interval 1.30–2.23), n=3 pairs, MCP cheaper in 01.63×i3 · Astrai3 · Astra: 0.59× (95% interval 0.41–0.77), n=5 pairs, MCP cheaper in 50.59×i3 · Opusi3 · Opus: 0.88× (95% interval 0.56–1.31), n=7 pairs, MCP cheaper in 30.88×i4 · Astrai4 · Astra: 0.75× (95% interval 0.41–1.27), n=5 pairs, MCP cheaper in 30.75×i4 · Opusi4 · Opus: 0.87× (95% interval 0.62–1.28), n=5 pairs, MCP cheaper in 30.87×i5 · Astrai5 · Astra: 0.71× (95% interval 0.48–1.05), n=5 pairs, MCP cheaper in 40.71×i5 · Opusi5 · Opus: 1.24× (95% interval 0.91–1.71), n=5 pairs, MCP cheaper in 21.24×i6 · Astrai6 · Astra: 0.52× (95% interval 0.30–0.85), n=4 pairs, MCP cheaper in 40.52×i6 · Opusi6 · Opus: 1.35× (95% interval 0.88–2.09), n=4 pairs, MCP cheaper in 11.35×i7 · Astrai7 · Astra: 0.61× (95% interval 0.41–0.91), n=2 pairs, MCP cheaper in 20.61×i7 · Opusi7 · Opus: 0.95× (95% interval 0.58–1.55), n=4 pairs, MCP cheaper in 20.95×i8 · Astrai8 · Astra: 0.81× (95% interval 0.45–1.44), n=2 pairs, MCP cheaper in 10.81×i8 · Opusi8 · Opus: 1.21× (95% interval 0.73–2.00), n=6 pairs, MCP cheaper in 31.21×i9 · Astrai9 · Astra: 0.68× (95% interval 0.49–0.95), n=2 pairs, MCP cheaper in 20.68×i9 · Opusi9 · Opus: 1.60× (95% interval 1.24–2.07), n=2 pairs, MCP cheaper in 01.60×all · Astraall · Astra: 0.78× (95% interval 0.68–0.90), n=56 pairs, MCP cheaper in 390.78×all · Opusall · Opus: 1.18× (95% interval 1.03–1.35), n=65 pairs, MCP cheaper in 271.18×
Elapsed-time ratio MCP / no MCP per iteration and agent (geometric mean, 95% interval)0.4×0.5×0.7×1×1.4×2×2.5×← favors MCPfavors restart →i0 · Opusi0 · Opus: 0.91× (95% interval 0.74–1.12), n=2 pairs, MCP cheaper in 10.91×i10 · Astrai10 · Astra: 0.95× (95% interval 0.76–1.19), n=2 pairs, MCP cheaper in 10.95×i10 · Opusi10 · Opus: 0.82× (95% interval 0.66–1.02), n=2 pairs, MCP cheaper in 10.82×i11 · Astrai11 · Astra: 1.04× (95% interval 0.99–1.09), n=2 pairs, MCP cheaper in 11.04×i11 · Opusi11 · Opus: 0.57× (95% interval 0.53–0.62), n=2 pairs, MCP cheaper in 20.57×i12 · Astrai12 · Astra: 1.06× (95% interval 0.72–1.54), n=2 pairs, MCP cheaper in 11.06×i12 · Opusi12 · Opus: 0.72× (95% interval 0.63–0.83), n=2 pairs, MCP cheaper in 20.72×i13 · Astrai13 · Astra: 1.00× (95% interval 0.85–1.17), n=2 pairs, MCP cheaper in 11.00×i13 · Opusi13 · Opus: 0.75× (95% interval 0.54–1.04), n=2 pairs, MCP cheaper in 10.75×i14 · Astrai14 · Astra: 1.13× (95% interval 0.91–1.40), n=2 pairs, MCP cheaper in 11.13×i14 · Opusi14 · Opus: 1.26× (95% interval 0.73–2.19), n=2 pairs, MCP cheaper in 11.26×i15 · Astrai15 · Astra: 1.00× (95% interval 0.83–1.26), n=4 pairs, MCP cheaper in 31.00×i15 · Opusi15 · Opus: 0.92× (95% interval 0.61–1.54), n=4 pairs, MCP cheaper in 30.92×i16 · Astrai16 · Astra: 0.81× (95% interval 0.50–1.13), n=5 pairs, MCP cheaper in 20.81×i16 · Opusi16 · Opus: 0.98× (95% interval 0.88–1.14), n=6 pairs, MCP cheaper in 40.98×i17 · Astrai17 · Astra: 1.12× (95% interval 0.69–1.83), n=6 pairs, MCP cheaper in 21.12×i17 · Opusi17 · Opus: 1.02× (95% interval 0.81–1.28), n=4 pairs, MCP cheaper in 21.02×i1 · Astrai1 · Astra: 1.24× (95% interval 0.80–1.69), n=3 pairs, MCP cheaper in 11.24×i1 · Opusi1 · Opus: 0.71× (95% interval 0.46–1.03), n=3 pairs, MCP cheaper in 20.71×i2 · Astrai2 · Astra: 0.69× (95% interval 0.54–0.84), n=3 pairs, MCP cheaper in 30.69×i2 · Opusi2 · Opus: 0.97× (95% interval 0.74–1.28), n=3 pairs, MCP cheaper in 20.97×i3 · Astrai3 · Astra: 0.80× (95% interval 0.51–1.13), n=5 pairs, MCP cheaper in 30.80×i3 · Opusi3 · Opus: 0.73× (95% interval 0.55–0.93), n=7 pairs, MCP cheaper in 60.73×i4 · Astrai4 · Astra: 0.88× (95% interval 0.58–1.24), n=5 pairs, MCP cheaper in 20.88×i4 · Opusi4 · Opus: 0.73× (95% interval 0.48–1.03), n=5 pairs, MCP cheaper in 40.73×i5 · Astrai5 · Astra: 0.93× (95% interval 0.64–1.26), n=5 pairs, MCP cheaper in 30.93×i5 · Opusi5 · Opus: 1.01× (95% interval 0.59–1.94), n=5 pairs, MCP cheaper in 31.01×i6 · Astrai6 · Astra: 0.86× (95% interval 0.62–1.18), n=4 pairs, MCP cheaper in 20.86×i6 · Opusi6 · Opus: 0.90× (95% interval 0.78–1.05), n=4 pairs, MCP cheaper in 30.90×i7 · Astrai7 · Astra: 0.75× (95% interval 0.59–0.96), n=2 pairs, MCP cheaper in 20.75×i7 · Opusi7 · Opus: 0.60× (95% interval 0.47–0.76), n=4 pairs, MCP cheaper in 40.60×i8 · Astrai8 · Astra: 0.90× (95% interval 0.70–1.14), n=2 pairs, MCP cheaper in 10.90×i8 · Opusi8 · Opus: 0.77× (95% interval 0.59–0.93), n=6 pairs, MCP cheaper in 50.77×i9 · Astrai9 · Astra: 0.87× (95% interval 0.56–1.36), n=2 pairs, MCP cheaper in 10.87×i9 · Opusi9 · Opus: 0.86× (95% interval 0.52–1.42), n=2 pairs, MCP cheaper in 10.86×all · Astraall · Astra: 0.92× (95% interval 0.83–1.03), n=56 pairs, MCP cheaper in 300.92×all · Opusall · Opus: 0.83× (95% interval 0.75–0.92), n=65 pairs, MCP cheaper in 470.83×
Input tokens per pair [log scale]300k500k1.0M2.0M3.0M5.0M10.0M20.0M30.0Mi0 · G1 tracking · Opus 5.5923k tokens — Newton MCP, i0 · G1 tracking · Opus 5.5, passed682k tokens — No MCP (edit/restart), i0 · G1 tracking · Opus 5.5, passedi0 · Grasp drift · Opus 5.51.9M tokens — Newton MCP, i0 · Grasp drift · Opus 5.5, passed1.5M tokens — No MCP (edit/restart), i0 · Grasp drift · Opus 5.5, passedi1 · Real pendulum · GPT-6 Astra2.9M tokens — Newton MCP, i1 · Real pendulum · GPT-6 Astra, passed1.7M tokens — No MCP (edit/restart), i1 · Real pendulum · GPT-6 Astra, passedi1 · Real pendulum · Opus 5.5674k tokens — Newton MCP, i1 · Real pendulum · Opus 5.5, passed708k tokens — No MCP (edit/restart), i1 · Real pendulum · Opus 5.5, passedi1 · G1 tracking · GPT-6 Astra868k tokens — Newton MCP, i1 · G1 tracking · GPT-6 Astra, passed875k tokens — No MCP (edit/restart), i1 · G1 tracking · GPT-6 Astra, passedi1 · G1 tracking · Opus 5.5694k tokens — Newton MCP, i1 · G1 tracking · Opus 5.5, passed566k tokens — No MCP (edit/restart), i1 · G1 tracking · Opus 5.5, passedi1 · Grasp drift · GPT-6 Astra925k tokens — Newton MCP, i1 · Grasp drift · GPT-6 Astra, passed587k tokens — No MCP (edit/restart), i1 · Grasp drift · GPT-6 Astra, passedi1 · Grasp drift · Opus 5.52.0M tokens — Newton MCP, i1 · Grasp drift · Opus 5.5, passed2.1M tokens — No MCP (edit/restart), i1 · Grasp drift · Opus 5.5, passedi10 · ABC arm replay · GPT-6 Astra1.9M tokens — Newton MCP, i10 · ABC arm replay · GPT-6 Astra, passed3.9M tokens — No MCP (edit/restart), i10 · ABC arm replay · GPT-6 Astra, passedi10 · ABC arm replay · GPT-6 Astra · p11.7M tokens — Newton MCP, i10 · ABC arm replay · GPT-6 Astra · p1, passed1.5M tokens — No MCP (edit/restart), i10 · ABC arm replay · GPT-6 Astra · p1, passedi10 · ABC arm replay · Opus 5.52.9M tokens — Newton MCP, i10 · ABC arm replay · Opus 5.5, passed2.3M tokens — No MCP (edit/restart), i10 · ABC arm replay · Opus 5.5, passedi10 · ABC arm replay · Opus 5.5 · p11.2M tokens — Newton MCP, i10 · ABC arm replay · Opus 5.5 · p1, passed1.9M tokens — No MCP (edit/restart), i10 · ABC arm replay · Opus 5.5 · p1, passedi11 · ABC look matching · GPT-6 Astra1.4M tokens — Newton MCP, i11 · ABC look matching · GPT-6 Astra, passed1.7M tokens — No MCP (edit/restart), i11 · ABC look matching · GPT-6 Astra, passedi11 · ABC look matching · GPT-6 Astra · p11.4M tokens — Newton MCP, i11 · ABC look matching · GPT-6 Astra · p1, passed2.9M tokens — No MCP (edit/restart), i11 · ABC look matching · GPT-6 Astra · p1, passedi11 · ABC look matching · Opus 5.51.4M tokens — Newton MCP, i11 · ABC look matching · Opus 5.5, passed2.0M tokens — No MCP (edit/restart), i11 · ABC look matching · Opus 5.5, passedi11 · ABC look matching · Opus 5.5 · p11.2M tokens — Newton MCP, i11 · ABC look matching · Opus 5.5 · p1, passed1.9M tokens — No MCP (edit/restart), i11 · ABC look matching · Opus 5.5 · p1, passedi12 · ABC physical replay · GPT-6 Astra9.1M tokens — Newton MCP, i12 · ABC physical replay · GPT-6 Astra, passed5.1M tokens — No MCP (edit/restart), i12 · ABC physical replay · GPT-6 Astra, failed verificationi12 · ABC physical replay · GPT-6 Astra · p13.3M tokens — Newton MCP, i12 · ABC physical replay · GPT-6 Astra · p1, failed verification6.0M tokens — No MCP (edit/restart), i12 · ABC physical replay · GPT-6 Astra · p1, passedi12 · ABC physical replay · Opus 5.511.5M tokens — Newton MCP, i12 · ABC physical replay · Opus 5.5, passed8.8M tokens — No MCP (edit/restart), i12 · ABC physical replay · Opus 5.5, passedi12 · ABC physical replay · Opus 5.5 · p17.3M tokens — Newton MCP, i12 · ABC physical replay · Opus 5.5 · p1, passed9.6M tokens — No MCP (edit/restart), i12 · ABC physical replay · Opus 5.5 · p1, passedi13 · ABC physical replay · GPT-6 Astra6.9M tokens — Newton MCP, i13 · ABC physical replay · GPT-6 Astra, passed5.6M tokens — No MCP (edit/restart), i13 · ABC physical replay · GPT-6 Astra, passedi13 · ABC physical replay · GPT-6 Astra · p14.8M tokens — Newton MCP, i13 · ABC physical replay · GPT-6 Astra · p1, failed verification6.1M tokens — No MCP (edit/restart), i13 · ABC physical replay · GPT-6 Astra · p1, passedi13 · ABC physical replay · Opus 5.511.3M tokens — Newton MCP, i13 · ABC physical replay · Opus 5.5, passed6.1M tokens — No MCP (edit/restart), i13 · ABC physical replay · Opus 5.5, passedi13 · ABC physical replay · Opus 5.5 · p110.5M tokens — Newton MCP, i13 · ABC physical replay · Opus 5.5 · p1, failed verification4.3M tokens — No MCP (edit/restart), i13 · ABC physical replay · Opus 5.5 · p1, failed verificationi14 · ABC screwdriver in bin · GPT-6 Astra3.0M tokens — Newton MCP, i14 · ABC screwdriver in bin · GPT-6 Astra, passed3.8M tokens — No MCP (edit/restart), i14 · ABC screwdriver in bin · GPT-6 Astra, passedi14 · ABC screwdriver in bin · GPT-6 Astra · p15.4M tokens — Newton MCP, i14 · ABC screwdriver in bin · GPT-6 Astra · p1, passed4.4M tokens — No MCP (edit/restart), i14 · ABC screwdriver in bin · GPT-6 Astra · p1, passedi14 · ABC screwdriver in bin · Opus 5.55.8M tokens — Newton MCP, i14 · ABC screwdriver in bin · Opus 5.5, passed2.0M tokens — No MCP (edit/restart), i14 · ABC screwdriver in bin · Opus 5.5, failed verificationi14 · ABC screwdriver in bin · Opus 5.5 · p12.6M tokens — Newton MCP, i14 · ABC screwdriver in bin · Opus 5.5 · p1, passed2.7M tokens — No MCP (edit/restart), i14 · ABC screwdriver in bin · Opus 5.5 · p1, passedi15 · ABC scene from photos · GPT-6 Astra7.3M tokens — Newton MCP, i15 · ABC scene from photos · GPT-6 Astra, passed6.9M tokens — No MCP (edit/restart), i15 · ABC scene from photos · GPT-6 Astra, passedi15 · ABC scene from photos · GPT-6 Astra · p110.1M tokens — Newton MCP, i15 · ABC scene from photos · GPT-6 Astra · p1, passed8.9M tokens — No MCP (edit/restart), i15 · ABC scene from photos · GPT-6 Astra · p1, passedi15 · ABC scene from photos · Opus 5.511.7M tokens — Newton MCP, i15 · ABC scene from photos · Opus 5.5, passed13.6M tokens — No MCP (edit/restart), i15 · ABC scene from photos · Opus 5.5, passedi15 · ABC scene from photos · Opus 5.5 · p129.0M tokens — Newton MCP, i15 · ABC scene from photos · Opus 5.5 · p1, failed verification8.5M tokens — No MCP (edit/restart), i15 · ABC scene from photos · Opus 5.5 · p1, passedi15 · G1 MPC controller · GPT-6 Astra5.8M tokens — Newton MCP, i15 · G1 MPC controller · GPT-6 Astra, passed9.5M tokens — No MCP (edit/restart), i15 · G1 MPC controller · GPT-6 Astra, passedi15 · G1 MPC controller · GPT-6 Astra · p16.1M tokens — Newton MCP, i15 · G1 MPC controller · GPT-6 Astra · p1, passed9.0M tokens — No MCP (edit/restart), i15 · G1 MPC controller · GPT-6 Astra · p1, passedi15 · G1 MPC controller · Opus 5.56.7M tokens — Newton MCP, i15 · G1 MPC controller · Opus 5.5, passed6.8M tokens — No MCP (edit/restart), i15 · G1 MPC controller · Opus 5.5, passedi15 · G1 MPC controller · Opus 5.5 · p15.1M tokens — Newton MCP, i15 · G1 MPC controller · Opus 5.5 · p1, passed3.4M tokens — No MCP (edit/restart), i15 · G1 MPC controller · Opus 5.5 · p1, passedi16 · ABC scene from photos · GPT-6 Astra7.0M tokens — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra, passed5.8M tokens — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra, passedi16 · ABC scene from photos · GPT-6 Astra · p17.7M tokens — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra · p1, passed8.2M tokens — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra · p1, passedi16 · ABC scene from photos · GPT-6 Astra · p26.6M tokens — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra · p2, failed verification7.8M tokens — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra · p2, passedi16 · ABC scene from photos · Opus 5.528.3M tokens — Newton MCP, i16 · ABC scene from photos · Opus 5.5, failed verification14.4M tokens — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5, passedi16 · ABC scene from photos · Opus 5.5 · p123.9M tokens — Newton MCP, i16 · ABC scene from photos · Opus 5.5 · p1, passed9.2M tokens — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5 · p1, passedi16 · ABC scene from photos · Opus 5.5 · p216.5M tokens — Newton MCP, i16 · ABC scene from photos · Opus 5.5 · p2, passed13.3M tokens — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5 · p2, passedi16 · G1 MPC controller · GPT-6 Astra3.2M tokens — Newton MCP, i16 · G1 MPC controller · GPT-6 Astra, passed9.5M tokens — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra, passedi16 · G1 MPC controller · GPT-6 Astra · p16.4M tokens — Newton MCP, i16 · G1 MPC controller · GPT-6 Astra · p1, passed5.4M tokens — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra · p1, passedi16 · G1 MPC controller · GPT-6 Astra · p213.5M tokens — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra · p2, failed verificationi16 · G1 MPC controller · Opus 5.56.2M tokens — Newton MCP, i16 · G1 MPC controller · Opus 5.5, passed1.6M tokens — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5, passedi16 · G1 MPC controller · Opus 5.5 · p14.1M tokens — Newton MCP, i16 · G1 MPC controller · Opus 5.5 · p1, passed2.1M tokens — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5 · p1, passedi16 · G1 MPC controller · Opus 5.5 · p24.4M tokens — Newton MCP, i16 · G1 MPC controller · Opus 5.5 · p2, passed4.7M tokens — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5 · p2, passedi17 · ABC scene from photos · GPT-6 Astra15.6M tokens — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra, passed4.9M tokens — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra, passedi17 · ABC scene from photos · GPT-6 Astra · p13.9M tokens — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra · p1, passed7.8M tokens — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra · p1, passedi17 · ABC scene from photos · GPT-6 Astra · p23.9M tokens — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra · p2, passed5.1M tokens — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra · p2, passedi17 · ABC scene from photos · Opus 5.512.0M tokens — Newton MCP, i17 · ABC scene from photos · Opus 5.5, passed12.2M tokens — No MCP (edit/restart), i17 · ABC scene from photos · Opus 5.5, passedi17 · ABC scene from photos · Opus 5.5 · p122.0M tokens — Newton MCP, i17 · ABC scene from photos · Opus 5.5 · p1, failed verification11.5M tokens — No MCP (edit/restart), i17 · ABC scene from photos · Opus 5.5 · p1, passedi17 · G1 MPC controller · GPT-6 Astra8.2M tokens — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra, passed9.6M tokens — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra, passedi17 · G1 MPC controller · GPT-6 Astra · p19.4M tokens — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra · p1, failed verification6.1M tokens — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra · p1, passedi17 · G1 MPC controller · GPT-6 Astra · p210.8M tokens — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra · p2, failed verification7.4M tokens — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra · p2, failed verificationi17 · G1 MPC controller · Opus 5.54.7M tokens — Newton MCP, i17 · G1 MPC controller · Opus 5.5, passed7.1M tokens — No MCP (edit/restart), i17 · G1 MPC controller · Opus 5.5, passedi17 · G1 MPC controller · Opus 5.5 · p15.8M tokens — Newton MCP, i17 · G1 MPC controller · Opus 5.5 · p1, passed11.9M tokens — No MCP (edit/restart), i17 · G1 MPC controller · Opus 5.5 · p1, passedi2 · Real pendulum · GPT-6 Astra1.5M tokens — Newton MCP, i2 · Real pendulum · GPT-6 Astra, passed2.0M tokens — No MCP (edit/restart), i2 · Real pendulum · GPT-6 Astra, passedi2 · Real pendulum · Opus 5.5661k tokens — Newton MCP, i2 · Real pendulum · Opus 5.5, passed443k tokens — No MCP (edit/restart), i2 · Real pendulum · Opus 5.5, passedi2 · G1 tracking · GPT-6 Astra527k tokens — Newton MCP, i2 · G1 tracking · GPT-6 Astra, passed998k tokens — No MCP (edit/restart), i2 · G1 tracking · GPT-6 Astra, passedi2 · G1 tracking · Opus 5.51.6M tokens — Newton MCP, i2 · G1 tracking · Opus 5.5, passed705k tokens — No MCP (edit/restart), i2 · G1 tracking · Opus 5.5, passedi2 · Grasp drift · GPT-6 Astra580k tokens — Newton MCP, i2 · Grasp drift · GPT-6 Astra, passed1.2M tokens — No MCP (edit/restart), i2 · Grasp drift · GPT-6 Astra, passedi2 · Grasp drift · Opus 5.51.3M tokens — Newton MCP, i2 · Grasp drift · Opus 5.5, passed1.0M tokens — No MCP (edit/restart), i2 · Grasp drift · Opus 5.5, passedi3 · Cube toss · GPT-6 Astra1.0M tokens — Newton MCP, i3 · Cube toss · GPT-6 Astra, passed1.7M tokens — No MCP (edit/restart), i3 · Cube toss · GPT-6 Astra, passedi3 · Cube toss · GPT-6 Astra · p1914k tokens — Newton MCP, i3 · Cube toss · GPT-6 Astra · p1, passed1.2M tokens — No MCP (edit/restart), i3 · Cube toss · GPT-6 Astra · p1, passedi3 · Cube toss · Opus 5.5536k tokens — Newton MCP, i3 · Cube toss · Opus 5.5, passed712k tokens — No MCP (edit/restart), i3 · Cube toss · Opus 5.5, passedi3 · Cube toss · Opus 5.5 · p1348k tokens — Newton MCP, i3 · Cube toss · Opus 5.5 · p1, passed925k tokens — No MCP (edit/restart), i3 · Cube toss · Opus 5.5 · p1, passedi3 · Real pendulum · GPT-6 Astra1.3M tokens — Newton MCP, i3 · Real pendulum · GPT-6 Astra, passed1.6M tokens — No MCP (edit/restart), i3 · Real pendulum · GPT-6 Astra, passedi3 · Real pendulum · Opus 5.5571k tokens — Newton MCP, i3 · Real pendulum · Opus 5.5, passed1.4M tokens — No MCP (edit/restart), i3 · Real pendulum · Opus 5.5, passedi3 · G1 tracking · GPT-6 Astra629k tokens — Newton MCP, i3 · G1 tracking · GPT-6 Astra, passed2.1M tokens — No MCP (edit/restart), i3 · G1 tracking · GPT-6 Astra, passedi3 · G1 tracking · Opus 5.5588k tokens — Newton MCP, i3 · G1 tracking · Opus 5.5, passed484k tokens — No MCP (edit/restart), i3 · G1 tracking · Opus 5.5, passedi3 · G1 tracking · Opus 5.5 · p1707k tokens — Newton MCP, i3 · G1 tracking · Opus 5.5 · p1, passed329k tokens — No MCP (edit/restart), i3 · G1 tracking · Opus 5.5 · p1, passedi3 · Grasp drift · GPT-6 Astra561k tokens — Newton MCP, i3 · Grasp drift · GPT-6 Astra, passed841k tokens — No MCP (edit/restart), i3 · Grasp drift · GPT-6 Astra, passedi3 · Grasp drift · Opus 5.51.3M tokens — Newton MCP, i3 · Grasp drift · Opus 5.5, passed1.2M tokens — No MCP (edit/restart), i3 · Grasp drift · Opus 5.5, passedi3 · Grasp drift · Opus 5.5 · p11.6M tokens — Newton MCP, i3 · Grasp drift · Opus 5.5 · p1, passed1.4M tokens — No MCP (edit/restart), i3 · Grasp drift · Opus 5.5 · p1, passedi4 · Cube toss · GPT-6 Astra2.3M tokens — Newton MCP, i4 · Cube toss · GPT-6 Astra, passed1.5M tokens — No MCP (edit/restart), i4 · Cube toss · GPT-6 Astra, passedi4 · Cube toss · Opus 5.5672k tokens — Newton MCP, i4 · Cube toss · Opus 5.5, passed410k tokens — No MCP (edit/restart), i4 · Cube toss · Opus 5.5, passedi4 · Real pendulum · GPT-6 Astra1.0M tokens — Newton MCP, i4 · Real pendulum · GPT-6 Astra, passed2.0M tokens — No MCP (edit/restart), i4 · Real pendulum · GPT-6 Astra, passedi4 · Real pendulum · Opus 5.5541k tokens — Newton MCP, i4 · Real pendulum · Opus 5.5, passed685k tokens — No MCP (edit/restart), i4 · Real pendulum · Opus 5.5, passedi4 · G1 tracking · GPT-6 Astra438k tokens — Newton MCP, i4 · G1 tracking · GPT-6 Astra, passed1.7M tokens — No MCP (edit/restart), i4 · G1 tracking · GPT-6 Astra, passedi4 · G1 tracking · Opus 5.5436k tokens — Newton MCP, i4 · G1 tracking · Opus 5.5, passed916k tokens — No MCP (edit/restart), i4 · G1 tracking · Opus 5.5, passedi4 · Grasp drift · GPT-6 Astra550k tokens — Newton MCP, i4 · Grasp drift · GPT-6 Astra, passed449k tokens — No MCP (edit/restart), i4 · Grasp drift · GPT-6 Astra, passedi4 · Grasp drift · Opus 5.51.1M tokens — Newton MCP, i4 · Grasp drift · Opus 5.5, passed1.6M tokens — No MCP (edit/restart), i4 · Grasp drift · Opus 5.5, passedi4 · SDF grinding · GPT-6 Astra661k tokens — Newton MCP, i4 · SDF grinding · GPT-6 Astra, passed747k tokens — No MCP (edit/restart), i4 · SDF grinding · GPT-6 Astra, passedi4 · SDF grinding · Opus 5.51.4M tokens — Newton MCP, i4 · SDF grinding · Opus 5.5, passed1.3M tokens — No MCP (edit/restart), i4 · SDF grinding · Opus 5.5, passedi5 · Cube toss · GPT-6 Astra949k tokens — Newton MCP, i5 · Cube toss · GPT-6 Astra, passed1.1M tokens — No MCP (edit/restart), i5 · Cube toss · GPT-6 Astra, passedi5 · Cube toss · Opus 5.5630k tokens — Newton MCP, i5 · Cube toss · Opus 5.5, passed679k tokens — No MCP (edit/restart), i5 · Cube toss · Opus 5.5, passedi5 · Real pendulum · GPT-6 Astra2.3M tokens — Newton MCP, i5 · Real pendulum · GPT-6 Astra, passed1.5M tokens — No MCP (edit/restart), i5 · Real pendulum · GPT-6 Astra, passedi5 · Real pendulum · Opus 5.5633k tokens — Newton MCP, i5 · Real pendulum · Opus 5.5, passed848k tokens — No MCP (edit/restart), i5 · Real pendulum · Opus 5.5, passedi5 · G1 tracking · GPT-6 Astra504k tokens — Newton MCP, i5 · G1 tracking · GPT-6 Astra, passed1.2M tokens — No MCP (edit/restart), i5 · G1 tracking · GPT-6 Astra, passedi5 · G1 tracking · Opus 5.5817k tokens — Newton MCP, i5 · G1 tracking · Opus 5.5, passed544k tokens — No MCP (edit/restart), i5 · G1 tracking · Opus 5.5, passedi5 · Grasp drift · GPT-6 Astra458k tokens — Newton MCP, i5 · Grasp drift · GPT-6 Astra, passed1.1M tokens — No MCP (edit/restart), i5 · Grasp drift · GPT-6 Astra, passedi5 · Grasp drift · Opus 5.52.3M tokens — Newton MCP, i5 · Grasp drift · Opus 5.5, passed1.0M tokens — No MCP (edit/restart), i5 · Grasp drift · Opus 5.5, passedi5 · SDF grinding · GPT-6 Astra769k tokens — Newton MCP, i5 · SDF grinding · GPT-6 Astra, passed931k tokens — No MCP (edit/restart), i5 · SDF grinding · GPT-6 Astra, passedi5 · SDF grinding · Opus 5.52.1M tokens — Newton MCP, i5 · SDF grinding · Opus 5.5, passed1.6M tokens — No MCP (edit/restart), i5 · SDF grinding · Opus 5.5, passedi6 · Cube toss · GPT-6 Astra543k tokens — Newton MCP, i6 · Cube toss · GPT-6 Astra, passed2.5M tokens — No MCP (edit/restart), i6 · Cube toss · GPT-6 Astra, passedi6 · Cube toss · Opus 5.5464k tokens — Newton MCP, i6 · Cube toss · Opus 5.5, passed611k tokens — No MCP (edit/restart), i6 · Cube toss · Opus 5.5, passedi6 · G1 hard · GPT-6 Astra898k tokens — Newton MCP, i6 · G1 hard · GPT-6 Astra, passed1.9M tokens — No MCP (edit/restart), i6 · G1 hard · GPT-6 Astra, passedi6 · G1 hard · GPT-6 Astra · p11.1M tokens — Newton MCP, i6 · G1 hard · GPT-6 Astra · p1, passed1.1M tokens — No MCP (edit/restart), i6 · G1 hard · GPT-6 Astra · p1, passedi6 · G1 hard · Opus 5.53.7M tokens — Newton MCP, i6 · G1 hard · Opus 5.5, passed1.4M tokens — No MCP (edit/restart), i6 · G1 hard · Opus 5.5, failed verificationi6 · G1 hard · Opus 5.5 · p12.7M tokens — Newton MCP, i6 · G1 hard · Opus 5.5 · p1, failed verification1.7M tokens — No MCP (edit/restart), i6 · G1 hard · Opus 5.5 · p1, failed verificationi6 · Grasp drift · GPT-6 Astra755k tokens — Newton MCP, i6 · Grasp drift · GPT-6 Astra, passed987k tokens — No MCP (edit/restart), i6 · Grasp drift · GPT-6 Astra, passedi6 · Grasp drift · Opus 5.51.4M tokens — Newton MCP, i6 · Grasp drift · Opus 5.5, passed1.3M tokens — No MCP (edit/restart), i6 · Grasp drift · Opus 5.5, passedi7 · Cube toss · Opus 5.5 · p1379k tokens — Newton MCP, i7 · Cube toss · Opus 5.5 · p1, passed738k tokens — No MCP (edit/restart), i7 · Cube toss · Opus 5.5 · p1, passedi7 · G1 hard · GPT-6 Astra1.2M tokens — Newton MCP, i7 · G1 hard · GPT-6 Astra, passed1.4M tokens — No MCP (edit/restart), i7 · G1 hard · GPT-6 Astra, passedi7 · G1 hard · Opus 5.57.5M tokens — Newton MCP, i7 · G1 hard · Opus 5.5, passed4.1M tokens — No MCP (edit/restart), i7 · G1 hard · Opus 5.5, passedi7 · G1 hard · Opus 5.5 · p16.6M tokens — Newton MCP, i7 · G1 hard · Opus 5.5 · p1, passed4.9M tokens — No MCP (edit/restart), i7 · G1 hard · Opus 5.5 · p1, passedi7 · G1 hard · Opus 5.5 · p24.1M tokens — Newton MCP, i7 · G1 hard · Opus 5.5 · p2, passed6.2M tokens — No MCP (edit/restart), i7 · G1 hard · Opus 5.5 · p2, passedi7 · Grasp drift · GPT-6 Astra · p2447k tokens — Newton MCP, i7 · Grasp drift · GPT-6 Astra · p2, passed1.1M tokens — No MCP (edit/restart), i7 · Grasp drift · GPT-6 Astra · p2, passedi8 · Real pendulum · Opus 5.5 · p21.2M tokens — Newton MCP, i8 · Real pendulum · Opus 5.5 · p2, passed1.2M tokens — No MCP (edit/restart), i8 · Real pendulum · Opus 5.5 · p2, passedi8 · G1 hard · GPT-6 Astra897k tokens — Newton MCP, i8 · G1 hard · GPT-6 Astra, passed2.0M tokens — No MCP (edit/restart), i8 · G1 hard · GPT-6 Astra, passedi8 · G1 hard · Opus 5.54.5M tokens — Newton MCP, i8 · G1 hard · Opus 5.5, passed8.8M tokens — No MCP (edit/restart), i8 · G1 hard · Opus 5.5, passedi8 · G1 hard · Opus 5.5 · p15.8M tokens — Newton MCP, i8 · G1 hard · Opus 5.5 · p1, passed3.9M tokens — No MCP (edit/restart), i8 · G1 hard · Opus 5.5 · p1, passedi8 · G1 hard · Opus 5.5 · p27.9M tokens — Newton MCP, i8 · G1 hard · Opus 5.5 · p2, passed2.9M tokens — No MCP (edit/restart), i8 · G1 hard · Opus 5.5 · p2, passedi8 · G1 tracking · Opus 5.5 · p12.2M tokens — Newton MCP, i8 · G1 tracking · Opus 5.5 · p1, passed874k tokens — No MCP (edit/restart), i8 · G1 tracking · Opus 5.5 · p1, passedi8 · Grasp drift · Opus 5.51.2M tokens — Newton MCP, i8 · Grasp drift · Opus 5.5, passed1.9M tokens — No MCP (edit/restart), i8 · Grasp drift · Opus 5.5, passedi8 · SDF grinding · GPT-6 Astra600k tokens — Newton MCP, i8 · SDF grinding · GPT-6 Astra, passed417k tokens — No MCP (edit/restart), i8 · SDF grinding · GPT-6 Astra, passedi9 · ABC station twin · GPT-6 Astra4.7M tokens — Newton MCP, i9 · ABC station twin · GPT-6 Astra, passed5.0M tokens — No MCP (edit/restart), i9 · ABC station twin · GPT-6 Astra, passedi9 · ABC station twin · GPT-6 Astra · p11.6M tokens — Newton MCP, i9 · ABC station twin · GPT-6 Astra · p1, passed3.2M tokens — No MCP (edit/restart), i9 · ABC station twin · GPT-6 Astra · p1, passedi9 · ABC station twin · Opus 5.54.4M tokens — Newton MCP, i9 · ABC station twin · Opus 5.5, passed3.5M tokens — No MCP (edit/restart), i9 · ABC station twin · Opus 5.5, passedi9 · ABC station twin · Opus 5.5 · p15.7M tokens — Newton MCP, i9 · ABC station twin · Opus 5.5 · p1, passed2.8M tokens — No MCP (edit/restart), i9 · ABC station twin · Opus 5.5 · p1, passed
Elapsed time per pair [s, log scale]2003005001,0002,0003,0005,000i0 · G1 tracking · Opus 5.5456 s — Newton MCP, i0 · G1 tracking · Opus 5.5, passed620 s — No MCP (edit/restart), i0 · G1 tracking · Opus 5.5, passedi0 · Grasp drift · Opus 5.5675 s — Newton MCP, i0 · Grasp drift · Opus 5.5, passed602 s — No MCP (edit/restart), i0 · Grasp drift · Opus 5.5, passedi1 · Real pendulum · GPT-6 Astra1,177 s — Newton MCP, i1 · Real pendulum · GPT-6 Astra, passed845 s — No MCP (edit/restart), i1 · Real pendulum · GPT-6 Astra, passedi1 · Real pendulum · Opus 5.5282 s — Newton MCP, i1 · Real pendulum · Opus 5.5, passed273 s — No MCP (edit/restart), i1 · Real pendulum · Opus 5.5, passedi1 · G1 tracking · GPT-6 Astra420 s — Newton MCP, i1 · G1 tracking · GPT-6 Astra, passed523 s — No MCP (edit/restart), i1 · G1 tracking · GPT-6 Astra, passedi1 · G1 tracking · Opus 5.5246 s — Newton MCP, i1 · G1 tracking · Opus 5.5, passed531 s — No MCP (edit/restart), i1 · G1 tracking · Opus 5.5, passedi1 · Grasp drift · GPT-6 Astra292 s — Newton MCP, i1 · Grasp drift · GPT-6 Astra, passed173 s — No MCP (edit/restart), i1 · Grasp drift · GPT-6 Astra, passedi1 · Grasp drift · Opus 5.5472 s — Newton MCP, i1 · Grasp drift · Opus 5.5, passed631 s — No MCP (edit/restart), i1 · Grasp drift · Opus 5.5, passedi10 · ABC arm replay · GPT-6 Astra807 s — Newton MCP, i10 · ABC arm replay · GPT-6 Astra, passed1,063 s — No MCP (edit/restart), i10 · ABC arm replay · GPT-6 Astra, passedi10 · ABC arm replay · GPT-6 Astra · p1656 s — Newton MCP, i10 · ABC arm replay · GPT-6 Astra · p1, passed551 s — No MCP (edit/restart), i10 · ABC arm replay · GPT-6 Astra · p1, passedi10 · ABC arm replay · Opus 5.51,081 s — Newton MCP, i10 · ABC arm replay · Opus 5.5, passed1,065 s — No MCP (edit/restart), i10 · ABC arm replay · Opus 5.5, passedi10 · ABC arm replay · Opus 5.5 · p1634 s — Newton MCP, i10 · ABC arm replay · Opus 5.5 · p1, passed968 s — No MCP (edit/restart), i10 · ABC arm replay · Opus 5.5 · p1, passedi11 · ABC look matching · GPT-6 Astra708 s — Newton MCP, i11 · ABC look matching · GPT-6 Astra, passed647 s — No MCP (edit/restart), i11 · ABC look matching · GPT-6 Astra, passedi11 · ABC look matching · GPT-6 Astra · p1869 s — Newton MCP, i11 · ABC look matching · GPT-6 Astra · p1, passed876 s — No MCP (edit/restart), i11 · ABC look matching · GPT-6 Astra · p1, passedi11 · ABC look matching · Opus 5.5379 s — Newton MCP, i11 · ABC look matching · Opus 5.5, passed716 s — No MCP (edit/restart), i11 · ABC look matching · Opus 5.5, passedi11 · ABC look matching · Opus 5.5 · p1334 s — Newton MCP, i11 · ABC look matching · Opus 5.5 · p1, passed540 s — No MCP (edit/restart), i11 · ABC look matching · Opus 5.5 · p1, passedi12 · ABC physical replay · GPT-6 Astra1,984 s — Newton MCP, i12 · ABC physical replay · GPT-6 Astra, passed1,285 s — No MCP (edit/restart), i12 · ABC physical replay · GPT-6 Astra, failed verificationi12 · ABC physical replay · GPT-6 Astra · p11,083 s — Newton MCP, i12 · ABC physical replay · GPT-6 Astra · p1, failed verification1,497 s — No MCP (edit/restart), i12 · ABC physical replay · GPT-6 Astra · p1, passedi12 · ABC physical replay · Opus 5.52,136 s — Newton MCP, i12 · ABC physical replay · Opus 5.5, passed2,563 s — No MCP (edit/restart), i12 · ABC physical replay · Opus 5.5, passedi12 · ABC physical replay · Opus 5.5 · p11,346 s — Newton MCP, i12 · ABC physical replay · Opus 5.5 · p1, passed2,147 s — No MCP (edit/restart), i12 · ABC physical replay · Opus 5.5 · p1, passedi13 · ABC physical replay · GPT-6 Astra1,721 s — Newton MCP, i13 · ABC physical replay · GPT-6 Astra, passed1,472 s — No MCP (edit/restart), i13 · ABC physical replay · GPT-6 Astra, passedi13 · ABC physical replay · GPT-6 Astra · p11,264 s — Newton MCP, i13 · ABC physical replay · GPT-6 Astra · p1, failed verification1,490 s — No MCP (edit/restart), i13 · ABC physical replay · GPT-6 Astra · p1, passedi13 · ABC physical replay · Opus 5.51,188 s — Newton MCP, i13 · ABC physical replay · Opus 5.5, passed2,199 s — No MCP (edit/restart), i13 · ABC physical replay · Opus 5.5, passedi13 · ABC physical replay · Opus 5.5 · p11,734 s — Newton MCP, i13 · ABC physical replay · Opus 5.5 · p1, failed verification1,664 s — No MCP (edit/restart), i13 · ABC physical replay · Opus 5.5 · p1, failed verificationi14 · ABC screwdriver in bin · GPT-6 Astra1,209 s — Newton MCP, i14 · ABC screwdriver in bin · GPT-6 Astra, passed1,331 s — No MCP (edit/restart), i14 · ABC screwdriver in bin · GPT-6 Astra, passedi14 · ABC screwdriver in bin · GPT-6 Astra · p11,881 s — Newton MCP, i14 · ABC screwdriver in bin · GPT-6 Astra · p1, passed1,345 s — No MCP (edit/restart), i14 · ABC screwdriver in bin · GPT-6 Astra · p1, passedi14 · ABC screwdriver in bin · Opus 5.5971 s — Newton MCP, i14 · ABC screwdriver in bin · Opus 5.5, passed444 s — No MCP (edit/restart), i14 · ABC screwdriver in bin · Opus 5.5, failed verificationi14 · ABC screwdriver in bin · Opus 5.5 · p1489 s — Newton MCP, i14 · ABC screwdriver in bin · Opus 5.5 · p1, passed673 s — No MCP (edit/restart), i14 · ABC screwdriver in bin · Opus 5.5 · p1, passedi15 · ABC scene from photos · GPT-6 Astra2,518 s — Newton MCP, i15 · ABC scene from photos · GPT-6 Astra, passed1,808 s — No MCP (edit/restart), i15 · ABC scene from photos · GPT-6 Astra, passedi15 · ABC scene from photos · GPT-6 Astra · p12,847 s — Newton MCP, i15 · ABC scene from photos · GPT-6 Astra · p1, passed2,994 s — No MCP (edit/restart), i15 · ABC scene from photos · GPT-6 Astra · p1, passedi15 · ABC scene from photos · Opus 5.51,317 s — Newton MCP, i15 · ABC scene from photos · Opus 5.5, passed2,418 s — No MCP (edit/restart), i15 · ABC scene from photos · Opus 5.5, passedi15 · ABC scene from photos · Opus 5.5 · p12,914 s — Newton MCP, i15 · ABC scene from photos · Opus 5.5 · p1, failed verification1,502 s — No MCP (edit/restart), i15 · ABC scene from photos · Opus 5.5 · p1, passedi15 · G1 MPC controller · GPT-6 Astra2,872 s — Newton MCP, i15 · G1 MPC controller · GPT-6 Astra, passed3,638 s — No MCP (edit/restart), i15 · G1 MPC controller · GPT-6 Astra, passedi15 · G1 MPC controller · GPT-6 Astra · p12,734 s — Newton MCP, i15 · G1 MPC controller · GPT-6 Astra · p1, passed2,903 s — No MCP (edit/restart), i15 · G1 MPC controller · GPT-6 Astra · p1, passedi15 · G1 MPC controller · Opus 5.52,983 s — Newton MCP, i15 · G1 MPC controller · Opus 5.5, passed3,866 s — No MCP (edit/restart), i15 · G1 MPC controller · Opus 5.5, passedi15 · G1 MPC controller · Opus 5.5 · p13,358 s — Newton MCP, i15 · G1 MPC controller · Opus 5.5 · p1, passed3,847 s — No MCP (edit/restart), i15 · G1 MPC controller · Opus 5.5 · p1, passedi16 · ABC scene from photos · GPT-6 Astra2,022 s — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra, passed1,776 s — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra, passedi16 · ABC scene from photos · GPT-6 Astra · p12,975 s — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra · p1, passed2,556 s — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra · p1, passedi16 · ABC scene from photos · GPT-6 Astra · p21,869 s — Newton MCP, i16 · ABC scene from photos · GPT-6 Astra · p2, failed verification2,553 s — No MCP (edit/restart), i16 · ABC scene from photos · GPT-6 Astra · p2, passedi16 · ABC scene from photos · Opus 5.52,617 s — Newton MCP, i16 · ABC scene from photos · Opus 5.5, failed verification2,433 s — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5, passedi16 · ABC scene from photos · Opus 5.5 · p12,411 s — Newton MCP, i16 · ABC scene from photos · Opus 5.5 · p1, passed1,733 s — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5 · p1, passedi16 · ABC scene from photos · Opus 5.5 · p21,668 s — Newton MCP, i16 · ABC scene from photos · Opus 5.5 · p2, passed1,912 s — No MCP (edit/restart), i16 · ABC scene from photos · Opus 5.5 · p2, passedi16 · G1 MPC controller · GPT-6 Astra1,264 s — Newton MCP, i16 · G1 MPC controller · GPT-6 Astra, passed3,767 s — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra, passedi16 · G1 MPC controller · GPT-6 Astra · p12,846 s — Newton MCP, i16 · G1 MPC controller · GPT-6 Astra · p1, passed2,708 s — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra · p1, passedi16 · G1 MPC controller · GPT-6 Astra · p25,407 s — Newton MCP, i16 · G1 MPC controller · GPT-6 Astra · p2, timed out5,224 s — No MCP (edit/restart), i16 · G1 MPC controller · GPT-6 Astra · p2, failed verificationi16 · G1 MPC controller · Opus 5.53,304 s — Newton MCP, i16 · G1 MPC controller · Opus 5.5, passed3,696 s — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5, passedi16 · G1 MPC controller · Opus 5.5 · p13,381 s — Newton MCP, i16 · G1 MPC controller · Opus 5.5 · p1, passed3,907 s — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5 · p1, passedi16 · G1 MPC controller · Opus 5.5 · p23,050 s — Newton MCP, i16 · G1 MPC controller · Opus 5.5 · p2, passed3,445 s — No MCP (edit/restart), i16 · G1 MPC controller · Opus 5.5 · p2, passedi17 · ABC scene from photos · GPT-6 Astra5,050 s — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra, passed1,704 s — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra, passedi17 · ABC scene from photos · GPT-6 Astra · p11,493 s — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra · p1, passed3,396 s — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra · p1, passedi17 · ABC scene from photos · GPT-6 Astra · p2992 s — Newton MCP, i17 · ABC scene from photos · GPT-6 Astra · p2, passed1,382 s — No MCP (edit/restart), i17 · ABC scene from photos · GPT-6 Astra · p2, passedi17 · ABC scene from photos · Opus 5.51,602 s — Newton MCP, i17 · ABC scene from photos · Opus 5.5, passed2,083 s — No MCP (edit/restart), i17 · ABC scene from photos · Opus 5.5, passedi17 · ABC scene from photos · Opus 5.5 · p12,903 s — Newton MCP, i17 · ABC scene from photos · Opus 5.5 · p1, failed verification2,006 s — No MCP (edit/restart), i17 · ABC scene from photos · Opus 5.5 · p1, passedi17 · G1 MPC controller · GPT-6 Astra3,966 s — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra, passed3,946 s — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra, passedi17 · G1 MPC controller · GPT-6 Astra · p14,339 s — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra · p1, failed verification2,413 s — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra · p1, passedi17 · G1 MPC controller · GPT-6 Astra · p23,500 s — Newton MCP, i17 · G1 MPC controller · GPT-6 Astra · p2, failed verification3,052 s — No MCP (edit/restart), i17 · G1 MPC controller · GPT-6 Astra · p2, failed verificationi17 · G1 MPC controller · Opus 5.53,387 s — Newton MCP, i17 · G1 MPC controller · Opus 5.5, passed4,001 s — No MCP (edit/restart), i17 · G1 MPC controller · Opus 5.5, passedi17 · G1 MPC controller · Opus 5.5 · p13,922 s — Newton MCP, i17 · G1 MPC controller · Opus 5.5 · p1, passed3,479 s — No MCP (edit/restart), i17 · G1 MPC controller · Opus 5.5 · p1, passedi2 · Real pendulum · GPT-6 Astra823 s — Newton MCP, i2 · Real pendulum · GPT-6 Astra, passed982 s — No MCP (edit/restart), i2 · Real pendulum · GPT-6 Astra, passedi2 · Real pendulum · Opus 5.5418 s — Newton MCP, i2 · Real pendulum · Opus 5.5, passed326 s — No MCP (edit/restart), i2 · Real pendulum · Opus 5.5, passedi2 · G1 tracking · GPT-6 Astra326 s — Newton MCP, i2 · G1 tracking · GPT-6 Astra, passed598 s — No MCP (edit/restart), i2 · G1 tracking · GPT-6 Astra, passedi2 · G1 tracking · Opus 5.5409 s — Newton MCP, i2 · G1 tracking · Opus 5.5, passed430 s — No MCP (edit/restart), i2 · G1 tracking · Opus 5.5, passedi2 · Grasp drift · GPT-6 Astra235 s — Newton MCP, i2 · Grasp drift · GPT-6 Astra, passed332 s — No MCP (edit/restart), i2 · Grasp drift · GPT-6 Astra, passedi2 · Grasp drift · Opus 5.5342 s — Newton MCP, i2 · Grasp drift · Opus 5.5, passed460 s — No MCP (edit/restart), i2 · Grasp drift · Opus 5.5, passedi3 · Cube toss · GPT-6 Astra391 s — Newton MCP, i3 · Cube toss · GPT-6 Astra, passed540 s — No MCP (edit/restart), i3 · Cube toss · GPT-6 Astra, passedi3 · Cube toss · GPT-6 Astra · p1543 s — Newton MCP, i3 · Cube toss · GPT-6 Astra · p1, passed426 s — No MCP (edit/restart), i3 · Cube toss · GPT-6 Astra · p1, passedi3 · Cube toss · Opus 5.5386 s — Newton MCP, i3 · Cube toss · Opus 5.5, passed401 s — No MCP (edit/restart), i3 · Cube toss · Opus 5.5, passedi3 · Cube toss · Opus 5.5 · p1244 s — Newton MCP, i3 · Cube toss · Opus 5.5 · p1, passed663 s — No MCP (edit/restart), i3 · Cube toss · Opus 5.5 · p1, passedi3 · Real pendulum · GPT-6 Astra625 s — Newton MCP, i3 · Real pendulum · GPT-6 Astra, passed712 s — No MCP (edit/restart), i3 · Real pendulum · GPT-6 Astra, passedi3 · Real pendulum · Opus 5.5274 s — Newton MCP, i3 · Real pendulum · Opus 5.5, passed368 s — No MCP (edit/restart), i3 · Real pendulum · Opus 5.5, passedi3 · G1 tracking · GPT-6 Astra310 s — Newton MCP, i3 · G1 tracking · GPT-6 Astra, passed898 s — No MCP (edit/restart), i3 · G1 tracking · GPT-6 Astra, passedi3 · G1 tracking · Opus 5.5208 s — Newton MCP, i3 · G1 tracking · Opus 5.5, passed381 s — No MCP (edit/restart), i3 · G1 tracking · Opus 5.5, passedi3 · G1 tracking · Opus 5.5 · p1251 s — Newton MCP, i3 · G1 tracking · Opus 5.5 · p1, passed351 s — No MCP (edit/restart), i3 · G1 tracking · Opus 5.5 · p1, passedi3 · Grasp drift · GPT-6 Astra285 s — Newton MCP, i3 · Grasp drift · GPT-6 Astra, passed249 s — No MCP (edit/restart), i3 · Grasp drift · GPT-6 Astra, passedi3 · Grasp drift · Opus 5.5501 s — Newton MCP, i3 · Grasp drift · Opus 5.5, passed516 s — No MCP (edit/restart), i3 · Grasp drift · Opus 5.5, passedi3 · Grasp drift · Opus 5.5 · p1752 s — Newton MCP, i3 · Grasp drift · Opus 5.5 · p1, passed672 s — No MCP (edit/restart), i3 · Grasp drift · Opus 5.5 · p1, passedi4 · Cube toss · GPT-6 Astra676 s — Newton MCP, i4 · Cube toss · GPT-6 Astra, passed550 s — No MCP (edit/restart), i4 · Cube toss · GPT-6 Astra, passedi4 · Cube toss · Opus 5.5377 s — Newton MCP, i4 · Cube toss · Opus 5.5, passed378 s — No MCP (edit/restart), i4 · Cube toss · Opus 5.5, passedi4 · Real pendulum · GPT-6 Astra724 s — Newton MCP, i4 · Real pendulum · GPT-6 Astra, passed997 s — No MCP (edit/restart), i4 · Real pendulum · GPT-6 Astra, passedi4 · Real pendulum · Opus 5.5316 s — Newton MCP, i4 · Real pendulum · Opus 5.5, passed279 s — No MCP (edit/restart), i4 · Real pendulum · Opus 5.5, passedi4 · G1 tracking · GPT-6 Astra278 s — Newton MCP, i4 · G1 tracking · GPT-6 Astra, passed681 s — No MCP (edit/restart), i4 · G1 tracking · GPT-6 Astra, passedi4 · G1 tracking · Opus 5.5220 s — Newton MCP, i4 · G1 tracking · Opus 5.5, passed639 s — No MCP (edit/restart), i4 · G1 tracking · Opus 5.5, passedi4 · Grasp drift · GPT-6 Astra243 s — Newton MCP, i4 · Grasp drift · GPT-6 Astra, passed180 s — No MCP (edit/restart), i4 · Grasp drift · GPT-6 Astra, passedi4 · Grasp drift · Opus 5.5405 s — Newton MCP, i4 · Grasp drift · Opus 5.5, passed698 s — No MCP (edit/restart), i4 · Grasp drift · Opus 5.5, passedi4 · SDF grinding · GPT-6 Astra314 s — Newton MCP, i4 · SDF grinding · GPT-6 Astra, passed299 s — No MCP (edit/restart), i4 · SDF grinding · GPT-6 Astra, passedi4 · SDF grinding · Opus 5.5289 s — Newton MCP, i4 · SDF grinding · Opus 5.5, passed316 s — No MCP (edit/restart), i4 · SDF grinding · Opus 5.5, passedi5 · Cube toss · GPT-6 Astra548 s — Newton MCP, i5 · Cube toss · GPT-6 Astra, passed401 s — No MCP (edit/restart), i5 · Cube toss · GPT-6 Astra, passedi5 · Cube toss · Opus 5.5311 s — Newton MCP, i5 · Cube toss · Opus 5.5, passed656 s — No MCP (edit/restart), i5 · Cube toss · Opus 5.5, passedi5 · Real pendulum · GPT-6 Astra964 s — Newton MCP, i5 · Real pendulum · GPT-6 Astra, passed706 s — No MCP (edit/restart), i5 · Real pendulum · GPT-6 Astra, passedi5 · Real pendulum · Opus 5.5316 s — Newton MCP, i5 · Real pendulum · Opus 5.5, passed456 s — No MCP (edit/restart), i5 · Real pendulum · Opus 5.5, passedi5 · G1 tracking · GPT-6 Astra273 s — Newton MCP, i5 · G1 tracking · GPT-6 Astra, passed619 s — No MCP (edit/restart), i5 · G1 tracking · GPT-6 Astra, passedi5 · G1 tracking · Opus 5.5301 s — Newton MCP, i5 · G1 tracking · Opus 5.5, passed436 s — No MCP (edit/restart), i5 · G1 tracking · Opus 5.5, passedi5 · Grasp drift · GPT-6 Astra264 s — Newton MCP, i5 · Grasp drift · GPT-6 Astra, passed292 s — No MCP (edit/restart), i5 · Grasp drift · GPT-6 Astra, passedi5 · Grasp drift · Opus 5.51,466 s — Newton MCP, i5 · Grasp drift · Opus 5.5, passed415 s — No MCP (edit/restart), i5 · Grasp drift · Opus 5.5, passedi5 · SDF grinding · GPT-6 Astra339 s — Newton MCP, i5 · SDF grinding · GPT-6 Astra, passed367 s — No MCP (edit/restart), i5 · SDF grinding · GPT-6 Astra, passedi5 · SDF grinding · Opus 5.5349 s — Newton MCP, i5 · SDF grinding · Opus 5.5, passed267 s — No MCP (edit/restart), i5 · SDF grinding · Opus 5.5, passedi6 · Cube toss · GPT-6 Astra357 s — Newton MCP, i6 · Cube toss · GPT-6 Astra, passed656 s — No MCP (edit/restart), i6 · Cube toss · GPT-6 Astra, passedi6 · Cube toss · Opus 5.5326 s — Newton MCP, i6 · Cube toss · Opus 5.5, passed387 s — No MCP (edit/restart), i6 · Cube toss · Opus 5.5, passedi6 · G1 hard · GPT-6 Astra508 s — Newton MCP, i6 · G1 hard · GPT-6 Astra, passed719 s — No MCP (edit/restart), i6 · G1 hard · GPT-6 Astra, passedi6 · G1 hard · GPT-6 Astra · p1721 s — Newton MCP, i6 · G1 hard · GPT-6 Astra · p1, passed546 s — No MCP (edit/restart), i6 · G1 hard · GPT-6 Astra · p1, passedi6 · G1 hard · Opus 5.5738 s — Newton MCP, i6 · G1 hard · Opus 5.5, passed675 s — No MCP (edit/restart), i6 · G1 hard · Opus 5.5, failed verificationi6 · G1 hard · Opus 5.5 · p1705 s — Newton MCP, i6 · G1 hard · Opus 5.5 · p1, failed verification968 s — No MCP (edit/restart), i6 · G1 hard · Opus 5.5 · p1, failed verificationi6 · Grasp drift · GPT-6 Astra323 s — Newton MCP, i6 · Grasp drift · GPT-6 Astra, passed306 s — No MCP (edit/restart), i6 · Grasp drift · GPT-6 Astra, passedi6 · Grasp drift · Opus 5.5657 s — Newton MCP, i6 · Grasp drift · Opus 5.5, passed658 s — No MCP (edit/restart), i6 · Grasp drift · Opus 5.5, passedi7 · Cube toss · Opus 5.5 · p1246 s — Newton MCP, i7 · Cube toss · Opus 5.5 · p1, passed611 s — No MCP (edit/restart), i7 · Cube toss · Opus 5.5 · p1, passedi7 · G1 hard · GPT-6 Astra626 s — Newton MCP, i7 · G1 hard · GPT-6 Astra, passed655 s — No MCP (edit/restart), i7 · G1 hard · GPT-6 Astra, passedi7 · G1 hard · Opus 5.51,089 s — Newton MCP, i7 · G1 hard · Opus 5.5, passed1,370 s — No MCP (edit/restart), i7 · G1 hard · Opus 5.5, passedi7 · G1 hard · Opus 5.5 · p11,051 s — Newton MCP, i7 · G1 hard · Opus 5.5 · p1, passed1,429 s — No MCP (edit/restart), i7 · G1 hard · Opus 5.5 · p1, passedi7 · G1 hard · Opus 5.5 · p2903 s — Newton MCP, i7 · G1 hard · Opus 5.5 · p2, passed1,669 s — No MCP (edit/restart), i7 · G1 hard · Opus 5.5 · p2, passedi7 · Grasp drift · GPT-6 Astra · p2229 s — Newton MCP, i7 · Grasp drift · GPT-6 Astra · p2, passed388 s — No MCP (edit/restart), i7 · Grasp drift · GPT-6 Astra · p2, passedi8 · Real pendulum · Opus 5.5 · p2465 s — Newton MCP, i8 · Real pendulum · Opus 5.5 · p2, passed482 s — No MCP (edit/restart), i8 · Real pendulum · Opus 5.5 · p2, passedi8 · G1 hard · GPT-6 Astra585 s — Newton MCP, i8 · G1 hard · GPT-6 Astra, passed833 s — No MCP (edit/restart), i8 · G1 hard · GPT-6 Astra, passedi8 · G1 hard · Opus 5.5839 s — Newton MCP, i8 · G1 hard · Opus 5.5, passed1,943 s — No MCP (edit/restart), i8 · G1 hard · Opus 5.5, passedi8 · G1 hard · Opus 5.5 · p11,067 s — Newton MCP, i8 · G1 hard · Opus 5.5 · p1, passed1,442 s — No MCP (edit/restart), i8 · G1 hard · Opus 5.5 · p1, passedi8 · G1 hard · Opus 5.5 · p21,285 s — Newton MCP, i8 · G1 hard · Opus 5.5 · p2, passed1,500 s — No MCP (edit/restart), i8 · G1 hard · Opus 5.5 · p2, passedi8 · G1 tracking · Opus 5.5 · p1789 s — Newton MCP, i8 · G1 tracking · Opus 5.5 · p1, passed763 s — No MCP (edit/restart), i8 · G1 tracking · Opus 5.5 · p1, passedi8 · Grasp drift · Opus 5.5539 s — Newton MCP, i8 · Grasp drift · Opus 5.5, passed719 s — No MCP (edit/restart), i8 · Grasp drift · Opus 5.5, passedi8 · SDF grinding · GPT-6 Astra310 s — Newton MCP, i8 · SDF grinding · GPT-6 Astra, passed271 s — No MCP (edit/restart), i8 · SDF grinding · GPT-6 Astra, passedi9 · ABC station twin · GPT-6 Astra1,841 s — Newton MCP, i9 · ABC station twin · GPT-6 Astra, passed1,354 s — No MCP (edit/restart), i9 · ABC station twin · GPT-6 Astra, passedi9 · ABC station twin · GPT-6 Astra · p1647 s — Newton MCP, i9 · ABC station twin · GPT-6 Astra · p1, passed1,154 s — No MCP (edit/restart), i9 · ABC station twin · GPT-6 Astra · p1, passedi9 · ABC station twin · Opus 5.5796 s — Newton MCP, i9 · ABC station twin · Opus 5.5, passed1,540 s — No MCP (edit/restart), i9 · ABC station twin · Opus 5.5, passedi9 · ABC station twin · Opus 5.5 · p11,060 s — Newton MCP, i9 · ABC station twin · Opus 5.5 · p1, passed749 s — No MCP (edit/restart), i9 · ABC station twin · Opus 5.5 · p1, passed
All 246 trials
Table 3. Every loop trial. Quality is the largest verified error divided by its limit (≤ 1 passes). Model and tool time split the elapsed time by event timestamps (tool time is the union of tool-execution intervals). Cost is the API list price reported by Claude Code; Codex does not report cost.
TrialConditionResultQualityTime [s]Model [s]Tools [s]Input tokOutput tokCostTool callsMCP calls
i0 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.22456286165923k22,178$1.122316
i0 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.47620178441682k18,695$0.9519–
i0 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.406752644061.90M26,657$1.663520
i0 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.406022833191.52M29,973$1.7127–
i1 · Real pendulum · GPT-6 Astra · p0Newton MCPPass0.881,1777094652.87M34,960–7910
i1 · Real pendulum · GPT-6 Astra · p0No MCP (edit/restart)Pass0.848457001441.72M25,131–57–
i1 · Real pendulum · Opus 5.5 · p0Newton MCPPass0.8928218989674k20,528$0.971914
i1 · Real pendulum · Opus 5.5 · p0No MCP (edit/restart)Pass0.7627317796708k19,508$0.9618–
i1 · G1 tracking · GPT-6 Astra · p0Newton MCPPass0.48420260155868k9,332–3013
i1 · G1 tracking · GPT-6 Astra · p0No MCP (edit/restart)Pass0.4852344182875k15,400–38–
i1 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.3224615474694k16,321$0.882015
i1 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.26531203328566k16,409$0.8416–
i1 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.4029219097925k5,769–2613
i1 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.401739676587k4,463–26–
i1 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.404722801291.97M27,805$1.703723
i1 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.446314162142.12M42,544$2.2931–
i10 · ABC arm replay · GPT-6 Astra · p0Newton MCPPass0.708072485481.92M19,832–5419
i10 · ABC arm replay · GPT-6 Astra · p0No MCP (edit/restart)Pass0.711,0632717913.88M29,006–69–
i10 · ABC arm replay · GPT-6 Astra · p1Newton MCPPass0.726562134331.71M16,874–398
i10 · ABC arm replay · GPT-6 Astra · p1No MCP (edit/restart)Pass0.695512283221.51M15,285–36–
i10 · ABC arm replay · Opus 5.5 · p0Newton MCPPass0.841,0813717002.86M37,620$2.075736
i10 · ABC arm replay · Opus 5.5 · p0No MCP (edit/restart)Pass0.821,0653407242.34M35,820$1.9146–
i10 · ABC arm replay · Opus 5.5 · p1Newton MCPPass0.776341674561.24M17,949$1.073324
i10 · ABC arm replay · Opus 5.5 · p1No MCP (edit/restart)Pass0.759683216471.94M34,415$1.7837–
i11 · ABC look matching · GPT-6 Astra · p0Newton MCPPass0.937085641191.39M16,829–3719
i11 · ABC look matching · GPT-6 Astra · p0No MCP (edit/restart)Pass0.956474731741.65M17,261–36–
i11 · ABC look matching · GPT-6 Astra · p0-rerunNewton MCPPass0.94748658701.64M19,483–4522
i11 · ABC look matching · GPT-6 Astra · p1Newton MCPPass0.938697081211.36M21,043–4424
i11 · ABC look matching · GPT-6 Astra · p1No MCP (edit/restart)Pass0.948766672082.88M24,048–47–
i11 · ABC look matching · Opus 5.5 · p0Newton MCPPass0.943792101451.42M20,877$1.333017
i11 · ABC look matching · Opus 5.5 · p0No MCP (edit/restart)Pass0.917163703452.00M36,288$1.9335–
i11 · ABC look matching · Opus 5.5 · p1Newton MCPPass0.90334227681.24M22,864$1.282720
i11 · ABC look matching · Opus 5.5 · p1No MCP (edit/restart)Pass0.895403451951.89M33,661$1.8334–
i12 · ABC physical replay · GPT-6 Astra · p0Newton MCPPass0.961,9841,3925849.09M50,669–11128
i12 · ABC physical replay · GPT-6 Astra · p0No MCP (edit/restart)Fail1.111,2856356495.13M35,385–169–
i12 · ABC physical replay · GPT-6 Astra · p1Newton MCPFailinf1,0836154623.25M23,416–7922
i12 · ABC physical replay · GPT-6 Astra · p1No MCP (edit/restart)Pass1.001,4977377605.96M39,001–85–
i12 · ABC physical replay · Opus 5.5 · p0Newton MCPPass0.912,1369921,13811.47M96,874$6.5410163
i12 · ABC physical replay · Opus 5.5 · p0No MCP (edit/restart)Pass1.002,5639781,5858.82M96,670$5.8874–
i12 · ABC physical replay · Opus 5.5 · p1Newton MCPPass0.961,3467475917.27M73,953$4.717655
i12 · ABC physical replay · Opus 5.5 · p1No MCP (edit/restart)Pass0.962,1478391,3089.63M83,972$5.9773–
i13 · ABC physical replay · GPT-6 Astra · p0Newton MCPPass0.961,7211,2474676.92M47,226–11625
i13 · ABC physical replay · GPT-6 Astra · p0No MCP (edit/restart)Pass0.941,4721,0424295.58M41,723–70–
i13 · ABC physical replay · GPT-6 Astra · p1Newton MCPFail1.061,2648214374.75M27,797–7829
i13 · ABC physical replay · GPT-6 Astra · p1No MCP (edit/restart)Pass0.961,4901,1962936.14M36,108–76–
i13 · ABC physical replay · Opus 5.5 · p0Newton MCPPass0.941,18885832411.25M85,517$6.1810371
i13 · ABC physical replay · Opus 5.5 · p0No MCP (edit/restart)Pass0.962,1998111,3886.15M77,970$4.5960–
i13 · ABC physical replay · Opus 5.5 · p1Newton MCPFail1.021,7341,06466410.51M105,293$6.5610469
i13 · ABC physical replay · Opus 5.5 · p1No MCP (edit/restart)Fail1.021,6645801,0844.25M58,340$3.6145–
i14 · ABC screwdriver in bin · GPT-6 Astra · p0Newton MCPPass0.941,2091,0431613.00M23,704–7734
i14 · ABC screwdriver in bin · GPT-6 Astra · p0No MCP (edit/restart)Pass0.981,3311,0552753.76M27,362–64–
i14 · ABC screwdriver in bin · GPT-6 Astra · p1Newton MCPPass0.921,8811,4324435.39M37,987–9019
i14 · ABC screwdriver in bin · GPT-6 Astra · p1No MCP (edit/restart)Pass0.901,3451,0902554.40M27,704–63–
i14 · ABC screwdriver in bin · Opus 5.5 · p0Newton MCPPass0.909716023645.82M61,168$3.837542
i14 · ABC screwdriver in bin · Opus 5.5 · p0No MCP (edit/restart)Fail1.034442851591.95M29,041$1.9829–
i14 · ABC screwdriver in bin · Opus 5.5 · p1Newton MCPPass0.944893521322.59M34,897$2.293817
i14 · ABC screwdriver in bin · Opus 5.5 · p1No MCP (edit/restart)Pass0.986733812912.74M38,090$2.5235–
i15 · ABC scene from photos · GPT-6 Astra · p0Newton MCPPass0.752,5182,1363767.28M70,741–12427
i15 · ABC scene from photos · GPT-6 Astra · p0No MCP (edit/restart)Pass0.751,8081,2465626.90M51,101–92–
i15 · ABC scene from photos · GPT-6 Astra · p1Newton MCPPass (re-verified)0.862,8472,29155110.12M73,043–15552
i15 · ABC scene from photos · GPT-6 Astra · p1No MCP (edit/restart)Pass0.862,9942,4895048.86M80,794–108–
i15 · ABC scene from photos · Opus 5.5 · p0Newton MCPPass0.751,3171,15715411.66M115,769$6.9610853
i15 · ABC scene from photos · Opus 5.5 · p0No MCP (edit/restart)Pass0.752,4181,49692113.65M150,190$8.61100–
i15 · ABC scene from photos · Opus 5.5 · p1Newton MCPFail1.502,9141,7421,16728.98M186,256$13.49232159
i15 · ABC scene from photos · Opus 5.5 · p1No MCP (edit/restart)Pass (re-verified)0.751,5021,0574458.54M107,095$6.0779–
i15 · G1 MPC controller · GPT-6 Astra · p0Newton MCPPass0.892,8721,2901,5755.76M70,558–12530
i15 · G1 MPC controller · GPT-6 Astra · p0No MCP (edit/restart)Pass0.553,6381,4052,2339.53M96,888–134–
i15 · G1 MPC controller · GPT-6 Astra · p1Newton MCPPass0.452,7341,2151,5116.07M59,870–9137
i15 · G1 MPC controller · GPT-6 Astra · p1No MCP (edit/restart)Pass0.972,9031,1201,7839.03M79,516–102–
i15 · G1 MPC controller · Opus 5.5 · p0Newton MCPPass0.612,9837772,1986.70M76,619$4.468138
i15 · G1 MPC controller · Opus 5.5 · p0No MCP (edit/restart)Pass0.943,8669342,9326.80M94,152$5.0568–
i15 · G1 MPC controller · Opus 5.5 · p1Newton MCPPass1.023,3586382,7125.09M61,882$3.367226
i15 · G1 MPC controller · Opus 5.5 · p1No MCP (edit/restart)Pass1.003,8475763,2713.43M55,412$2.8452–
i16 · ABC scene from photos · GPT-6 Astra · p0Newton MCPPass0.752,0221,6593586.97M55,019–10321
i16 · ABC scene from photos · GPT-6 Astra · p0No MCP (edit/restart)Pass (re-verified)0.751,7761,4443325.80M50,304–82–
i16 · ABC scene from photos · GPT-6 Astra · p1Newton MCPPass (re-verified)0.862,9752,6123597.66M69,037–11430
i16 · ABC scene from photos · GPT-6 Astra · p1No MCP (edit/restart)Pass0.752,5562,2013548.19M58,877–108–
i16 · ABC scene from photos · GPT-6 Astra · p2Newton MCPFail–1,8691,5213446.61M39,974–8316
i16 · ABC scene from photos · GPT-6 Astra · p2No MCP (edit/restart)Pass (re-verified)0.752,5532,2493047.78M52,304–94–
i16 · ABC scene from photos · Opus 5.5 · p0Newton MCPFail–2,6172,04556828.34M216,487$14.07205137
i16 · ABC scene from photos · Opus 5.5 · p0No MCP (edit/restart)Pass (re-verified)0.752,4331,58484814.39M159,636$9.14104–
i16 · ABC scene from photos · Opus 5.5 · p1Newton MCPPass0.752,4111,76863923.91M176,131$12.0114442
i16 · ABC scene from photos · Opus 5.5 · p1No MCP (edit/restart)Pass0.861,7331,1685659.22M117,161$6.5884–
i16 · ABC scene from photos · Opus 5.5 · p2Newton MCPPass0.751,6681,36729616.45M135,884$8.8713488
i16 · ABC scene from photos · Opus 5.5 · p2No MCP (edit/restart)Pass0.751,9121,45845313.34M142,503$8.47102–
i16 · G1 MPC controller · GPT-6 Astra · p0Newton MCPPass0.541,2645706873.23M28,873–7220
i16 · G1 MPC controller · GPT-6 Astra · p0No MCP (edit/restart)Pass0.793,7671,3902,3779.52M85,171–114–
i16 · G1 MPC controller · GPT-6 Astra · p1Newton MCPPass0.912,8461,2351,6046.37M64,323–10310
i16 · G1 MPC controller · GPT-6 Astra · p1No MCP (edit/restart)Pass0.522,7081,1341,5745.45M67,188–75–
i16 · G1 MPC controller · GPT-6 Astra · p2Newton MCPTimeoutinf5,4072,0623,332–––14319
i16 · G1 MPC controller · GPT-6 Astra · p2No MCP (edit/restart)Failinf5,2241,9073,31713.55M106,449–149–
i16 · G1 MPC controller · Opus 5.5 · p0Newton MCPPass0.993,3047002,5976.21M70,113$4.087318
i16 · G1 MPC controller · Opus 5.5 · p0No MCP (edit/restart)Pass1.203,6964233,2721.56M43,663$2.1327–
i16 · G1 MPC controller · Opus 5.5 · p1Newton MCPPass0.763,3815912,7844.07M58,104$3.095729
i16 · G1 MPC controller · Opus 5.5 · p1No MCP (edit/restart)Pass1.363,9074923,4152.06M50,430$2.3733–
i16 · G1 MPC controller · Opus 5.5 · p2Newton MCPPass0.513,0506202,4234.35M61,336$3.386534
i16 · G1 MPC controller · Opus 5.5 · p2No MCP (edit/restart)Pass1.123,4457352,7104.67M72,951$3.7655–
i17 · ABC scene from photos · GPT-6 Astra · p0Newton MCPPass0.865,0504,09994715.62M106,593–16539
i17 · ABC scene from photos · GPT-6 Astra · p0No MCP (edit/restart)Pass0.751,7041,5101924.88M38,768–64–
i17 · ABC scene from photos · GPT-6 Astra · p1Newton MCPPass0.751,4931,3081813.95M36,687–7417
i17 · ABC scene from photos · GPT-6 Astra · p1No MCP (edit/restart)Pass0.753,3962,9764207.79M62,077–108–
i17 · ABC scene from photos · GPT-6 Astra · p2Newton MCPPass0.759928381503.87M29,634–6010
i17 · ABC scene from photos · GPT-6 Astra · p2No MCP (edit/restart)Pass0.751,3821,1792035.06M40,575–73–
i17 · ABC scene from photos · Opus 5.5 · p0Newton MCPPass0.861,6021,19240611.98M124,825$6.6010443
i17 · ABC scene from photos · Opus 5.5 · p0No MCP (edit/restart)Pass0.752,0831,43265012.17M144,803$7.3694–
i17 · ABC scene from photos · Opus 5.5 · p1Newton MCPFail–2,9031,5131,38622.00M154,849$9.58156100
i17 · ABC scene from photos · Opus 5.5 · p1No MCP (edit/restart)Pass0.752,0061,28372211.46M126,844$6.8795–
i17 · ABC scene from photos · Opus 5.5 · p2Newton MCPPass0.751,2741,0212498.21M102,514$5.258423
i17 · G1 MPC controller · GPT-6 Astra · p0Newton MCPPass0.873,9662,2501,7098.25M74,970–967
i17 · G1 MPC controller · GPT-6 Astra · p0No MCP (edit/restart)Pass1.133,9461,7662,1809.64M78,232–113–
i17 · G1 MPC controller · GPT-6 Astra · p1Newton MCPFailinf4,3391,4172,9149.45M88,698–1308
i17 · G1 MPC controller · GPT-6 Astra · p1No MCP (edit/restart)Pass0.582,4137571,6556.06M65,289–107–
i17 · G1 MPC controller · GPT-6 Astra · p2Newton MCPFail1.363,5001,3932,10010.83M74,632–12249
i17 · G1 MPC controller · GPT-6 Astra · p2No MCP (edit/restart)Fail1.943,0521,3211,7307.44M83,680–116–
i17 · G1 MPC controller · Opus 5.5 · p0Newton MCPPass0.923,3876292,7514.75M61,314$3.136323
i17 · G1 MPC controller · Opus 5.5 · p0No MCP (edit/restart)Pass1.124,0018283,1727.07M82,882$4.2271–
i17 · G1 MPC controller · Opus 5.5 · p1Newton MCPPass0.853,9226223,2925.84M60,670$3.317210
i17 · G1 MPC controller · Opus 5.5 · p1No MCP (edit/restart)Pass1.673,4791,0812,39811.89M105,664$6.1886–
i2 · Real pendulum · GPT-6 Astra · p0Newton MCPPass0.858236921251.52M22,323–6813
i2 · Real pendulum · GPT-6 Astra · p0No MCP (edit/restart)Pass0.849828411402.02M28,331–48–
i2 · Real pendulum · Opus 5.5 · p0Newton MCPPass0.99418144269661k15,229$0.991410
i2 · Real pendulum · Opus 5.5 · p0No MCP (edit/restart)Pass0.90326174152443k18,429$0.7913–
i2 · G1 tracking · GPT-6 Astra · p0Newton MCPPass0.4532625167527k7,776–2410
i2 · G1 tracking · GPT-6 Astra · p0No MCP (edit/restart)Pass0.42598484114998k17,344–50–
i2 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.464092941071.57M30,791$1.613018
i2 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.32430196234705k20,569$1.0019–
i2 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.4023514877580k4,836–207
i2 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.443321991321.22M8,653–31–
i2 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.443421911431.32M19,744$1.182415
i2 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.444602602001.02M26,592$1.4019–
i3 · Cube toss · GPT-6 Astra · p0Newton MCPPass0.713911712081.00M6,378–2610
i3 · Cube toss · GPT-6 Astra · p0No MCP (edit/restart)Pass0.775401663741.74M13,909–48–
i3 · Cube toss · GPT-6 Astra · p1Newton MCPPass0.71543283248914k8,667–3017
i3 · Cube toss · GPT-6 Astra · p1No MCP (edit/restart)Pass0.714261552711.17M11,912–41–
i3 · Cube toss · Opus 5.5 · p0Newton MCPPass0.7338666308536k6,352$0.521710
i3 · Cube toss · Opus 5.5 · p0No MCP (edit/restart)Pass0.75401104297712k10,883$0.7222–
i3 · Cube toss · Opus 5.5 · p1Newton MCPPass0.7324461172348k5,784$0.41138
i3 · Cube toss · Opus 5.5 · p1No MCP (edit/restart)Pass0.76663128535925k13,450$0.8327–
i3 · Real pendulum · GPT-6 Astra · p0Newton MCPPass0.82625531891.30M17,435–396
i3 · Real pendulum · GPT-6 Astra · p0No MCP (edit/restart)Pass0.857125901211.58M20,961–59–
i3 · Real pendulum · Opus 5.5 · p0Newton MCPPass0.80274164105571k17,654$0.85164
i3 · Real pendulum · Opus 5.5 · p0No MCP (edit/restart)Pass0.853682401281.36M25,444$1.3030–
i3 · G1 tracking · GPT-6 Astra · p0Newton MCPPass0.4731022875629k7,360–3013
i3 · G1 tracking · GPT-6 Astra · p0No MCP (edit/restart)Pass0.368987371602.13M26,226–63–
i3 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.4520813269588k13,241$0.781912
i3 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.22381144237484k14,406$0.7315–
i3 · G1 tracking · Opus 5.5 · p1Newton MCPPass0.4625116876707k16,263$0.891913
i3 · G1 tracking · Opus 5.5 · p1No MCP (edit/restart)Pass0.4635194257329k9,963$0.5511–
i3 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.44285154123561k5,356–238
i3 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.40249130118841k6,309–32–
i3 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.445012712221.32M27,172$1.542620
i3 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.445162942221.17M29,877$1.6223–
i3 · Grasp drift · Opus 5.5 · p1Newton MCPPass0.447523993451.59M39,575$1.913017
i3 · Grasp drift · Opus 5.5 · p1No MCP (edit/restart)Pass0.446723023701.39M30,248$1.6724–
i4 · Cube toss · GPT-6 Astra · p0Newton MCPPass0.746765011632.35M12,995–5329
i4 · Cube toss · GPT-6 Astra · p0No MCP (edit/restart)Pass0.745501763741.48M14,379–49–
i4 · Cube toss · Opus 5.5 · p0Newton MCPPass0.7537792273672k8,935$0.651913
i4 · Cube toss · Opus 5.5 · p0No MCP (edit/restart)Pass0.7737886292410k9,241$0.5713–
i4 · Real pendulum · GPT-6 Astra · p0Newton MCPPass0.847245032161.02M19,663–339
i4 · Real pendulum · GPT-6 Astra · p0No MCP (edit/restart)Pass0.849978071891.96M29,977–58–
i4 · Real pendulum · Opus 5.5 · p0Newton MCPPass0.83316152159541k15,169$0.771611
i4 · Real pendulum · Opus 5.5 · p0No MCP (edit/restart)Pass0.8427918495685k18,793$0.8818–
i4 · G1 tracking · GPT-6 Astra · p0Newton MCPPass0.44278148122438k5,456–216
i4 · G1 tracking · GPT-6 Astra · p0No MCP (edit/restart)Pass0.316815581221.69M19,992–55–
i4 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.4622094117436k9,415$0.591511
i4 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.31639209430916k21,838$1.1621–
i4 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.4024317561550k5,048–247
i4 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.4018011663449k4,531–31–
i4 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.444052201781.11M22,138$1.202618
i4 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.446984152831.57M41,125$2.0426–
i4 · SDF grinding · GPT-6 Astra · p0Newton MCPPass0.0731428821661k9,017–238
i4 · SDF grinding · GPT-6 Astra · p0No MCP (edit/restart)Pass0.0729927524747k8,738–26–
i4 · SDF grinding · Opus 5.5 · p0Newton MCPPass0.07289264201.45M26,605$1.522711
i4 · SDF grinding · Opus 5.5 · p0No MCP (edit/restart)Pass0.07316260561.26M27,075$1.5225–
i5 · Cube toss · GPT-6 Astra · p0Newton MCPPass0.76548328208949k9,158–2918
i5 · Cube toss · GPT-6 Astra · p0No MCP (edit/restart)Pass0.744012181821.13M10,136–43–
i5 · Cube toss · Opus 5.5 · p0Newton MCPPass0.7631184215630k8,732$0.661810
i5 · Cube toss · Opus 5.5 · p0No MCP (edit/restart)Pass0.70656111545679k11,733$0.7324–
i5 · Real pendulum · GPT-6 Astra · p0Newton MCPPass0.849647931642.30M26,608–629
i5 · Real pendulum · GPT-6 Astra · p0No MCP (edit/restart)Pass0.86706609971.54M20,668–45–
i5 · Real pendulum · Opus 5.5 · p0Newton MCPPass0.81316145165633k15,412$0.781712
i5 · Real pendulum · Opus 5.5 · p0No MCP (edit/restart)Pass0.88456236220848k26,182$1.1820–
i5 · G1 tracking · GPT-6 Astra · p0Newton MCPPass0.47273157107504k5,229–236
i5 · G1 tracking · GPT-6 Astra · p0No MCP (edit/restart)Pass0.326195021161.18M17,854–46–
i5 · G1 tracking · Opus 5.5 · p0Newton MCPPass0.22301175118817k17,715$0.952115
i5 · G1 tracking · Opus 5.5 · p0No MCP (edit/restart)Pass0.27436191245544k20,265$0.9515–
i5 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.4026416985458k5,366–227
i5 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.402921631281.12M7,347–33–
i5 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.171,4663521,1062.28M35,116$1.904129
i5 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.444152301841.04M24,116$1.3520–
i5 · SDF grinding · GPT-6 Astra · p0Newton MCPPass0.0733931321769k8,646–3210
i5 · SDF grinding · GPT-6 Astra · p0No MCP (edit/restart)Pass0.0736730957931k9,952–28–
i5 · SDF grinding · Opus 5.5 · p0Newton MCPPass0.07349305392.08M30,548$1.883313
i5 · SDF grinding · Opus 5.5 · p0No MCP (edit/restart)Pass0.07267228391.58M23,128$1.6425–
i6 · Cube toss · GPT-6 Astra · p0Newton MCPPass0.74357203143543k5,374–2213
i6 · Cube toss · GPT-6 Astra · p0No MCP (edit/restart)Pass0.716562234332.50M17,163–50–
i6 · Cube toss · Opus 5.5 · p0Newton MCPPass0.7732668246464k7,184$0.55169
i6 · Cube toss · Opus 5.5 · p0No MCP (edit/restart)Pass0.75387103284611k11,350$0.6820–
i6 · G1 hard · GPT-6 Astra · p0Newton MCPPass0.6550844654898k14,005–3515
i6 · G1 hard · GPT-6 Astra · p0No MCP (edit/restart)Pass0.377195731461.89M20,792–60–
i6 · G1 hard · GPT-6 Astra · p1Newton MCPPass0.427216111011.09M19,688–4519
i6 · G1 hard · GPT-6 Astra · p1No MCP (edit/restart)Pass0.50546472731.15M15,510–43–
i6 · G1 hard · Opus 5.5 · p0Newton MCPPass0.837385761543.67M58,734$3.025245
i6 · G1 hard · Opus 5.5 · p0No MCP (edit/restart)Failinf6753593151.39M36,885$1.7726–
i6 · G1 hard · Opus 5.5 · p1Newton MCPFailinf7054852122.67M49,087$2.533928
i6 · G1 hard · Opus 5.5 · p1No MCP (edit/restart)Fail1.319684724961.65M48,407$2.2428–
i6 · Grasp drift · GPT-6 Astra · p0Newton MCPPass0.40323163151755k5,076–237
i6 · Grasp drift · GPT-6 Astra · p0No MCP (edit/restart)Pass0.44306146159987k7,470–39–
i6 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.406573323171.38M32,493$1.642717
i6 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.406583273311.34M32,676$1.6824–
i7 · Cube toss · Opus 5.5 · p1Newton MCPPass0.7124664170379k6,378$0.441411
i7 · Cube toss · Opus 5.5 · p1No MCP (edit/restart)Pass0.72611121490738k12,988$0.7822–
i7 · G1 hard · GPT-6 Astra · p0Newton MCPPass0.39626549681.23M17,144–3915
i7 · G1 hard · GPT-6 Astra · p0No MCP (edit/restart)Pass0.30655575791.35M18,771–52–
i7 · G1 hard · Opus 5.5 · p0Newton MCPPass0.431,0898212607.48M86,044$5.068561
i7 · G1 hard · Opus 5.5 · p0No MCP (edit/restart)Pass (re-verified)0.371,3707266434.14M75,216$3.7846–
i7 · G1 hard · Opus 5.5 · p1Newton MCPPass0.411,0517492956.61M79,257$4.558055
i7 · G1 hard · Opus 5.5 · p1No MCP (edit/restart)Pass0.621,4297966324.94M82,557$4.2952–
i7 · G1 hard · Opus 5.5 · p2Newton MCPPass (re-verified)0.389037391554.12M78,198$3.815441
i7 · G1 hard · Opus 5.5 · p2No MCP (edit/restart)Pass (re-verified)0.411,6697918796.21M80,595$4.4662–
i7 · Grasp drift · GPT-6 Astra · p2Newton MCPPass0.4022914476447k4,213–186
i7 · Grasp drift · GPT-6 Astra · p2No MCP (edit/restart)Pass0.443882331541.09M9,361–41–
i8 · Real pendulum · Opus 5.5 · p2Newton MCPPass0.624652462141.18M26,276$1.302622
i8 · Real pendulum · Opus 5.5 · p2No MCP (edit/restart)Pass0.854823401421.23M35,862$1.5827–
i8 · G1 hard · GPT-6 Astra · p0Newton MCPPass0.3158552848897k14,945–3312
i8 · G1 hard · GPT-6 Astra · p0No MCP (edit/restart)Pass0.528337201121.98M24,228–44–
i8 · G1 hard · Opus 5.5 · p0Newton MCPPass0.358397131164.52M76,040$3.766141
i8 · G1 hard · Opus 5.5 · p0No MCP (edit/restart)Pass0.601,9431,0758688.80M109,214$6.1475–
i8 · G1 hard · Opus 5.5 · p1Newton MCPPass0.401,0678711875.83M90,846$4.586658
i8 · G1 hard · Opus 5.5 · p1No MCP (edit/restart)Pass0.511,4426957463.86M72,913$3.6248–
i8 · G1 hard · Opus 5.5 · p2Newton MCPPass0.521,2859952837.86M102,773$5.418764
i8 · G1 hard · Opus 5.5 · p2No MCP (edit/restart)Pass0.721,5005869142.92M60,598$2.9442–
i8 · G1 tracking · Opus 5.5 · p1Newton MCPPass0.267893654162.15M37,929$1.904431
i8 · G1 tracking · Opus 5.5 · p1No MCP (edit/restart)Pass0.26763198565874k21,197$1.1121–
i8 · Grasp drift · Opus 5.5 · p0Newton MCPPass0.445393331981.19M33,715$1.582518
i8 · Grasp drift · Opus 5.5 · p0No MCP (edit/restart)Pass0.407193583601.91M37,205$1.9833–
i8 · SDF grinding · GPT-6 Astra · p0Newton MCPPass0.0731026927600k8,179–236
i8 · SDF grinding · GPT-6 Astra · p0No MCP (edit/restart)Pass0.0727125813417k7,652–17–
i9 · ABC station twin · GPT-6 Astra · p0Newton MCPPass0.931,8411,5512824.73M45,814–8147
i9 · ABC station twin · GPT-6 Astra · p0No MCP (edit/restart)Pass0.931,3548714825.00M37,898–65–
i9 · ABC station twin · GPT-6 Astra · p1Newton MCPPass0.94647604321.59M17,620–4425
i9 · ABC station twin · GPT-6 Astra · p1No MCP (edit/restart)Pass0.931,1549751783.24M32,678–51–
i9 · ABC station twin · Opus 5.5 · p0Newton MCPPass0.937965472404.39M54,206$3.185942
i9 · ABC station twin · Opus 5.5 · p0No MCP (edit/restart)Pass0.951,5404631,0773.53M47,292$2.6658–
i9 · ABC station twin · Opus 5.5 · p1Newton MCPPass0.911,0606324195.74M64,011$3.726859
i9 · ABC station twin · Opus 5.5 · p1No MCP (edit/restart)Pass0.937494363132.77M43,763$2.4446–

3. What each iteration changed

Each version is a commit on the Newton branch eric-heiden/newton-live-mcp, driven by what the previous iteration's transcripts showed.

h0 → h1. Iteration-0 agents wrote the same frame-by-frame evaluation loops in almost every call. They grepped the MuJoCo solver source to learn which contact parameters were in effect, and a missing import newton invalidated the scene. h1 added rollout(), solver_contacts(), health(), a preloaded newton, and non-invalidating errors for hosted scripts. It also added automatic CUDA-graph recapture after live attribute edits, and compiling reloaded scripts from source; a regression test had shown that a script edited within the same second could reload stale bytecode. Correction: an earlier version of this page said an iteration-0 agent's live shake-amplitude edit was silently ignored because it was baked into a captured graph. That was wrong: the example passes the amplitude to a kernel launched outside its graphs, so the edit took effect.

h1 → h2. In iteration 1, Astra's first call to solver_contacts() found the grasp's root cause directly: the fingers' higher geom priority imposes a soft material with a 0.2 s solref time constant on the cube. Opus still read solver source for the same fact; in h1 the helper was listed only in the server instructions, not in the task's host guide. MCP tool results were smaller than the no-MCP shell output (72k vs 110k characters on grasp drift), so the token overhead had to come from elsewhere. It came from about 2.4k tokens of tool schemas and instructions resent on every turn, and from about 10% more turns. h2 advertises only newton_execute and newton_rebuild with short instructions (about 0.8k tokens), names the deciding material in the contact report, lists the helpers in the host guide, and hosts two worker copies of the scene for parallel or background sweeps. To skip the tool-search round trip, it also set ENABLE_TOOL_SEARCH=false.

h2 → h3. Iteration 2 exposed three problems. (1) ENABLE_TOOL_SEARCH=false loads the schemas of every deferred built-in Claude Code tool, not just Newton's: Opus MCP trials started at 30k tokens instead of 15k. h3 marks only the Newton server alwaysLoad, which gives 14.9k with no tool-search round trip. (2) Checkpoints and resets restored every scalar attribute of the hosted example, so a look-ahead or gain the agent set before rollout(start=True) was silently reverted, and one sweep returned identical rows. h3 rewinds only the scalars that step() itself advances. (3) An Opus grasp session crashed with CUDA error 700 after live solver experiments. Reproducing it showed that h1's recapture was unsafe. Newton examples capture a graph around the solver's first step, and SolverMuJoCo allocates buffers during that step, so those buffers belong to the first graph. Recording a second graph around the same solver either segfaults or silently corrupts the simulation (a grasped cube ended 99 m below the table). A one-box scene fails the same way, and one eager step before the first capture avoids it. h3 recaptures only when example.solver has been replaced, which is safe. For other changes it reports that values inside the captured graphs keep their old values until a rebuild. recapture() refuses to run around the same solver. The grasp and G1 MCP trials of iterations 1 and 2 hit such recaptures (for example 10 times in the i2 Opus grasp trial). Their live numbers may have been corrupted, although their verified submissions were not affected.

h3 → h4. With h3, the MCP's first turn was still 2.5k tokens larger than the no-MCP baseline's. Part of that came from the host guide appearing twice: once in the task prompt and again in the server instructions. h4 adds --no-app-guide to the stdio bridge, and the harness uses it because its prompts carry the guide. Hosting was also extended to kinematic examples without a dynamics solver or second state (such as the grinding scene), and the host guide now says that non-array objects such as SDFs are not rewound by reset.

h4 → h5. Iteration 4 exposed three gaps. (1) Hosted examples run with a null viewer, so geometry an example draws itself in render(), such as the ground workpiece surface, was invisible to observe, and an agent plotted it with matplotlib instead. The host's viewer now records log_mesh calls, and color observations composite those meshes over the model's shapes by depth; auto-framing uses mesh bounds. (2) The MuJoCo capture bug struck again through ordinary task code. Astra called the task's own rollout() on the example's already-captured solver, and the live process could no longer allocate memory. An eager step on scratch states followed by solver.reset() prevents this even in the minimal repro, so the host process now warms every SolverMuJoCo this way; physics is unchanged (the grasp scene matches to seven digits). (3) With the CUDA context broken, the agent had to restart the host by hand. newton_rebuild(arguments={"restart": true}) now re-executes the host process, and the MCP client re-reads the connection file and retries when its server restarts. The host guide also recommends workers.map over submit for sweeps, because polling a future had cost an extra turn per sweep.

h5 → h6. The MuJoCo capture bug is now fixed where it originated. newton-physics/newton#4377 creates the solver's inverse shape mapping at construction instead of lazily inside the first (usually captured) step, with tests for discarded, retained, and replayed graphs. The loop branch merges that fix, drops the host's eager warm-up workaround, and goes back to re-recording an example's CUDA graphs after any cell that edits example attributes. As a result, kernel arguments baked into graphs pick up live changes again. With the fix, every earlier failing scenario (the one-box repro, and the grasp scene with its old graph dropped, retained, or replayed) now runs correctly.

h6 → h7. Because Opus misjudged elapsed time on the hard task, h7 gives MCP sessions a deadline (--deadline on the host, set by the harness to the trial budget), and every status in a tool result then includes time_left_s. To keep the comparison fair, both conditions' prompts now also state the task's UTC start time, so a script-only agent can check the clock with date; the MCP only makes the remaining time passive and ever-present.

h7 → h8. Profiling the long hard-task transcripts showed that newton_rebuild returned the full describe payload (application guide, operation list, limits; about 4.6k characters). One Opus run rebuilt 14 times, adding 65k characters that stayed in context for every later turn. Rebuild now returns a compact status of about 180 characters. h8 also carries the corrected G1 verifiers.

h11 → h12. Fair starts, a physical replay task, and new MCP camera tools. Both trials of a pair now start from the same per-task compile-cache seed (Warp, CUDA, GL, OptiX, and Mesa caches, built once by running the starter under every module name the conditions use) in fresh copies, inside a bubblewrap sandbox with a read-only home, private temporary directories, private CLI state, and the operator's histories, other trials, hidden data, and the study's harness code hidden; pairs run one trial at a time, and cleanup finds detached jobs through the sandbox's mount namespace. The MCP can mount a camera on a body (camera_body, e.g. a wrist camera with calibrated intrinsics) and project labeled markers of simulated points into simulated and recorded frames (overlay); contact markers now honor calibrated intrinsics. Newton fixes: MJCF fixed-joint chains are filtered like MuJoCo weld bodies (the YAM finger pads collided with their own wrist), and SensorTiledCamera renders convex hulls.

h12 → h13. Iteration 12 showed two sources of noise unrelated to the MCP. Which solver variant an agent happened to try decided minutes of its time: one MCP call that first tried MuJoCo's own contacts took 172 s, almost all of it compiling. The seed both conditions start from now also steps the starter with the elliptic cone and with MuJoCo's contacts, which brings that first use to 1.7 s. And one trial was ended by the API (“Selected model is at capacity”); the harness now records such endings and reruns the trial, which under one-at-a-time trials runs under the same conditions as its partner.

h13 → h14. The design study behind the next task found two MCP shortcomings, both now fixed. Filmstrips put every capture time in one row, and clients downscale images to about 1,568 px, so a 30-frame strip reached the agent at about 65×48 px per frame; filmstrips now wrap times into bands and pages sized for display and shrink frames only as far as needed. And only the MCP condition was told that Blender was available, although it is installed for both; both prompts now name both renderers, and the shared seed warms Blender's shader cache (first render 14 s cold, 1.4 s warm). The Blender backend also renders RealSense and OpenCV lenses now (it rejected them before), matching the sensor backend to within 0.5 px instead of 4–6 px at the image corners.

Table 4. Harness versions. Each version is a commit on the Newton branch; trials record the version they ran.
VersionCommitChanges
h0working tree before 46dfe56dExampleHost serves an unmodified example script live. Checkpoints include the example's own arrays and scalars, and rebuild reloads the script in-process. Code profile with five tools.
h146dfe56drollout(), solver_contacts(), and health() helpers; newton preloaded; Python errors keep hosted scenes valid; automatic CUDA-graph recapture after live attribute edits (unsafe, see h3); quiet Warp logs; rebuild compiles from source.
h2d7058ca9Lean profile (execute + rebuild; per-turn schema and instructions about 0.8k instead of 2.4k tokens); ENABLE_TOOL_SEARCH=false (regression for Claude Code); contact report names the deciding material; two worker copies for parallel and background sweeps; zero-argument rollout probes.
h3de507713Newton server alwaysLoad instead of disabling tool search; resets keep agent-assigned settings; graph recapture only for replaced solvers, with notes for changes that cannot reach captured graphs; cube-toss task.
h48ce42bf9Server instructions without the duplicated app guide; hosting for solver-less, single-state examples; SDF-grinding task with per-task time budgets.
h559806597Observations include meshes the example logs in render(); mesh-bounds auto-framing; eager warm-up of every SolverMuJoCo in the host process (makes graph recapture safe); host restart through newton_rebuild with automatic client reconnect; one-call worker sweeps in the guide.
h624adbd3eMerges the SolverMuJoCo recapture fix (newton-physics/newton#4377); automatic graph recapture after live attribute edits without a solver warm-up; hard G1 tracking task (high5 clip gated, 60-minute budget).
h7cd8d790fSession deadline and time_left_s in every MCP result; UTC start time in both conditions' prompts.
h8fb8446d8Compact rebuild result (about 180 instead of 4,600 characters); G1 time-scaled playback passed as a clip through --motion.
h98995aa8bVisual phase. Observations are supersampled with a sky, a ground checker, projected framing, and calibrated OpenCV intrinsics; the camera sensor renders only the requested world. Adds observe(backend="rtx"), render(), and compare_images() with image metrics. Newton fixes: MJCF floors, builtin textures, .msh meshes, transparent shapes, ViewerRTX with ovrtx 0.5, and sensor light controls.
h109ecbff75The rtx backend is advertised only when ovrtx is installed (h9 offered it in an environment without it). Observe intrinsics accept RealSense inverse Brown-Conrady distortion. Textured models render textures by default. Newton fixes: headless ViewerGL renders through EGL on the GPU (it crashed without a display or fell back to the CPU under Xvfb), and observations drop shapes hidden after finalize(). Adds the ABC arm-replay task.
h113d83dff5Fair initial conditions and a tools-only MCP: every trial compiles into its own empty Warp and CUDA JIT caches; the MCP no longer reports or takes a task time budget (both prompts state the start time and budget); the trial environment's anyio is pinned back to the lock. Adds the optional Blender backend (observe(backend='blender'), blender(code)).
h12ad85db23Fair-start harness: shared per-task compile-cache seed, bubblewrap sandbox (read-only home, private /tmp and CLI state, hidden records, data, and harness), sequential pairs, mount-namespace cleanup. MCP camera_body/camera_offset and overlay markers; contact markers honor intrinsics. Newton fixes: MJCF weld-group collision filtering, convex hulls in SensorTiledCamera. Adds the ABC physical replay task with a hardened verifier and trial flags for introspection and downloads.
h13ff1244c9Solver variants in the compile-cache seed (the elliptic cone and MuJoCo's own contacts, whose first use dropped from 156 s to 1.7 s); trials ended by an API error are detected and rerun.
h144fd08b74MCP filmstrips paged to the size clients display images at; both prompts name both renderers (SensorTiledCamera and Blender); the MCP Blender backend renders calibrated lenses (RealSense, OpenCV) by resampling a covering pinhole; seeds also warm Blender's shader cache. Adds the ABC screwdriver-in-bin physical replay task.
h1587199d5cMCP liveness features from the transcript analysis: failed cells and rebuilds roll back, rebuild overrides, swap_solver, persist()/persist_source()/diff_model(), workers that take functions, follow rebuilds, and restart after crashes, background jobs, fresh() clean-process runs, solver_params() and per-cell checks for unapplied model edits, per-world health(). Unused helpers removed; the guide states only tool semantics. Newton: python -m newton.examples.headless, newton.utils.report_solver_params and report_health, named in both prompts. Blender backend removed from the MCP. Adds the clean-plate tasks abc_scratch and g1_mpc.
h161b9359aaUpstream Newton merged (MuJoCo 3.14); MCP images rendered with SensorCamera. MCP fixes from i15: workers start on first use and never delay a rebuild, reset rewinds clocks advanced by direct example.step() calls, notes only for edits no notify call covered, rollback restores rebound class attributes, no result trap; fresh(), swap_solver, and diff_model dropped from the guide. Newton for both conditions: WorldView (per-world values by label, state copies across worlds, refusal of values a solver does not apply), a SolverMuJoCo joint-coordinate bridge with a model-based-control docs page, camera project/unproject with OpenCV and RealSense distortion, Model.find_* label lookup, aggregated MuJoCo Warp overflow warnings. Harness: invisible workspace snapshots every 5 minutes, verified after the iteration for time to first pass; hardware facts in both prompts; three replicates per cell.
Two observation panels of the grinding scene: an isometric view and a top view in which a groove is visible in the workpiece.
Figure 1. An h5 observation of a solved grinding scene (iso and top views). The ground workpiece surface is drawn by the example's own render(); before h5, observations showed only the wheel.

4. Real-robot calibration data

The system-identification task uses public measurements from the DFKI underactuated double pendulum (BSD-3-Clause). The robot has two quasi-direct-drive AK80-6 motors with 6:1 gearing, a 0.2 m first link, and a 0.3 m second link. Its fourteen design C.0 system-identification runs record measured joint angles, velocities, and motor torques. Runs 00–09 are given to the agent, while runs 10 (20 s excitation) and 11 (75 s, full swings, 300 Hz) are held out. The model replicates one pendulum per evaluation window as a separate Newton world, so a whole recording is evaluated in one batched SolverMuJoCo rollout (about 0.5 s on the study GPU).

The thresholds were set before any agent trial, from three reference parameter sets. The nominal starter misses badly. The published DFKI identification, mapped to a physically valid Newton model, roughly halves the error but does not pass. A direct Nelder–Mead fit of all twelve Newton parameters to runs 07–09 passes with margin. So the gates reward calibrating the simulator itself, beyond copying published numbers.

The agents solved this task quickly and in the same way in both conditions. They fitted the identifiable base parameters by linear least squares on inverse dynamics, then refined them with their own NumPy (Opus) or C++ (Astra) forward models under the multiple-shooting objective, and used Newton only to confirm. On a two-link system the simulator is not needed in the inner loop, so the live MCP has little to offer here. Its value should show on systems where the simulator is the only practical forward model, with contact or many degrees of freedom.

Table 5. Held-out window error of reference parameter sets for the DFKI double pendulum (mean joint-angle RMSE over 0.5 s open-loop windows).
Parameters20 s excitation [rad]75 s full swings [rad]
Starter (nominal CAD point masses)0.1430.336
DFKI published identification (model 3.0, mapped to Newton)0.0700.176
Reference Nelder–Mead fit through Newton (runs 07–09)0.0380.131
Verification threshold0.0600.150
Iteration 1, Opus: MCP / no MCP0.040 / 0.0400.133 / 0.113
Iteration 1, Astra: MCP / no MCP0.037 / 0.0400.131 / 0.127

From iteration 3 a second real dataset is used where the simulator is the practical forward model: the ContactNets cube tosses (BSD-3-Clause), 570 hand tosses of an acrylic cube onto a wooden table tracked at 148 Hz (Pfrommer et al., CoRL 2020). The cube's size, mass, and inertia are measured and fixed. The agent calibrates contact behavior (friction, stiffness, damping, torsional friction, table height, solver settings) so that open-loop rollouts from each toss's first frame reproduce the recorded bounces, slides, and tumbles. Each toss is one Newton world, and a CUDA-graph rollout of all 400 training tosses takes about 2–4 s.

The thresholds were set before any agent trial. Published parameters do not transfer. The ContactNets friction coefficient with untuned stiffness halves the position error but leaves orientation unchanged. The MuJoCo fit of Acosta et al., mapped to Newton's contact model, is worse than friction alone, because stiffness and damping mean different things across simulators and timesteps. A Nelder–Mead fit of five Newton contact parameters on 200 training tosses passes with margin.

Table 6. Held-out error of reference contact models for the ContactNets cube tosses (170 tosses; mean over tosses of the time-averaged error, full open-loop rollout from release).
Contact modelPosition [m]Orientation [rad]
Starter (μ = 0.5, ke = 2.5 kN/m, kd = 100 N·s/m)0.1021.068
ContactNets friction μ = 0.18, starter stiffness and damping0.0421.103
Acosta et al. MuJoCo fit mapped to Newton (μ = 0.22)0.0721.306
Reference Nelder–Mead fit (μ 0.177, ke 2.8 kN/m, kd 1.0 kN·s/m, table −1.4 mm)0.0140.321
Verification threshold0.0200.450

5. Next phase: visual fidelity and real-world scenes

The loop so far measured tasks where a simulation is judged by numbers. The next phase targets tasks where the agent must also get the look right: modeling a real scene, such as the bimanual workcells of the ABC dataset, so that renders from a calibrated camera match real video, and then tuning its behavior against the recording. That puts the MCP's images under scrutiny, since a frontier model can only dial in what it can see.

A first audit of the h8 observations found three problems beyond plain aesthetics. (1) The MJCF importer hid every collision shape of a model that also has visual meshes, including world floor planes, which have no visual twin. The Unitree G1 therefore floated on a black void in every viewer and camera sensor. (2) MuJoCo's procedural checker textures were not imported, so such floors got an arbitrary palette color. (3) SensorTiledCamera always rendered every world. The MCP had to budget world count × width × height pixels to show one world, so in the 400-world cube-toss task, any observation above about 100 × 100 pixels was refused. All three are fixed in Newton itself, with regression tests. The camera sensor gained a world_ids option that renders only selected worlds; the 400-world scene now renders a supersampled 640 × 480 view in about 20 ms.

The observations themselves now supersample color 2×2 and resolve it in linear light on the GPU. They draw a sky gradient behind the scene and a checker of a reported round cell size (for example 0.25 m) on ground planes, which gives the model scale and motion cues. They fit the camera to the scene's projected extent rather than a loose bounding sphere. observe also accepts calibrated OpenCV intrinsics (focal lengths, principal point, distortion), so renders can be compared pixel for pixel with frames from a real camera.

Two rows of images: the Franka grasp scene and the Unitree G1, each rendered by the h8 observation (left) and the improved observation (right).
Figure 2. The same MCP observe(view="iso") call before (left, h8) and after (right) the first visual-fidelity changes: 2×2 supersampling, a sky gradient, a ground checker of reported cell size, framing fitted to the scene's projected extent, and the G1's MJCF floor, which the importer used to hide.

Two heavier renderers were evaluated. Newton's ViewerRTX (the OVRTX path tracer) had broken with ovrtx 0.5, which renamed render variables and changed its DLPack interface, and it hung whenever a DISPLAY was set without a running X server. Both are fixed. It is now an optional MCP backend: observe(backend="rtx") renders the same camera and world with 16 path-traced samples in about 1 s per frame after a one-time scene export of about 20 s, against about 20 ms for the camera sensor. Blender 4.5 (Cycles on CUDA) renders a USD export of the same scene in about 5 s per frame.

In the research round's comparisons against real ABC frames, photographic rendering alone did not bring renders measurably closer to the real images. What mattered was a look the agent can tune (camera pose, light, colors) and a number to tune against. Two changes follow from that. The camera sensor gained ambient and light-color controls, and its lighting now follows the model's up axis; Y-up scenes used to be lit from below. The MCP workspace gained render() and compare_images(), which report PSNR, SSIM, and edge correlation against a reference frame and show mismatch, edge, or blend panels. A live Blender connection does not look necessary: USD export plus an optional RTX or Blender render covers the photographic case, and it keeps the agent's loop fast.

Replaying real ABC episodes in Newton turned up more importer and renderer gaps, now fixed with tests. MJCF geoms with zero alpha, such as the camera housings, rendered as opaque black and blocked the view of a camera pulled back by a fit. MuJoCo's binary .msh meshes, which the ABC scenes use, could not be loaded.

The first ABC task, the station twin (Table 1), starts from the nominal CAD model of the YAM station (Figure 3). The agent must fit the camera mount and the enclosure (the real one is narrower and deeper than the CAD), model the bin and the seven dishes on the table, and match the colors and lighting. The verifier renders five held-out frames between the given ones through the calibrated camera, with its own copy of the renderer, and scores them against the recording. Reference solutions set the thresholds. The starter scores 0.37 edge correlation, 0.53 SSIM, and 14.0 dB color PSNR. Fitting only the camera and the enclosure reaches 0.65, 0.63, and 15.1 dB. Adding the objects with fitted colors reaches 0.72, 0.66, and 18.2 dB. Iteration 9 runs this task in pairs, and its results will appear in Table 2.

Replaying the logs also exposed the real arm's controller. The measured torques fit a PD law on the command from one frame earlier (R² 0.82–0.98 on most joints), with gains of about 74 N m/rad on the large joints, against 40 in the ABC simulation model. This became the second ABC task, arm replay (Table 1), which iteration 10 runs in pairs.

The ABC tasks so far are building blocks: a fitted camera and station geometry (station twin), a calibrated arm controller (arm replay), and a tuned look (look matching). None of them yet asks whether the simulation physically reproduces an episode. The next ABC task replays a whole recorded episode with the arms driven by the recorded commands and requires the grasps and placements to work as in the video, verified over the entire rollout; it is being designed in a parallel workflow. Two general MCP tools were added for it: contacts_between(a, b), which reports per step how many contacts two shape sets have, the normal and friction force the solver applied, the slip speed, and the penetration (recordable over a rollout to tell a held object from one resting on the table), and a filmstrip that steps the simulation to recorded video times and scores each frame against the video through the real camera.

Three images of a bimanual robot station seen from above: the real camera frame with plates and an orange bin on a white table, the starter twin's render from the nominal camera with an empty gray table, and a blend of the two.
Figure 3. The ABC station-twin task at frame 24: the recorded top-camera frame (left), the starter twin rendered through the calibrated intrinsics from the nominal CAD camera mount (middle), and a 50/50 blend (right). The robot is posed from the recorded joint log. Real frames: ABC-130k (Apache-2.0), Voxel51 MCAP mirror.

Blender as an MCP backend. The research round's Blender bridge is now an optional MCP backend. observe(backend='blender') renders with EEVEE ('blender_cycles' path-traces) through the same camera as the sensor, including calibrated intrinsics; object centroids agree with sensor renders to within 0.5 px. Newton stays the source of truth: one world is exported once to a long-running Blender process, and each render streams only shape and camera poses over a Unix socket (about 1 s per warm EEVEE frame on the shared GPU, 2–4 s at the real camera's 640 × 480 under load). A blender(code) helper runs bpy in the same process to edit materials, lights, and exposure. The backend is advertised only when Blender is installed. Figure 4 shows what it does and does not buy on the ABC twin.

Four images of the same robot station from above: the real frame, the tuned sensor twin, an untuned Blender render that is darker and bluer, and a tuned Blender render with soft shadows.
Figure 4. One frame of the ABC plates episode (frame 24): the real camera (left), a reference twin tuned for the camera sensor (18.5 dB color PSNR on this frame), the same twin in Blender EEVEE with its default studio look (14.5 dB), and after tuning exposure and per-object colors in Blender (18.9 dB). Blender adds soft shadows and ambient occlusion, but cables, plate patterns, and glare that the twin does not model limit both renderers.

The physical replay task. A survey of all 40 public ABC validation episodes chose place and organize the fake fruits in the fruit bowl (episode 7067ee1f). It lasts 9.4 s, with three separate grasp, lift, carry, and release events across both arms and no handovers. Ten more recordings of the same station, made minutes apart with the same fruits in other layouts, give held-out episodes that the agent never sees. Ground truth for the whole episode comes from the video: a top camera fitted to rendered robot outlines, color tracking gated by the robot's rendered silhouette, and the fruit following the gripper while held. A scorer built on it passes the true trajectory and fails every injected fault (no grasp, mid-carry drop, 5-frame lag, 2 cm noise, 1 cm bias).

A prototype shows that the replay works physically in Newton. The arms are driven only by the recorded commands, through position control with gains calibrated from the arm logs, and the fruits are free rigid bodies with real contacts. All three fruits are grasped, lifted, carried, and placed into the tray, and a second agent reproduced this in fresh runs and ensembles and found no hidden attachment. It also takes the right settings: grasps fail with MuJoCo's default pyramidal friction cone; the pear grasp only works with arm gravity compensation between about 0.7 and 0.875, because the simulated fingertips must reach below the fruit's equator; and the orange's 9 cm roll after release appears only with low rolling friction. Those are the things the agent has to discover. The starter, with the ABC simulator's defaults, holds none of the fruits.

Building the replay found two Newton bugs, both fixed with regression tests. The MJCF importer filtered collisions only between a joint's direct parent and child, not between bodies joined by fixed joints as MuJoCo does. As a result, the YAM gripper's finger pads collided with their own wrist and jammed the gripper half open, so every grasp failed under Newton's collision pipeline (e2bc4c6f). Separately, SensorTiledCamera did not draw convex-hull shapes (40d7e334). The verification also corrected two early claims. A contact-buffer overflow came from the prototype's own fixed limits, not from Newton's defaults, and Newton's automatic sizing handles the default contact gap. Deterministic mode works (SolverMuJoCo(deterministic=RUN_TO_RUN, disable_sensors=True)), so replays can be scored reproducibly.

The replay task is built and calibrated. The agent gets the main episode at about 30 Hz with its top and wrist videos, four more 10 fps recordings of the same station (fruit starts placed where the arm kinematics put the fingers at each real grasp, tray pose fitted to the first frame), 64 YAM arm logs for calibrating the arms, and fixed helpers for replaying, scoring, rendering through the real cameras, and summarizing contacts. The starter keeps the ABC simulator's defaults and holds no fruit. The hidden verifier imports only the submission's model, solver, and pipeline builders and runs its own replay of whole episodes in one batch of 44 worlds: the main episode 8 times (6 with jittered fruit starts), six unseen episodes 4 times each, the four training episodes twice (report only), and two negative controls in which the gripper never closes or all friction is 0.02, where no fruit may rise more than 1 cm. Thresholds follow a fixed rule from repeated reference and starter runs. The reference passes every fresh run, holding and placing 53–54 of 56 gated fruit copies on the unseen episodes, against 7 for the starter.

Two calibration choices needed judgment. One unseen pear is excluded: the real robot gripped it at the farthest reach in the data (0.58 m; the agent's episodes reach 0.55 m), and its gripper opening of 52 mm, the pear's full width, shows it was gripped at its widest point, while the recorded arm kinematics put the fingertips 31 mm above the pear's centre. No model calibrated on the agent's data can know how far the arm sagged there. The other two fruits of that episode stay gated. The unseen-episode arm-tracking limit is 0.0308 rad, without the rule's usual cap at 0.7 times the starter's error: with the cap it sat within 3% of the reference, and an audit found honest calibrations whose unseen-episode error runs up to 1.2 times their main-episode error.

Adversarial review hardened the verifier. Thirty-three cheat submissions (hidden welds, gravity compensation, drives, or springs on the fruit, extreme friction or adhesion, kinematic or oversized fruit, scripted motion, patched solvers or scorers, extra shapes on the hand, tray shelves, forged results) all fail. Eighteen more push allowed settings to their limits (contact gap, rolling friction, restitution, a sunken centre of mass, tray wedges); they pass only where the grasp itself still works and fail as soon as it is weakened. A separate fairness review did find one way to pass: the verifier runs the submission in its own process, so a 25-line build_model could read the run's authentication token from the call stack, write a passing result, and exit. The verifier now blocks frame, garbage-collector, raw-memory and code-object introspection, process spawning, and reads of hidden data by any code outside the standard library, the environment, Newton, and the verifier itself (a Python audit hook that cannot be removed); it rejects sources that use such names before importing them; and the parent process, which never imports the submission, recomputes every gate from the reported metrics. An in-process verifier still cannot be made airtight, so every trial is also scanned for introspection in the submission and for network downloads in the transcript, and flagged trials are reviewed by hand.

Iteration 12 (h12, four pairs, trials run one at a time). Six of eight runs reproduced the episode physically. Both Opus agents of the first pair found the same causes: MuJoCo's default soft contact, whose stiffness scales with the light fruit's mass, let the fingers sink through the fruit; the arms need per-arm drives fitted to the logged torques and only partial gravity compensation to sag like the real ones; and the grasps need an elliptic friction cone. Opus passed all four runs. With the MCP it took 0.72× the time (2,136 instead of 2,563 s, and 1,346 instead of 2,147 s) at 0.94× the cost; model time was about the same within each pair, and the MCP runs spent 447 and 717 s less in tools. The first MCP run's 1.3× input tokens came from more, shorter turns (229 instead of 184 requests at the same mean context), not from larger tool results. GPT-6 Astra took a different route in all four runs, MuJoCo's own contacts with an elliptic cone, and tracked the arms more closely than the reference (0.009–0.020 rad against 0.021). It passed one run per condition. Both failures stopped early, after 18 and 21 of 60 minutes, confident from the supplied episodes. Without the MCP, the replay lost every copy of one unseen episode that the reference holds (45 of 56). With the MCP, two copies of another unseen episode diverged numerically, and one copy squeezed the dark fruit 1.5 cm upward in the low-friction control (48 of 56). The unseen episodes and the negative controls did what they were built for: they separated replays that work from replays tuned to the episodes at hand. Full replays take seconds in both conditions, so the live session saves less here than on setup-heavy tasks.

Iteration 13 (h13, four pairs). With MuJoCo's contacts precompiled, the first Opus pair passed in both conditions: 1,188 s with the MCP against 2,199 s without (0.54×), with 53 and all 56 unseen fruit copies held and placed. The MCP run cost more, $6.18 against $4.59: it took 231 requests instead of 146. A faster loop invited more and shorter turns here and in the first iteration-12 pair (229 against 184), though not in the second (163 against 177). Its tool time was 324 s against 1,388 s; model time was about the same (858 and 811 s). The first GPT-6 Astra pair also passed in both conditions (52 and 54 of 56 unseen copies), and here the MCP did not help: 1,721 s against 1,472 s. Astra again did most of its work in the shell (91 other tool calls next to 25 MCP calls), its tool time was about the same in both conditions (467 and 429 s), and the MCP run spent longer thinking (1,247 against 1,042 s). The second Opus pair failed in both conditions, each one copy short of the unseen-episode gate (49 of 56) and on different episodes, after replays that passed every supplied episode. Here the MCP run was not faster (1,734 against 1,664 s) and cost 1.8× as much ($6.56 against $3.61): it made 239 requests instead of 110 and spent 1,064 s thinking against 580 s. In the second Astra pair, the MCP run failed the unseen episodes (47 of 56) after 1,264 s and the run without it passed (52 of 56) after 1,490 s. Over the eight replay pairs of iterations 12 and 13, success did not depend on the MCP: 5 of 8 runs passed with it and 6 of 8 without, and every failure was a replay that worked on all supplied episodes but not on the unseen ones. For Opus the MCP cut tool time to 0.46× but raised model time to 1.15× and input tokens to 1.45× (time 0.74×, cost 1.21×); for GPT-6 Astra, which ran most experiments as fresh processes from its shell either way, time (1.03×) and tokens (0.98×) were unchanged.

Choosing the next replay task. A design study with seven agents tested two candidates against the evidence. (A) A physical replay of “put the screwdriver in the bin” is feasible: an honest configuration (the gripper's real 50 N pinch, which the ABC simulator replaces by a 2.5 N pinch and inflated friction, plus stiff contacts) places it in 16 of 16 copies, and a public mirror holds 56 recordings of the same station, bin, and screwdriver. But as first proposed its gates did not reward physics: a weak grip with a fitted arm was held and placed as often as the honest one. (B) Scoring the fruit replay's look over the whole video failed outright: a flat colour per region, fitted in 7 s without looking at a single image, scored as well as the best tuned look, Blender scored lowest, the station looks the same in every episode, and a backplate photo beat honest physics on whole-frame metrics. The study therefore chose a redesigned (A): the decisive gate becomes in-hand rotation during the carry, which the real wrist videos fix (the real grasp is rigid in all 56 recordings) and which separates grip models cleanly (1.7° for the honest grip, 14.9° for the fruit task's fix, 36.5° for a one-line fix). Its stated expectation is a replication of the fruit result in a new physics regime, not an MCP advantage; a real MCP time effect would need a long episode where rewinding to a failing grasp saves tens of seconds. The same study found that MCP filmstrips were illegible in practice (a 30-frame strip reached the agent at about 65×48 px per frame) and that only the MCP prompt named Blender; h14 pages filmstrips to the displayed size and names both renderers in both prompts.

The screwdriver task is built. A build workflow of eight agents prepared the main episode, 4 training and 12 unseen recordings (chosen from 57 for verdicts that stay the same under six ways of constructing the ground truth: time step, bin floor, base correction, a cylindrical instead of tapered handle, bin position, and start yaw), a tapered handle fitted to how the measured grip width varies with grasp height across the 56 recordings (r = −0.93), the starter, a reference, and a copy of the hardened verifier with screwdriver, bin, pinch, stiffness, and material audits. Two design choices came from its measurements: the in-hand window ends before the gripper is commanded open (otherwise an honest command delay failed it), and each scene starts the screwdriver where it lay before the fingers pushed it (which cut the reference's finger-gap error from 4 to 0.8 mm). The held-out rate threshold is 0.9 rather than the calibration rule's 47 of 48, because the reference passes every copy and the rule left honest variants at the edge of noise; it still rejects the fruit-task fix (0.67) and a 10 N grip (0.75). Every one of 35 cheats and forgeries fails. An adversarial agent found one family of in-bounds settings that passes: a 20 N grip with soft contacts and the largest allowed torsional friction patch; it reproduces the rigid carry on unseen episodes, so the verifier, which can only check what is observable, accepts it. A second variant that also moved the centre of mass toward the grasp is now rejected by a bound on the centre of mass. The build also found an upstream MuJoCo Warp issue: with the default pyramidal friction cone, condim 6 contacts turn NaN in the first step at friction 0.002 (MuJoCo C stays finite); the goal text discloses that the starter's low-friction control diverges for this reason.

Iteration 14 (h14, the screwdriver task, four pairs). In the first Opus pair, both agents read the real clamping force off the gripper motor's logged effort (about 47–50 N per pad), stiffened the finger contacts, switched to the elliptic friction cone, and fitted per-joint arm gains and partial gravity compensation, and both replays passed every check they could run locally on the main episode and the four training episodes. With the MCP, Opus kept going for 971 s ($3.83) and its replay held, placed, and kept rigid all 48 unseen copies. Without it, Opus stopped after 444 s ($1.98) with a replay that lost every copy of one unseen episode and one copy of two others (42 of 48, under the 90% gate). The first GPT-6 Astra pair passed in both conditions, 1,209 s with the MCP and 1,331 s without (0.958 and 0.917 of unseen copies). In the second Opus pair both runs passed: 489 s with the MCP and 673 s without (0.958 and 0.917 of unseen copies). In the second Astra pair both runs passed again, but the MCP run took longer: 1,881 s against 1,345 s (0.979 and 1.0 of unseen copies). Over the four pairs, 4 of 4 MCP runs and 3 of 4 runs without it passed; the MCP took 1.19× the time, mostly because the one failing run without it stopped after seven minutes.

6. What agents use from the MCP

What agents use from the MCP. Across the 92 MCP-condition trials of iterations 0–14, agents made 1,998 MCP calls: 1,763 newton_execute (88%), 225 newton_rebuild, 8 newton_describe, and 2 calls of the structured filmstrip tool. Everything happened in Python cells inside the live session. The table counts the cells that used each helper and the trials in which it appeared at least once. Stepping and recording (rollout), live edits of model arrays and example attributes, reset, and the diagnostics (health, solver_contacts) carried most of the work; parallel worker sweeps appeared in about a quarter of the trials and checkpoints in about a fifth. Image tools were rare: observe in 11 trials, filmstrip in 8, compare_images never.

Helpers used inside <code>newton_execute</code> cells, 92 MCP-condition trials (i0–i14)
HelperCellsTrials
rollout(): step and record series in one call29365
show(): images and plots into the context17034
reset16741
edits of model arrays16353
edits of example attributes (gains, settings)13833
step12927
workers.map: parallel sweeps in worker copies10821
notify_model_changed9749
workers.broadcast9527
health(): NaNs, runaway velocities, buffer overflow9141
workers.submit8018
solver_contacts(): effective contact parameters7636
rebuild from a cell6118
render(): image as an array608
restore a checkpoint4816
save a checkpoint3120
describe2825
recapture()228
observe1511
contacts_between()157
filmstrip138
compare_images()00

The live session did not replace the shell. MCP-condition agents still ran 426 scripts as fresh processes (1,424 without the MCP), edited files from the shell 450 times (1,246), and read Newton's source with grep, cat, or sed 864 times (1,914). Reading source was the most frequent single activity in both conditions, and about ten of the 59 failed MCP calls came from guessed API names (attributes that were renamed or never existed). Opus made 27 MCP and 12 shell calls per MCP trial; GPT-6 Astra 15 and 26.

Where the remaining time goes. A pass over all 184 transcripts (92 per condition) measured how MCP-condition agents spend their time: half in newton_execute cells, 27% in fresh-process runs of their own scripts, 14% editing files, and 7% reading Newton source. Agents trust a clean process for their final checks, but no tool runs one, so they wrote harnesses, polled logs, and in one run waited 949 s on runs that printed nothing. MCP agents also spent more time editing files than restart agents (90 s against 61 s per trial), because they retyped into the script what they had developed in cells. Edits that the solver silently ignores, such as MuJoCo actuator gains on actuators driven by joint targets, led several agents to wrong physical conclusions. Packing candidates as the worlds of one model evaluated 10–50× more candidates per second than one rollout per candidate, but agents found this by accident and rebuilt it by hand each time. Newton's functions for Jacobians, mass matrices, inverse dynamics, inverse kinematics, and per-world attribute edits were used in none of the 184 trials; agents called MuJoCo's CPU API in 32 trials instead.

Changes in h15. The Blender backend is removed from the MCP again: agents fitted looks from scores rather than renders, and a tuned Blender look matched real frames no better than the tuned sensor. Dictionary-valued rollout() probes such as contacts_between are now also returned as nested dictionaries, after three agents lost a turn indexing them. An error in agent code now rolls the simulation back to its state before the cell instead of leaving the session invalid, and a failed rebuild keeps the previous scene running. Rebuilds accept overrides of the script's constants. persist() and persist_source() write a live value, function, or class back into the script and check that the rebuilt scene reproduces it. Workers accept Python functions, follow rebuilds, restart after crashes, and run background jobs. fresh() runs the saved script in clean processes through a new headless Newton runner, python -m newton.examples.headless. solver_params() and a check after every cell report which values the solver actually reads and flag model edits that no notify_model_changed call applied. compare_images, rollout(plot=...), and the structured operations, which no agent used, are gone, and the guide states only what each tool does. The headless runner and the solver and health reports are public Newton utilities, and both conditions' prompts name them. Capabilities that would help agents without the MCP as much (batched candidates, whole-body kinematics, calibrated-camera geometry) belong in Newton itself, and their order depends on what the clean-plate tasks below show.

Broader tasks. Every task so far started from a scene that already existed in Newton, with assets and solver in place, so agents only tuned it. Two new tasks start from a nearly clean plate. In abc_scratch, the agent gets a handful of photos of the fruit-bowl episode, the robot's logs, the camera calibration, and the station's robot model without any objects, and has to recreate the objects, tray, and physics so that a replay grasps and places them as in the recording. In g1_mpc, the agent gets the G1 humanoid, three reference clips, and a plain PD baseline that falls, and has to develop a tracking controller, investigating model predictive control, verified on the given clips and two unseen ones. Both are built and audited: in each, a private reference solution passes the hidden verifier and the starter fails it, and dozens of shortcut probes fail. Iteration 15 runs both tasks with h15, one trial at a time, with 90-minute budgets.

Results on the clean-plate tasks (iteration 15). Eight pairs: two runs per task and model, with the order of the conditions swapped between them. On the G1 controller every run passed, and the MCP was faster in all four pairs (0.77–0.94×). Every agent built a model-based controller from scratch: both Opus runs wrote a sampling MPC (MPPI) that simulates 512 copies of the robot half a second ahead on the GPU every 10 ms, and GPT-6 Astra optimized each clip offline while the controller is built and tracked it with a short-horizon nonlinear MPC or ran a full-body iLQR MPC. On the scene from photos, 2 of 4 MCP runs and 3 of 4 restart runs passed, and time went both ways (0.54× to 1.94×). The second runs failed on margins and stated rules rather than on missing capability: an orange that came to rest about 5 cm from the real one in half of the copies (Opus, MCP), a tray drawn 4.3–4.7 cm past the real outline where 4 cm is allowed (Opus, restart), and a pear that rose 10.3 mm in the low-friction control where 10 mm is allowed, after the agent's own copy of the check had measured under 5 mm (GPT-6 Astra, MCP). Pooled over the iteration the MCP took 0.96× the time of restart, and Opus's cost was 1.17×. With one or two runs per cell, the spread between replicates is as large as the MCP effect on the scene task, so iteration 16 runs three replicates and measures time to first pass from workspace snapshots.

What the first half shows. A transcript analysis of the first eight runs (checked line by line by a second pass) finds that the MCP's advantage still comes from the live Python session itself: agents benchmarked a batched planner in the session before writing it into the file, found a planner/plant mismatch with a live probe, and toggled negative controls with one-line live edits instead of patch files. Most h15 additions went unused: fresh(), persist(), workers, background jobs, swap_solver, and diff_model had no uses, and the headless runner named in both prompts was used in none of the eight runs; agents again wrote their own copy of the verifier. h15 also cost about 215 s over the four MCP runs: two idle workers that the prompt never mentioned were rebuilt with every rebuild (119 s), a reset did not rewind the example's clock when cells stepped the example directly, a cell variable named result was taken as the return value, and a rollback missed a method the agent had rebound. All four tasks finished with margin (worst verified metrics at 0.30–0.79 of their limits), so pass rates cannot separate the conditions here. The clean-plate runs are 3.4–3.9× longer than the earlier tuning tasks, and most of the time goes into writing scene and controller code: abc_scratch is bound by thinking (tools blocked the agent 14% of the time with the MCP and 35% without), g1_mpc by simulation (65% and 69%). Six of eight runs used MuJoCo on the CPU and hand-wrote the same Newton↔MuJoCo state conversions, and all four scene runs hand-wrote pixel-to-world geometry.

Next (h16, being built). MCP fixes for everything above (workers start only when used, reset rewinds the clock, notes only for edits no notify call covered, rollback names rebound methods, the result trap removed, unused tools dropped from the guide). Newton capability for both conditions: running many candidates as the worlds of one model with per-world edits by label, a public Newton↔MuJoCo state bridge with a page on model-based control conventions, calibrated-camera projection and unprojection, label-to-index lookup, and cleaner health and solver reports. The branch also merges upstream Newton, so the MCP renders with the new SensorCamera. For measurement, the harness will copy each workspace every five minutes, out of the agent's view, and verify the copies after the iteration, so time to first pass becomes a measured outcome; iteration 16 runs three replicates per task, model, and condition.

7. Findings so far

Frontier agents solve these setup, tuning, and capability tasks with or without the MCP, once they know how much time they have. 228 of 246 verified trials passed. Three failures were Opus runs on the hard humanoid task that stopped far too early. The other 6 were physical replays (3 with the MCP, 3 without) that passed every supplied episode but not the unseen ones. After the harness began reporting remaining time, all twelve later runs of that task passed.

Harness details decide whether the MCP saves or costs tokens. The same live session went from 1.19× input tokens (h1) to 0.74–0.81× (h3–h4) through changes in how tools are advertised and loaded, what the helpers return, and how resets behave. One setting pushed Opus to 1.63× before it was reverted. Per-turn fixed context and extra turns explain the overhead, not tool output.

The MCP reliably saves wall-clock time; whether it saves tokens depends on how the agent spends that time. Across all pairs it was faster in 77 of 122 (0.87×), and on the long hard task by about a third. GPT-6 Astra turned the faster loop into fewer tokens (0.70×). Opus tends to turn it into more experiments, especially on long or open-ended tasks (1.10× tokens overall, but 0.97× API cost thanks to prompt caching).

Agents need a clock, and a clock changes their behavior. On the one task that required a long search, Opus repeatedly stopped after 11–16 of its 60 minutes because it believed its budget was spent. Reporting the remaining time with every MCP result, and stating the start time in the prompt, fixed that in both conditions, and all twelve later runs passed. The same visibility leads agents to spend spare budget on optional goals after passing. A harness can supply the clock, but only the task can say whether the spare time is worth spending.

For modeling a real scene, a score beats a prettier picture. Given a renderer that matches the verifier and a scoring function, none of the eight station-twin runs called observe, the RTX backend, or compare_images; every agent fitted the camera, geometry, and colors in loops over the score and looked at its own composites with show(). In a controlled comparison on the same twin and frames, Blender EEVEE with tuned exposure and per-object colors reached 18.6 dB color PSNR, 0.65 SSIM, and 0.69 edge correlation, against 18.2 dB, 0.66, and 0.72 for the tuned sensor. Untuned, Blender scored 14.5 dB, and exposure alone recovered 3.9 dB. Photographic rendering helps people judge a scene, but for agents fitting to real frames the gains come from tunable look parameters and a metric. The Blender look task confirmed this from the other side: agents kept the task's renderer warm in the live session rather than calling the MCP's Blender backend, and the MCP's gain came from that persistent process (Opus 0.57× time) and from more iterations at the same cost (Astra's object colors).

A live session saves overhead, not compute. When each experiment is dominated by setup, restarts, or inspection (G1 tracking, the station twin for Opus), the MCP saved a third or more of the time. When each experiment is a heavy batched simulation that costs the same in both conditions (the arm calibration), the times were close. The harness can only remove the per-experiment overhead.

On a physical replay, the MCP saved waiting but not thinking, and did not raise success. When a full replay takes seconds in a fresh process, the live session has little overhead to remove. Over twelve pairs on two replay tasks, 9 of 12 runs passed in each condition. Opus spent 0.60× as much time in tools with the MCP but used the faster loop for more and shorter turns (thinking time 1.23×), so it finished in 0.88× the time at 1.25× the cost; GPT-6 Astra worked from its shell in both conditions and saw no change (1.06×). What decided success was generalization: every one of the six failed replays passed all supplied episodes and lost unseen ones, in both conditions, and all six stopped with more than half of the hour left.

Given a numeric scorer, agents do not look at the simulation. In the eight screwdriver runs, after h14 had made filmstrips legible, given Blender the real camera lenses, and told both conditions about it, not one image reached an agent's context; a single run rendered the wrist and top views to files once. Agents read the decisive behavior (does the screwdriver turn in the fingers?) from the score the task provides, and the real-world information they needed (start poses, bin, timing) came as numbers in the scene files. Better rendering pays off only where the decisive information exists only as pixels, which these tasks, by design, never required.

Fair conditions take more than separate kernel caches. An audit of the harness, and an adversarial review of the fix with 36 agents, found these asymmetries and leaks:

  • With per-trial caches, the MCP host compiled the starter's kernels before the agent started, outside its budget, while the restart agent paid the same compile inside its budget (27–95 s).
  • The stated start time preceded host startup.
  • Trials inherited the operator session's environment, including a cross-session messaging socket. Claude, but not Codex, loaded a home-directory AGENTS.md.
  • Trials shared /tmp and could read harness records, including the condition label, as well as hidden verification data and the operator's CLI history, which named held-out scores.
  • Concurrent trials could read each other's command lines, and in iteration 9 one agent did see the other model's fitting script.
  • Detached jobs outlived trials.
  • A run that used the MCP 38 times was misclassified as having no MCP tools, because it printed the prompt.
The next harness version addresses each of them:
  • Both conditions start from one compile-cache seed per task.
  • A barrier starts both agents together.
  • A sandbox gives each trial a private /tmp, a read-only home directory and tools, and hidden study data.
  • The environment is scrubbed, and Claude cannot use cross-session tools.
  • Cleanup kills leftover processes by trial and by sandbox namespace.
  • Options reach the runner through hidden spec files.
  • Timing-sensitive trials run one at a time.

A live session needs guards that a restart workflow gets for free. Three silent-divergence bugs surfaced only through agent use: settings reverted by reset, stale bytecode after a quick edit, and memory corruption from recapturing a CUDA graph around a warm solver. A live harness is only as trustworthy as its bookkeeping, and each fix has a regression test.

The MuJoCo capture issue was a Newton bug, now fixed at the source. SolverMuJoCo created a persistent mapping lazily inside its first step. Newton examples capture that step in a CUDA graph, and any second capture around the same solver then crashed or corrupted the simulation, on upstream main as well (repro in Section 9). newton-physics/newton#4377 creates the mapping at construction. Live tooling found this bug because it re-records graphs in ways that one-shot scripts never do.

Agent use surfaced more Newton bugs, now reported and fixed upstream. Beyond the capture bug, the trials and the task building hit thirteen Newton issues, filed as newton-physics/newton#4445–#4457. For example, MJCF bodies attached without a joint collided with their own wrist and jammed a gripper, floors vanished from imported MuJoCo scenes, the camera sensor skipped convex hulls and the back of cloth, heightfields rendered with holes, and ViewerRTX failed with the current ovrtx release. Ten pull requests with regression tests fix ten of them (#4458–#4467); the camera fixes target the new SensorCamera.

Explaining effective solver parameters saves investigation. Where an agent used the contact report, it found the grasp's root cause (finger priority overriding the cube's material) in its first call. Agents without it read solver kernels to reconstruct the same fact.

Verifiers need the same scrutiny as the harness. A G1 verifier changed the playback rate after construction and silently failed controllers that precompute a plan. It was caught only because an agent claimed to pass all clips and the verification disagreed. Re-verifying all 40 G1 submissions changed exactly the three affected outcomes.

8. Limits

This is an exploratory loop, not a registered study. The harness changes between iterations, three to seven pairs per agent and iteration cannot separate small effects from noise, and tasks are added as the loop goes. All pairs ran on one shared 4-CPU machine with a MIG GPU slice. Concurrent pairs control for load between conditions but not across iterations, and reference fits sometimes ran during trials.

Iteration 0 has no Astra trials. One iteration-1 Astra G1 pair was excluded because the operator accidentally terminated its live host while testing workers; it was rerun with the same harness. Live results in some iteration-1 and iteration-2 MCP trials may have been corrupted by the recapture bug described in Section 3; their verified submissions were not. Codex does not report API cost. Because every task so far is solvable in both conditions, these results say nothing yet about whether the MCP raises success on harder problems. Agent-side detours, such as a shell loop waiting on the agent's own background job, can dominate a single pair's time; they are kept in all aggregates.

Two harness properties change in h11. Through h10, all trials shared one Warp kernel cache and one CUDA JIT cache, so a condition could reuse kernels that the other condition, or an earlier trial, had already compiled. From h11, every trial compiles into its own empty caches. From h7 to h10, the MCP also reported the remaining task budget (time_left_s) in every result, while the restart condition saw only the start time in its prompt. That clock helped Opus finish the hard humanoid task, but it is a task-level aid rather than a simulation tool, so from h11 the MCP no longer reports time and both conditions get the same start time and budget in the prompt. Comparisons across that boundary should be read with this in mind.

Iteration 11 ran while research agents of a parallel design workflow used the same CPUs and GPU slice, so its absolute times are inflated and noisier than earlier iterations; pairs still ran concurrently.

The arm-replay starter script (iteration 10) had a race in its CUDA-graph rollout: a kernel read and advanced its step counter in the same launch. This left some recorded rows at zero and inflated the error that agents computed with the starter's own evaluate(). The verifier used its own host-stepped rollout, so the verified results are unaffected, but agents' in-session estimates were noisier than they should have been. The race is fixed (d3d14e48).

Through h11, conditions also differed in ways the audit found only later (see Findings): uncharged MCP host startup, inherited environment and messaging tools, a shared /tmp, readable operator history, and visible partner command lines. None of these is known to have changed an outcome, but iterations 1–11 should be read as run under looser isolation than later ones.

One iteration-12 trial (GPT-6 Astra without the MCP, second pair) was ended by the API (“Selected model is at capacity”) after 18 minutes and was rerun; its first attempt is kept in the records. Because every h12 trial runs alone on an idle machine, the rerun ran under the same conditions as its partner, and the pair is included. From h13 the harness detects such API failures and reruns the trial automatically.

9. Source and data

Newton branch eric-heiden/newton-live-mcp: the MCP host and helpers are in newton/_src/mcp, and the loop harness, tasks, and verifiers in tools/mcp_evaluation/v4 (run_v4.py; dp_real/prepare_data.py, cube_toss/prepare_data.py, abc_twin/prepare_data.py, and abc_arm/prepare_data.py rebuild the data files from the public datasets; the ABC tasks use the ungated Voxel51 MCAP mirror of ABC-130k, Apache-2.0). Trial data: loop.json (every trial's metrics and paired ratios) and data/v4/loop-transcripts-iN.zip (one archive per iteration, for example loop-transcripts-i9.zip; prompts, specs, summaries, verifications, submitted scripts, agent transcripts, and host logs, with loopback tokens redacted). CUDA-graph recapture repro: mujoco_recapture_repro.py.