This creates:

July 10, 2026 ยท View on GitHub

Banner

Tasks Apps Scenarios Avg Steps Cross App Memory Intensive License

Paper Website Leaderboard Tasks Trajectories


๐Ÿ“‹ Table of Contents


๐Ÿ“ข Updates

  • 2026-07-10: ๐ŸŽ‰ MemGUI-Bench has been accepted to ACM MM 2026!
  • 2026-06-21: ๐Ÿ† Updated MemGUI-Bench results for recently released frontier models, including Kimi-K2.6, Gemini-3.1-Pro-Preview, and Seed-2.0-Pro. Kimi-K2.6 sets a new SOTA on the leaderboard.
  • 2026-06-19: ๐Ÿš€ MemGUI-Agent is released, bringing memory-augmented mobile GUI agents to long-horizon phone tasks.
  • 2026-06-16: ๐Ÿ“ฃ Preview: MemGUI-Agent shows promising results on long-horizon GUI agent tasks. The leaderboard has been updated with evaluation results and trajectory previews. Paper is coming!
  • 2026-06-11: ๐Ÿš€ Refactoring MemGUI-Bench to a MobileWorld-style runtime and trajectory viewer. We will release more frontier model evaluation results on MemGUI-Bench soon!
  • 2026-02-15: ๐ŸŽ‰ MemGUI-Bench adopted by Mobile-Agent-v3.5! Congrats to the Tongyi Lab team for achieving 27.1% on Easy tasks with GUI-Owl-1.5-32B. We welcome more agents to challenge the full benchmark! ๐Ÿš€
  • 2026-02-09: ๐Ÿ—‚๏ธ Benchmark tasks now available on HuggingFace: lgy0404/MemGUI-Bench
  • 2026-02-09: ๐Ÿ“„ Paper released on arXiv! Check out our paper: arXiv:2602.06075
  • 2026-02-03: Initial release of MemGUI-Bench benchmark. Check out our website.

๐Ÿ’พ Installation

Task Distribution

System Requirements

  • Linux host with Docker and KVM acceleration
  • Permission to run privileged Docker containers
  • Python 3.12 and uv on the host

The default Docker runtime image already includes the Android SDK, ADB, emulator binaries, MemGUI-AVD snapshot, and MobileWorld-compatible MemGUI-Bench runtime. Users do not need to install Android Studio, download AVD snapshots, build a local runtime image, or configure emulator paths.

Quick Install

# Install dependencies with uv
uv sync

# Create local .env from the example
uv run mg env init

Environment Configuration

uv run mg env init creates .env from .env.example. If you prefer to create the environment file manually:

cp .env.example .env

Edit the .env file and configure the following parameters.

Required for Agent Evaluation:

  • BASE_URL: OpenAI-compatible base URL for the agent model
  • API_KEY: API key for the agent model

Required for MemGUI-Eval:

  • MEMGUI_API_KEY: API key for MemGUI-Eval
  • MEMGUI_STEP_DESC_MODEL: Step-description model
  • MEMGUI_STEP_DESC_BASE_URL: Optional step-description endpoint; leave empty to use BASE_URL
  • MEMGUI_FINAL_DECISION_MODEL: Final-decision model
  • MEMGUI_FINAL_DECISION_BASE_URL: Optional final-decision endpoint; leave empty to use BASE_URL

Example .env file:

# Agent model configuration
BASE_URL=https://openrouter.fans/v1
API_KEY=YOUR_API_KEY_HERE

# MemGUI-Eval configuration
MEMGUI_API_KEY=YOUR_API_KEY_HERE

# Step description model
MEMGUI_STEP_DESC_MODEL=google/gemini-2.5-flash
MEMGUI_STEP_DESC_BASE_URL=

# Final decision model
MEMGUI_FINAL_DECISION_MODEL=google/gemini-2.5-pro
MEMGUI_FINAL_DECISION_BASE_URL=

For leaderboard submissions, we use MEMGUI_STEP_DESC_MODEL=google/gemini-2.5-flash and MEMGUI_FINAL_DECISION_MODEL=google/gemini-2.5-pro to keep evaluation fair across submissions. During debugging, you may use other compatible models to reduce cost or latency.

Note:

  • mg env run mounts local .env into each container. mg eval runs on the host and writes trajectories directly into local traj_logs/.

๐Ÿš€ Quick Start

1. Check Environment & Prepare Docker Images

sudo uv run mg env check

2. Launch Docker Containers

sudo uv run mg env run --count 2

This launches 2 ready MemGUI backend containers with:

  • --count 2: Number of parallel containers
  • --launch-interval 30: Default wait time between container launches
  • --emulator-timeout 1200: Default timeout for MemGUI AVD cold start

Each backend runs one Android emulator. Backend ports start at http://localhost:6800, viewer ports start at http://localhost:7860, ADB ports start at 5556. Trajectory logs are written by the host-side mg eval process into local traj_logs/.

For a larger run, launch more containers and match mg eval --max-concurrency to the number of healthy backends, for example --count 4 --max-concurrency 4.

Optional: if your network requires an outbound proxy, export it before launching containers. mg env run forwards these variables to both the container runtime and the Android emulator:

export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
export no_proxy='localhost,127.0.0.1,localaddress,localdomain.com,internal,.corp.example.com,.staging.example.com,0,1,2,3,4,5,6,7,8,9'
sudo -E uv run mg env run --count 2

You can also pass --http-proxy, --https-proxy, and --no-proxy directly to mg env run if your sudo configuration does not preserve environment variables.

3. Run Evaluation

sudo uv run mg eval \
  --agent-type qwen3vl \
  --model-name qwen3-vl-8b \
  --task ALL \
  --log-file-root traj_logs/memgui-qwen3vl \
  --max-concurrency 2

mg eval --max-concurrency 2 discovers two MemGUI backend containers and feeds the selected tasks through MobileWorld's environment queue. Each backend runs exactly one Android emulator and writes MobileWorld-format trajectories into the local traj_logs/ directory.

4. View Results

uv run mg logs view --log-dir traj_logs/memgui-qwen3vl

The viewer opens a local web UI with task-level status, screenshots, action traces, model predictions, and result.txt scores in the MobileWorld layout.

Debug in a Container

For a single-container debug shell:

sudo uv run mg env exec 0
uv run mg eval \
  --agent-type qwen3vl \
  --model-name qwen3-vl-8b \
  --task 001-FindProductAndFilter \
  --aw-host http://localhost:6800 \
  --log-file-root traj_logs/debug

Available Commands

CommandDescription
sudo uv run mg env checkCheck Docker/KVM/.env and pull the default prebuilt runtime image
sudo uv run mg env buildOptional: build a local MobileWorld-compatible runtime image from the MemGUI base image
sudo uv run mg env runLaunch backend container(s) with local .env mounted
sudo uv run mg env listList MemGUI-Bench containers
sudo uv run mg env execOpen a shell or run a command in a container for debugging
sudo uv run mg env rmRemove MemGUI-Bench containers
uv run mg env initCreate .env from .env.example
uv run mg serverRun the backend service inside a container; normally started by mg env run
sudo uv run mg evalRun execution/evaluation across MemGUI containers
uv run mg info taskList or filter benchmark tasks
uv run mg info agentList configured agents
uv run mg info appShow app-level task counts
uv run mg logs viewLaunch the interactive trajectory viewer
uv run mg logs resultsPrint the same compact MemGUI progress and summary metrics as logs view (Evaluating, P@k, IRR, MTPR, FRR)
uv run mg logs exportExport a static HTML trajectory site

mg eval Arguments

ArgumentDefaultDescription
--agent-typerequiredRegistered MobileWorld agent name or custom agent path
--model-name.env/agent defaultAgent model name
--llm-base-url.env/agent defaultOpenAI-compatible base URL
--api-keyAPI_KEYAgent API key
--task / --tasksall when omittedTask id(s), comma-separated, or ALL
--task-file / --task-csvnoneMemGUI CSV subset to run, e.g.data/memgui-tasks-40.csv
--difficulty / --task-difficultynoneMemGUI difficulty filter:easy/medium/hard, 1/2/3, or ็ฎ€ๅ•/ไธญ็ญ‰/ๅ›ฐ้šพ; comma-separated values are supported
--pass-at-k / --attempts1Run each MemGUI task until one attempt succeeds or K attempts are exhausted, then aggregate pass@K
--suite-familymemgui_benchBenchmark suite family
--log-file-root./traj_logsLocal root for MobileWorld trajectory logs
--aw-hostautoComma-separated backend URL(s); auto-discovered when omitted
--max-round / --max-stepMemGUI task budgetMaximum agent steps per task; omitted uses int(golden_steps * 2.5 + 1), -1 means unlimited
--step-wait-time3.0Seconds to wait after each action before the next screenshot for MemGUI-Bench
--timeoutnoneOptional per-task timeout in seconds; timed-out tasks are recorded as failed and the run continues
--max-concurrencynumber of containersMaximum concurrent tasks
--llm-max-concurrencyMEMGUI_LLM_MAX_CONCURRENCY or 2Maximum concurrent LLM API calls across running tasks
--llm-rate-limit-retriesMEMGUI_LLM_RATE_LIMIT_RETRIES or 20Retries for transient LLM API failures such as 429, 5xx, timeout, or connection errors
--llm-rate-limit-max-waitMEMGUI_LLM_RATE_LIMIT_MAX_WAIT or 120Maximum backoff wait in seconds for transient LLM API failures
--llm-infra-retriesMEMGUI_LLM_INFRA_RETRIES or 3Infra-only reruns for the same pass@k attempt before marking the task as no-result; these reruns do not consume pass@k attempts
--shuffle-tasksfalseShuffle task order before scheduling
--dry-runfalseResolve tasks/backends without execution

Transient API failures and device recovery failures are treated as infrastructure failures, not model failures. If they exceed the retry budget, MemGUI-Bench writes an _infra_failures/ record and leaves the task as no-result for resume.

Examples

# Full benchmark (execution + evaluation)
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --task ALL --log-file-root traj_logs/qwen3vl-full

# Run specific task
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --task 001-FindProductAndFilter --log-file-root traj_logs/debug

# Run the 40-task subset
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --task-file data/memgui-tasks-40.csv --log-file-root traj_logs/qwen3vl-40

# Run only hard MemGUI tasks
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --difficulty hard --log-file-root traj_logs/qwen3vl-hard

# Run medium + hard tasks from the 40-task subset
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --task-file data/memgui-tasks-40.csv --difficulty medium,hard --log-file-root traj_logs/qwen3vl-40-medium-hard

# Run pass@3 on the 40-task subset
uv run mg eval --agent-type qwen3vl --model-name qwen3-vl-8b --task-file data/memgui-tasks-40.csv --pass-at-k 3 --log-file-root traj_logs/qwen3vl-40-pass3

# Use explicit backends
uv run mg eval --agent-type qwen3vl --task ALL --aw-host http://localhost:6800,http://localhost:6801

# Limit concurrency
uv run mg eval --agent-type qwen3vl --task ALL --max-concurrency 2

# Dry run
uv run mg eval --agent-type qwen3vl --task 001-FindProductAndFilter --dry-run

Viewing and Exporting Results

# Interactive web viewer
uv run mg logs view --log-dir traj_logs/qwen3vl-full --port 8760

# Terminal summary
uv run mg logs results traj_logs/qwen3vl-full

# Static HTML export for sharing or archiving
uv run mg logs export \
  --log-dir traj_logs/qwen3vl-full \
  --output exported-sites/qwen3vl-full

For pass@K runs, the task detail page includes attempt tabs. Attempt 1 is stored in the canonical task folder; later attempts are stored under _attempt_trajs/ and can be opened from the same viewer page.


๐Ÿ“ Benchmark Session

Each run creates an isolated benchmark folder under local traj_logs/. The host-side mg eval process writes these files directly, so they are not trapped inside Docker containers.

  • Each task has a MobileWorld traj.json, screenshots, marked screenshots, and result.txt
  • Re-running the same log root skips tasks that already succeeded; pass@K runs also skip tasks that already have a completed pass@K aggregate result
  • MemGUI-Eval receives a generated compatibility workspace under _memgui_eval/

Output Structure

Click to expand output directory structure
traj_logs/qwen3vl-full/
โ”œโ”€โ”€ metadata.json
โ”œโ”€โ”€ 001-FindProductAndFilter/
โ”‚   โ”œโ”€โ”€ traj.json
โ”‚   โ”œโ”€โ”€ result.txt
โ”‚   โ”œโ”€โ”€ thread_<id>.log
โ”‚   โ”œโ”€โ”€ screenshots/
โ”‚   โ”‚   โ””โ”€โ”€ 001-FindProductAndFilter-0-1.png
โ”‚   โ””โ”€โ”€ marked_screenshots/
โ”‚       โ””โ”€โ”€ marked-001-FindProductAndFilter-0-1.png
โ”œโ”€โ”€ _attempt_trajs/
โ”‚   โ””โ”€โ”€ 001-FindProductAndFilter/
โ”‚       โ””โ”€โ”€ attempt_2/
โ”‚           โ”œโ”€โ”€ traj.json
โ”‚           โ”œโ”€โ”€ result.txt
โ”‚           โ””โ”€โ”€ screenshots/
โ””โ”€โ”€ _memgui_eval/
    โ”œโ”€โ”€ results.csv
    โ””โ”€โ”€ 001-FindProductAndFilter/
        โ””โ”€โ”€ qwen3vl/
            โ””โ”€โ”€ attempt_1/
                โ”œโ”€โ”€ log.json
                โ”œโ”€โ”€ 0.png, 1.png, ...
                โ”œโ”€โ”€ final_decision.json
                โ””โ”€โ”€ evaluation_summary.json

๐Ÿ“Š Metrics

The benchmark automatically computes:

MetricDescription
Pass@KSuccess rate within K attempts
IRRInformation Retrieval Rate (memory accuracy)
FRRFailure Recovery Rate (learning from errors)
MTPRMemory Task Performance Ratio
Step RatioAgent steps / Golden steps
Time/StepAverage execution time per step
Cost/StepAPI cost per step (if applicable)

MemGUI-Eval details are saved under _memgui_eval/; MobileWorld-facing scores are written to each task's result.txt.


๐Ÿค– Adding a New Agent

MemGUI-Bench now uses MobileWorld's agent interface. Add or reuse an agent under src/mobile_world/agents/implementations/, then register it in src/mobile_world/agents/registry.py.

Agents receive MobileWorld observations and return a prediction string plus a JSONAction. Android action execution, screenshots, trajectory logging, and parallel scheduling are handled by the shared MobileWorld runtime.


๐Ÿ“ค Leaderboard Submission

After running the benchmark:

1. Submit Results JSON (Required)

Create or update a metadata JSON under docs/data/agents/:

{
  "name": "YourAgent",
  "backbone": "GPT-4V",
  "type": "Agentic Workflow",
  "institution": "Your Institution",
  "date": "2026-02-03",
  "paperLink": "https://arxiv.org/...",
  "codeLink": "https://github.com/...",
  "trajFile": "trajs/your-agent-name.json.gz",
  "hasUITree": true,
  "hasLongTermMemory": false
}

Submit via Pull Request to lgy0404/MemGUI-Bench โ†’ docs/data/agents/

Use trajFile only when you also submit the matching trajectory preview pair.

Generate the static trajectory preview bundle and submit the two output files via PR to lgy0404/memgui-bench-trajs:

# Generate the preview bundle from your local run
python3 docs/bundle_trajs.py traj_logs/memgui-run-name \
  -o docs/trajs/your-agent-name.json.gz \
  --with-screenshots

# This creates:
#   docs/trajs/your-agent-name.json.gz
#   docs/trajs/your-agent-name.mp4

# Upload via HuggingFace Web UI:
# 1. Go to https://huggingface.co/datasets/lgy0404/memgui-bench-trajs
# 2. Click "Community" โ†’ "New Pull Request" โ†’ "Upload files"
# 3. Upload both files to site/trajs/ and submit the PR

Use the same lowercase hyphenated your-agent-name as your docs/data/agents/your-agent-name.json file. Maintainers will review the pair and update the public trajectory manifest after acceptance.

See submission guide for details.


๐Ÿ“šTasks

Task Distribution
File Tasks Description
memgui-tasks-all.csv 128 Full benchmark
memgui-tasks-40.csv 40 Subset for quick testing
Task Fields (click to expand)
  • task_identifier
  • task_description
  • task_app
  • num_apps
  • requires_ui_memory
  • task_difficulty
  • golden_steps

๐Ÿ“ Citation

@article{liu2026memgui,
  title={MemGUI-Bench: Benchmarking Memory of Mobile GUI Agents in Dynamic Environments},
  author={Liu, Guangyi and Zhao, Pengxiang and Liang, Yaozhen and Luo, Qinyi and Tang, Shunye and Chai, Yuxiang and Lin, Weifeng and Xiao, Han and Wang, WenHao and Chen, Siheng and others},
  journal={arXiv preprint arXiv:2602.06075},
  year={2026}
}

๐Ÿ“ง Contact

For questions, issues, or collaborations, please contact: guangyiliu@zju.edu.cn


โญ Star History

If you find MemGUI-Bench helpful, please consider giving us a star โญ!

Star History Chart