ClawGUI: A Unified Framework for Training, Evaluating, and Deploying GUI Agents

Paper: arXiv:2604.11784 Code: ZJU-REAL/ClawGUI Code reference: master @ d05090c5 (2026-05-21)

1. Motivation (研究动机)

GUI Agent 的价值在于它不依赖应用暴露 API,而是直接通过屏幕、点击、滑动和键盘输入操作任意软件;这让它能覆盖 CLI/API Agent 无法触达的长尾应用。但论文指出,当前 GUI Agent 的瓶颈并不只是模型容量,而是缺少贯穿 训练、评测、部署 的统一基础设施:训练侧缺稳定的大规模在线环境,评测侧协议漂移导致论文数字难以复现,部署侧训练好的模型很少真正连接到真实用户和真实设备。

具体有三类断点。第一,在线 RL 训练通常依赖封闭或脆弱的模拟器管线;长时 GUI 任务需要多步探索,容器卡死、设备状态污染、任务重置失败都会把训练信号变成噪声。第二,GUI grounding/navigation 的评测对 prompt 顺序、坐标系、图像分辨率、temperature、system prompt 非常敏感,不同论文即使使用同名 benchmark,也可能得到不可直接比较的数字。第三,多数研究只停在 notebook、demo 或单一 Android controller,没有把模型接入跨平台设备、用户消息入口、个性化记忆和可复用 skill。

ClawGUI 想解决的问题不是单点提出一个更强模型,而是把 GUI Agent 的完整生命周期做成一个开源 harness:用 ClawGUI-RL 训练,用 ClawGUI-Eval 做可复现评测,用 ClawGUI-Agent 把能力部署到 Android / HarmonyOS / iOS 与 12+ chat platforms。这个问题值得研究,因为一旦训练、评测、部署被统一,GUI Agent 的进展就不再只依赖单次 benchmark 刷分,而可以形成可迭代的真实环境闭环:模型在真实交互中训练,按固定协议评测,再通过同一套工具进入用户工作流。

2. Idea (核心思想)

核心 insight:GUI Agent 需要的不是一个孤立模型,而是一个把 环境稳定性、可复现评测、真实设备部署 同时纳入设计对象的统一系统。ClawGUI 的新意在于把 RL rollout infrastructure、标准化 benchmark pipeline 和个人助手部署 loop 放在同一框架里,让训练产物能被同一套系统评测并实际运行。

与只做模型或只做 benchmark 的工作不同,ClawGUI 明确把 infrastructure 当作主要贡献。比如 UI-R1 / GUI-R1 这类工作关注 RL 提升 action prediction;ScreenSpot-Pro / MMBench-GUI 关注评测数据;OpenClaw / Hermes-Agent 更偏部署 harness。ClawGUI 将这三者组合成闭环:ClawGUI-RL 负责多环境在线训练和 dense reward,ClawGUI-Eval 固定 Infer → Judge → Metric,ClawGUI-Agent 将模型接到真实设备和消息入口。

从方法直觉看,长时 GUI 任务里的失败往往不是“看不懂一张图”,而是多步交互中某一步无效、环境卡死、评测 parser 不一致或部署入口不可用。ClawGUI 因此把 reward、环境健康检查、坐标解析、设备控制、记忆和 skill 都显式工程化:模型能力提升来自算法,也来自能让算法稳定采样、被公平评测并被真实使用的系统外壳。

3. Method (方法)

3.1 Overall framework: Build → Evaluate → Deployment

Figure 1 解读:整套框架被拆成三条互相连接的链路。左侧 ClawGUI-RL 负责 rollout manager、real / virtual environment、reward manager 和 RL trainer;中间 ClawGUI-Eval 将不同 benchmark 统一成 Infer、Judge、Metric 三阶段;右侧 ClawGUI-Agent 把模型能力接到 chat apps、agent loop、personalized memory、hybrid operation 和 multi-model support。图里最重要的信息是:训练、评测、部署不是三个独立 repo,而是一个从 Build 到 Evaluate 再到 Deployment 的闭环。

ClawGUI 的三个模块承担不同输入输出:

  • ClawGUI-RL 输入任务、截图和模型动作,输出训练后的 GUI policy;它优化的是在线交互成功率,重点处理 reward sparse、环境崩溃和多任务并行 rollout。
  • ClawGUI-Eval 输入 benchmark data、模型推理结果和 judge 规则,输出可复现 metric;它优化的是跨论文可比性,而不是提出新 benchmark。
  • ClawGUI-Agent 输入用户自然语言消息和设备状态,输出真实设备上的操作结果;它优化的是部署可用性、跨平台控制和长期个性化。

3.2 ClawGUI-RL: scalable online RL training

Figure 2 解读:ClawGUI-RL 左侧是 RL Infrastructure,包括 RL Trainer、Environment Manager、Reward Manager 和多轮 online rollout;右侧是 Real & Virtual Environment backend,通过 API server 暴露截图、动作执行和任务评估。Environment Manager 在多个 task / device / emulator 上调度 rollout,并用 health check、crash recovery、spare server rotation 维持长时间训练稳定性。Reward 由系统级 task evaluation 与 MLLM-as-judge / PRM 共同提供。

Environment Manager

虚拟环境中,每个 episode 开始时环境会 reset 设备状态并加载新任务;任务结束时,系统通过 root / backend API 检查 app state、database record 或最终屏幕,再结合 MLLM-as-judge 判断任务是否完成。released code 中 MobileWorldEnvs 会从 mobileworld_server.txt 读取 server URL,将 env_num * group_n 个 worker 分配到 active servers,并保留 spare server pool;MobileWorldWorker/health/task/init/step/task/eval/screenshot 做 HTTP 调用。

这种设计解决的是在线 RL 最常见的系统性失败:某个 emulator/container 卡死后,如果继续把空截图或错误 reward 送进 trainer,会污染整组 rollout。代码里 worker 会先做 health retry,失败后把坏 server 移到 spare tail,再扫描 spare server;MobileWorldEnvironmentManager._get_screenshots_with_retry() 会识别空白/损坏截图和 HTTP error,对失败 worker 做重试或 failover。训练 loop 还支持周期性 restart_all_containers(),避免长期状态积累。

真实设备训练共享同一个抽象接口,但约束不同:真实设备没有 root-level system verification,所以任务源通常是人工编写,reward 更依赖 MLLM-as-judge;released code 的 RealDeviceWorker 不做虚拟环境的 task/init 与 task/tear_down,而是把 task goal 从训练数据读入,通过 /step 操作物理设备,必要时由 step reward judge 在 EnvironmentManager 层覆盖中间 reward。

Reward design: binary outcome + dense step-level reward

论文的 reward 由 episode 级结果 reward 和 step 级过程 reward 组成: 其中 在 episode 结束时给出,成功为 1、失败为 0。它直观但非常 sparse:GUI 操作存在延迟、多步跳转和无效点击,单个中间动作对最终成败的贡献很难从最终 reward 反推。

为缓解这个问题,ClawGUI-RL 引入 PRM / VLM step judge。论文描述的输入是 action 前截图、action 后截图和完整 action history;released code 中 call_step_reward_judge() 会把当前 task goal、当前动作、最多最近 5 步 action history、前后截图构造成 prompt,并要求 judge 输出 {"reason": ..., "reward": 0 or 1}。对于 click / long_press / double_tap / drag / swipe 等带坐标动作,代码会在截图上画红点辅助 judge 判断被点击元素。

RL trainer and GiGPO integration

ClawGUI-RL 基于 verl / verl-agent,支持 Reinforce++、PPO、GSPO、GRPO 和 GiGPO。论文实验主要比较 GRPO 与 GiGPO:GRPO 在同一 task 的 rollout group 内归一化 episode reward,但会把同一 trajectory 的每一步赋同样 advantage;GUI 任务中,一个 4 步完成和一个 8 步完成的成功 rollout 都拿到同样最终 reward,这会掩盖中间步骤效率。

released code 的 GiGPO 实现把 advantage 拆成 episode-level 与 step-level 两部分。compute_step_discounted_returns() 对同一 trajectory 的 step rewards 做折扣: 然后 compute_gigpo_outcome_advantage() 先按 task uid / trajectory uid 对 episode reward 归一化,再用 anchor_obs 在同一 task 内构造 step group,对 step return 做归一化,最终组合为: 在 released scripts 里,GiGPO 相关关键配置包括 algorithm.gamma=0.95algorithm.gigpo.step_advantage_w=1.0,以及 algorithm.gigpo.mode 可选 mean_norm / mean_std_norm。直觉上,episode advantage 负责“这条轨迹整体是否成功”,step advantage 负责“在相似状态下这一步是否比其他动作更有帮助”;两者结合后,policy 不只学习最终成败,也学习到中间动作的局部信用分配。

论文公式与 released code 实现差异:论文实验写明 ClawGUI-2B 基于 MAI-UI-2B,在 64 parallel virtual environments、8×A6000 (48GB)、rollout group size 8、temperature 0.7、LR 1e-6、3 epochs、training batch size 8 下训练,并用 Qwen3.5-72B 做 PRM step-level reward judge;但 master@d05090c5 中公开的 MobileWorld run scripts 是示例/模板配置,例如 examples/gigpo_dynamic_trainer/run_mobileworld.sh 使用 n_gpus=4train_data_size=4group_size=1model_path=<path-to-your-model>,普通 gigpo_trainer/run_mobileworld.sh 还默认 step_reward_judge=Falsemax_steps=1。因此 note 中将论文报告的实验配置和 released code 的可运行模板分开记录;当前仓库未包含完全复现论文 8×A6000 / 64-env / Qwen3.5-72B PRM 的原始 launch script。

Pseudocode: environment rollout and failover

def mobileworld_rollout(policy, envs, task_batch, max_steps):
    obs, infos = envs.reset(task_batch)  # task/init + health check + spare-server failover
    done = [False] * len(task_batch)
    traj = []
 
    for step_idx in range(max_steps):
        screenshots, failed = envs.get_screenshots_with_retry(prefix=f"step_{step_idx}")
        for i in failed:
            done[i] = True
 
        actions = policy.generate(obs, screenshots)
        next_obs, rewards, dones, step_infos = envs.step(actions)  # POST /step; eval on answer/terminate/max_step
 
        traj.append({
            "obs": obs,
            "screenshots": screenshots,
            "actions": actions,
            "rewards": rewards,
            "infos": step_infos,
        })
        obs = next_obs
        done = [a or b for a, b in zip(done, dones)]
        if all(done):
            break
 
    envs.tear_down_all()
    return traj

Pseudocode: PRM / VLM step reward

def call_step_reward_judge(task_goal, prev_image, curr_image, action, memory, judge_client):
    action_history = build_action_history(memory, current_step_idx=len(memory), max_steps=5)
    before = draw_red_dot_if_coordinate_action(prev_image, action)
    prompt = STEP_REWARD_JUDGE_PROMPT.format(
        task_goal=task_goal,
        action_history=action_history,
        current_action=action.to_text(),
    )
    response = judge_client.chat(
        model="<step-reward-judge-model>",
        messages=[prompt, before, curr_image],
        temperature=0.0,
    )
    parsed = json.loads(extract_json(response))
    return int(parsed["reward"]), parsed.get("reason", "")

Pseudocode: GiGPO advantage in released code

def compute_gigpo_advantage(batch, gamma=0.95, step_advantage_w=1.0, mode="mean_norm"):
    step_returns = discounted_returns_by_trajectory(
        rewards=batch.non_tensor_batch["rewards"],
        traj_uid=batch.non_tensor_batch["traj_uid"],
        gamma=gamma,
    )
 
    episode_adv = normalize_by_task_group(
        scores=batch.batch["token_level_rewards"].sum(dim=-1),
        task_uid=batch.non_tensor_batch["uid"],
        traj_uid=batch.non_tensor_batch["traj_uid"],
        mode=mode,
    )
 
    step_group_uid = group_same_anchor_observation(
        anchor_obs=batch.non_tensor_batch["anchor_obs"],
        task_uid=batch.non_tensor_batch["uid"],
    )
    step_adv = normalize_by_step_group(step_returns, step_group_uid, mode=mode)
 
    token_mask = batch.batch["response_mask"]
    return (episode_adv + step_advantage_w * step_adv).unsqueeze(-1) * token_mask

3.3 ClawGUI-Eval: reproducible GUI evaluation

Figure 3 解读:ClawGUI-Eval 把 6 个 benchmark 和 11+ 模型统一成 Infer → Judge → Metric 三阶段。Infer 阶段负责按模型固定 prompt、输入顺序、分辨率和坐标格式生成预测;Judge 阶段把模型输出解析成 benchmark 所需格式并判断正误;Metric 阶段聚合 success / pass@1 / category breakdown。图中还强调 Eval 可以通过 ClawGUI-Agent 的自然语言 skill 触发,说明评测流程本身也被部署为 agent tool。

ClawGUI-Eval 覆盖 ScreenSpot-Pro、ScreenSpot-V2、UI-Vision、MMBench-GUI、OSWorld-G、AndroidControl。模型侧支持 Qwen3-VL、Qwen2.5-VL、UI-TARS、MAI-UI、GUI-G2、UI-Venus、GUI-Owl、StepGUI、Gemini、Seed 1.8 等;repo README 还列出 Kimi K2.5 支持。其核心不是新 metric,而是固定所有容易漂移的细节:image-first/text-first 顺序、temperature、prompt template、image resolution bounds、坐标系解析、system prompt 和 AndroidControl scroll direction convention。

released code 的 clawgui-eval/main.py 提供 run_inference()run_inference_multithreaded()run_inference_multigpu(),能保存 shard、resume 已完成样本并合并输出。BaseInferencer 定义 _init_model()_build_prompt()_generate()_post_process();不同模型只需继承并覆盖这些函数。Judge 层包含 GroundingJudgeOSWorldGJudgeAndroidControlJudge:普通 grounding 用 point-in-box,OSWorld-G 处理 polygon / refusal,AndroidControl 需要多动作解析与 click/type/scroll/action matching。

Pseudocode: Infer → Judge → Metric

def evaluate_benchmark(inferencer, judge, metric, samples, output_dir, resume=True):
    pred_path = output_dir / "predictions.jsonl"
    judged_path = output_dir / "predictions_judge.jsonl"
 
    completed = load_completed_ids(pred_path) if resume else set()
    for sample in samples:
        if sample["id"] in completed:
            continue
        result = inferencer.infer_single(sample)
        save_jsonl(pred_path, {**sample, f"{inferencer.model_type}_infer": result["model_response"]})
 
    for item in read_jsonl(pred_path):
        parsed = judge.parse_prediction(item)
        correct = judge.evaluate_single(parsed, item["answer"], item.get("bbox"))
        save_jsonl(judged_path, {**item, "correct": correct})
 
    return metric.aggregate(read_jsonl(judged_path))

3.4 ClawGUI-Agent: personal GUI assistant

Figure 4 解读:用户通过 12+ chat platforms 下发自然语言任务;server side 进入 message-driven agent loop,读取屏幕、调用模型推理、执行 TAP / TYPE / SCROLL 等动作,并把结果回传。图中同时出现 persistent memory、skills、phone / web browser / desktop 与 real / virtual devices,说明 ClawGUI-Agent 的定位不是单一手机控制脚本,而是把 GUI policy 包装成可交互的个人助手。

Hybrid device control

论文认为 CLI 与 GUI 互补:CLI 快且精确,但很多 app 没有可编程接口,用户也看不到 CLI Agent 做了什么;GUI 慢一些,却能覆盖任意视觉界面。ClawGUI-Agent 因此采用 hybrid control:能用 CLI/API 时走结构化命令,不能时回退到屏幕操作。

released code 里,phone_agent/device_factory.py 定义 DeviceType.ADB / HDC / IOS,并把 get_screenshot()tap()swipe()type_text()launch_app() 等统一转发到 Android ADB、HarmonyOS HDC 或 iOS XCTest / WebDriverAgent。PhoneAgent 在初始化时根据模型类型选择 action handler,例如 QwenVL、MAI-UI、GUI-Owl、UI-TARS 对应不同 parser/action handler。

Personalized memory

MemoryManagerMemoryStore 让 Agent 能从任务和执行过程自动学习偏好。它会记录 task history、contact、app usage、task pattern、user preference、user correction 等 memory type;检索时结合 semantic similarity 与 importance,把相关联系人、常用 app、历史成功路径和用户纠正插入 prompt。这样,Agent 不只根据当前截图做反应,也能利用“用户通常给谁发消息、偏好哪个 app、曾纠正过什么动作”等长期上下文。

ClawGUI-Eval as a deployable skill

论文还把评测流程本身包装成可部署 skill:用户可以发出类似 “benchmark Qwen3-VL on ScreenSpot-Pro” 的自然语言命令,Agent 自动做环境检查、多 GPU inference、judge、metric,并返回 structured report。这一点把 Eval 从离线脚本变成了 agent tool,也体现出 ClawGUI 想统一研究和部署流程。

Pseudocode: deployed agent loop with memory

class DeployedGUIAgent:
    def run(self, user_task: str) -> str:
        self.memory.start_task(user_task)
        context = self.memory.get_relevant_context(user_task)
 
        for step_idx in range(self.max_steps):
            screenshot = self.device.get_screenshot()
            messages = self.message_builder.build(
                task=user_task,
                memory_context=context,
                screenshot=screenshot,
                history=self.trajectory,
            )
            model_output = self.model.chat(messages)
            action = self.action_handler.parse_action(model_output)
 
            result = self.action_handler.execute(action, self.device)
            self.memory.add_step(
                thinking=model_output.get("thinking", ""),
                action=action,
                screenshot_app=self.device.get_current_app(),
            )
            self.trajectory.append((screenshot, action, result))
 
            if action.name in {"finish", "answer", "terminate"}:
                self.memory.end_task(success=True, result=str(result))
                return str(result)
 
        self.memory.end_task(success=False, result="max_steps reached")
        return "max_steps reached"

3.5 Code-to-paper mapping

Code reference: master @ d05090c5 (2026-05-21) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
ClawGUI-RL MobileWorld environment managerclawgui-rl/agent_system/environments/env_manager.pyMobileWorldEnvironmentManager, reset, step, _get_screenshots_with_retry, restart_all_containers
Virtual environment worker / spare server rotationclawgui-rl/agent_system/environments/env_package/mobileworld/envs.pyMobileWorldWorker, MobileWorldEnvs, _check_health_with_failover, _switch_to_spare_server, replace_worker_server
Step-level PRM / VLM reward judgeclawgui-rl/agent_system/environments/env_package/mobileworld/judge.pySTEP_REWARD_JUDGE_PROMPT, draw_red_dot_on_image, call_step_reward_judge, _parse_judge_response
GiGPO advantage computationclawgui-rl/gigpo/core_gigpo.pycompute_step_discounted_returns, compute_gigpo_outcome_advantage, build_step_group, step_norm_reward
Trainer integrationclawgui-rl/verl/trainer/ppo/ray_trainer.pycompute_advantage, RayPPOTrainer.fit, compute_step_discounted_returns call, periodic env restart
MobileWorld launch templatesclawgui-rl/examples/gigpo_dynamic_trainer/run_mobileworld.sh / clawgui-rl/examples/grpo_trainer/run_mobileworld.shadv_estimator, actor_rollout_ref.rollout.temperature, algorithm.gamma, env.rollout.n, trainer.n_gpus_per_node
Evaluation pipelineclawgui-eval/main.pyrun_inference, run_inference_multithreaded, run_inference_multigpu, load_completed_ids
Model-specific inference abstractionclawgui-eval/inference/base_inferencer.pyBaseInferencer._init_model, _build_prompt, _generate, _post_process, infer_single
Benchmark-specific judgingclawgui-eval/judge/grounding_judge.py, judge/osworld_g_judge.py, judge/androidcontrol_judge.pyGroundingJudge, OSWorldGJudge, AndroidControlJudge, action_matching
Deployed phone agent loopclawgui-agent/phone_agent/agent.pyPhoneAgent, run, step, _execute_step, memory accessors
Cross-device abstractionclawgui-agent/phone_agent/device_factory.pyDeviceType, DeviceFactory.get_screenshot, tap, swipe, type_text, launch_app
Personalized memoryclawgui-agent/phone_agent/memory/memory_manager.py, memory_store.pyMemoryManager, MemoryStore, MemoryType, get_relevant_context, add_user_correction

4. Experimental Setup (实验设置)

Datasets and scale

  • MobileWorld GUI-Only:论文主训练/评测使用 MobileWorld 的 GUI-Only split,共 117 tasks,用于在线交互式 GUI task completion。MobileWorld 还包含 MCP 和 Call-User 两类任务,但论文的 ClawGUI-2B 主结果聚焦 GUI-Only。
  • ClawGUI-Eval grounding/navigation benchmarks:覆盖 6 benchmarks:ScreenSpot-Pro、ScreenSpot-V2、UI-Vision、MMBench-GUI、OSWorld-G、AndroidControl。论文没有在正文逐一列出每个 benchmark 的样本数;repo README 明确 AndroidControl 当前使用 HIGH split,并说明主流评测使用 7,708-sample subset
  • Real-device training tasks:论文说真实设备任务需要 human-authored tasks 以确保可执行和可验证;released code 的 run_realdevice.sh 通过 realdevice_tasks.txt 读取一行一个任务,但论文未详细说明最终训练任务总数。

Baselines

MobileWorld GUI-Only 对比两类基线:

  • Agentic Framework:Claude-4.5-Sonnet + UI-Ins-7B,Gemini-3-Pro + UI-Ins-7B,GPT-5 + UI-Ins-7B。
  • End-to-End Model:GUI-Owl-7B / 32B,UI-Venus-7B / 72B,Qwen3-VL-8B / 32B / 235B-A22B,Doubao-1.5-UI-TARS,MAI-UI-2B / 8B。

ClawGUI-Eval 对比 GUI-G2、GUI-Owl 1.5、Qwen3-VL、Qwen2.5-VL、UI-TARS 1.5、UI-Venus、MAI-UI、StepGUI,以及 Gemini 3.x、Seed 1.8 等 closed-source/frontier models。

Metrics

  • MobileWorld SR (Success Rate):在线任务完成率,GUI-Only 共 117 tasks。
  • Grounding Success / Accuracy:预测点或框是否命中 ground-truth UI target;ScreenSpot-Pro、ScreenSpot-V2、UIVision、MMBench-GUI、OSWorld-G 使用不同 judge 规则。
  • AndroidControl HIGH SR / Pass@1:离线 navigation action prediction 的单次动作成功率,包含 click/type/scroll 等多动作 matching。
  • Reproduction Rate:如果 reproduced number 大于等于 official,或绝对差值 ,则记为成功复现;总体复现率为成功 cell 数 / 有 official baseline 的 cell 数。

Training and evaluation config

论文报告的 ClawGUI-2B 训练配置:base model 为 MAI-UI-2B,使用 64 parallel virtual environments,硬件为 8×A6000 (48GB),算法为 GiGPO,rollout group size 8,sampling temperature 0.7,learning rate 1e-6,训练 3 epochs,training batch size 8,PRM step-level reward judge 为 Qwen3.5-72B

released code 的可见 launch templates 与论文配置不完全一致。clawgui-rl/examples/gigpo_dynamic_trainer/run_mobileworld.sh 是最接近论文方向的 MobileWorld GiGPO 模板,显示 model_type=mai_uin_gpus=4history_length=3max_steps=50total_epochs=3train_data_size=4adv_estimator=gigpoactor_rollout_ref.actor.optim.lr=1e-6actor_rollout_ref.rollout.temperature=0.7algorithm.gamma=0.95algorithm.gigpo.step_advantage_w=1.0env.restart.enable=True。但它仍使用 <path-to-your-model><path-to-save-checkpoints> 占位符,且不是论文 8×A6000 / 64-env 原始配置。

ClawGUI-Eval 的 released evaluation parameters 更完整:Transformers backend 默认 NUM_GPUS=8MAX_TOKENS=512TEMPERATURE=0.0TOP_P=1.0TOP_K=-1;API backend 另有 NUM_THREADS=64。README 强调 grounding evaluation 要 greedy decoding,且不同模型必须固定 input order、coordinate system、system prompt 与 image resolution bounds。

5. Experimental Results (实验结果)

MobileWorld GUI-Only main results

Model groupModelMobileWorld SR (GUI-Only)
Agentic FrameworkClaude-4.5-Sonnet + UI-Ins-7B47.8
Agentic FrameworkGemini-3-Pro + UI-Ins-7B55.6
Agentic FrameworkGPT-5 + UI-Ins-7B54.0
End-to-End ModelGUI-Owl-7B7.7
End-to-End ModelGUI-Owl-32B8.5
End-to-End ModelUI-Venus-7B8.5
End-to-End ModelUI-Venus-72B16.4
End-to-End ModelQwen3-VL-8B9.4
End-to-End ModelQwen3-VL-32B11.9
End-to-End ModelQwen3-VL-235B-A22B12.8
End-to-End ModelDoubao-1.5-UI-TARS26.3
End-to-End ModelMAI-UI-2B11.1
End-to-End ModelMAI-UI-8B19.7
OursClawGUI-2B17.1

ClawGUI-2B 在 MobileWorld GUI-Only 达到 17.1% SR,相对同规模 MAI-UI-2B baseline 的 11.1% 提升 6.0 absolute points。论文强调这两个模型共享相同 base weights,因此提升主要来自 ClawGUI-RL 的在线训练环境、reward 设计和训练流程,而不是模型规模。ClawGUI-2B 还超过了更大的 Qwen3-VL-32B (11.9%) 和 UI-Venus-72B (16.4%),说明在该任务上,经过真实环境 interaction 训练的小模型可以超过未经过对应在线 RL 的大模型。

同时,agentic framework 仍处在另一性能区间:Gemini-3-Pro + UI-Ins-7B 为 55.6%,GPT-5 + UI-Ins-7B 为 54.0%,Claude-4.5-Sonnet + UI-Ins-7B 为 47.8%。论文把它们视为互补范式:这些系统依赖闭源 frontier planners 和专门 grounding modules,绝对效果高,但不适合作为 compact end-to-end policy 的同类训练对比。

Dense reward ablation

MethodReward TypeSR (%)
GRPOBinary (episode-level)14.5
GiGPODense (episode- & step-level)17.1

将 episode-level GRPO 换成 step-level GiGPO 后,MobileWorld GUI-Only 从 14.5% 提升到 17.1%,提升 2.6 absolute points。这直接支持论文主张:长时 GUI 任务需要 dense credit assignment;只把最终成功/失败平均分给整条 trajectory,会让中间无效动作和有效动作得到相似信号。

ClawGUI-Eval reproduction results

ClawGUI-Eval 在有 official baseline 的 cell 上达到 46/48 = 95.8% overall reproduction rate;其中 open-source GUI grounding 为 44/46 = 95.7%,frontier model ScreenSpot-Pro 为 2/2 = 100.0%。两个未复现成功的 cell 都在 ScreenSpot-Pro:Qwen3-VL-2B official 48.50 vs reproduced 43.90,UI-TARS 1.5-7B official 49.60 vs reproduced 42.06。论文解释为这些模型的 official evaluation configuration 未公开,prompt / resolution 选择可能是主要原因。

关键复现实例:GUI-G2 在 SS-Pro 47.50 → 47.75、SS-V2 93.30 → 93.32;MAI-UI-2B 在 SS-Pro 57.40 → 57.94、MMB-GUI 82.60 → 82.80、OSWorld-G 52.00 → 54.17;UI-Venus 1.5-8B 在 SS-Pro 68.40 → 67.68、SS-V2 95.90 → 95.83、MMB-GUI 88.10 → 87.79。Closed-source 模型通过 Zoom paradigm 在 ScreenSpot-Pro 复现:Gemini 3.0 Pro 72.70 → 75.08,Seed 1.8 73.10 → 72.80,Gemini 3.1 Pro reported 85.01(无 official baseline)。AndroidControl HIGH split 上,repo README 报告 Qwen3-VL-2B 59.12,Qwen2.5-VL-7B 64.47,但官方对应 baselines 尚未公开。

Deployment observations

ClawGUI-Agent 的结果主要是系统展示而非独立 benchmark 表。论文展示其可以通过 12+ chat platforms 操作 Android / HarmonyOS / iOS,并将 ClawGUI-Eval 包装成可用 skill:用户用自然语言触发 benchmark,系统自动完成 environment verification、multi-GPU inference、judge、metric 和结果报告。这个结果证明 ClawGUI 不是只发布训练代码,而是试图把训练好的 agent 连接到真实设备和用户交互入口。

Limitations and future directions

论文没有用单独的 “Limitations” 小节列出失败清单,但 Discussion 给出三个未解决方向。第一,GUI-CLI harness 仍需统一 routing policy:未来 agent 应把 CLI、GUI 和 API call 当成可互换 action,并从交互数据中学习何时走哪条路径。第二,online RL 需要超越 emulator;真实商业 app 有认证、状态和隐私问题,可能需要 mock apps 或 privacy-preserving on-device trajectory collection。第三,当前 GUI agent 多为 reactive observe-act loop,缺少预测“执行某动作后屏幕会如何变化”的 GUI world model;ClawGUI-RL 的 dense trajectory logging 可能成为训练这类 world model 的数据基础。

从 released code 角度看,最大的复现 caveat 是论文完整训练配置没有作为一键脚本公开:MobileWorld 示例脚本能说明接口与关键超参,但不等价于论文的 8×A6000、64 parallel virtual environments、Qwen3.5-72B PRM 配置。因此 ClawGUI 对“统一基础设施”的贡献是清楚的,但外部读者若要精确复现 ClawGUI-2B 的 17.1% 结果,仍需要补齐实际环境、模型权重路径、server 列表、step reward judge 服务和未公开的 full launch settings;换言之,released repo 当前缺少可直接运行的 exact paper training launch config