We ran AndroidWorld and iOSWorld with mobile-harness. We achieved 100% on AndroidWorld, with all 116 tasks receiving an official score of 1.0. On iOSWorld, we achieved a 98.24% average official score across 133 tasks.
We wanted to see how well a standard coding agent could handle mobile tasks when given mobile tools, app knowledge, and a way to reuse what it learns.
Mobile tools for the agent
you already use.
mobile-harness is a set of tools and instructions for running mobile tasks through agents such as Claude Code, Codex, and OpenClaw. It combines Android and iOS controls with app cards, memory, and recovery guidance.
Its main advantage is ease of use: you can handle mobile tasks through the agent you already work with, alongside its usual tools. The guidance lives in readable Markdown files, so you can inspect and adapt it. Shared memory lets the agent reuse what it learns across tasks.
These files also support self-improvement. An agent can review execution traces and refine the app cards and memory, making what it learns available to later tasks.
Knowing the app helps
finish the task.
How the app works.
Where things are, how to save a change, and how to check that it stuck.
What experience teaches.
Navigation shortcuts, reliable procedures, and gestures that do not work on a particular screen.
Both live in Markdown files. You can open the files the agent reads, change an unclear instruction, and keep your own overrides. When the agent does something unexpected, you have somewhere concrete to look.
Most of the guidance work was done by a self-improvement agent. It reviewed execution traces, identified where the task-solving agent struggled, and refined the relevant app cards and memory. It checked the revised procedures before the next evaluation round.
App cards held the main workflows, while memory captured lessons learned during execution. Together, they gave the agent a consistent approach to using each app and a way to carry useful knowledge between tasks.
Check that the change stuck.
A tool returning successfully does not tell you whether the task is done. Text can be entered without being saved. A tap can open the wrong item. A list can have more entries below the screen.
We used accessibility trees to identify controls and read content, alongside screenshots to check the visible state. The guidance also called for reading back saved changes before reporting completion.
Two platforms.
The same mobile harness.
| Configuration | AndroidWorld | iOSWorld |
|---|---|---|
| Device | Pixel 6 emulator | iPhone 17 Pro simulator |
| OS | Android 13 / API 33 | iOS 26.5 |
| Tasks | 116 | 133 across 26 apps |
| Actor | gpt-6-astra / low | gpt-6-astra / low |
| Execution budget | 30 minutes per session; existing action budgets | 30 minutes per session |
| Scoring | Official benchmark evaluation | GPT-5.4 mini (114 tasks); GPT-6 Astra high (19 tasks) |
| Recorded interactions | 1,419 | 7,388 |
App cards and shared memory were enabled for both benchmarks. Seed 42 was used where supported.
Benchmark and fixture corrections
We patched AndroidWorld bugs and corrected confirmed iOSWorld app and data problems. Three iOS tasks used corrected data fixtures while keeping their goals and rubrics: mem-034, multi-046, and multi-084.
Recorded evidence
The trajectory collections contain a screenshot for every recorded interaction, plus instructions, tool operations, answers, judgments, and timing. The website presents a compressed screenshot replay and action history for every task, with GIFs and action JSON available below the phone.
GIFs display screenshots at fixed intervals. Use the recorded execution durations when comparing speed.
What the numbers measure.
116 / 116 full passes
All 116 AndroidWorld tasks received an official score of 1.0, giving a 100% score. The recorded actions and screenshots are available in the task explorer.
See the AndroidWorld leaderboard, linked from the Google Research project page. Leaderboard entries are community-submitted, self-reported results and are not independently verified.
98.24% mean official score
124 tasks received full scores of 1.0, and 9 received partial scores greater than 0.0 and less than 1.0. Each of the 133 tasks is weighted equally; partial credit contributes to the mean. The binary pass rate is 93.23% (124/133 tasks with a score of 1.0).
130.6608 ÷ 133 × 100 = 98.24%
A different model.
A different setup.
We previously got 91.4% on AndroidWorld with Mobilerun, using GPT-5. This time, we wanted to see how well a standard coding agent could handle mobile tasks with mobile-harness. The earlier evaluation used a different model and setup, so the comparison does not isolate the effect of the harness or memory.
Does this mean we will not use specialized agents anymore? No. For speed and lower token consumption, we would still choose a specialized mobile agent. It gives us more control over which model handles each operation, how much context it needs, and how many steps it takes.
Give your agent mobile tools.
Follow the setup instructions to use your existing agent for mobile tasks.
Get started with mobile-harness ↗