Add the benchmark to the workspace in the Platform before submitting it from the CLI.
[experiment].benchmark resolves a benchmark already in the workspace by key, name, or ID, not a local dataset path.Inspect the benchmark
List the benchmarks available in the current workspace, then inspect the one you plan to run:benchmark info shows the key and exact name, a source_url linking to the upstream project (or the adapter repository when the benchmark is adapted), task and category counts, named task sets, harness and judge requirements, pass threshold, and any implicit required secret record names, followed by the benchmark’s leaderboard and the workspace’s runs on it. When a benchmark’s published scores were measured on a specific harness, that harness is reported as the default. Terminal-Bench 2.1’s is terminus-2, and a run on another harness is not comparable with those scores. Use JSON output to inspect the complete task manifest and required_secret_names before choosing task_names or categories:
difficulty, whose value is easy, medium, hard, or null. A null value means the benchmark source did not provide a difficulty; do not infer one.
For HLE, the command marks parity as the recommended named task set. Omit [tasks] to select the full benchmark.
A Harbor registry benchmark’s task list pages in from the registry after the benchmark is added. While that is in progress the Last Run column reports the sync and its task progress, and submitting against it fails until it completes. If the sync failed, benchmark list reports the reason there and unavailable under Tasks, with a sync_error in JSON output; retry it from the benchmark’s page in the Platform. The reported platform_url opens that page, with its leaderboard and runs.
Create a config
Copy the workspace template and edit it:configs/benchmark/terminal-bench-smoke.toml
Register credentials
api_key_secret, harness_api_key_secret, and judge_api_key_secret contain Platform secret record names, never credential values. Create every record referenced by the config before submitting:
benchmark info response’s required_secret_names:
HF_TOKEN.
Personal scope is the default. Use --scope workspace for a credential shared with workspace members who can submit runs.
Cursor CLI and Mini SWE-agent authenticate separately from the model. Set that agent’s harness_api_key_secret to CURSOR_API_KEY for Cursor CLI, or to MSWEA_API_KEY for Mini SWE-agent. Those are the variables the harnesses read, and any other value is rejected at submit.
cursor-cli and mini-swe-agent reject harness_api_key_secret. See Configuration Files for a complete agent example.
HLE and GDPVal use an LLM judge and require judge_api_key_secret. Set it to a Platform secret record name; judge_model is optional and uses the benchmark default when omitted. For HLE, create the judge record and the HF_TOKEN record reported by required_secret_names:
[execution] table:
HF_TOKEN is reserved by the benchmark runner for every benchmark, not only HLE. Never put it in top-level [env] or any [agents.env], and never use it as a model’s api_key_secret; for HLE, store the dataset credential only in the HF_TOKEN Platform secret record. A submit with a missing secret fails with the exact record names to create.
Submit the run
- Generated run
idandname - Initial
status - Resolved
task_count - Submission timestamp in
created_at platform_urlfor the benchmark run in the Platform
Manage the run
Run lifecycle commands live underbenchmark runs. List benchmark runs in the current workspace, which shows the same columns as the Platform’s runs table, including each run’s agent count and best pass@1, then inspect the submitted run by name or ID:
runs info reports the run’s status, progress, duration, and result totals, and scores every agent the way the run page does: rank, pass@1 with its confidence interval, the deepest pass@k, and per-task cost, time, and tokens.
Use runs logs to inspect lifecycle events and diagnose failures. Logs are returned oldest first within each page; pass the JSON response’s next_cursor to page further back:
.osmosis/benchmarks/ by default and resume by skipping complete files. Available types are summary, results, artifacts, logs, and all. The layout is fixed:
pending or queued. A running run downloads a current snapshot; pass --overwrite when refreshing files that may have changed without changing size.
You can also open the platform_url returned by submit or runs info to follow progress, compare agents, and inspect task-level results in the Platform.
Expand the run
After the smoke run starts and produces expected results:- Add explicit
task_names, selectcategories, use a publishedparitytask set, or omit[tasks]for the full benchmark. - Increase
max_concurrent_attemptswithin your workspace limits. - Add another
[[agents]]table to compare harness or model combinations. - Review the new task and attempt counts before confirming the paid run.