ComponentBench Overview

July 24, 2026 · View on GitHub

ComponentBench is a diagnostic benchmark for computer-use agents that operates at the component level of modern web UIs — the layer between atomic GUI-grounding tests (e.g. ScreenSpot) and long-horizon workflow benchmarks (e.g. WebArena, OSWorld).

A "component" task is a single, well-scoped interaction with one UI component — toggling a button group, selecting a date range, dragging an item between lists, editing a row in a data grid. Each task is short enough to be diagnostic and rich enough to reflect the burdens of real interfaces.

Why this layer

Benchmark layerExamplesWhat it measures
Atomic GUI groundingScreenSpot, OS-AtlasCan the agent click the right pixel?
Component interactionsComponentBenchCan the agent operate a real UI control end-to-end?
Long-horizon workflowsWebArena, OSWorld, Mind2WebCan the agent chain many decisions across a multi-page task?

Long-horizon benchmarks blame "task failure" without pinpointing where the agent broke down. Atomic grounding misses the dynamics of real components (overlays, focus management, virtualized lists, drag-and-drop, modal flows). ComponentBench fills the gap.

Scope

  • 97 canonical component types organized into 14 interaction families (see data/metadata/canonical_components.csv).
  • 3 React component libraries instantiate each type: Ant Design, MUI, Mantine.
  • 24 task templates combine canonical types with controlled scene-context factors.
  • 2,910 tasks in the Full benchmark (v1); 912 tasks in the harder Core benchmark (v2).
  • Human reference trajectories for every task, cleaned to make step counts directly comparable with agents that paste text in one step.

What's in a task

Each YAML in data/tasks_v{1,2}/ defines:

  • The canonical component type and the underlying library implementation.
  • A natural-language goal (browsergym_goal) shown to the agent.
  • Scene context: theme, density, layout, placement, scale, instances, guidance, clutter.
  • Difficulty: tier (L0–L3), bucket (easy/mid/hard), and 7 axis ratings.
  • Success trigger: a programmatic predicate plus human-readable description.
  • Negative cases and notes.

See schema/task.schema.json and docs/data-format.md for the full structure.

Observation modes

The benchmark is mode-agnostic — the same tasks are evaluated under different observation and action spaces:

  • ax_tree — screenshot + accessibility tree; element-id actions.
  • som — screenshot with set-of-mark overlay; element-id actions.
  • pixel — screenshot only; coordinate actions.
  • pixel_grid — screenshot with grid overlay; coordinate actions.
  • browser_use — agent controls a live browser session via the browser-use tool.
  • ui_tars_native — native UI-TARS pixel+coordinate format.

Switching modes can move task success by 30+ percentage points within a single model.

Programmatic verification

Each task page contains a hidden #cb-success-banner element that appears only when the component reaches its target state. The harness checks for the banner after every action. No vision-based or LLM-based grading.

How to use the benchmark

# Install
git clone https://github.com/TianchenGuan/ComponentBench
cd ComponentBench
pip install -e .
playwright install chromium

# Run a quick smoke test
python scripts/run_benchmark.py --mode pixel --canonical_types button --libraries antd --max_tasks 2

# Full pixel-mode run with your model
python scripts/run_benchmark.py --mode pixel --agent_config gpt --model_id gpt-5.4

See examples/minimal-runner/ for a hand-rolled runner that doesn't depend on the bundled harness.

Where the website lives

A minimal, fully functional version of the benchmark site ships in this repository under site/ (serve locally with cd site && npm install && npm run dev). The hosted deployment at https://interfacegym.com (which also serves componentbench.com) is built from the private InterfaceGym platform repo, which additionally contains the Task Lab generation tooling and hosted log viewer backend.

Failure analysis

The trace-grounded failure taxonomy and the 20 adversarially verified case studies from the paper are released in failure_case_studies.md, with the verification workflow in case_study_workflow.js.