Evaluate Terminal-Bench 2.1 on the Harbor Path
Evaluate Terminal-Bench 2.1 on the Harbor Path
Terminal-Bench 2.1 is published as Harbor task folders. This page runs those folders exactly as published through
the generic harbor environment server,
with no Gym-side patching of tests/test.sh or solution/solve.sh. Results on this path are compared with Harbor’s
own numbers for the dataset, not one to one with the
terminal_bench_2_1 Resources Server,
whose run-time fixes apply on its own path only (its benchmark folder is
benchmarks/terminal_bench_2_1).
Tasks whose published tests or solutions need those fixes score here as they do in Harbor.
Run the commands below from the Gym repository root with Gym installed and a sandbox provider configured
(the examples use opensandbox; see OpenSandbox).
Get the tasks
Clone the dataset’s repository and pin the commit the legacy benchmark runs from, so both paths grade the same task files:
terminal-bench-2-1/tasks/ holds the 89 task folders (the README.md and dataset.toml beside them are not tasks
and are ignored). Every command below takes that folder as its target, and the loader generates the task mapping
and dataset rows for each run.
Or fetch from the Harbor package store
The same dataset is published in Harbor’s package store as terminal-bench/terminal-bench-2-1. A
harbor:<org>/<name> reference fetches it into Gym’s shared datasets folder ($NEMO_GYM_DATASETS_DIR, default
./datasets) and takes the place of terminal-bench-2-1/tasks in every command below:
The plain reference resolves the store’s latest tag, writes the task folders into datasets/terminal-bench-2-1/
and records the package and the version it resolved in the manifest.toml there. A later fetch keeps every folder
whose content still matches, and once latest has moved on it refuses the folder and names both versions, so a
stale copy is never mixed with a newer one. To pin the version, name its content hash; the folder then carries the
first twelve characters of the hash (datasets/terminal-bench-2-1-7d7bdc1cbeda/):
Every task archive is checked against the content hash Harbor published for it before it takes its place in the
folder. The store version above holds the same 89 tasks as the pinned commit and differs from it in one file,
sanitize-git-repo/tests/test_outputs.py, so use the clone to compare with the terminal_bench_2_1 Resources
Server and the store to compare with Harbor’s own published numbers.
Check the reference solutions
Each task’s solution/solve.sh runs through its own verifier with an oracle harness. Every solution must score 1,
and the command exits non-zero otherwise. --output (-o) names the rollouts file, so the oracle run can be set
against a later model run. --limit N validates the first N tasks and --concurrency N bounds the parallel
sandboxes. On the package as published, the two tasks listed under Known upstream noise
fail their own reference solutions, so this full-set command exits non-zero and names them in its report. That
is the expected result, not a broken setup; every other task must score 1.
Run a model
Terminus 2 drives the task sandbox the environment server started. The run’s rows, generated configuration and
rollouts are the artifacts every other gym eval run produces, so gym eval aggregate and the health check apply
unchanged. Resource settings (CPUs, memory, storage) come from each task’s task.toml. To match the legacy
server’s sandbox sizing for a like-for-like comparison, add a --config overlay that sets
sandbox_resources_override on the generated harbor_<taskset>_environment block (an option of the harbor
environment server).
Known upstream noise
Two tasks are broken as published and fail on Harbor and on Gym alike until their images are fixed upstream:
qemu-startupqemu-alpine-ssh
Both images are Debian Bullseye, and their tests install packages from the Bullseye security repository, which the
live Debian mirror no longer serves. Gym runs the tasks as published and does not repair them, so count these two
as expected noise when comparing with Harbor’s numbers. The terminal_bench_2_1 Resources Server applies a
security-snapshot repair on its own path only; that repair is not part of this one.