Skip to main content
Install the CLI with uv tool install hud --python 3.12. Authenticate once with hud set HUD_API_KEY=....

Build & iterate

hud init

Scaffold a new environment package in a fresh <name> directory. The blank template (the default with no preset, and the first option in the interactive picker) writes a minimal local scaffold - env.py (environment, templates, capabilities), tasks.py (concrete task rows), Dockerfile.hud, and pyproject.toml - no network, no API key. Every other preset downloads a starter environment from GitHub instead.

hud serve

Serve an environment’s control channel locally (tcp JSON-RPC). hud dev is a deprecated alias.

hud deploy

Build and publish to HUD infra in one step. The environment’s name comes from the Environment(...) declaration in code; deploying the same name again rebuilds that environment.

Evaluate

hud eval

The primary local iteration loop: run an agent over a task source (.py, directory, or JSON/JSONL), grade the result, and print the reward. Each rollout gets a fresh subprocess for the env - no shared state between tasks.
hud eval loads tasks from the path you pass. In a split project, point it at tasks.py (or . to scan the directory). It spawns env.py for the control channel automatically - you don’t pass both files.
What you don’t need for a local run:
  • A HUD API key - local evals don’t hit the platform
  • hud serve running - hud eval spawns the env subprocess for you
  • Docker - unless your env explicitly uses DockerRuntime
  • An SSH connection - the gateway timeout only applies when env.workspace() is declared
For a platform taskset, pass its name or id directly: hud eval "My Tasks" claude. The tasks are fetched from the platform and the rollouts run remotely by default, since the env source is not on disk. Single-task runs show step-by-step progress (step number + tool calls). Multi-task batches are silent unless --verbose is passed.

Run a packaged image

hud task start / hud task grade attach to an env already serving locally (e.g. inside a built image, or alongside hud serve), or load one from source with --source. hud task list always reads from source (default .) - it doesn’t attach.

Platform

External benchmark formats (currently Harbor) load directly into the runtime as Tasksets - no conversion step. See Harbor interop.

Inspect

hud jobs [<id>]

Without an id, lists your most recent jobs. With an id, lists every trace in that job.

hud trace <trace_id>

Inspect a single rollout. Reads from the local telemetry JSONL file first (HUD_TELEMETRY_LOCAL_DIR/<trace_id>.jsonl) and falls back to the platform API.
Set HUD_TELEMETRY_LOCAL_DIR in your environment to write spans to disk during a rollout so hud trace can read them offline without an API call.

Other commands

See also

Quickstart

Run & deploy