Blolabel
← Notes
analysis 8 min read

MobilePA-Bench splits every score into four weighted capabilities, memory worth 20% and sub-agent collaboration worth 10%; phoneshell's 80 tasks return one pass or fail, nothing underneath it

GPT-6-Astra's 76.87% on MobilePA-Bench is not one number measured once. It is a weighted sum of four separate capability scores, tool use carrying half the weight and sub-agent collaboration carrying a tenth, and nine of the fourteen models tested score below 70% on that composite. phoneshell's task schema has no equivalent field: every one of its 80 tasks collapses to a single pass or fail, with nothing recorded about which capability broke.

MobilePA-Bench, posted to arXiv as 2608.23035 by a team at Alibaba's MAI group and revised to its third version on 19 October 2026, runs a mobile planner agent through a stateful sandbox with live application databases rather than static screenshots, across 1,705 tasks spanning eight query-task domains and 212 mobile tools. Each task is matched to a fixed checker for its tool calls, its state changes and, where relevant, its interaction behavior. The paper's headline number, GPT-6-Astra's 76.87% overall score, is the output of a weighted composite: tool use counts for 50% of a task's score, memory usage and skill usage 20% each, and sub-agent collaboration the remaining 10%. phoneshell's own schema (phoneshell/bench/schema.py) defines a Task as an instruction, a setup, a checks list and nothing more granular; the runner that scores it produces one boolean, not four weighted ones.

Abstract technical illustration on a dark grid: a glowing central node splitting into four separate weighted beams of different thickness labeled with percentage-sized bars, flowing into a single composite score dial, with a second, isolated plain switch icon off to one side showing only two states, on and off, with no beams feeding into it, cool blues and teals with one amber accent on the largest beam

What changed, and when

The paper's step budget is fixed and small: an episode ends when the planner emits a Finish action or reaches Tmax = 15 steps, a third of phoneshell's own default per-task budget of 25 (Task.max_steps in phoneshell/bench/schema.py) and a quarter of phoneshell's hard safety ceiling of 60 (SafetyConfig.max_steps in phoneshell/config.py). The paper states plainly that missing or invalid tool-call predictions count as failures, but it does not say, in the sections available to this check, whether an episode that silently exhausts Tmax without ever emitting Finish is scored as a failure outright or evaluated purely on whatever state it happened to land in. That is exactly the ambiguity phoneshell's own house rule exists to close: a task phoneshell never finishes because of a rate limit or a missing app is logged as not scored, never as a failure, and the distinction is enforced in code, not left to a sentence in a paper.

MobilePA-Bench overall scores (weighted composite) 0 25 50 70 100 76.87GPT-6-Astra (best of 14) 66.94Qwen3.8-27B, pre-RL 69.25Qwen3.8-27B, post-RL Source: arXiv:2608.23035 v3 (19 Oct 2026), results table and RL section, read 24 October 2026.

The composite phoneshell's schema has no field for

MobilePA-Bench's four-way split exists because a planner can reach the user-visible goal while skipping a step the task actually requires: completing a booking without the memory lookup that should have informed which option to pick, or firing a business tool before the route that was supposed to load first. Scoring tool use, memory, skill and sub-agent collaboration separately, then weighting them 50/20/20/10 into one overall number, is how the paper keeps a model from getting full credit for the right answer reached the wrong way. phoneshell's Task dataclass has no equivalent axis to split along: id, instruction, app, difficulty, a setup list and a checks list, reduced by the runner to one boolean. A model that fails a phoneshell task by forgetting something it saw three screens earlier and a model that fails it by tapping the wrong button produce the same record: passed=false, with whatever text happens to be in the individual check's note field, not a structured capability tag.

Scoring structure: MobilePA-Bench vs. phoneshell/bench/schema.py MobilePA-Bench, per task Tool use ............ 50% Memory usage ......... 20% Skill usage .......... 20% Sub-agent collab ..... 10% → one weighted overall score e.g. GPT-6-Astra: 76.87 phoneshell, per task (schema.py) setup: list[Step] checks: list[Check] max_steps: 25 (default) no capability field → one boolean: passed no sub-score survives Source: arXiv:2608.23035 v3 scoring section; github.com/Blomega/phoneshell/blob/main/phoneshell/bench/schema.py, read 24 October 2026.
DimensionMobilePA-BenchphoneshellSource
Capabilities scored per task4, weighted: tool use 50%, memory 20%, skill 20%, sub-agent 10%1: a single pass/fail booleanarXiv:2608.23035; phoneshell/bench/schema.py
Step budgetTmax = 15 per episode25 default per task, 60 hard ceilingarXiv:2608.23035; phoneshell/bench/schema.py; phoneshell/config.py
EnvironmentStateful simulated sandbox, live app databases, 212 toolsOne physical iPhone 17 Pro Max, iOS 26.6, real appsarXiv:2608.23035; houseFacts, blolabel.ai
Models evaluated14 frontier LLMs; 9 score below 70% overall3 frontier models, 120 paired runs, pre-registeredarXiv:2608.23035; blolabel.ai houseFacts
Training loopOnline RL checkpoint, Qwen3.8-27B: 66.94% → 69.25%None; a task grades a model as shipped, not as trainedarXiv:2608.23035

What it means for anyone scoring a mobile agent

Check it yourself

# MobilePA-Bench's capability weights and step cap
curl -s https://arxiv.org/abs/2608.23035 | grep -i "tool use\|memory usage\|sub-agent\|Tmax"
# full text with the results table: https://arxiv.org/html/2608.23035

git clone https://github.com/Blomega/phoneshell && cd phoneshell
grep -n "class Task\|checks:\|max_steps" phoneshell/bench/schema.py   # one checks list, one max_steps field
grep -n "max_steps" phoneshell/config.py                              # separate 60-step hard ceiling
grep -rn "capabilit\|memory\|sub.agent" phoneshell/bench/ || echo "no capability field in phoneshell's task schema"

What would prove this wrong

We claim phoneshell's task schema has no field that scores a capability separately from overall pass/fail. That is wrong the moment any field in phoneshell/bench/schema.py or the runner that consumes it records a sub-score; we found none as of 24 October 2026. We also report that MobilePA-Bench's text does not specify how a Tmax-exhausted episode without a Finish call is scored; that is wrong if a later revision of arXiv:2608.23035 states it plainly, which we will check by 30 April 2027.

Sources

  1. MobilePA-Bench: Benchmarking Mobile Planner Agents on Complex Real-World Tasks, arXiv:2608.23035, submitted 24 August 2026, revised (v3) 19 October 2026, read 24 October 2026.
  2. Full text with the results table and RL section: arxiv.org/html/2608.23035, read 24 October 2026.
  3. Blolabel, phoneshell/bench/schema.py and phoneshell/config.py, read 24 October 2026.