Skip to content
Hbench

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-retries with 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:

bash
tar czf job.tgz -C jobs <job-name>

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

  1. Open Your bench.

  2. If you issued the run, paste its run token (hpr_…) into Run token.

  3. Drop the job's folder or .tar.gz on 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:

bash
hbench jobs upload --url https://nodeq.tech/api/bench/uploads --token-env HPG_API_TOKEN jobs/<job-name>

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:

bash
hbench jobs upload --url https://nodeq.tech/api/bench/uploads -H "hpg-run-token: $HPG_RUN_TOKEN" jobs/<job-name>

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:

bash
curl --fail-with-body -sS --data-binary @job.tgz \
  -H 'content-type: application/gzip' \
  -H "authorization: Bearer $HPG_API_TOKEN" \
  https://nodeq.tech/api/bench/uploads

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:

  1. Open the job on Your bench.

  2. 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.

  3. 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.