Terminal-Bench 4.0 through Harbor

Terminal-Bench 4.0 is distributed as a Harbor dataset. compound-bench harbor runs it across pinned hosts: one Harbor job per host, each behind its own proxy, with a call ledger per host.

compound-bench harbor \
    --model z-ai/glm-5.3-flash \
    --providers openrouter/auto,openrouter/deepinfra/fp8,doubleword/realtime,doubleword/flex \
    --host-model doubleword=zai-org/GLM-5.3-Flash --reasoning on \
    --dataset terminal-bench@4.0.0 \
    --n-tasks 10 --attempts 2 --n-concurrent 4 \
    --ak max_turns=100 \
    --ledger-dir artifacts/tb4/ledger --go

Without --go it prints the grid and the exact Harbor command per host.

Flags that matter

Requirements

Running on a cloud VM

TB4 grids are a poor fit for a laptop. scripts/cloud/gcp-harbor.sh provisions a GCP VM, installs Docker, runs one arm, copies results back, and deletes the VM. It bounds cost three ways: a standard VM type, a server-side maximum run duration with delete-on-termination, and a cleanup trap.

GCP_PROJECT=<project> bash scripts/cloud/gcp-harbor.sh   # one arm per VM
gcloud compute instances list                            # verify nothing is left

To compare hosts fairly, run every arm at the same time on separate VMs. Serving-host congestion moves by the hour, so arms run one after another confound host with time of day.

Reading the results

Harbor writes a job directory per arm with a result.json per trial. The ledger directory gets <host>.jsonl. Then:

compound-bench ledger artifacts/tb4/ledger/deepinfra-fp8.jsonl --hosts
python3 scripts/analyze_arms.py artifacts/tb4          # arms side by side

See Reports and ledgers for what each column means.