Blolabel
← Notes
analysis 6 min read

Learned computer-use policies win on repeats, not first tries: NSPI's OSWorld Pass^1 sits below the agent it was learned from on both models

Neuro-Symbolic Policy Iteration turns one agent run into a refined script and beats the agent on Pass^3 in all four settings, at 15 to 217 times lower cost per run. On OSWorld its first-try success is 2.3 and 1.2 points lower. The gain is consistency, and its judges cannot see failures that never reach the screen.

Turning a computer-use agent's run into a refined script buys reliability across repeats, not first-try success. In Neuro-Symbolic Computer Use (arXiv:2609.36927, 29 September 2026), the learned policies win Pass^3 (solved in all three runs) in all four settings, but on OSWorld their first-try rate is below the agent they were learned from with both models: 53.6% against 55.9% on GPT-5.6 Terra, 72.9% against 74.1% on Claude Opus 5. What they remove is the drop between the first run and the third: 3.4 points on average, against 12.4 for the agent.

Abstract technical illustration of three parallel paths, one wandering and splitting, one straight and repeated identically three times

What Simular's researchers released on 29 September 2026

The paper is by Hyewon Suh, Thanh Minh Nguyen, Chih-Lun Lee, Darrow Hartman, Lizhao Liu, Xin Eric Wang, Ang Li and Jiachen Yang (Georgia Institute of Technology and Stanford University, work done at Simular). It proposes Neuro-Symbolic Policy Iteration (NSPI): start from one agent trajectory, convert it to a program in Simular's Simulang scripting language, replace pixel coordinates with element descriptions that a grounding model (UI-Venus-1.5-30B-A3B, consensus of three calls) resolves at run time, run it, judge it, let the agent continue from the point of failure, and have a coding model rewrite the script. The loop never sees the benchmark's evaluator until the end.

The test set is 361 OSWorld-Verified tasks (Google Drive tasks excluded) and 169 ScienceBoard tasks, each run three times, with GPT-5.6 Terra and Claude Opus 5 as the base agents. Baselines are the base agent, Batch2Code (the same script format, no refinement loop) and ASI (an agent that calls learned skills).

SettingAgent Pass^1 / Pass^3NSPI Pass^1 / Pass^3Agent cost per runNSPI cost per runOne-time build costBreak-even runsSource
ScienceBoard, GPT-5.6 Terra27.0 / 13.629.2 / 26.0$0.081$0.0054$2.0326.8Tables 1 and 3
ScienceBoard, Claude Opus 538.7 / 29.648.7 / 42.6$0.52$0.0079$5.6811.2Tables 1 and 3
OSWorld, GPT-5.6 Terra55.9 / 34.653.6 / 50.4$0.48$0.0072$3.096.5Tables 1 and 3
OSWorld, Claude Opus 574.1 / 68.472.9 / 72.0$2.10$0.0097$6.453.1Tables 1 and 3
OSWorld-V2 (long tasks)NSPI trails the agent by 5.6 points strict and 18.5 points partial creditnot reported per run in the textnot reportedSection 4.5

Break-even is the build cost divided by the per-run saving, and the table's values reproduce from its other columns (2.03 / (0.081 minus 0.0054) = 26.8). In wall-clock time the break-even is 8.6 to 16.9 runs.

Base agent vs learned policy (NSPI): first-try and all-three-runs success, % base Pass^1 base Pass^3 NSPI Pass^1 NSPI Pass^3 0 16 32 48 64 80 success rate, % 27 13.6 29.2 26 ScienceBoard GPT-5.6 Terra 38.7 29.6 48.7 42.6 ScienceBoard Claude Opus 5 55.9 34.6 53.6 50.4 OSWorld GPT-5.6 Terra 74.1 68.4 72.9 72 OSWorld Claude Opus 5 Source: Suh et al., arXiv:2609.36927 v1, Table 1. 169 ScienceBoard and 361 OSWorld tasks, three trials each.

The gain is in Pass^3, and on OSWorld with Opus it is 3.6 points

The abstract says the policies beat the base agent's Pass^3 by 3.6 to 15.8 points, which matches Table 1; the introduction says 4.5 to 13.9, which does not, so use the table. The spread matters. On ScienceBoard with GPT-5.6 Terra, where the agent solves only 13.6% of tasks three times out of three, the script nearly doubles it to 26.0%. On OSWorld with Claude Opus 5, the agent is already consistent (74.1% first try, 68.4% all three), and the script adds 3.6 points of Pass^3 while losing 1.2 of Pass^1. There the case for the script is cost: $0.0097 a run against $2.10, repaid after about three runs.

Batch2Code separates the two effects. It uses the same script format with no refinement, and its curve is just as flat (OSWorld with Opus: 46.7 to 45.2), but it sits 3.3 to 33.1 points below NSPI on Pass^3. A script makes behaviour repeatable. Only the judge-and-heal loop makes it repeatably right. Without the loop, Batch2Code's OSWorld Pass^1 on Opus is 27.4 points below the agent's.

Two results limit the method. On OSWorld-V2, where tasks take skilled humans over an hour, agent trajectories averaged 158 steps and the converted scripts averaged 970 lines, and NSPI trailed the agent by 5.6 points of strict success; the authors attribute it to scripts recomputing values the agent had read off the screen. And the reuse test is narrower than the name suggests: policies refined on generated variants reached 55.0% Pass^3 on held-out parameter changes (AutoRPA 37.5%) and 60.0% on changed starting states (AutoRPA 51.4%), over 40 and 35 task families.

Two checks guard the loop, and both have measured blind spots

NSPI: learn a script, then guard it (arXiv:2609.36927) 1 agent run success not required Simulang script coords become descriptions run up to k fresh state each dual judge (no evaluator) end-state probe + step localizer fail: agent continues, coding model rewrites the script The judge, scored against the benchmark evaluator (Table 5, 6) rejects 69.3 to 94.4% of unreliable policies | accepts only 11.4 to 40.1% of reliable ones 19 OSWorld policies, human labels: verdict 16 of 19 | failure visible on screen 9 of 10 | invisible 0 of 6 The pre-action verifier at deployment (Section 4.6, 24 steps that should be blocked) Qwen3.6-35B-A3B: wrong blocks at most 8.4% of correct runs | wrong passes 17 of 24 (70.8%) Qwen3.8-27B: wrong blocks 9.4 to 25.0% | wrong passes 6 of 24 (25.0%) phoneshell macro replay, for comparison (phoneshell/agent/macros.py) before each step: anchor text must be on screen (string match, no model), else hand back to the agent after each step: an expect text is supported, but 0 of the 7 recorder calls in mcp_server.py set it no refinement loop, no variants, no repeated runs to measure Pass^3

The judges are conservative by design, and that costs money rather than reliability: rejecting good policies means more healing rounds. The step judge's blind spot is sharper. On 19 OSWorld policies annotated by people, it located the first wrong step in 9 of 10 cases where the failure was visible on screen and 0 of 6 where it was not. A judge that only watches the screen cannot localize a wrong value written to a file.

The deployment verifier shows the usual trade-off with numbers attached. The model that rarely blocks good runs (Qwen3.6-35B-A3B, at most 8.4% wrong blocks) let 17 of the 24 steps that should have been stopped go through. The one that caught more (Qwen3.8-27B, 6 of 24 passed) wrongly blocked up to a quarter of correct runs. Twenty-four positives is a small test, and the paper says so.

What it means for a phone agent that replays macros

phoneshell already has the symbolic half. phoneshell/agent/macros.py stores a recorded sequence of steps, each with an optional anchor (text that must be on screen before the step fires) and an optional expected text afterwards; replay stops and hands the screen back to the model when an anchor is missing. Three gaps separate it from NSPI. It has no refinement loop: a macro is saved once and never rewritten from its own failures. It does not check outcomes: the expect field exists, but none of the seven recorder.record calls in phoneshell/mcp_server.py passes one. And its claimed benefit is unmeasured: the module docstring says replay is "worth roughly twenty points of task success on repeat work", and no run in FINDINGS.md backs that number.

The paper also says what to measure. phoneshell's largest sweep (9 September 2026, our local results file) ran each of 349 task and model pairs exactly once, so it reports Pass^1 only. NSPI's main effect would be invisible in that design: on OSWorld the scripts lose a point or two of Pass^1 and gain 3.6 to 15.8 points of Pass^3. A macro evaluation on the phone needs at least three runs per task, from a reset state, with the macro and without it.

Our judgement on cost: on a physical iPhone the per-run saving is real but smaller than on a desktop VM, because phoneshell's wall clock is dominated by device calls (a tap is 550 ms on a light screen) rather than model calls. The dollar break-even of 3.1 to 26.8 runs would likely hold; the 3.4 to 5.1 times speed-up would not, and we have not measured it.

Check it yourself

What would prove this wrong

By 31 March 2027 we will run 20 phoneshell tasks three times each from a reset state, once with a saved macro available and once without, on the same model. If macros raise Pass^1 by 10 points or more, the claim here that compiled routes mainly buy consistency rather than first-try success does not carry over to the phone. We expect Pass^1 to move by less than 5 points and Pass^3 by more than Pass^1. Separately, if a later version of the paper reports OSWorld Pass^1 for NSPI above the base agent with both models, the headline of this note no longer holds for that version.

Sources

  1. Suh, Nguyen, Lee, Hartman, Liu, Wang, Li, Yang (Georgia Institute of Technology, Stanford University; work done at Simular), Neuro-Symbolic Computer Use: Learning Reusable Policies for Reliable and Efficient Execution, arXiv:2609.36927, 29 September 2026
  2. HTML edition: Table 1 (reliability and cost), Table 2 (variants), Table 3 (amortization), Sections 4.5 to 4.7, Tables 5 and 6 (judges)
  3. Simulang, Simular AI's scripting language used for the policies
  4. Xie et al., OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments, arXiv:2404.07972
  5. phoneshell source: phoneshell/device.py, config.py, actions.py, mcp_server.py, agent/macros.py, agent/verify.py, bench/verify.py, environments/*.yaml, FINDINGS.md (read 1 October 2026)