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 incalc.py, and a pytest grader that pays 1.0 only when every test passes.
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.
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.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.