Running evaluations

Run one task, local batches, configs, and skill comparisons.

Edit on GitHubllms.txt

bench eval run is the main command for both one task and a batch. It accepts a local directory, a remote Git repository, a YAML run config, or a pinned dataset version. All of these use Docker by default.

Start with Getting started if you have not completed a local run yet.

One task from a remote repository

bench eval run \
  --source-repo benchflow-ai/skillsbench \
  --source-path tasks/citation-check \
  --agent codex \
  --model gpt-5.5 \
  --sandbox docker

BenchFlow clones and caches the source under .cache/datasets/. Pin a branch, tag, or commit with --source-ref when reproducibility matters.

One local task

bench eval run \
  --tasks-dir tasks/my-task \
  --agent codex \
  --model gpt-5.5

The omitted --sandbox defaults to docker. A task directory contains a native task.md plus its environment/ and verifier/ directories. BenchFlow can still read the retired split layout for compatibility.

A local batch

Point --tasks-dir at the parent directory and choose a conservative local concurrency:

bench eval run \
  --tasks-dir tasks \
  --agent codex \
  --model gpt-5.5 \
  --sandbox docker \
  --concurrency 2

Use repeatable filters to select task names:

bench eval run \
  --tasks-dir tasks \
  --include citation-check \
  --include weighted-gdp-calc \
  --agent codex \
  --model gpt-5.5

Local concurrency is limited by your Docker daemon, CPU, memory, and model rate limits. Increase it gradually. A cloud sandbox becomes useful when you need more isolation or more parallel machines, not because BenchFlow requires one; see Sandboxes.

YAML run configs

Use a config when the same run should be repeated or reviewed:

source:
  repo: benchflow-ai/skillsbench
  path: tasks
agent: codex
model: gpt-5.5
environment: docker
concurrency: 2
include:
  - citation-check
bench eval run --config run.yaml

Check the CLI reference for the full run schema and flags.

Compare a task with and without skills

For a task that already contains its skill payload, run the two modes into separate job directories:

bench eval run \
  --tasks-dir tasks/my-task \
  --agent codex --model gpt-5.5 \
  --skill-mode no-skill \
  --jobs-dir jobs/my-task-no-skill

bench eval run \
  --tasks-dir tasks/my-task \
  --agent codex --model gpt-5.5 \
  --skill-mode with-skill \
  --jobs-dir jobs/my-task-with-skill

Use --skills-dir <directory> when the skills live outside the task package. For a structured lift experiment backed by evals/evals.json, use bench skills eval; see Skill evals.

Results and exit status

By default, artifacts land in jobs/<timestamp>/. Summarize them with:

bench eval list jobs/
bench eval metrics jobs/

Exit code 0 means the evaluation pipeline completed. It does not mean every task passed. Read each rollout's reward or the printed [PASS] / [FAIL] status to assess model performance. Configuration, agent, or verifier errors produce a non-zero exit.

Use a new --jobs-dir for an independent rerun. Reusing one intentionally resumes it and skips completed rollouts.

Reproducible published runs

For leaderboard, paper, or release evidence, prefer a pinned registry dataset:

bench eval run \
  --dataset skillsbench@1.1 \
  --agent codex \
  --model gpt-5.5

Dataset runs verify the pinned commit and per-task content digests. Ad-hoc --tasks-dir and floating repository runs are better suited to development.