Skip to main content
Define one coding environment, run it 256 wide on Daytona sandboxes, and train a model on the graded rollouts. This page shows the HUD path. The full walkthrough, with the concurrency and warm-pool measurements, lives in Daytona’s guide.

Open the source

The complete project: the environment, the training loop, and the benchmark receipts behind the numbers.

The environment

One file. A workspace with a shell, a seeded bug in calc.py, and a pytest grader that pays 1.0 only when every test passes.
Run it locally first, no API key needed:

Place rollouts on Daytona

The environment travels as a Docker image. DaytonaRuntime builds it into a Daytona snapshot on first run and reuses it after.
Same task, same agent, one argument changed. A fresh sandbox is usable in about 3 seconds at low concurrency and about 10 at 256 wide, and the full ladder to 256 ran 1,272 creates without a failure. For spin-up numbers, warm pools, and sizing rules, see Daytona’s guide.

Train on the graded rollouts

Every rollout already carries what training needs, the tokens and the reward, so training is a few lines against the runs you just watched. No GPUs on your side.
The return_token_ids flag is load-bearing, and chunks must not split groups. Ten steps took a Qwen3.5 4B fork from 35.9% to 81.2% pass rate on held-out bugs it never trained on. The same runs served three purposes. They tested the environment, measured the model, and became the training batch.

Run it

Source code

Runnable project, plus bench/ with the concurrency and warm-pool receipts.

Training agents

How HUD turns tasksets, grouped rollouts, and rewards into a training loop.

Designing tasks for training

Build rewards with enough signal to distinguish better trajectories.

Daytona sandboxes

Spin-up measurements to 256 concurrent, warm pools, and sizing rules.