eval entrypoint:
.toml files for configuration:
uv run vf-eval @ config.toml --dry-run. To run the evaluation, use uv run vf-eval @ config.toml.
Use dotted arguments to set values using the CLI, e.g. --sampling.temperature 0.5. CLI arguments overwrite toml arguments when both are present.
The output from evaluations are written into outputs/<env>--<model>--<harness>/<uuid>/ by default, where <env> is the taskset, prefixed by the paired env id when --env.id sets one (use output_dir to overwrite the folder). The folder contains the used config.toml, all the episodes in traces.jsonl, as well as logs of the run and workers in logs/attempt_<n>/eval.log — one directory per launch attempt (a resume starts a new one), with logs/latest pointing at the current attempt.
Common config values
model— the model id to evaluate, e.g.nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55Bsampling— generation params passed to the model, e.g.sampling.temperatureenv.taskset.id— pick the taskset (or the positionaleval <taskset-id>)env.agent.harness.id— pick the agent’s harness ([env.agent.harness]in TOML)select— which tasks to evaluate (see Selecting tasks).-nsetsselect.limit: not setting it means all tasks, and an infinite taskset (a procedural generator, e.g.wordle) requires it.-ssetsselect.shuffle(fixed seed)num_rollouts— rollouts per taskverbose— log at debug instead of inforich— the live dashboard (default);--no-richstreams logs to the console and prints each trace as JSON at the endrich.show_logs— replace the dashboard’s per-rollout rows with a live tail of the attempt’s logs (logs/latest/eval.log), the env workers’ lines includedpush— upload the run to the Prime Intellect platform as it goes (default;--no-pushkeeps it local).run.attach <evaluation-id>streams into a run the platform already created instead of opening a new one — this is how a hosted evaluation’s sandbox runs the same command; it is not something a local run sets by hand
Resuming evaluations
--resume <output-dir> re-runs only the rollouts a previous run left missing or errored, appending to that run’s own traces.jsonl. It reloads the run’s saved config.toml verbatim, so it takes no other arguments. Good rollouts are kept, while errored ones are dropped and redone.
Disabling tools
Almost every harness comes with adisabled_tools list, which can be used to disable one or multiple tools:
Skills
Harnesses whose program supports SKILL.md skills natively (e.g. Claude Code, Codex) take askills list. A local skill folder is uploaded to <skills dir>/<folder name>. A {runtime = "..."} entry copies the contents of a directory already inside the runtime into the program’s skill discovery directory:
TaskData.skills, for example skills=[{"runtime": "/opt/skills"}]. Task sources are installed first, followed by harness sources; later files override matching earlier files. Each run gets its own installed skills. Sources are resolved after task setup, and missing source directories fail the run.
Setting skills on a task or harness without native harness skill support fails up front.