# Getting started
[Documentation index](README.md) · [CLI reference](cli.md)
## Prerequisites
Use Python 3.11+, [uv](https://docs.astral.sh/uv/), and a running Docker or
Podman engine. ClawBench checks for Docker first, then Podman; set
`CONTAINER_ENGINE=docker` or `CONTAINER_ENGINE=podman` to choose explicitly.
Even with a remote browser, the native runner needs a container for the agent.
Install Docker or Podman (macOS / Linux / Windows)
#### macOS
```bash
# Option A — Docker Desktop (easiest, includes GUI)
brew install --cask docker
open -a Docker # launch and wait for the whale icon to settle
# Option B — Podman (rootless, no daemon, CLI only)
brew install podman
podman machine init # one-time: downloads the Linux VM image
podman machine start # must be running before any podman command
```
> **macOS Podman needs a VM.** `brew install podman` alone is not enough — Podman on macOS runs containers inside a small Linux VM, so you must `podman machine init && podman machine start` once after install or `podman info` will fail with `Cannot connect to Podman`.
#### Linux (Ubuntu / Debian)
```bash
# Option A — Podman (rootless by default, recommended)
sudo apt update && sudo apt install -y podman
# Option B — Docker
sudo apt install -y docker.io
sudo usermod -aG docker $USER # log out / back in so your shell picks up the group
```
> **Rootful Docker ownership note:** with classic `sudo`-docker, files extracted from containers land owned by `root` on the host. ClawBench's driver detects this after each run and chowns `test-output/` back to your user automatically — but if you run other container tooling alongside, rootless Podman (or rootless Docker) avoids the issue entirely.
#### Windows
```powershell
# Option A — Docker Desktop (WSL2 backend)
winget install Docker.DockerDesktop
# then launch Docker Desktop from the Start menu and wait for it to be ready
# Option B — Podman
winget install RedHat.Podman
podman machine init
podman machine start
```
> Run the `uv run …` commands below from **PowerShell**, **WSL2**, or **Git Bash**. Like macOS, Windows Podman requires `podman machine init && podman machine start` before its first use.
## Install
Choose one workflow. Commands in the rest of this guide use the installed
package; in a source checkout, prefix them with `uv run`.
### Installed package
```bash
uv tool install clawbench-eval
clawbench
```
`pipx install clawbench-eval` and `python -m pip install clawbench-eval` also
work. Run `clawbench` in the directory where you want your configuration and
results. The TUI guides you through model configuration and task selection.
It requires an interactive terminal.
### Source checkout
```bash
git clone https://github.com/TIGER-AI-Lab/ClawBench.git
cd ClawBench
cp models/models.example.yaml models/models.yaml
# Edit models/models.yaml with your model and judge API settings.
uv run clawbench
```
`./run.sh` also launches the TUI. For development checks and the source map,
see [Contributing](../CONTRIBUTING.md#code-changes) and
[Source layout](../src/README.md). Runtime files are copied into container
images; rebuild after changing them instead of running with `--no-build`.
## Configure models
The TUI's **Configure models** menu edits `models/models.yaml`. To configure
an installed package without a TTY, initialize its templates and copy the
example yourself:
```bash
clawbench-run --help
cp models/models.example.yaml models/models.yaml
# Edit models/models.yaml before running a task.
```
Only copy the example when creating a new configuration; keep an existing
`models/models.yaml`. Each top-level key must be a model ID accepted by your
provider, because the runner sends that key as the model name:
```yaml
your-provider-model-id:
api_key: "your-api-key"
base_url: https://your-provider.example/v1
api_type: openai-completions
```
Replace all placeholders. The [example configuration](../models/models.example.yaml)
and [model schema](../models/model.schema.json) describe supported API types
and optional settings.
The default request judge is `deepseek-v4-pro`. Configure that entry too,
select another configured model with `--judge `, or use `--no-judge`
to collect trajectories with interception-only results. Model and judge
configuration are separate; selecting an agent model does not configure the judge.
PurelyMail credentials for disposable run emails are bundled with ClawBench.
Workspace `.env` values can override them. Set both `HF_TOKEN` and `HF_REPO_ID`
to enable automatic output uploads, or pass `--no-upload` to keep runs local.
See the [environment reference](cli.md#environment-variables).
## Run a task
Use `clawbench` for guided selection, or run a single case directly:
```bash
clawbench-run test-cases/v1/886-entertainment-hobbies-experience-topgolf your-provider-model-id
```
Replace the model ID with a configured key. Bundled case paths work in an
installed package too. The default harness is `openclaw`.
The first run builds the browser and harness images; later builds reuse
cached layers. With the local browser, open the printed noVNC URL to watch
the run. Outputs go to
`test-output//---/`.
For artifacts and provenance, see the [trace cookbook](trace-cookbook.md).
For a human reference run, omit the model:
```bash
clawbench-run test-cases/v1/886-entertainment-hobbies-experience-topgolf --human
```
Open the noVNC URL, complete the task, then close the tab to end the session.
## Run a batch
```bash
clawbench-batch --models your-provider-model-id --cases-suite v2 --all-cases
```
The batch CLI defaults to V2; select the suite explicitly for reproducible
commands. Use `--cases-suite v1` for V1 or `--cases-suite v1-lite`
for the 20-task subset, `--max-concurrent N` for parallelism, and `--dry-run`
to inspect the job matrix before running. The CLI reference lists
[all suite selectors and execution options](cli.md#clawbench-batch).
After a run, inspect the summary or generate a report:
```bash
clawbench-analyze --runs-dir test-output/batch- --out report.md
```
The native request judge evaluates intercepted requests. Tasks with a
placeholder interception rule need separate trajectory evaluation; see the
[walkthrough](walkthrough.md) and [evaluation guide](../eval/README.md).
## Choose a harness
The harness drives the browser; the model supplies its reasoning. Select a
harness with `--harness ` on `clawbench-run` or `clawbench-batch`.
| Harness | `--harness` | How it drives the browser | Use it when |
| --- | --- | --- | --- |
| [OpenClaw](https://github.com/openclaw/openclaw) | `openclaw` *(default)* | Native browser tools over CDP | Running the default harness |
| [Hermes Agent](https://github.com/NousResearch/hermes-agent) | `hermes` | Native browser tools over CDP | You want the configuration behind most V2 leaderboard rows |
| [opencode](https://opencode.ai) | `opencode` | Playwright MCP bridge | Comparing coding-agent scaffolds |
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | `claude-code` | Playwright MCP bridge | Comparing coding-agent scaffolds |
| Claude Code + [Claude in Chrome](https://code.claude.com/docs/en/chrome) | `claude-code-chrome-extension` | Chrome extension via a local bridge (Microsoft Edge) | Testing the extension stack; any LiteLLM-routed provider works |
| [OpenAI Codex CLI](https://github.com/openai/codex) | `codex` | Playwright MCP bridge | Comparing coding-agent scaffolds |
| [claw-code](https://github.com/ultraworkers/claw-code) | `claw-code` | Playwright MCP bridge | Comparing coding-agent scaffolds |
| [browser-use](https://github.com/browser-use/browser-use) | `browser-use` | Native browser framework, routed via LiteLLM | Comparing a purpose-built web agent |
| [Pi](https://pi.dev/) | `pi` | Pinned [pi-browser-harness](https://pi.dev/packages/pi-browser-harness) tools over CDP | Read-only tool allowlist, no shell |
| [WebBrain](../src/clawbench/runtime/harnesses/webbrain/README.md) | `webbrain` | Browser extension with a CDP driver | Testing WebBrain with a local browser and an OpenAI-compatible completions endpoint |
| — | `random-click` | Random clicks, no model | Establishing a floor baseline |
| — | `null` | Does nothing | Measuring harness/recording overhead |
Full registry: [`src/clawbench/runtime/harnesses/harnesses.yaml`](../src/clawbench/runtime/harnesses/harnesses.yaml).
## Other execution options
- [Browser runtimes](browser-runtimes.md): remote CDP, Kernel, and Browserbase.
- [Harbor](harbor.md): convert tasks and run them with Harbor's agents.
- [EdgeBench / SForge](edgebench.md): export tasks and score results.
- [ProRL](prorl-rl-env.md): submit RL rollouts through ProRL-Agent-Server.
- [FAQ](faq.md): task state, artifacts, scoring, and live-site behavior.