How-to guides
Upload a job
Upload an hbench job folder or a .tar.gz of it, up to 95 MiB, in the browser or with curl, and publish it to its board.
Upload any finished hbench job of a benchmark from a registry: any model, any agent, 1 to 5 attempts per task. Sign in with GitHub first. Put your result on a board has the whole path on one page.
Check the job
The site takes a job when:
hbench 0.3.0 or later ran it, and nothing in it changed since. Run
hbench jobs verify -p jobs/<job-name>to check.It finished. Continue a stopped job with
hbench jobs resume -p jobs/<job-name>.It ran one dataset from a registry, with one agent and one model. A job of tasks from your own folder (
--path) can go on Your bench, but on no board.Its retries reran only crashed trials.
--max-retrieswith hbench's default exclusions does that.To publish it, it used no prompt template or extra instructions. A harness with either needs an issued run.
Pack the job
Pack the job's own folder, not the whole jobs/ folder:
The browser packs a folder for you, so you can skip this step there.
Stay under the size cap
One upload can be up to 95 MiB as sent, and 512 MiB unpacked. A full SWE-bench Verified job is 30 to 50 MiB as sent. A bigger job can't be uploaded yet. Limits has the other numbers.
Upload in the browser
Open Your bench.
If you issued the run, paste its run token (
hpr_…) into Run token.Drop the job's folder or
.tar.gzon Upload a job.
The site replaces values that look like keys with [REDACTED] before it stores anything, then checks the job. A refused upload stores nothing; its message ends with a rule code, which Troubleshooting explains.
Upload from a script
Create an API token in Account settings and set HPG_API_TOKEN to it. hbench packs the job, checks it against its manifest.json and sends it:
It prints the site's answer, and exits 1 when the site refuses the job.
For a run you issued, the run token is the only token the upload needs. Set HPG_RUN_TOKEN to it and send it in place of the API token:
The run token is good for that run's one accepted upload, within its 48 hours, and for nothing else on the site.
With curl, send the archive you packed:
For an issued run, send -H "hpg-run-token: $HPG_RUN_TOKEN" in place of the authorization line. --fail-with-body makes curl print the site's message when it refuses the job.
Publish it to its board
Every job stays private on Your bench until you publish it, a run you issued too:
Open the job on Your bench.
Press Publish, then Make it public? to confirm. A run you issued keeps the board and entry it was issued with. Any other job goes under your entry for its agent and options, on the board of the runs that ran the same tasks, model and settings, or on a new board if nobody has run them yet.
If the job fits more than one board, Your bench asks which: choose one and press Publish.
A job you don't publish stays private, so try anything on it: a new model, three tasks, a longer time limit or an open network. Published later, it goes on the board of exactly those settings.
Publish within 30 days of the upload. After that, Your bench hides the job's files (Limits) and the site can no longer check it. Publishing shows the run's score, model and agent configuration under your GitHub handle; What a board makes public has the full list. You can publish a job once, and withdraw it later. Cells and boards lists what decides the board.
Reviewed on October 30, 2026.