BenchFlow
Reference pages
On this page

Commands

Each bench command and flag has its type, default and help here; benchflow is the same command as bench. A command or flag new since 0.9.2 has (0.10) after its name when 0.10.0rc3 has it, or (unreleased) when no release has it yet; the options --help leaves out have a table of their own under their command, and the commands bench --help hides come last. Which options --help leaves out follows 0.10.0rc3: 0.9.2's bench run --help also leaves out --trials, --max-cost-usd, --max-tokens and --integrity, which its --help-all lists. To see the commands at work, start with the Quick start and Run a benchmark; a run config's keys are in Files BenchFlow reads and writes, and CLI and Python gives each flag's Python argument.

CommandWhat it does
bench newScaffold a new benchmark task.
bench checkValidate task structure and the run's plan without starting a sandbox.
bench importConvert task.toml + instruction.md into the unified task.md format.
bench runRun an agent on tasks and score them; without -a, the oracle.
bench branchFork an agent run at a checkpoint into labelled children.
bench resultsSummarize jobs; with two, compare them.
bench viewView a trial or session trajectory in the browser.
bench regradeRe-run the task's current verifier on each trial's frozen workspace.
bench exportExport a task to a compatibility split layout with a loss report.
bench doctorCheck this machine can run evals: Python/uv, sandbox, agent credentials, network.
bench agentsList the agents, or show one in detail.
bench explainExplain why a trial has no score: what happened, whose problem, what next.
bench cacheList or clean what BenchFlow keeps: cached layers, build records, snapshots.
bench cache listList what BenchFlow keeps, with sizes and creation times (the default).
bench cache cleanPrint what would be removed; remove it with --remove.
bench evalRun agents on tasks (smoke, run) and read the results (metrics, view, inspect, compare).
bench eval smokeRun a bundled hello-world task once per credentialed agent, one at a time.
bench eval runRun an evaluation; single task or batch.
bench eval adoptAdopt an external benchmark into benchflow.
bench eval compare-liftCompare paired baseline vs trained eval job directories.
bench eval scoreRetry a failed reviewer using the saved workspace and trajectory.
bench eval regradeRe-run the task's current verifier on each trial's frozen workspace.
bench eval listList the jobs in a jobs folder, one row each, with their scores.
bench eval metricsCollect and display metrics from a jobs directory.
bench eval viewView a trial or session trajectory in the browser.
bench eval continueResume a previous unfinished (timed-out) OpenHands run to completion.
bench eval branchFork an agent run at a checkpoint into labelled children.
bench eval inspectRead a finished job or trial: denominators, one row per trial, or --json.
bench eval comparePair two jobs by task: rewards, deltas, fair denominators, setting checks.
bench eval resumeFinish an interrupted job from its folder: rerun only the unfinished tasks.
bench eval branchesShow every fork and child of a job's (or one trial's) branches: request, status, reward, advantage, tokens, USD and sandbox-seconds.
bench tasksTask authoring commands.
bench tasks generateGenerate benchmark tasks from agent traces.
bench tasks list-sourcesList known HuggingFace trace datasets.
bench tasks initScaffold a new benchmark task.
bench tasks checkValidate task structure and the run's plan without starting a sandbox.
bench tasks overlapCompare two task manifests for exact task-id and digest overlap.
bench tasks migrateConvert task.toml + instruction.md into the unified task.md format.
bench tasks normalizeExpand minimal task.md authoring profiles into canonical task.md.
bench tasks exportExport a task to a compatibility split layout with a loss report.
bench tasks snapshot-hfMaterialize a Hugging Face dataset task tree with provenance.
bench tasks digestCompute the content digest that pins a task's files, independent of git.
bench agentAgent management commands.
bench agent listList all registered agents.
bench agent showShow details for a registered agent.
bench reviewGrade finished rollouts against a rubric with a reviewer agent.
bench assess (0.10)Blind pairwise human assessments of saved outputs, kept in an opt-in sidecar.
bench assess attempt-ref (0.10)Hash a completed rollout into a saved-attempt reference (JSON).
bench assess create (0.10)Start an assessment of two saved attempts of one task.
bench assess release (0.10)Record that every runtime of both attempts was observed released.
bench assess assign (0.10)Bind the collector's persisted blind assignment (after the release).
bench assess import-vote (0.10)Bind the collector's vote on the assignment (a skip becomes abstain).
bench assess correct (0.10)Replace the effective answer with a corrected one.
bench assess retract (0.10)Retract the effective answer; its history stays in the log.
bench assess reduce (0.10)Record the deterministic label the log calls for, and refresh the label file.
bench assess consume (0.10)Record that a consumer used one exact ready label revision.
bench assess withdraw (0.10)Bar a corrected or retracted label revision from future use.
bench assess show (0.10)Verify the sidecar's log and print its state.
bench assess verify (0.10)Verify the hash chain, the label file and, optionally, the evidence.
bench assess label (0.10)Print the label rebuilt from the sidecar's log alone (JSON).
bench preferences (0.10)Human preferences and rubric scores on finished trials.
bench preferences pairs (0.10)Make the store and the blind assignment.
bench preferences import (0.10)Check every vote in the file, then add the new ones to the store.
bench preferences rank (0.10)Ratings from the store's votes (also written to ratings.v1.json).
bench bundle (0.10)Write one zip of a run's evidence to share, redacted.
bench skillsSkill discovery and evaluation.
bench skills listList discovered skills.
bench skills evalEvaluate a skill using its evals/evals.json test cases.
bench skills validateRun static checks on skills: NVIDIA SkillEvaluator Tier 1 and SkillSpector.
bench trajTrajectory commands.
bench traj setupInstall the submit skill, or print the prompt to send to an agent.
bench traj uploadInspect, redact, confirm, and upload trajectory JSONL.
bench traj statusCheck whether an uploaded trajectory is verified in storage.
bench trainTraining data commands.
bench train convertConvert BenchFlow rollout artifacts into trainer-ready data.
bench train token-coverageReport whether each rollout's model calls carry token ids and logprobs.
bench train streamPrint each finished rollout of a (running) job as one JSON line.
bench train validateValidate trainer-ready data.
bench train runLaunch training jobs.
bench train run sftRun a Prime-RL SFT job and record a BenchFlow manifest.
bench hubEnvironment hubs: browse a hub's environments (list/show/inspect), check registry tasks (check), and publish datasets and push runs to a BenchFlow Hub (publish/push).
bench hub listList a hub's datasets or environments (benchflow or primeintellect).
bench hub showShow a dataset's tasks, or a hosted environment's metadata.
bench hub inspectInspect a file from a hub environment package.
bench hub publish (0.10)Publish a folder of tasks as an immutable dataset version on a BenchFlow Hub.
bench hub push (0.10)Push a finished run (traces, results, an embodied trial's record and video) to a BenchFlow Hub.
bench hub checkInventory or structurally check representative registry tasks.
bench daemonManage the opt-in warm local runtime.
bench daemon startStart a private runtime; attach runs with BENCHFLOW_DAEMON=auto.
bench daemon statusShow whether this user's local runtime is running.
bench daemon stopStop an idle local runtime; never interrupt an active call.
bench sandboxDaytona sandboxes: create, list and clean up (cleanup also removes leftover Docker containers).
bench sandbox createCreate an environment from a task directory (does not start it).
bench sandbox listList active Daytona sandboxes (kept Docker sandboxes: their trial folders hold kept-sandbox.json).
bench sandbox attach (0.10)Open a root shell in a kept sandbox; with a command after --, run it there and exit with its status.
bench sandbox release (0.10)Delete a sandbox kept with --keep-sandbox.
bench sandbox cleanupClean up orphaned sandboxes and stale shared runtimes.

bench

The universal environment framework; run, author, and adopt agent benchmarks across any environment.

Output
bench [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
newScaffold a new benchmark task.
checkValidate task structure and the run's plan without starting a sandbox.
importConvert task.toml + instruction.md into the unified task.md format.
runRun an agent on tasks and score them; without -a, the oracle.
branchFork an agent run at a checkpoint into labelled children.
resultsSummarize jobs; with two, compare them.
viewView a trial or session trajectory in the browser.
regradeRe-run the task's current verifier on each trial's frozen workspace.
exportExport a task to a compatibility split layout with a loss report.
doctorCheck this machine can run evals: Python/uv, sandbox, agent credentials, network.
agentsList the agents, or show one in detail.
explainExplain why a trial has no score: what happened, whose problem, what next.
cacheList or clean what BenchFlow keeps: cached layers, build records, snapshots.
evalRun agents on tasks (smoke, run) and read the results (metrics, view, inspect, compare).
tasksTask authoring commands.
agentAgent management commands.
reviewGrade finished rollouts against a rubric with a reviewer agent.
assess (0.10)Blind pairwise human assessments of saved outputs, kept in an opt-in sidecar.
preferences (0.10)Human preferences and rubric scores on finished trials.
bundle (0.10)Write one zip of a run's evidence to share, redacted.
skillsSkill discovery and evaluation.
trajTrajectory commands.
trainTraining data commands.
hubEnvironment hubs: browse a hub's environments (list/show/inspect), check registry tasks (check), and publish datasets and push runs to a BenchFlow Hub (publish/push).
daemonManage the opt-in warm local runtime.
sandboxDaytona sandboxes: create, list and clean up (cleanup also removes leftover Docker containers).

Options

OptionTypeDefaultHelp
--versionflagShow the version and exit.
--verbose, -vflagPrint debug logs, with the traceback of each failed trial (the same as BENCHFLOW_LOG_LEVEL=DEBUG). Goes before the command: bench -v run …
--install-completionflagInstall completion for the current shell.
--show-completionflagShow completion for the current shell, to copy it or customize the installation.

bench new

Scaffold a new benchmark task.

Output
bench new [OPTIONS] NAME
ArgumentTypeRequiredHelp
NAMEtextyesTask name

Options

OptionTypeDefaultHelp
--dirpathtasksParent directory (default: tasks/)
--no-pytestflagSkip pytest template
--no-oracle, --no-solutionflagSkip oracle template
--formattexttask-mdTask format. New tasks use task-md; legacy scaffolding is retired.

bench check

Validate task structure and the run's plan without starting a sandbox.

Warnings (e.g. task.toml keys BenchFlow does not know) are printed but do not fail the check.

Output
bench check [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory or folder of tasks

Options

OptionTypeDefaultHelp
--levelschema | structural | runtime-capability | publication-grade | acceptance | acceptance-live | equivalencestructuralValidation level: schema, structural, runtime-capability, publication-grade, acceptance, acceptance-live, or equivalence (runs the oracle in --sandbox, then grades wrong and value-equivalent variants of its output)
--sandboxtextValidate runtime semantics for docker, remote-docker, daytona, modal, apple-container, or agentcore (default: a sandbox that can run the task: docker, or modal for a task that asks for GPUs)
--report-outputpathWrite the acceptance-live report to this host path instead of the task-declared report path; with --level equivalence, write the battery's JSON report here
--no-report-writeflagValidate acceptance-live without writing the declared report or its .sha256 sidecar (report-only dogfood; leaves the task package unmodified). Takes precedence over --report-output.
--allow-task-envtext (repeatable)Let tasks read this variable of your environment (a ${NAME} env value, or their docker-compose.yaml); repeatable. A task reading an unnamed one is refused; ${NAME:-default} gets the default
--verifier-sandboxtextWith separate: also check what bench run --verifier-sandbox separate checks before it starts (on --sandbox, default docker), with the same refusals, and name where the verifier image comes from
--agenttextclaude-agent-acpAgent to validate, as for eval run
--modeltextModel to validate, as for eval run
--sandbox-usertextagentAgent user to validate, as for eval run

bench import

Convert task.toml + instruction.md into the unified task.md format.

Output
bench import [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesLegacy task directory

Options

OptionTypeDefaultHelp
--overwriteflagReplace an existing task.md
--remove-legacyflagDelete split files and promote tests/solution aliases after task.md is verified

bench run

Run an agent on tasks and score them; without -a, the oracle.

The oracle is the task's reference solution: no model and no key. Rerunning the same command resumes its job. A run config (--config) is the whole run: its agent runs unless -a names another, and flags win over its keys.

Output
bench run [OPTIONS] [TARGETS]...
ArgumentTypeRequiredHelp
TARGETStextnoA task folder, a folder of tasks, or a GitHub repository (org/repo, org/repo/path or org/repo/path@ref); one per run

Options

OptionTypeDefaultHelp
--agent, -atextThe agent: a name bench agents lists, or nop (does nothing) (default: oracle, the task's reference solution)
--model, -mtextThe model, in the agent's own naming
--effort, --reasoning-effort, -etextReasoning effort, when the agent exposes one (low, medium, high, max, …)
--harnesstextHow the agent runs: acp (default, its ACP adapter) or native (its own CLI in headless JSON mode; claude-agent-acp and codex-acp)
--agent-env, --envtext (repeatable)Environment variable for the agent, KEY=VALUE (repeatable)
--task-skills, --no-task-skillsflagInstall the task's own skills (environment/skills) for the agent; left out by default, as in BenchFlow 0.8
--dataset, -dtextA dataset instead of a target: name@version from a registry, or org/name@version from a BenchFlow Hub
--registrytextThe registry for --dataset: a URL, a file or hub:<url> (default: BenchFlow's registry, then $BENCHFLOW_HUB_URL for an org/name dataset)
--include, -itext (repeatable)Only tasks whose names match: a name, or a glob pattern such as 'hard-*' (comma-separated or repeated)
--exclude, -xtext (repeatable)Skip tasks whose names match (same patterns as --include)
--limit, --n-tasks, -nintegerRun at most N tasks: the first N by name, or a seeded random sample with --sample-seed
--sandbox, -stextWhere trials run: docker, remote-docker, daytona, modal, apple-container, or agentcore
--concurrency, -jintegerTrials running at a time (on Docker, up to --warm-pool more are prepared ahead)
--warm-poolintegerDocker: sandboxes prepared ahead of their trial's turn, beyond the running ones (0 to --concurrency; default 1, or 0 at -j 1)
--jobs-dirtextWhere job folders go (default: jobs); a plain rerun resumes its latest job
--timeout-multipliernumberScale every task's agent timeout, e.g. 2.0
--agent-idle-timeout, --idle-timeouttextAbort a prompt when the agent is silent this long: seconds or 90s, 10m, 1h; 0 or none turns it off (default: 10m, 30m at effort xhigh or max)
--fail-undernumberExit 1 when the pass rate over the planned tasks is below this (0 to 1)
--freeze-workspace, --save-outputsflagSave each trial's final workspace before the verifier runs, so bench regrade can score it again
--extra-instructiontextText appended to every task's instruction
--verifier-sandboxtexttask or separate. separate runs every task's verifier in a fresh sandbox that gets only the workspace and declared artifacts; a task it cannot run there refuses the whole run before anything starts (default: task, each task's own choice)
--job, --job-nametextJob name under --jobs-dir (an existing job is resumed)
--freshflagStart a new job instead of resuming the latest one in --jobs-dir
--dry-runflagPrint the plan as JSON and the run card on stderr, and run nothing; for a local folder or run config, exits 1 when the run card would refuse the run. In 0.9.2 it prints the plan only, with no run card.
--quiet, -qflagPrint only warnings, errors and the final score
--config, --run-configpathYAML run-config file (the whole run spec)
--source-repotextGitHub repo of the tasks as org/repo (e.g. benchflow-ai/skillsbench)
--source-pathtextFolder in the repo: one task (tasks/econ-detrending-correlation) or a folder of tasks (tasks). Only this folder is downloaded
--keep-sandbox (0.10)textKeep a trial's sandbox: on-failure, always or never (default). bench sandbox attach <trial> opens a shell in it; bench sandbox release <trial> deletes it.
--accept-deviations (0.10)textWhy this run differs from its task set's run-reference.toml (a strict one refuses the run without it); kept in run-card.json.
--integritytextoff, audit (record what the agent did and check it against the task) or strict (audit, and the verifier in a separate sandbox). The verdict is in integrity/claim_verdict.json; rewards never change.
--max-cost-usdnumberJob budget in USD, checked between starts, so a job can pass it by about one rollout's cost; at the cap running rollouts are cancelled. With --trials, each repeat has its own cap
--max-tokensintegerJob budget in tokens, checked between starts like --max-cost-usd. With --trials, each repeat has its own cap
--trialsinteger1Run every task N times (pass@k); each repeat is a job of its own, in <jobs dir>/<agent>/trial-NN
--help-allflagShow every flag, the run settings --help leaves out included

More options (shown by --help-all)

OptionTypeDefaultHelp
--hub (0.10)textRead --dataset from this BenchFlow Hub, as the bench hub commands' --hub does (the same as --registry hub:<url>)
--tasks-dirpathLocal tasks directory
--source-reftextBranch, tag or full commit SHA to fetch (e.g. main)
--source-envtextHosted environment source (e.g. primeintellect/general-agent)
--source-env-versiontextHosted environment version
--source-env-argtext (repeatable)Hosted environment arg as KEY=VALUE; repeatable
--source-env-num-examplesinteger1Number of env examples
--source-env-rollouts-per-exampleinteger1Rollouts per hosted env example
--source-env-max-tokensinteger1024Max tokens for hosted env run
--source-env-temperaturenumberTemperature for hosted env run (default: none sent, so the provider's own)
--source-env-sampling-argtext (repeatable)Hosted env sampling arg as KEY=VALUE; repeatable (e.g. reasoning_effort=minimal)
--source-env-verifiers-versiontextPin the verifiers release installed with the hosted env (default: the env package's own requirement)
--source-env-base-urltextModel endpoint for the hosted env run (default: verifiers' own, Prime inference with PRIME_API_KEY)
--source-env-api-key-vartextName of the environment variable holding that endpoint's API key
--usage-trackingtextTelemetry-enforcement policy: auto, required, or off. The LiteLLM proxy is always used for routable agents (usage, cost, and llm_trajectory.jsonl are always captured); this flag only controls whether trusted telemetry is required.
--environment-manifestpathEnvironment-plane manifest applied to every rollout: a path to an environment.toml, OR a 'name@version' registry spec resolved via $BENCHFLOW_ENV_REGISTRY when set, else the built-in registry shipped with benchflow (env0@prod, env0@outage). The manifest-declared stateful environment is provisioned, gated on readiness, and torn down.
--statetextThe stateful environment to bind, apart from the task. Inline JSON with an optional tool subset (e.g. {"name": "env0", "tools": ["gmail", "gcal"]}), OR a name@version spec, OR a manifest path. Takes precedence over --environment-manifest.
--prompttext (repeatable)Prompt(s) to send (default: the task prompt: the task.md body, or instruction.md for older tasks)
--config-overridetextDeep-merge a config patch into each task's resolved config for this run. Inline JSON/YAML/TOML or an @file ref, e.g. --config-override '{"agent":{"timeout_sec":120}}'. Varies one knob (budget, skills, stopping rules) while the tasks, agent, model and environment stay fixed; recorded by content hash for replay.
--build-concurrencyintegerMax concurrent docker image builds. Defaults to --concurrency. Set lower (e.g. 8) when --concurrency is high to avoid overwhelming the docker daemon with parallel builds.
--worker-concurrencyintegerRun batch eval through isolated worker subprocesses, each with at most this many concurrent tasks; --concurrency remains the aggregate target.
--worker-retriesinteger1Retry a crashed worker shard this many times, resuming its jobs_dir.
--worker-start-stagger-secnumber1.0Seconds to stagger worker starts to avoid Daytona connection storms.
--checkpointstextKeep a sandbox snapshot after these prompts: every-prompt or prompt:N[,M]. Later bench branch --from-checkpoint <trial> forks from one. Docker, or Daytona direct; each is a full filesystem image. See docs/train/environment.md
--checkpoint-keepinteger rangeKeep at most this many checkpoints per trial (default 3, or a run config's checkpoint_keep); the oldest is deleted.
--fresh-installflagInstall the model proxy and the agent in every trial instead of starting from their cached image layers (same as BENCHFLOW_FRESH_INSTALL=1)
--allow-cloud-metadataflagLet the agent reach the cloud metadata endpoints under an open network (no block; each trial records the opt-out). Without it, or the task's allow_cloud_metadata = true, the agent starts only once the block is proven on
--retry-from-checkpointtexton-failure, on-timeout, or both: when a trial fails or times out, fork one retry from its last --checkpoints snapshot, verified the same way. The trial's reward is kept; the retry's is reported next to it (result.json retry block, summary checkpoint_retries).
--retry-prompttextPrompt for the retry, replacing the prompts after the checkpoint (the default). '@instruction' is the task instruction, '@verifier_feedback' the failed trial's reward and verifier output tail.
--max-sandbox-secondsnumberJob budget in trial wall-clock seconds, running trials included and re-checked as they run; same stop/cancel behaviour as --max-cost-usd
--max-rolloutsintegerJob budget in rollouts started, retries included: at the cap no rollout starts and running ones finish
--token-budget (0.10)integerPer-trial budget in tokens (input, cached included, plus output), subagents' calls included: BenchFlow's model proxy refuses the next model call once it is spent, the agent is stopped and its work graded. Replaces a task's [agent] token_budget
--turn-budget (0.10)integerPer-trial budget in turns, one turn being one model call through BenchFlow's model proxy (subagents' and side calls included); enforced like --token-budget. Replaces a task's [agent] turn_budget
--retry-resume-sessionflagThe retry resumes the failed trial's conversation at the checkpoint (ACP session/load; Claude Code) instead of a fresh session.
--restart-changed (0.10)flagWhen the named job ran with other settings or task files, set those trials aside and run them again (default: refuse)
--fail-ontext (repeatable)Exit 1 when any trial ended this way: timeout, error, verifier-error (comma-separated or repeated)
--summary-outpathWrite the run's benchflow.run-summary JSON (job dir, counts, gate) here
--codex-apps-policytextCodex account Apps: disabled (scored-task default) or inherit (explicit opt-in).
--sandbox-usertextagentSandbox user (null for root)
--sandbox-setup-timeoutintegerTimeout (seconds) for sandbox user setup inside the environment (default: 120; keeps the file's value with --config).
--context-rootpathRepo/build-context root used to stage Dockerfile COPY sources for monorepo-authored local tasks.
--base-image-overridetextRewrite task Dockerfile FROM images on the runtime task copy. Use only for reproducing runs whose base image moved namespaces.
--separate-verifierflagRun each verifier in a fresh sandbox built from the verifier image that receives only the frozen workspace, declared artifacts and /logs/artifacts, as if every task set [verifier].sandbox_mode = 'separate'. Docker, remote-docker, Daytona and Modal.
--separate-verifier-includetext (repeatable)A path outside the workspace that a separate verifier sandbox receives too, at the same path, for tasks whose agent writes graded files there (e.g. /root when the workspace is /app). Repeatable.
--skills-dirpathSkills directory to deploy
--skill-modetextno-skillSkill mode: no-skill, with-skill, or self-gen
--skill-creator-dirpathPath to skill-creator or a skills root containing it
--self-gen-no-internetflagDisable web tools for the self-generated run
--loop-strategytextHarness loop strategy, e.g. 'verify-retry:k=3,feedback=names', 'self-review:k=3', or 'single-shot' (default). verify-retry re-prompts with filtered soft-verifier feedback; self-review re-prompts the agent to critique its OWN work (no verifier signal); both loop until the soft verifier passes or k retries are spent.
--reviewer-agenttextRubric reviewer harness
--reviewer-modeltextRubric reviewer model
--reviewer-reasoning-efforttextRubric reviewer reasoning effort
--reviewer-sandboxtextRubric reviewer sandbox backend
--reviewer-timeout-secinteger rangeReviewer execution budget in seconds
--reviewer-idle-timeouttextAbort a reviewer prompt after this many idle seconds (default: 600). Pass 0 or 'none' to disable the idle watchdog and leave --reviewer-timeout-sec in charge.
--reviewer-storage-mb (0.10)integer rangeReviewer sandbox disk in MB (default: the evidence it holds plus 2048, at least 4096, at most the sandbox backend's limit)
--reviewer-memory-mb (0.10)integer rangeReviewer sandbox memory in MB (default: 2048)
--reviewer-setup-timeout (0.10)integer rangeSeconds for the reviewer sandbox's setup, its model proxy install among it (default: the run's --sandbox-setup-timeout)
--reviewer-evidence-timeout (0.10)integer rangeSeconds to unpack, and again to check, the workspace evidence in the reviewer sandbox (default: 1 per MiB, at least 600)
--reviewer-concurrencyinteger rangeMax concurrent rubric reviewers
--reviewer-imagetextRubric reviewer container image
--reviewer-agent-envtext (repeatable)Reviewer environment variable (KEY=VALUE)
--reviewer-open-networkflagAllow unrestricted reviewer network access
--allow-task-envtext (repeatable)Let tasks read this variable of your environment (a ${NAME} env value, or their docker-compose.yaml); repeatable. A task reading an unnamed one is refused; ${NAME:-default} gets the default
--ignore-bench-versionflagRun a dataset even when this bench version is outside the range it was validated against. Only valid with --dataset.
--task-manifest-outpathWrite selected task-set manifest JSON
--run-config-outpathWrite redacted normalized run config JSON
--health-summary-outpathWrite trajectory health summary JSON
--expected-tasksintegerFail unless the selected task count matches
--canonicalizetextnoneCanonicalization policy: none or one-healthy-per-task
--canonical-selection-outpathWrite canonical rollout-selection JSON
--canonical-jobs-dirpathMaterialize selected rollout dirs for trainer conversion
--retry-policytextdefaultRetry policy: default or unscored-only
--retry-attemptsintegerRetries per task after a retryable failure (overrides the default of 2)
--retry-concurrencyintegerReserved retry concurrency
--publish-hftextUpload final eval artifacts to a HF dataset repo
--hf-prefixtextPath prefix in the HF repo
--hf-public-read-checkflagVerify public HF reads after upload
--publish-buckettextUpload final eval artifacts to a HF bucket
--eval-results-modeltextHF model repo to open a community eval-results PR on
--eval-results-datasettextHF benchmark dataset id, e.g. org/benchmark
--eval-results-tasktextBenchmark task_id from the dataset's eval.yaml
--matrixpathYAML file whose models: maps each alias to a model, or to {model, agent, agent_env}; {agent: oracle} for a control (docs/audit/compare-runs.md#choose-the-metric)
--sample-seedintegerSeed for the --n-tasks random sample
--seedstextSeeded rollouts: run every task once per seed, e.g. 0-4 or 0,3,7 (tasks in a task format that writes seeded variants, such as embodied tasks). summary.json gets pass@k and variance per task.

bench branch

Fork an agent run at a checkpoint into labelled children.

Each task runs once up to the checkpoint; the sandbox (and, when asked, declared environment state) is snapshotted; every --child starts from that snapshot with a fresh agent session (child prompts must stand alone unless --resume-session reloads the parent's conversation) and is scored by the task's verifier. The job folder has the usual layout plus, per trial, tree.json and branches/<fork>/children/<node>/observation.json.

Example:

bench branch --tasks-dir tasks/my-task --agent claude-agent-acp --sandbox daytona --prompt "Write draft.txt containing: Hello world" --prompt @instruction --checkpoint-after-prompt 1 --child "label=baseline" --child "label=hint,prompt=Rename draft.txt."

Output
bench branch [OPTIONS]

Options

OptionTypeDefaultHelp
--tasks-dirpathA task directory, or a directory of tasks (run one after another).
--agenttextAgent name, or 'oracle' (children run the task's solve.sh). Default: the checkpoint's agent with --from-checkpoint, else claude-agent-acp.
--model, -mtextModel id for the agent, e.g. claude-haiku-5-5 (none for oracle and nop)
--reasoning-efforttextAgent reasoning effort (e.g. max)
--harnesstextHow the agent runs: acp (default, its ACP adapter) or native (its own CLI in headless JSON mode; claude-agent-acp and codex-acp)
--sandboxtextdocker or daytona (Daytona direct mode snapshots). Default: docker, or the checkpoint's provider.
--prompttext (repeatable)Parent prompt; repeatable, sent in order. '@instruction' is the task's instruction. Default: the task's prompts.
--checkpoint-after-promptintegerBranch after this many parent prompts (0: before the first). Default 1; 0 for the oracle and with --from-checkpoint.
--childtext (repeatable)One child, as label=NAME[,parent=LABEL][,prompt=TEXT|,prompt-file=PATH]; give at least two. prompt= takes the rest of the option (commas allowed). parent=LABEL forks this child from child LABEL's state after LABEL has run its prompts (a nested fork of at least two children). Without a prompt the child runs the parent's remaining prompts, or the task's prompts when the checkpoint is after the last one.
--snapshot-layerstextsandboxWhat the checkpoint captures: sandbox (container filesystem), environment (declared database state, needs a manifest), or both.
--parenttextcontinue: restore the parent world after the children, send the remaining prompts and verify. discard: skip that restore (one fewer), leave the parent unverified. Default: continue, or discard with --from-checkpoint.
--retain-snapshotsflagKeep the checkpoint's sandbox snapshot so a later --from-checkpoint can branch from it again (otherwise deleted). bench sandbox cleanup removes kept Daytona snapshots once stale.
--from-checkpointpathA trial folder from an earlier bench branch --retain-snapshots run: branch again from its kept sandbox snapshot. Needs --tasks-dir holding the same task.
--checkpoint, --forktextWith --from-checkpoint: a fork id from tree.json or an automatic checkpoint as prompt:N (default: the last kept fork, else the last kept checkpoint).
--checkpointstextAlso keep a sandbox snapshot after these parent prompts (every-prompt or prompt:N[,M]) for a later --from-checkpoint.
--checkpoint-keepinteger range3Keep at most this many --checkpoints per trial.
--resume-sessionflagChildren resume the parent's agent conversation (ACP session/load) instead of starting fresh, so a child prompt can say 'continue'. Needs an agent that advertises loadSession and keeps its session on disk (Claude Code), and a checkpoint after prompt 1+.
--child-retriesinteger range1Retry a child this many times when it failed before its agent did anything (a provider hiccup such as a connect timeout).
--stop-on-child-failureflagStop a fork at the first child that fails for good (default: the other children still run and the fork is partial).
--concurrencyinteger range1Run up to this many children of a fork at once, each in its own sandbox created from the snapshot (implies --isolate-children).
--isolate-childrenflagRun each child in its own sandbox created from the snapshot instead of restoring the parent's sandbox between children. Implied by --concurrency > 1 and by nested children.
--agent-envtext (repeatable)Agent env var (KEY=VALUE); repeatable
--includetext (repeatable)Only these task names; repeatable
--jobs-dirpathjobsOutput directory
--job-nametextJob folder name (default: branch-<time>)

bench results

Summarize jobs; with two, compare them.

With no job, or a folder of jobs, it lists the jobs (bench eval list); with one, it reads the job (bench eval inspect); with two, it pairs them by task (bench eval compare).

Output
bench results [OPTIONS] [JOBS]...
ArgumentTypeRequiredHelp
JOBStextnoJob folders, or a folder of jobs (default: ./jobs); one job is read trial by trial, two are compared task by task

Options

OptionTypeDefaultHelp
--jsonflagPrint the benchflow.job document (one job) or the benchflow.comparison document (two)
--attemptstextbestbest (one attempt per task, as resume picks) or all
--include-controlsflagCount control runs (oracle, empty) in the denominators
--bytextOne job: also count per group, e.g. agent,model; two: pair on these keys too

bench view

View a trial or session trajectory in the browser.

Output
bench view [OPTIONS] ROLLOUT_DIR
ArgumentTypeRequiredHelp
ROLLOUT_DIRtextyesRollout directory, job directory, trajectory JSONL file, or an hf://<org>/<dataset> trajectory dataset (optionally with /subpath)

Options

OptionTypeDefaultHelp
--portinteger8888Server port
--confirmflagShow an Approve & submit / Not this one bar on the page; print DECISION: approved|rejected and exit 0 on approve, 3 on reject.
--redaction-summarytextMasked-secret breakdown shown in the --confirm bar, e.g. '2 API keys, 1 bearer token' (lift it from bench traj upload PATH --dry-run). Display-only; no effect without --confirm.

bench regrade

Re-run the task's current verifier on each trial's frozen workspace.

The new score is written beside the original (regrade.json in each trial, regrade-summary.json in PATH); result.json is never changed. Trials whose workspace was not frozen (--freeze-workspace) are listed as not regradable.

Output
bench regrade [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA job folder, or one trial folder inside it

Options

OptionTypeDefaultHelp
--tasks-dirpathFolder of task folders (or one task folder) holding the changed verifiers. Default: the task path each trial recorded.
--sandboxtextBackend for the fresh sandboxes (default: as run)
--concurrencyinteger range4Trials regraded at once
--reasontextWhy the verifier changed; kept in each block
--jsonflagPrint the summary as JSON
--review (0.10)flagAlso rerun each trial's rubric review on its saved outputs, gated by the new test, and compare the combined score. The reviewer is the one the trial recorded, changed by --reviewer-*
--reviewer-agent (0.10)textRubric reviewer harness
--reviewer-model (0.10)textRubric reviewer model
--reviewer-reasoning-effort (0.10)textRubric reviewer reasoning effort
--reviewer-sandbox (0.10)textRubric reviewer sandbox backend
--reviewer-timeout-sec (0.10)integer rangeReviewer execution budget in seconds
--reviewer-idle-timeout (0.10)textAbort a reviewer prompt after this many idle seconds (default: 600). Pass 0 or 'none' to disable the idle watchdog and leave --reviewer-timeout-sec in charge.
--reviewer-storage-mb (0.10)integer rangeReviewer sandbox disk in MB (default: the evidence it holds plus 2048, at least 4096, at most the sandbox backend's limit)
--reviewer-memory-mb (0.10)integer rangeReviewer sandbox memory in MB (default: 2048)
--reviewer-setup-timeout (0.10)integer rangeSeconds for the reviewer sandbox's setup, its model proxy install among it (default: the run's --sandbox-setup-timeout)
--reviewer-evidence-timeout (0.10)integer rangeSeconds to unpack, and again to check, the workspace evidence in the reviewer sandbox (default: 1 per MiB, at least 600)
--reviewer-concurrency (0.10)integer rangeMax concurrent rubric reviewers
--reviewer-image (0.10)textRubric reviewer container image
--reviewer-agent-env (0.10)text (repeatable)Reviewer environment variable (KEY=VALUE)
--reviewer-open-network (0.10)flagAllow unrestricted reviewer network access

bench export

Export a task to a compatibility split layout with a loss report.

Output
bench export [OPTIONS] TASK_DIR [OUTPUT_DIR]
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory to export
OUTPUT_DIRpathnoDestination split-layout directory (omit with --report-only)

Options

OptionTypeDefaultHelp
--targettexttask-tomlLayout to write: task-toml
--overwriteflagReplace an existing export directory
--report-onlyflagPrint the compatibility loss report without writing files

bench doctor

Check this machine can run evals: Python/uv, sandbox, agent credentials, network.

Credentials are reported by name, source and expiry only; values are never printed. Exits 1 when a required check fails.

Output
bench doctor [OPTIONS]

Options

OptionTypeDefaultHelp
--sandboxtextdockerSandbox the checks treat as required: docker (default), remote-docker or daytona. Others are listed but not checked yet.
--offlineflagSkip network probes and the live Daytona credential check.
--jsonflagPrint the report as JSON.
--agent-starttext (repeatable)Also install this agent in a fresh --sandbox and open its ACP connection without a prompt (no model call), to catch a broken install or login before a batch (repeatable).

bench agents

List the agents, or show one in detail.

Output
bench agents [OPTIONS] [NAME]
ArgumentTypeRequiredHelp
NAMEtextnoShow this agent in detail

bench explain

Explain why a trial has no score: what happened, whose problem, what next.

The code is the one the run summary names; without one, every code is listed.

Examples:

Shell
bench explain                    # every code
bench explain R212               # the model provider refused the credential
bench explain verifier_failure --json
Output
bench explain [OPTIONS] [CODE]
ArgumentTypeRequiredHelp
[CODE]textnoThe code the run summary names, such as R212 or verifier_failure (omit to list every code).

Options

OptionTypeDefaultHelp
--jsonflagPrint the page, or the list, as JSON.

bench cache

List or clean what BenchFlow keeps: cached layers, build records, snapshots.

Without a command, lists (as bench cache list).

Examples:

Shell
bench cache list --only images -s docker   # cached layers on Docker
bench cache clean --older-than 30d         # what would go
Output
bench cache [OPTIONS] [COMMAND] [ARGS]...
CommandWhat it does
listList what BenchFlow keeps, with sizes and creation times (the default).
cleanPrint what would be removed; remove it with --remove.

Options

OptionTypeDefaultHelp
--onlytext (repeatable)Only these kinds: images, build-cache, pulled-images (comma-separated or repeated; default: images and build-cache)
--sandbox, -stext (repeatable)docker or daytona (default: docker when installed, daytona when DAYTONA_API_KEY is set); daytona lists this BENCHFLOW_DAYTONA_OWNER's content snapshots
--older-thantextOnly what was created longer ago than this (e.g. 30d, 12h); the age is the creation time, not the last use
--jsonflagPrint JSON on stdout; notes go to stderr

bench cache list

List what BenchFlow keeps, with sizes and creation times (the default).

Nothing is removed or tagged.

Examples:

Shell
bench cache list --only images -s docker   # cached layers on Docker
bench cache list --older-than 30d --json   # made 30+ days ago, as JSON
Output
bench cache list [OPTIONS]

Options

OptionTypeDefaultHelp
--onlytext (repeatable)Only these kinds: images, build-cache, pulled-images (comma-separated or repeated; default: images and build-cache)
--sandbox, -stext (repeatable)docker or daytona (default: docker when installed, daytona when DAYTONA_API_KEY is set); daytona lists this BENCHFLOW_DAYTONA_OWNER's content snapshots
--older-thantextOnly what was created longer ago than this (e.g. 30d, 12h); the age is the creation time, not the last use
--jsonflagPrint JSON on stdout; notes go to stderr

bench cache clean

Print what would be removed; remove it with --remove.

What something still uses stays, with the reason.

Examples:

Shell
bench cache clean                            # what would be removed
bench cache clean --only images --remove     # remove idle cached layers
bench cache clean --only pulled-images --remove
Output
bench cache clean [OPTIONS]

Options

OptionTypeDefaultHelp
--onlytext (repeatable)Only these kinds: images, build-cache, pulled-images (comma-separated or repeated; default: images and build-cache)
--sandbox, -stext (repeatable)docker or daytona (default: docker when installed, daytona when DAYTONA_API_KEY is set); daytona lists this BENCHFLOW_DAYTONA_OWNER's content snapshots
--older-thantextOnly what was created longer ago than this (e.g. 30d, 12h); the age is the creation time, not the last use
--jsonflagPrint JSON on stdout; notes go to stderr
--removeflagRemove what is listed; without it, nothing is removed

bench eval

Run agents on tasks (smoke, run) and read the results (metrics, view, inspect, compare).

Output
bench eval [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
smokeRun a bundled hello-world task once per credentialed agent, one at a time.
runRun an evaluation; single task or batch.
adoptAdopt an external benchmark into benchflow.
compare-liftCompare paired baseline vs trained eval job directories.
scoreRetry a failed reviewer using the saved workspace and trajectory.
regradeRe-run the task's current verifier on each trial's frozen workspace.
listList the jobs in a jobs folder, one row each, with their scores.
metricsCollect and display metrics from a jobs directory.
viewView a trial or session trajectory in the browser.
continueResume a previous unfinished (timed-out) OpenHands run to completion.
branchFork an agent run at a checkpoint into labelled children.
inspectRead a finished job or trial: denominators, one row per trial, or --json.
comparePair two jobs by task: rewards, deltas, fair denominators, setting checks.
resumeFinish an interrupted job from its folder: rerun only the unfinished tasks.
branchesShow every fork and child of a job's (or one trial's) branches: request, status, reward, advantage, tokens, USD and sandbox-seconds.

bench eval smoke

Run a bundled hello-world task once per credentialed agent, one at a time.

Checks the machine first (as bench doctor), then runs each agent in its own bench eval run, prints agent, reward, time and trajectory path, and exits 1 unless every run scores 1.0.

Output
bench eval smoke [OPTIONS]

Options

OptionTypeDefaultHelp
--agenttext (repeatable)Agent to smoke, as NAME or NAME=MODEL; repeatable. Default: every agent bench doctor found a working credential for (claude, codex, gemini).
--sandboxtextdockerSandbox: docker (default) or daytona.
--jobs-dirpathjobs/smokeParent directory; each smoke writes a timestamped folder here.
--timeout-secinteger range900Kill a run that takes longer than this many seconds.

bench eval run

Run an evaluation; single task or batch.

Output
bench eval run [OPTIONS]

Options

OptionTypeDefaultHelp
--config, --run-configpathYAML run-config file (the whole run spec)
--tasks-dirpathLocal tasks directory
--source-repotextGitHub repo of the tasks as org/repo (e.g. benchflow-ai/skillsbench)
--source-pathtextFolder in the repo: one task (tasks/econ-detrending-correlation) or a folder of tasks (tasks). Only this folder is downloaded
--source-reftextBranch, tag or full commit SHA to fetch (e.g. main)
--source-envtextHosted environment source (e.g. primeintellect/general-agent)
--source-env-versiontextHosted environment version
--source-env-argtext (repeatable)Hosted environment arg as KEY=VALUE; repeatable
--source-env-num-examplesinteger1Number of env examples
--source-env-rollouts-per-exampleinteger1Rollouts per hosted env example
--source-env-max-tokensinteger1024Max tokens for hosted env run
--source-env-temperaturenumberTemperature for hosted env run (default: none sent, so the provider's own)
--source-env-sampling-argtext (repeatable)Hosted env sampling arg as KEY=VALUE; repeatable (e.g. reasoning_effort=minimal)
--source-env-verifiers-versiontextPin the verifiers release installed with the hosted env (default: the env package's own requirement)
--source-env-base-urltextModel endpoint for the hosted env run (default: verifiers' own, Prime inference with PRIME_API_KEY)
--source-env-api-key-vartextName of the environment variable holding that endpoint's API key
--agent, -atextAgent: claude, codex, gemini, … (bench agents), oracle (the task's reference solution) or nop (does nothing)
--model, -mtextModel id for the agent, e.g. claude-haiku-5-5 (none for oracle and nop)
--reasoning-efforttextAgent reasoning/thinking effort when the agent exposes one (e.g. max)
--harnesstextHow the agent runs: acp (default, its ACP adapter) or native (its own CLI in headless JSON mode; claude-agent-acp and codex-acp)
--sandbox, -stextSandbox: docker, remote-docker, daytona, modal, apple-container, or agentcore
--usage-trackingtextTelemetry-enforcement policy: auto, required, or off. The LiteLLM proxy is always used for routable agents (usage, cost, and llm_trajectory.jsonl are always captured); this flag only controls whether trusted telemetry is required.
--environment-manifestpathEnvironment-plane manifest applied to every rollout: a path to an environment.toml, OR a 'name@version' registry spec resolved via $BENCHFLOW_ENV_REGISTRY when set, else the built-in registry shipped with benchflow (env0@prod, env0@outage). The manifest-declared stateful environment is provisioned, gated on readiness, and torn down.
--statetextThe stateful environment to bind, apart from the task. Inline JSON with an optional tool subset (e.g. {"name": "env0", "tools": ["gmail", "gcal"]}), OR a name@version spec, OR a manifest path. Takes precedence over --environment-manifest.
--prompttext (repeatable)Prompt(s) to send (default: the task prompt: the task.md body, or instruction.md for older tasks)
--config-overridetextDeep-merge a config patch into each task's resolved config for this run. Inline JSON/YAML/TOML or an @file ref, e.g. --config-override '{"agent":{"timeout_sec":120}}'. Varies one knob (budget, skills, stopping rules) while the tasks, agent, model and environment stay fixed; recorded by content hash for replay.
--concurrency, -jintegerTrials running at a time. On Docker a job also prepares up to --warm-pool sandboxes ahead (default 1 when this is 2 or more)
--build-concurrencyintegerMax concurrent docker image builds. Defaults to --concurrency. Set lower (e.g. 8) when --concurrency is high to avoid overwhelming the docker daemon with parallel builds.
--warm-poolintegerDocker: how many sandboxes to prepare ahead of their trial's turn, beyond the --concurrency running ones (0 to --concurrency; default 1, or 0 when --concurrency is 1)
--worker-concurrencyintegerRun batch eval through isolated worker subprocesses, each with at most this many concurrent tasks; --concurrency remains the aggregate target.
--worker-retriesinteger1Retry a crashed worker shard this many times, resuming its jobs_dir.
--worker-start-stagger-secnumber1.0Seconds to stagger worker starts to avoid Daytona connection storms.
--agent-idle-timeout, --idle-timeouttextAbort a prompt when the agent is silent this long: seconds, or 90s, 10m, 1h; 0, none or null turns it off and leaves the task's wall-clock timeout (default: 10m, 30m at effort xhigh or max)
--checkpointstextKeep a sandbox snapshot after these prompts: every-prompt or prompt:N[,M]. Later bench branch --from-checkpoint <trial> forks from one. Docker, or Daytona direct; each is a full filesystem image. See docs/train/environment.md
--checkpoint-keepinteger rangeKeep at most this many checkpoints per trial (default 3, or a run config's checkpoint_keep); the oldest is deleted.
--freeze-workspaceflagSave each trial's final workspace and declared artifacts (evidence/, with a manifest) before the verifier runs, so bench regrade can re-score it with a changed verifier.
--keep-sandbox (0.10)textKeep a trial's sandbox: on-failure, always or never (default). bench sandbox attach <trial> opens a shell in it; bench sandbox release <trial> deletes it.
--accept-deviations (0.10)textWhy this run differs from its task set's run-reference.toml (a strict one refuses the run without it); kept in run-card.json.
--fresh-installflagInstall the model proxy and the agent in every trial instead of starting from their cached image layers (same as BENCHFLOW_FRESH_INSTALL=1)
--allow-cloud-metadataflagLet the agent reach the cloud metadata endpoints under an open network (no block; each trial records the opt-out). Without it, or the task's allow_cloud_metadata = true, the agent starts only once the block is proven on
--integritytextoff, audit (record what the agent did and check it against the task) or strict (audit, and the verifier in a separate sandbox). The verdict is in integrity/claim_verdict.json; rewards never change.
--verifier-sandboxtexttask (default: each task's own choice) or separate: every verifier in a fresh sandbox with only the workspace and the declared artifacts; a task that cannot run there refuses the run.
--retry-from-checkpointtexton-failure, on-timeout, or both: when a trial fails or times out, fork one retry from its last --checkpoints snapshot, verified the same way. The trial's reward is kept; the retry's is reported next to it (result.json retry block, summary checkpoint_retries).
--retry-prompttextPrompt for the retry, replacing the prompts after the checkpoint (the default). '@instruction' is the task instruction, '@verifier_feedback' the failed trial's reward and verifier output tail.
--max-cost-usdnumberJob budget in USD, checked between starts, so a job can pass it by about one rollout's cost; at the cap running rollouts are cancelled. With --trials, each repeat has its own cap
--max-sandbox-secondsnumberJob budget in trial wall-clock seconds, running trials included and re-checked as they run; same stop/cancel behaviour as --max-cost-usd
--max-tokensintegerJob budget in tokens, checked between starts like --max-cost-usd. With --trials, each repeat has its own cap
--max-rolloutsintegerJob budget in rollouts started, retries included: at the cap no rollout starts and running ones finish
--token-budget (0.10)integerPer-trial budget in tokens (input, cached included, plus output), subagents' calls included: BenchFlow's model proxy refuses the next model call once it is spent, the agent is stopped and its work graded. Replaces a task's [agent] token_budget
--turn-budget (0.10)integerPer-trial budget in turns, one turn being one model call through BenchFlow's model proxy (subagents' and side calls included); enforced like --token-budget. Replaces a task's [agent] turn_budget
--retry-resume-sessionflagThe retry resumes the failed trial's conversation at the checkpoint (ACP session/load; Claude Code) instead of a fresh session.
--quietflagPrint only warnings, errors and the final score: no Rich dashboard on a TTY, no progress heartbeat (the '… Nmin, K tool calls' lines) and no per-trial log lines
--jobs-dirtextOutput directory (default jobs); a plain run resumes its latest job
--freshflagStart a new timestamped job instead of resuming the latest job in --jobs-dir (the default reuses its finished tasks)
--job-nametextJob folder name under --jobs-dir (resumed if it exists)
--restart-changed (0.10)flagWhen the named job ran with other settings or task files, set those trials aside and run them again (default: refuse)
--fail-undernumberExit 1 when the pass rate (passed / planned tasks; one a budget kept from running counts as not passed) is below this, e.g. 0.8
--fail-ontext (repeatable)Exit 1 when any trial ended this way: timeout, error, verifier-error (comma-separated or repeated)
--summary-outpathWrite the run's benchflow.run-summary JSON (job dir, counts, gate) here
--codex-apps-policytextCodex account Apps: disabled (scored-task default) or inherit (explicit opt-in).
--sandbox-usertextagentSandbox user (null for root)
--sandbox-setup-timeoutintegerTimeout (seconds) for sandbox user setup inside the environment (default: 120; keeps the file's value with --config).
--context-rootpathRepo/build-context root used to stage Dockerfile COPY sources for monorepo-authored local tasks.
--base-image-overridetextRewrite task Dockerfile FROM images on the runtime task copy. Use only for reproducing runs whose base image moved namespaces.
--separate-verifierflagRun each verifier in a fresh sandbox built from the verifier image that receives only the frozen workspace, declared artifacts and /logs/artifacts, as if every task set [verifier].sandbox_mode = 'separate'. Docker, remote-docker, Daytona and Modal.
--separate-verifier-includetext (repeatable)A path outside the workspace that a separate verifier sandbox receives too, at the same path, for tasks whose agent writes graded files there (e.g. /root when the workspace is /app). Repeatable.
--skills-dirpathSkills directory to deploy
--skill-modetextno-skillSkill mode: no-skill, with-skill, or self-gen
--skill-creator-dirpathPath to skill-creator or a skills root containing it
--self-gen-no-internetflagDisable web tools for the self-generated run
--loop-strategytextHarness loop strategy, e.g. 'verify-retry:k=3,feedback=names', 'self-review:k=3', or 'single-shot' (default). verify-retry re-prompts with filtered soft-verifier feedback; self-review re-prompts the agent to critique its OWN work (no verifier signal); both loop until the soft verifier passes or k retries are spent.
--reviewer-agenttextRubric reviewer harness
--reviewer-modeltextRubric reviewer model
--reviewer-reasoning-efforttextRubric reviewer reasoning effort
--reviewer-sandboxtextRubric reviewer sandbox backend
--reviewer-timeout-secinteger rangeReviewer execution budget in seconds
--reviewer-idle-timeouttextAbort a reviewer prompt after this many idle seconds (default: 600). Pass 0 or 'none' to disable the idle watchdog and leave --reviewer-timeout-sec in charge.
--reviewer-storage-mb (0.10)integer rangeReviewer sandbox disk in MB (default: the evidence it holds plus 2048, at least 4096, at most the sandbox backend's limit)
--reviewer-memory-mb (0.10)integer rangeReviewer sandbox memory in MB (default: 2048)
--reviewer-setup-timeout (0.10)integer rangeSeconds for the reviewer sandbox's setup, its model proxy install among it (default: the run's --sandbox-setup-timeout)
--reviewer-evidence-timeout (0.10)integer rangeSeconds to unpack, and again to check, the workspace evidence in the reviewer sandbox (default: 1 per MiB, at least 600)
--reviewer-concurrencyinteger rangeMax concurrent rubric reviewers
--reviewer-imagetextRubric reviewer container image
--reviewer-agent-envtext (repeatable)Reviewer environment variable (KEY=VALUE)
--reviewer-open-networkflagAllow unrestricted reviewer network access
--agent-envtext (repeatable)Agent env var (KEY=VALUE)
--allow-task-envtext (repeatable)Let tasks read this variable of your environment (a ${NAME} env value, or their docker-compose.yaml); repeatable. A task reading an unnamed one is refused; ${NAME:-default} gets the default
--include, -itext (repeatable)Only run these task names; repeatable (e.g. --include jax-computing-basics --include data-to-d3)
--exclude, -xtext (repeatable)Skip these task names; repeatable (e.g. --exclude quantum-numerical-simulation)
--dataset, -dtextRegistry dataset to run, as <name>@<version> (e.g. skillsbench@1.1). Resolves the pinned snapshot and verifies task content digests.
--registrytextDataset registry JSON URL or local file, or a BenchFlow Hub as hub:<url> (default: BenchFlow's registry, then $BENCHFLOW_HUB_URL). Only valid with --dataset.
--ignore-bench-versionflagRun a dataset even when this bench version is outside the range it was validated against. Only valid with --dataset.
--task-manifest-outpathWrite selected task-set manifest JSON
--run-config-outpathWrite redacted normalized run config JSON
--health-summary-outpathWrite trajectory health summary JSON
--expected-tasksintegerFail unless the selected task count matches
--canonicalizetextnoneCanonicalization policy: none or one-healthy-per-task
--canonical-selection-outpathWrite canonical rollout-selection JSON
--canonical-jobs-dirpathMaterialize selected rollout dirs for trainer conversion
--retry-policytextdefaultRetry policy: default or unscored-only
--retry-attemptsintegerRetries per task after a retryable failure (overrides the default of 2)
--retry-concurrencyintegerReserved retry concurrency
--publish-hftextUpload final eval artifacts to a HF dataset repo
--hf-prefixtextPath prefix in the HF repo
--hf-public-read-checkflagVerify public HF reads after upload
--publish-buckettextUpload final eval artifacts to a HF bucket
--eval-results-modeltextHF model repo to open a community eval-results PR on
--eval-results-datasettextHF benchmark dataset id, e.g. org/benchmark
--eval-results-tasktextBenchmark task_id from the dataset's eval.yaml
--matrixpathYAML file whose models: maps each alias to a model, or to {model, agent, agent_env}; {agent: oracle} for a control (docs/audit/compare-runs.md#choose-the-metric)
--trialsinteger1Run every task N times (pass@k); each repeat is a job of its own, in <jobs dir>/<agent>/trial-NN
--limit, --n-tasks, -nintegerRun at most N tasks after --include/--exclude: the first N, or a seeded random sample with --sample-seed
--sample-seedintegerSeed for the --n-tasks random sample
--timeout-multipliernumberScale every task's agent time budget (task.md agent.timeout_sec), e.g. 2.0
--extra-instructiontextText appended to every task prompt (prompt ablations; recorded per rollout)
--dry-runflagResolve the plan (agent, model, selected tasks, seeds, budgets) and print it without running; exits 1 when the run card would refuse the run. In 0.9.2 it prints the plan only, with no run card.
--seedstextSeeded rollouts: run every task once per seed, e.g. 0-4 or 0,3,7 (tasks in a task format that writes seeded variants, such as embodied tasks). summary.json gets pass@k and variance per task.

bench eval adopt

Adopt an external benchmark into benchflow.

Default (convert): bench eval adopt <source> scaffolds benchmarks/<name>/ if missing, then drives the codex conversion. --scaffold-only only writes the package; --verify runs the parity gate for the named benchmark.

Output
bench eval adopt [OPTIONS] [TARGET]
ArgumentTypeRequiredHelp
TARGETtextnoIn convert mode (default) the SOURCE repo/path to adopt; in --verify / --scaffold-only mode the benchmark SLUG.

Options

OptionTypeDefaultHelp
--nametextBenchmark slug for convert mode (default: derived from source)
--verifyflagRun the parity gate for the named benchmark
--scaffold-onlyflagOnly scaffold the package, do not convert
--modeltextModel for the codex driver
--dry-runflagPrint the launch command, do not run
--codex-bintextcodexHost codex binary
--codex-config, -ctext (repeatable)Codex config override as key=value, passed to codex as -c key=value; repeatable (e.g. -c service_tier=flex to work around host ~/.codex/config.toml drift)
--benchmarks-dirpathTarget benchmarks/ directory
--tolerancenumber0.02Max abs reward delta (statistical)
--issue-outpathWrite the divergence issue draft here
--roundtrip-taskpathAlso run the structural round-trip check on this task dir
--rerunflagIndependently re-execute parity_test.py --mode side-by-side and score its fresh output, instead of the recorded parity_experiment.json

bench eval compare-lift

Compare paired baseline vs trained eval job directories.

Output
bench eval compare-lift [OPTIONS]

Options

OptionTypeDefaultHelp
--baselinedirectoryBaseline BenchFlow job directory. Required.
--traineddirectoryTrained BenchFlow job directory. Required.
--outpathMarkdown report output path. Required.
--json-outpathJSON report output path. Required.
--bootstrap-samplesinteger range1000Bootstrap samples for paired delta confidence intervals.
--bootstrap-seedinteger0Deterministic seed for bootstrap confidence intervals.
--allow-duplicate-first-by-pathflagAllow duplicate healthy task rollouts and keep the first by deterministic path order.

bench eval score

Retry a failed reviewer using the saved workspace and trajectory.

Output
bench eval score [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA saved task rollout directory

Options

OptionTypeDefaultHelp
--tasks-rootpathTrusted original task directory or collection Required.
--forceflagCreate a new revision even if scoring already completed
--reviewer-agenttextRubric reviewer harness
--reviewer-modeltextRubric reviewer model
--reviewer-reasoning-efforttextRubric reviewer reasoning effort
--reviewer-sandboxtextRubric reviewer sandbox backend
--reviewer-timeout-secinteger rangeReviewer execution budget in seconds
--reviewer-idle-timeouttextAbort a reviewer prompt after this many idle seconds (default: 600). Pass 0 or 'none' to disable the idle watchdog and leave --reviewer-timeout-sec in charge.
--reviewer-storage-mb (0.10)integer rangeReviewer sandbox disk in MB (default: the evidence it holds plus 2048, at least 4096, at most the sandbox backend's limit)
--reviewer-memory-mb (0.10)integer rangeReviewer sandbox memory in MB (default: 2048)
--reviewer-setup-timeout (0.10)integer rangeSeconds for the reviewer sandbox's setup, its model proxy install among it (default: the run's --sandbox-setup-timeout)
--reviewer-evidence-timeout (0.10)integer rangeSeconds to unpack, and again to check, the workspace evidence in the reviewer sandbox (default: 1 per MiB, at least 600)
--reviewer-concurrencyinteger rangeMax concurrent rubric reviewers
--reviewer-imagetextRubric reviewer container image
--reviewer-agent-envtext (repeatable)Reviewer environment variable (KEY=VALUE)
--reviewer-open-networkflagAllow unrestricted reviewer network access

bench eval regrade

Re-run the task's current verifier on each trial's frozen workspace.

The new score is written beside the original (regrade.json in each trial, regrade-summary.json in PATH); result.json is never changed. Trials whose workspace was not frozen (--freeze-workspace) are listed as not regradable.

Output
bench eval regrade [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA job folder, or one trial folder inside it

Options

OptionTypeDefaultHelp
--tasks-dirpathFolder of task folders (or one task folder) holding the changed verifiers. Default: the task path each trial recorded.
--sandboxtextBackend for the fresh sandboxes (default: as run)
--concurrencyinteger range4Trials regraded at once
--reasontextWhy the verifier changed; kept in each block
--jsonflagPrint the summary as JSON
--review (0.10)flagAlso rerun each trial's rubric review on its saved outputs, gated by the new test, and compare the combined score. The reviewer is the one the trial recorded, changed by --reviewer-*
--reviewer-agent (0.10)textRubric reviewer harness
--reviewer-model (0.10)textRubric reviewer model
--reviewer-reasoning-effort (0.10)textRubric reviewer reasoning effort
--reviewer-sandbox (0.10)textRubric reviewer sandbox backend
--reviewer-timeout-sec (0.10)integer rangeReviewer execution budget in seconds
--reviewer-idle-timeout (0.10)textAbort a reviewer prompt after this many idle seconds (default: 600). Pass 0 or 'none' to disable the idle watchdog and leave --reviewer-timeout-sec in charge.
--reviewer-storage-mb (0.10)integer rangeReviewer sandbox disk in MB (default: the evidence it holds plus 2048, at least 4096, at most the sandbox backend's limit)
--reviewer-memory-mb (0.10)integer rangeReviewer sandbox memory in MB (default: 2048)
--reviewer-setup-timeout (0.10)integer rangeSeconds for the reviewer sandbox's setup, its model proxy install among it (default: the run's --sandbox-setup-timeout)
--reviewer-evidence-timeout (0.10)integer rangeSeconds to unpack, and again to check, the workspace evidence in the reviewer sandbox (default: 1 per MiB, at least 600)
--reviewer-concurrency (0.10)integer rangeMax concurrent rubric reviewers
--reviewer-image (0.10)textRubric reviewer container image
--reviewer-agent-env (0.10)text (repeatable)Reviewer environment variable (KEY=VALUE)
--reviewer-open-network (0.10)flagAllow unrestricted reviewer network access

bench eval list

List the jobs in a jobs folder, one row each, with their scores.

Output
bench eval list [OPTIONS] [JOBS_DIR]
ArgumentTypeRequiredHelp
JOBS_DIRpathnoJobs directory to list (default: ./jobs)

bench eval metrics

Collect and display metrics from a jobs directory.

One row per trial, as bf.load_job counts them: a retried task of an Evaluation job counts once, and repeated rollouts (a bf.run_batch folder, the trial-NN folders of --matrix --trials) count as separate trials. pass@k / pass^k pool a task's trials across every job folder under the directory. Every figure counts every trial, an unscored one as a fail; with unscored trials, the scored-only figures (unscored trials left out, as BenchFlow 0.7's mean_reward was) follow with their own n. Control runs are left out of the solve rates unless --include-controls, or unless the folder holds nothing else. The score follows the scoring rule benchflow.score.v1, with a 95% interval over tasks. The trials are split by what ran: agent, harness version, served model, route, effort sent, task set and BenchFlow version. A folder of several settings gets one line per setting and no pooled score, since one number would mix them. When the pooled trials differ in agent, model or a setting bench eval compare checks, a warning names it and a table splits the trials by agent.

Output
bench eval metrics [OPTIONS] JOBS_DIR
ArgumentTypeRequiredHelp
JOBS_DIRpathyesJobs directory to analyze

Options

OptionTypeDefaultHelp
--benchmarktextBenchmark name
--agenttextAgent name
--modeltextModel name
--jsonflagOutput as JSON
--kinteger (repeatable)k for pass@k and pass^k (repeatable; default 1, powers of two and multiples of five, using both trial and scored-only counts)
--solve-thresholdnumberCount a scored trial as solved when reward >= this value (partial credit); default: solved = passed (reward 1)
--include-controlsflagCount control runs (oracle, empty/nop) in the solve rates and pass@k; a folder of only control runs counts them anyway

bench eval view

View a trial or session trajectory in the browser.

Output
bench eval view [OPTIONS] ROLLOUT_DIR
ArgumentTypeRequiredHelp
ROLLOUT_DIRtextyesRollout directory, job directory, trajectory JSONL file, or an hf://<org>/<dataset> trajectory dataset (optionally with /subpath)

Options

OptionTypeDefaultHelp
--portinteger8888Server port
--confirmflagShow an Approve & submit / Not this one bar on the page; print DECISION: approved|rejected and exit 0 on approve, 3 on reject.
--redaction-summarytextMasked-secret breakdown shown in the --confirm bar, e.g. '2 API keys, 1 bearer token' (lift it from bench traj upload PATH --dry-run). Display-only; no effect without --confirm.

bench eval continue

Resume a previous unfinished (timed-out) OpenHands run to completion.

Output
bench eval continue [OPTIONS] FOLDER
ArgumentTypeRequiredHelp
FOLDERpathyesOriginal run output folder (contains config.json + trajectory/llm_trajectory.jsonl).

Options

OptionTypeDefaultHelp
--tasks-dirpathDirectory holding the task source (instruction + verifier). Required unless the recorded task_path still exists on disk.
--modeltextOverride the live-continuation model (default: the original run's model).
--timeoutintegerWall-clock budget for the continuation, in seconds (default: the original run's timeout).
--outputpathOutput jobs dir for the new run (default: <orig-parent>/continued).
--require-timeout, --no-require-timeoutflagRefuse runs whose recorded status is not a timeout.
--strict-divergence, --no-strict-divergenceflagAbort if replay leaves the original rails (message-count mismatch) instead of warning.
--replay-only, --no-replay-onlyflagRebuild the env via replay and stop at the cut-point (no live model needed); useful for testing.
--proxy-modetextautoReplay proxy placement: auto, host, or sandbox. Auto uses sandbox-local replay for Daytona/Modal and host replay for Docker.

bench eval branch

Fork an agent run at a checkpoint into labelled children.

Each task runs once up to the checkpoint; the sandbox (and, when asked, declared environment state) is snapshotted; every --child starts from that snapshot with a fresh agent session (child prompts must stand alone unless --resume-session reloads the parent's conversation) and is scored by the task's verifier. The job folder has the usual layout plus, per trial, tree.json and branches/<fork>/children/<node>/observation.json.

Example:

bench branch --tasks-dir tasks/my-task --agent claude-agent-acp --sandbox daytona --prompt "Write draft.txt containing: Hello world" --prompt @instruction --checkpoint-after-prompt 1 --child "label=baseline" --child "label=hint,prompt=Rename draft.txt."

Output
bench eval branch [OPTIONS]

Options

OptionTypeDefaultHelp
--tasks-dirpathA task directory, or a directory of tasks (run one after another).
--agenttextAgent name, or 'oracle' (children run the task's solve.sh). Default: the checkpoint's agent with --from-checkpoint, else claude-agent-acp.
--model, -mtextModel id for the agent, e.g. claude-haiku-5-5 (none for oracle and nop)
--reasoning-efforttextAgent reasoning effort (e.g. max)
--harnesstextHow the agent runs: acp (default, its ACP adapter) or native (its own CLI in headless JSON mode; claude-agent-acp and codex-acp)
--sandboxtextdocker or daytona (Daytona direct mode snapshots). Default: docker, or the checkpoint's provider.
--prompttext (repeatable)Parent prompt; repeatable, sent in order. '@instruction' is the task's instruction. Default: the task's prompts.
--checkpoint-after-promptintegerBranch after this many parent prompts (0: before the first). Default 1; 0 for the oracle and with --from-checkpoint.
--childtext (repeatable)One child, as label=NAME[,parent=LABEL][,prompt=TEXT|,prompt-file=PATH]; give at least two. prompt= takes the rest of the option (commas allowed). parent=LABEL forks this child from child LABEL's state after LABEL has run its prompts (a nested fork of at least two children). Without a prompt the child runs the parent's remaining prompts, or the task's prompts when the checkpoint is after the last one.
--snapshot-layerstextsandboxWhat the checkpoint captures: sandbox (container filesystem), environment (declared database state, needs a manifest), or both.
--parenttextcontinue: restore the parent world after the children, send the remaining prompts and verify. discard: skip that restore (one fewer), leave the parent unverified. Default: continue, or discard with --from-checkpoint.
--retain-snapshotsflagKeep the checkpoint's sandbox snapshot so a later --from-checkpoint can branch from it again (otherwise deleted). bench sandbox cleanup removes kept Daytona snapshots once stale.
--from-checkpointpathA trial folder from an earlier bench branch --retain-snapshots run: branch again from its kept sandbox snapshot. Needs --tasks-dir holding the same task.
--checkpoint, --forktextWith --from-checkpoint: a fork id from tree.json or an automatic checkpoint as prompt:N (default: the last kept fork, else the last kept checkpoint).
--checkpointstextAlso keep a sandbox snapshot after these parent prompts (every-prompt or prompt:N[,M]) for a later --from-checkpoint.
--checkpoint-keepinteger range3Keep at most this many --checkpoints per trial.
--resume-sessionflagChildren resume the parent's agent conversation (ACP session/load) instead of starting fresh, so a child prompt can say 'continue'. Needs an agent that advertises loadSession and keeps its session on disk (Claude Code), and a checkpoint after prompt 1+.
--child-retriesinteger range1Retry a child this many times when it failed before its agent did anything (a provider hiccup such as a connect timeout).
--stop-on-child-failureflagStop a fork at the first child that fails for good (default: the other children still run and the fork is partial).
--concurrencyinteger range1Run up to this many children of a fork at once, each in its own sandbox created from the snapshot (implies --isolate-children).
--isolate-childrenflagRun each child in its own sandbox created from the snapshot instead of restoring the parent's sandbox between children. Implied by --concurrency > 1 and by nested children.
--agent-envtext (repeatable)Agent env var (KEY=VALUE); repeatable
--includetext (repeatable)Only these task names; repeatable
--jobs-dirpathjobsOutput directory
--job-nametextJob folder name (default: branch-<time>)

bench eval inspect

Read a finished job or trial: denominators, one row per trial, or --json.

The same data as bf.load_job / bf.load_trial; control runs (oracle, empty) are counted apart. Reads files only.

Output
bench eval inspect [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHtextyesA job folder, a trial folder, a results.jsonl file, or a glob of folders

Options

OptionTypeDefaultHelp
--jsonflagPrint the benchflow.job (or benchflow.trial) JSON document
--trajectoriesflagInclude trajectories in the JSON
--verifier, --no-verifierflagTrueInclude verifier output (test logs) in the JSON
--attemptstextbestbest (one per task, as resume picks) or all
--outpathWrite the output to this file
--bytextAlso print denominators per group, e.g. agent,model
--include-controlsflagCount control runs (oracle, empty) in the denominators
--csvpathAlso write one CSV row per trial to this file

bench eval compare

Pair two jobs by task: rewards, deltas, fair denominators, setting checks.

The same code as bf.compare. Each paired task is checked for comparable settings (task digest, model, harness, dataset, reasoning effort, sandbox, sandbox user, timeout, agent variables, prompts); declare the settings the comparison is about with --vary. Reads files only.

Output
bench eval compare [OPTIONS] JOB_A JOB_B
ArgumentTypeRequiredHelp
JOB_AtextyesSide A: a job folder, a trial, or a glob of folders
JOB_BtextyesSide B

Options

OptionTypeDefaultHelp
--jsonflagPrint the benchflow.comparison JSON document
--labels<text text>Names for the two sides
--varytext (repeatable)A setting the comparison is about (repeatable), e.g. model
--on-mismatchtextwarnwarn (default), raise (exit 1) or ignore an undeclared setting difference
--include-controlsflagKeep control runs (oracle, empty)
--attemptstextbestbest or all
--outpathWrite the output to this file
--bytextPair on these keys as well as the task, e.g. agent,model
--kinteger (repeatable)k for pass@k and pass^k (repeatable)
--solve-thresholdnumberSolved = reward >= this value (partial credit); default: passed

bench eval resume

Finish an interrupted job from its folder: rerun only the unfinished tasks.

Reads the tasks directory and config the job recorded in evaluation.json (no agent_env value that looks secret, so pass those again with --agent-env), then runs the tasks with no finished result. A job that is still running is refused. Exit codes as for bench eval run; 2 when the folder is not a job, or when its trials ran with other settings or task files than this resume has (an --agent-env value, an edited task): --restart-changed runs them again.

Output
bench eval resume [OPTIONS] JOB_DIR
ArgumentTypeRequiredHelp
JOB_DIRpathyesThe job folder to finish

Options

OptionTypeDefaultHelp
--agent-envtext (repeatable)KEY=VALUE for the agent (repeatable); values that look secret are never stored in the job
--concurrencyintegerOverride the job's concurrency
--restart-changed (0.10)flagWhen the job's trials ran with other settings or task files than this resume, set them aside in <job>/.set-aside/ and run them again (default: refuse)

bench eval branches

Show every fork and child of a job's (or one trial's) branches: request, status, reward, advantage, tokens, USD and sandbox-seconds.

Output
bench eval branches [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA trial folder or a job folder.

Options

OptionTypeDefaultHelp
--jsonflagPrint the benchflow.branch-view/1 documents (a JSON list, one per branched trial); see docs/train/environment.md.

bench tasks

Task authoring commands.

Output
bench tasks [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
generateGenerate benchmark tasks from agent traces.
list-sourcesList known HuggingFace trace datasets.
initScaffold a new benchmark task.
checkValidate task structure and the run's plan without starting a sandbox.
overlapCompare two task manifests for exact task-id and digest overlap.
migrateConvert task.toml + instruction.md into the unified task.md format.
normalizeExpand minimal task.md authoring profiles into canonical task.md.
exportExport a task to a compatibility split layout with a loss report.
snapshot-hfMaterialize a Hugging Face dataset task tree with provenance.
digestCompute the content digest that pins a task's files, independent of git.

bench tasks generate

Generate benchmark tasks from agent traces.

Exactly one source flag (--from-local, --from-file or --from-hf) is required.

Examples:

Shell
bench tasks generate --from-local
bench tasks generate --from-local --project my-repo --limit 5
bench tasks generate --from-file session.jsonl --dry-run
bench tasks generate --from-hf opentraces-test --limit 50 --outcome success
Output
bench tasks generate [OPTIONS]

Options

OptionTypeDefaultHelp
--from-localflagGenerate from local Claude Code sessions (~/.claude/projects/)
--from-filepathGenerate from a JSONL trace file (Claude Code or opentraces)
--from-hftextGenerate from a HuggingFace dataset (ID or alias; run bench tasks list-sources for aliases)
--outputpathtasksOutput directory for generated tasks
--projects-dirpathClaude Code projects directory (default: ~/.claude/projects/)
--projecttextFilter local sessions by project path substring
--formattextautoTrace format override: auto, claude-code, opentraces, claude-messages
--splittexttrainHuggingFace dataset split
--max-rowsinteger100Max rows to download from HuggingFace
--limitinteger20Max traces to process
--min-stepsinteger2Minimum steps per trace
--outcometextFilter by outcome: success, failure, unknown
--authortextbenchflow-tracesAuthor name written into each generated task
--task-formattexttask-mdGenerated task package format: task-md or legacy
--dry-runflagPreview traces without generating tasks

bench tasks list-sources

List known HuggingFace trace datasets.

These aliases can be passed to bench tasks generate --from-hf.

Output
bench tasks list-sources [OPTIONS]

bench tasks init

Scaffold a new benchmark task.

Output
bench tasks init [OPTIONS] NAME
ArgumentTypeRequiredHelp
NAMEtextyesTask name

Options

OptionTypeDefaultHelp
--dirpathtasksParent directory (default: tasks/)
--no-pytestflagSkip pytest template
--no-oracle, --no-solutionflagSkip oracle template
--formattexttask-mdTask format. New tasks use task-md; legacy scaffolding is retired.

bench tasks check

Validate task structure and the run's plan without starting a sandbox.

Warnings (e.g. task.toml keys BenchFlow does not know) are printed but do not fail the check.

Output
bench tasks check [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory or folder of tasks

Options

OptionTypeDefaultHelp
--levelschema | structural | runtime-capability | publication-grade | acceptance | acceptance-live | equivalencestructuralValidation level: schema, structural, runtime-capability, publication-grade, acceptance, acceptance-live, or equivalence (runs the oracle in --sandbox, then grades wrong and value-equivalent variants of its output)
--sandboxtextValidate runtime semantics for docker, remote-docker, daytona, modal, apple-container, or agentcore (default: a sandbox that can run the task: docker, or modal for a task that asks for GPUs)
--report-outputpathWrite the acceptance-live report to this host path instead of the task-declared report path; with --level equivalence, write the battery's JSON report here
--no-report-writeflagValidate acceptance-live without writing the declared report or its .sha256 sidecar (report-only dogfood; leaves the task package unmodified). Takes precedence over --report-output.
--allow-task-envtext (repeatable)Let tasks read this variable of your environment (a ${NAME} env value, or their docker-compose.yaml); repeatable. A task reading an unnamed one is refused; ${NAME:-default} gets the default
--verifier-sandboxtextWith separate: also check what bench run --verifier-sandbox separate checks before it starts (on --sandbox, default docker), with the same refusals, and name where the verifier image comes from
--agenttextclaude-agent-acpAgent to validate, as for eval run
--modeltextModel to validate, as for eval run
--sandbox-usertextagentAgent user to validate, as for eval run

bench tasks overlap

Compare two task manifests for exact task-id and digest overlap.

Output
bench tasks overlap [OPTIONS] LEFT_MANIFEST RIGHT_MANIFEST
ArgumentTypeRequiredHelp
LEFT_MANIFESTpathyesLeft task manifest JSON
RIGHT_MANIFESTpathyesRight task manifest JSON

Options

OptionTypeDefaultHelp
--out, -opathOptional JSON output path

bench tasks migrate

Convert task.toml + instruction.md into the unified task.md format.

Output
bench tasks migrate [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesLegacy task directory

Options

OptionTypeDefaultHelp
--overwriteflagReplace an existing task.md
--remove-legacyflagDelete split files and promote tests/solution aliases after task.md is verified

bench tasks normalize

Expand minimal task.md authoring profiles into canonical task.md.

Output
bench tasks normalize [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory with task.md

Options

OptionTypeDefaultHelp
--output, -opathWrite normalized task.md to this path instead of stdout
--writeflagReplace task.md in place with the normalized canonical form

bench tasks export

Export a task to a compatibility split layout with a loss report.

Output
bench tasks export [OPTIONS] TASK_DIR [OUTPUT_DIR]
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory to export
OUTPUT_DIRpathnoDestination split-layout directory (omit with --report-only)

Options

OptionTypeDefaultHelp
--targettexttask-tomlLayout to write: task-toml
--overwriteflagReplace an existing export directory
--report-onlyflagPrint the compatibility loss report without writing files

bench tasks snapshot-hf

Materialize a Hugging Face dataset task tree with provenance.

Output
bench tasks snapshot-hf [OPTIONS] REPO_ID OUTPUT_DIR
ArgumentTypeRequiredHelp
REPO_IDtextyesHugging Face dataset repo ID, e.g. org/name
OUTPUT_DIRpathyesLocal output directory for the materialized snapshot

Options

OptionTypeDefaultHelp
--ref, --revisiontextDataset revision, branch, tag, or commit
--pathtextOptional subpath inside the dataset repo, e.g. tasks
--cache-dirpathOptional Hugging Face cache directory
--overwriteflagReplace an existing output directory
--include-tasktext (repeatable)Download only this task directory; repeat for multiple tasks

bench tasks digest

Compute the content digest that pins a task's files, independent of git.

Matches the digests in the skillsbench dataset registry (registry.json). Given a single task directory (a legacy task.toml or a native task.md task), prints the digest; given a directory of tasks, prints one "<name> <digest>" line per task.

Output
bench tasks digest [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesPath to a task directory, or a directory of task directories

bench agent

Agent management commands.

Output
bench agent [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
listList all registered agents.
showShow details for a registered agent.

bench agent list

List all registered agents.

Output
bench agent list [OPTIONS]

bench agent show

Show details for a registered agent.

Output
bench agent show [OPTIONS] NAME
ArgumentTypeRequiredHelp
NAMEtextyesAgent name

bench review

Grade finished rollouts against a rubric with a reviewer agent.

Reviews run detached from the rollouts they grade: each review is an ordinary sandboxed rollout of a throwaway wrapper task, evidence is a read-only copy, and results land in review_report.json. The reviewed rollouts' rewards and result.json are never modified.

Output
bench review [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA finished rollout directory, or a job directory of rollouts

Options

OptionTypeDefaultHelp
--rubric, -rpathRubric JSON file. Default: an admitted task copy's verifier/rubric.json (requires --tasks-root and verified digest), else the built-in default rubric.
--prompt, -ppathCustom reviewer instruction template (see benchflow.review.prompts)
--agent, -atextopencodeReviewer agent harness
--model, -mtextReviewer model (default: gemini/gemini-3.5-flash-lite with opencode, else the agent's registry default)
--sandboxtextdockerSandbox: docker, remote-docker, daytona, modal, apple-container, or agentcore
--concurrency, -ninteger4Max concurrent reviews
--passingflagOnly review passing rollouts (reward 1.0)
--failingflagOnly review failing rollouts
--timeout-secinteger1800Reviewer agent timeout per rollout
--agent-envtext (repeatable)KEY=VALUE for the reviewer (repeatable)
--imagetextPrebuilt sandbox image for reviewer rollouts
--tasks-rootpathTrusted directory holding the reviewed tasks. Required to include task definitions in evidence: a task path recorded inside a rollout is untrusted input and is never read directly. Without this, reviews use run records only.
--allow-open-networkflagRun reviewers WITHOUT the no-internet declaration. Required on backends that cannot enforce network isolation (e.g. agentcore); reviews there fail closed by default. The report records the relaxed posture.
--out-dir, -opathReview output directory (default: jobs/review-<ts>)

bench assess (0.10)

Blind pairwise human assessments of saved outputs, kept in an opt-in sidecar.

Two completed attempts of one task, a frozen rubric and judge protocol, a recorded release of every runtime, the review collector's blind assignment and vote, then a deterministic label: 1 (A preferred), 0 (B preferred), 0.5 (tie) or withheld (abstention). Rewards, result.json, regrade.json and rollout streams are never read or changed. See docs/jobs/assessment.md.

Output
bench assess [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
attempt-ref (0.10)Hash a completed rollout into a saved-attempt reference (JSON).
create (0.10)Start an assessment of two saved attempts of one task.
release (0.10)Record that every runtime of both attempts was observed released.
assign (0.10)Bind the collector's persisted blind assignment (after the release).
import-vote (0.10)Bind the collector's vote on the assignment (a skip becomes abstain).
correct (0.10)Replace the effective answer with a corrected one.
retract (0.10)Retract the effective answer; its history stays in the log.
reduce (0.10)Record the deterministic label the log calls for, and refresh the label file.
consume (0.10)Record that a consumer used one exact ready label revision.
withdraw (0.10)Bar a corrected or retracted label revision from future use.
show (0.10)Verify the sidecar's log and print its state.
verify (0.10)Verify the hash chain, the label file and, optionally, the evidence.
label (0.10)Print the label rebuilt from the sidecar's log alone (JSON).

bench assess attempt-ref (0.10)

Hash a completed rollout into a saved-attempt reference (JSON).

Output
bench assess attempt-ref [OPTIONS] ROLLOUT
ArgumentTypeRequiredHelp
ROLLOUTpathyesA completed rollout folder (holds result.json).

Options

OptionTypeDefaultHelp
--output (0.10)pathThe output to compare: a folder or one file. Required.
--review-artifact (0.10)pathThe file a reviewer sees (e.g. a preview image). Required.
--sandbox-provider (0.10)textProvider of result.json's sandbox_id (daytona, docker, modal, …).
--sandbox-role (0.10)textsolversolver, verifier or shared (one sandbox for both).
--runtime (0.10)text (repeatable)Another allocation of this attempt: PROVIDER:RUNTIME_ID[:ROLE]. Repeatable.
--media-type (0.10)textThe review artifact's media type.
--out (0.10)pathWrite the reference here (a new file) instead of stdout.

bench assess create (0.10)

Start an assessment of two saved attempts of one task.

Output
bench assess create [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--attempt (0.10)path (repeatable)A saved-attempt reference file. Give exactly two. Required.
--rubric (0.10)pathThe frozen rubric file. Required.
--rubric-id (0.10)textThe rubric's id. Required.
--rubric-version (0.10)textThe rubric's frozen version. Required.
--protocol (0.10)pathThe frozen judge protocol (benchflow.assessment-judge-protocol.v1). Required.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess release (0.10)

Record that every runtime of both attempts was observed released.

Output
bench assess release [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--proof (0.10)pathObservations that every runtime is gone (benchflow.assessment-release-proof.v1). Required.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess assign (0.10)

Bind the collector's persisted blind assignment (after the release).

Output
bench assess assign [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--collector-db (0.10)pathThe collector's workspace.sqlite3 (a cli.py backup copy), read-only. Required.
--collector-code (0.10)pathThe collector's code folder (design-bench/prototype). Required.
--assignment (0.10)textThe collector's assignment id. Required.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess import-vote (0.10)

Bind the collector's vote on the assignment (a skip becomes abstain).

Output
bench assess import-vote [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--collector-db (0.10)pathThe collector's workspace.sqlite3, read-only. Required.
--collector-code (0.10)pathThe collector's code folder. Required.
--json (0.10)flagPrint JSON instead of one line.

bench assess correct (0.10)

Replace the effective answer with a corrected one.

Output
bench assess correct [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--supersedes (0.10)textThe current effective answer's event id. Required.
--choice (0.10)textleft (A), right (B), tie or abstain. Required.
--reason (0.10)textThe new answer's rationale. Required.
--correction-reason (0.10)textWhy the answer changed. Required.
--actor (0.10)textWho records this (the reviewer's collector name, or an operator). Required.
--actor-role (0.10)textreviewerreviewer (the answer's own) or operator.
--tag (0.10)text (repeatable)A feedback tag. Repeatable.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess retract (0.10)

Retract the effective answer; its history stays in the log.

Output
bench assess retract [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--target (0.10)textThe current effective answer's event id. Required.
--reason (0.10)textWhy it is retracted. Required.
--actor (0.10)textWho records this (the reviewer's collector name, or an operator). Required.
--actor-role (0.10)textreviewerreviewer (the answer's own) or operator.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess reduce (0.10)

Record the deterministic label the log calls for, and refresh the label file.

Output
bench assess reduce [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--json (0.10)flagPrint JSON instead of one line.

bench assess consume (0.10)

Record that a consumer used one exact ready label revision.

Output
bench assess consume [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--revision (0.10)integerThe label revision used. Required.
--consumer (0.10)textThe consumer's id. Required.
--receipt (0.10)textThe consumer's immutable receipt (e.g. a ledger row). Required.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess withdraw (0.10)

Bar a corrected or retracted label revision from future use.

Output
bench assess withdraw [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--revision (0.10)integerThe superseded label revision. Required.
--reason (0.10)textWhy it is withdrawn. Required.
--disposition (0.10)textnot_applicable, queued_compensation or compensated: what its consumers do. Required.
--actor (0.10)textWho records this (the reviewer's collector name, or an operator). Required.
--actor-role (0.10)textoperatoroperator or reducer.
--idempotency-key (0.10)textKey for this write (default: derived from its inputs). A retry with the same key and payload returns the original event.
--json (0.10)flagPrint JSON instead of one line.

bench assess show (0.10)

Verify the sidecar's log and print its state.

Output
bench assess show [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--events (0.10)flagList every event.
--json (0.10)flagPrint JSON instead of one line.

bench assess verify (0.10)

Verify the hash chain, the label file and, optionally, the evidence.

Output
bench assess verify [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--evidence (0.10)flagAlso hash both attempts, the rubric and the protocol again.
--expect-event (0.10)textAn event SHA-256 a receipt holds; the log must still contain it.
--json (0.10)flagPrint JSON instead of one line.

bench assess label (0.10)

Print the label rebuilt from the sidecar's log alone (JSON).

Output
bench assess label [OPTIONS] SIDECAR
ArgumentTypeRequiredHelp
SIDECARpathyesThe assessment's sidecar directory, e.g. <completed-rollout>/assessment.

Options

OptionTypeDefaultHelp
--write (0.10)flagRewrite the label file from the log.
--check (0.10)flagExit 1 unless the label file equals the log's label.

bench preferences (0.10)

Human preferences and rubric scores on finished trials.

pairs makes blind pairs of trial outputs (same task version, different agent or model) for a rater's tool, import takes the votes and rubric scores it collected, and rank gives Bradley-Terry ratings on the Elo scale with rater checks. Votes are never rewards: no trial file is changed. See docs/tasks/human-preferences.md.

Output
bench preferences [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
pairs (0.10)Make the store and the blind assignment.
import (0.10)Check every vote in the file, then add the new ones to the store.
rank (0.10)Ratings from the store's votes (also written to ratings.v1.json).

bench preferences pairs (0.10)

Make the store and the blind assignment.

Output
bench preferences pairs [OPTIONS] [JOBS]...
ArgumentTypeRequiredHelp
JOBSpathnoJob or trial folders whose outputs to pair (none with only --items).

Options

OptionTypeDefaultHelp
--store (0.10)pathA new folder for the preference store. Required.
--out (0.10)pathThe file to write the blind pairs to, for the raters' tool. Required.
--output (0.10)textartifactsWhich folder of each trial the raters compare, relative to the trial (artifacts, or evidence/workspace with --freeze-workspace).
--per-task (0.10)integerAt most this many pairs per task.
--seed (0.10)integerSeed for sampling and sides (default: random, recorded).
--rubric (0.10)pathA rubric JSON file to freeze for aspects and scores.
--bundle (0.10)pathWhere to copy the outputs under their opaque ids for the rating tool (default: <store>-outputs beside the store).
--keep-sides (0.10)flagDo not shuffle which output is shown on the left.
--items (0.10)pathA JSON-lines file of outputs made outside BenchFlow (a golden, a remix), each with its task, output folder and arm labels; they pair with the trials of their task's version.
--condition (0.10)textA condition to label every trial's output with (one-shot, say); --items rows carry their own.
--entry (0.10)textThe page to open in each output, such as index.html; an output without it is left out.
--golden (0.10)textsideWhether a golden from --items is a side in pairs (side) or only the bar a rater's tool shows (bar).

bench preferences import (0.10)

Check every vote in the file, then add the new ones to the store.

Output
bench preferences import [OPTIONS] STORE
ArgumentTypeRequiredHelp
STOREpathyesThe preference store bench preferences pairs made.

Options

OptionTypeDefaultHelp
--votes (0.10)pathVotes as JSON lines or CSV, or the FDB vote site's export (see the docs for the fields). Required.
--source (0.10)textThe tool that collected them, recorded on each vote.
--skip-unknown (0.10)flagLeave out votes on outputs the store doesn't have, instead of refusing the file.
--dry-run (0.10)flagCheck every vote and say what would change; write nothing.

bench preferences rank (0.10)

Ratings from the store's votes (also written to ratings.v1.json).

Output
bench preferences rank [OPTIONS] STORE
ArgumentTypeRequiredHelp
STOREpathyesThe preference store bench preferences pairs made.

Options

OptionTypeDefaultHelp
--by (0.10)textagent+modelRate each agent, model, agent+model or condition.
--bootstrap (0.10)integer1000Resamples for the 95% intervals (0: none).
--seed (0.10)integer0Seed for the resampling.
--min-agreement (0.10)numberRaw agreement (not kappa) to check the raters against (0 to 1); rank says whether it is met.
--raters-per-pair (0.10)integerRaters each pair should have.
--raters (0.10)textWhose votes to rate together: person, guest, model, or several joined by commas (default: people; the others get tables of their own).
--cluster (0.10)textautoWhat the intervals resample: vote, rater, task or rater+task (auto: raters and tasks, when there are several of each).
--provisional (0.10)flagShow the ratings before every pair has a vote.
--json (0.10)flagPrint JSON.

bench bundle (0.10)

Write one zip of a run's evidence to share, redacted.

Per trial the result, trajectory, verifier output, reviews, regrades, artifacts and saved workspace; for a job its run card, summary and report. Every text file is redacted as a trajectory upload is. bundle.json lists each file with its SHA-256 and what was masked, and what was left out.

Output
bench bundle [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesA job folder, or one trial folder inside it

Options

OptionTypeDefaultHelp
--out, -o (0.10)pathWhere to write the zip (default: <PATH>.bundle.zip)
--workspace, --no-workspace (0.10)flagTrueInclude each trial's saved workspace (evidence/) when it has one

bench skills

Skill discovery and evaluation.

Output
bench skills [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
listList discovered skills.
evalEvaluate a skill using its evals/evals.json test cases.
validateRun static checks on skills: NVIDIA SkillEvaluator Tier 1 and SkillSpector.

bench skills list

List discovered skills.

Output
bench skills list [OPTIONS]

Options

OptionTypeDefaultHelp
--dirpathSkills directory to scan

bench skills eval

Evaluate a skill using its evals/evals.json test cases.

Generates ephemeral tasks from the skill's eval dataset, runs each agent with and without the skill installed, and reports the lift.

Examples:

Shell
bench skills eval ./my-skill/ --agent claude-agent-acp
bench skills eval ./my-skill/ --agent claude-agent-acp --agent codex-acp --sandbox daytona --concurrency 4
bench skills eval ./my-skill/ --agent claude-agent-acp --no-baseline --export-gepa
Output
bench skills eval [OPTIONS] SKILL_DIR
ArgumentTypeRequiredHelp
SKILL_DIRpathyesPath to skill directory containing evals/evals.json

Options

OptionTypeDefaultHelp
--agenttext (repeatable)Agent(s) to evaluate (repeatable)
--modeltext (repeatable)Model(s) (matched 1:1 with agents)
--sandboxtextdockerSandbox: docker, remote-docker, daytona, modal, apple-container, or agentcore
--concurrencyinteger1Max concurrent tasks
--jobs-dirtextjobsOutput directory for results
--no-baselineflagSkip baseline (without-skill) runs
--export-gepaflagExport GEPA-compatible traces

bench skills validate

Run static checks on skills: NVIDIA SkillEvaluator Tier 1 and SkillSpector.

SkillEvaluator Tier 1 checks schema, version, PII, license, code integrity, dependencies, Unicode smuggling, quality score and script lint. SkillSpector scans for security issues. Both run without LLM calls; install them separately (see docs/judging/skill-evals.md). Exit 1 when a schema, security or dependency finding reaches --fail-on, or a checker fails to run.

Examples:

Shell
bench skills validate ./my-skill
bench skills validate tasks/ --json > skill-checks.json
bench skills validate tasks/citation-check --fail-on critical -o reports
Output
bench skills validate [OPTIONS] PATHS...
ArgumentTypeRequiredHelp
PATHSpathyesSkill directories, or directories searched recursively for SKILL.md (e.g. a SkillsBench tasks/ folder)

Options

OptionTypeDefaultHelp
--no-securityflagSkip the NVIDIA SkillSpector security scan
--fail-ontexthighExit 1 when a schema, security or dependency finding is at or above this severity: critical, high, medium, low, or never
--checkstextComma-separated SkillEvaluator Tier 1 checks (default: schema,version,pii,license,code-integrity,dependency,unicode,quality,lint)
--min-scoreinteger rangeQuality score SkillEvaluator's quality check needs (default 70); advisory: changes SkillEvaluator's Tier 1 status, not the exit code
--output-dir, -opathKeep each skill's raw JSON reports under DIR/<skill>/
--workers, -jinteger range4Skills checked in parallel
--max-findingsinteger range5Blocking findings listed per skill (all are in --json)
--jsonflagPrint machine-readable JSON

bench traj

Trajectory commands.

Output
bench traj [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
setupInstall the submit skill, or print the prompt to send to an agent.
uploadInspect, redact, confirm, and upload trajectory JSONL.
statusCheck whether an uploaded trajectory is verified in storage.

bench traj setup

Install the submit skill, or print the prompt to send to an agent.

Output
bench traj setup [OPTIONS]

Options

OptionTypeDefaultHelp
--yes, -yflagInstall the skill without prompts
--promptflagPrint the copy-paste agent prompt and exit
--listflagList recent local sessions and exit

bench traj upload

Inspect, redact, confirm, and upload trajectory JSONL.

Output
bench traj upload [OPTIONS] [PATH]
ArgumentTypeRequiredHelp
PATHpathnoTrajectory JSONL file, directory, or trial directory

Options

OptionTypeDefaultHelp
--github-idtextContributor GitHub username (inferred from gh/git when omitted)
--emailtextContributor email stored in the manifest (inferred from git when omitted)
--source-idtextStable contributor source identifier
--repo, --no-repoflagTrueTag the upload with the session's repository (owner/name from its git remote) as the source id
--workspace, --no-workspaceflagTrueAttach an explicitly selected workspace folder as a zip (use --workspace-dir or select a folder at the prompt; skipped over 1 GiB)
--workspace-dirpathWorkspace folder to attach instead of auto-detection
--directflagUpload with local Azure credentials
--container-urltextAzure container URL for --direct
--dry-runflagValidate and stage without uploading
--preview-stepsinteger range5Number of redacted trajectory steps to preview
--wait, --no-waitflagTrueAfter uploading, wait until the capture is verified in storage (BENCHFLOW_TRAJ_WAIT_SECONDS overrides the budget)

bench traj status

Check whether an uploaded trajectory is verified in storage.

Output
bench traj status [OPTIONS] [DIGEST]
ArgumentTypeRequiredHelp
DIGESTtextnoCapture digest printed by bench traj upload (sha256:…)

bench train

Training data commands.

Output
bench train [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
convertConvert BenchFlow rollout artifacts into trainer-ready data.
token-coverageReport whether each rollout's model calls carry token ids and logprobs.
streamPrint each finished rollout of a (running) job as one JSON line.
validateValidate trainer-ready data.
runLaunch training jobs.

bench train convert

Convert BenchFlow rollout artifacts into trainer-ready data.

Output
bench train convert [OPTIONS] JOBS_DIR
ArgumentTypeRequiredHelp
JOBS_DIRpathyesBenchFlow rollout or jobs directory

Options

OptionTypeDefaultHelp
--out, -opathOutput path: JSONL, or parquet for verl-sft Required.
--formattextprime-sftTrainer format: prime-sft, trl-sft, branch-tree (one row per branch child: shared prefix, continuation, reward, advantage), verl-sft (parquet for verl's multi-turn SFT trainer), skyrl-sft (rows for SkyRL's SFT trainer) or openenv-episodes (OpenEnv episode records). 0.9.2 writes prime-sft, trl-sft and branch-tree only.
--pairspathbranch-tree only: also write one row per sibling pair whose rewards differ (chosen/rejected, margin) to this JSONL path
--pairs-any-requestflagbranch-tree only: also pair siblings that were asked different things (default: only siblings with the same first user message)
--include-oracleflagbranch-tree only: keep oracle children as rows (skipped by default; their only message is the solution script's exit code)
--min-rewardnumberOnly include rows with reward >= value
--row-moderollout | exchangerolloutrollout writes one row per rollout; exchange writes one row per LLM exchange
--manifestpathOptional conversion stats JSON path
--expected-rowsintegerFail (before writing the output file) unless exactly this many rows would be exported
--canonical-selectionpathRestrict conversion to rows selected by canonical-selection.json
--redact, --no-redactflagTrueRedact secrets while exporting trainer JSONL. Use --no-redact only for private local SFT data when preserving exact tool-call argument tokens is required.
--context-policyfull | message-windowfullTRL context handling: full or tokenizer-aware message-window
--tokenizertextTokenizer/model ID for TRL message-window conversion
--tokenizer-revisiontextImmutable tokenizer revision for TRL conversion
--max-lengthintegerMaximum rendered length for TRL message-window conversion
--subagent-rowsflagAlso write each Claude subagent conversation as separate rows tagged with the spawning tool call. By default rows contain the parent agent's conversation only.
--reward-vectorflagprime-sft/trl-sft: add reward_vector to every row: the test gate and each rubric criterion (names, kinds, weights, 0-1 values) for rubric-scored trials, else every numeric key the verifier wrote. Unscored rollouts get null.
--group-advantagetextprime-sft/trl-sft: add advantage and group to every row, normalised over the scored rollouts of the same group: grpo = (r - mean) / (std + 1e-4), sample std; loo = r - mean of the others. Unscored rollouts get null, never 0.
--group-bytexttask,agent,model,jobGrouping key for --group-advantage, comma-separated from task, agent, model, task_digest, job. A group stays inside one job unless job is left out (jobs may have run different policy checkpoints)

bench train token-coverage

Report whether each rollout's model calls carry token ids and logprobs.

Reads trajectory/llm_trajectory.jsonl token_capture blocks (see docs/train/trainer.md#token-ids-and-logprobs). A rollout is training-grade when every call has prompt token ids, sampled token ids and logprobs, and each prompt extends the previous call's prompt and sampled tokens.

Output
bench train token-coverage [OPTIONS] PATH
ArgumentTypeRequiredHelp
PATHpathyesBenchFlow rollout or jobs directory

Options

OptionTypeDefaultHelp
--jsonflagPrint the report as JSON

bench train stream

Print each finished rollout of a (running) job as one JSON line.

For a trainer that consumes a job while it runs: every line is a benchflow.rollout-stream.v1 record with the reward, group id and, when the gateway captured them, per-call token ids and logprobs (docs/train/trainer.md#stream-rollouts-while-a-job-runs). Status goes to stderr. Exit 0 when the job finished, 1 when it was stopped or its process died first, 2 on bad input, 3 on --timeout.

Output
bench train stream [OPTIONS] JOB_DIR
ArgumentTypeRequiredHelp
JOB_DIRpathyesJob folder (or a --jobs-dir holding one job); may not exist yet

Options

OptionTypeDefaultHelp
--formattextjsonlOutput format: jsonl
--follow, --no-followflagTrueKeep polling until the job finishes (default), or scan once
--poll-intervalnumber1.0Seconds between scans
--timeoutnumberStop after this many seconds (exit 3)
--group-sizeintegerHold rollouts until N of a group finished, then emit them with a GRPO advantage
--group-bytextGrouping key, comma-separated from task, agent, model, task_digest, job (default task,agent,model,job)
--withheld (0.10)path--group-size: write the records of groups withheld from the trainer (a member unscored or without the others' token sequence, or the group still short at the end) to this JSONL file, each with its reason

bench train validate

Validate trainer-ready data.

Output
bench train validate [OPTIONS] JSONL
ArgumentTypeRequiredHelp
JSONLpathyesTrainer JSONL path to validate

Options

OptionTypeDefaultHelp
--formattextprime-sftTrainer format. 0.9.2 and 0.10.0rc2 check prime-sft, trl-sft and branch-tree rows only.
--expected-rowsintegerFail unless this many rows are present
--source-jobspathSource BenchFlow jobs dir to audit
--source-canonical-selectionpathCanonical selection JSON used for this trainer data
--task-manifestpathTask manifest for source rows
--require-llm-trajectoryflagFail unless source selected rows have valid llm_trajectory.jsonl
--require-tool-callsflagFail unless trainer rows and source rows include tool calls
--tokenizertextTokenizer/model ID for TRL render and assistant-mask validation
--tokenizer-revisiontextImmutable tokenizer revision for TRL validation
--max-lengthintegerFail TRL validation when a rendered row exceeds this length

bench train run

Launch training jobs.

Output
bench train run [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
sftRun a Prime-RL SFT job and record a BenchFlow manifest.

bench train run sft

Run a Prime-RL SFT job and record a BenchFlow manifest.

Output
bench train run sft [OPTIONS]

Options

OptionTypeDefaultHelp
--configpathPrime-RL SFT TOML config Required.
--backendprime-rlprime-rlTraining backend
--datatextOptional dataset override passed to Prime-RL as --data.name
--output-dirpathPrime-RL trainer output dir. Defaults to <work-dir>/prime-rl-output.
--compat-profiletextNamed BenchFlow Prime-RL SFT compatibility profile. Currently supports env0-mobile300-pr828.
--work-dirpathtrain-runs/sftBenchFlow training run directory
--prime-rl-dirpathPrime-RL checkout to run uv from. Defaults to the current directory.
--dry-runflagPass --dry-run through to Prime-RL
--followflagStream trainer stdout while writing logs
--uv-no-syncflagRun Prime-RL with uv run --no-sync, useful after backend post-install steps such as flash-attn.
--overridetext (repeatable)Prime-RL config override as KEY=VALUE; repeatable
--target-examplesintegerDerive Prime-RL max_steps from a target number of training examples using data.batch_size, rounding up
--target-micro-stepsintegerDerive Prime-RL max_steps from custom-trainer batch-size-1 microsteps, dropping the final partial accumulation
--sync-scheduler-to-max-steps, --no-sync-scheduler-to-max-stepsflagTrueWhen --target-examples or --target-micro-steps is set, also derive scheduler.decay_steps from the computed max_steps
--sync-ckpt-to-max-steps, --no-sync-ckpt-to-max-stepsflagWhen deriving max_steps, also derive ckpt.interval and ckpt.keep_interval from the computed max_steps
--pack-functiontextOptional first-class Prime-RL data.pack_function override: cat or stack
--loss-masktextOptional first-class Prime-RL data.loss_mask override: 'assistant', 'all', or comma-separated roles
--loss-normalizationtextPrime-RL SFT loss normalization: token_mean for native Prime-RL behavior, or sample_mean to match the historical custom trainer's per-row mean loss
--model-attntextOptional first-class Prime-RL model.attn override, e.g. sdpa
--renderer-modetextOptional Prime-RL renderer mode override. Use 'none' to fall back to tokenizer.apply_chat_template tokenization.
--tool-defs-modetextpreserveHow local training JSONL exposes tool schemas to Prime-RL: preserve or omit
--chat-template-kwargtext (repeatable)Apply KEY=VALUE to every local Prime-SFT row's chat_template_kwargs before Prime-RL loads it; repeatable. Values are parsed as JSON literals when possible.
--message-tail-truncationtextoffLocal Prime-SFT row truncation before Prime-RL tokenizes it: off, keep-first-user, or custom-trainer-pretokenized. The keep-first-user mode keeps the initial user instruction plus the longest final message suffix that fits data.seq_len * data.micro_batch_size. The custom-trainer-pretokenized mode renders rows like the historical custom trainer, keeps the exact token tail, and stages shifted input_ids/target_ids/loss_mask tensors.
--allow-unsafe-stack-flash-attnflagAllow Qwen3.5 stack packing with flash attention despite known Prime-RL varlen-kernel risk
--forceflagOverwrite an existing <work-dir>/train-run.json manifest
--publish-modeltextUpload trainer output to this HF model repo
--model-tagtextPath prefix/tag for --publish-model upload
--model-cardtextModel card mode; currently accepts 'auto'
--publish-artifactstextUpload BenchFlow train run artifacts to this HF dataset repo
--hf-prefixtextPath prefix for --publish-artifacts
--hf-public-read-checkflagVerify public HF reads after upload

bench hub

Environment hubs: browse a hub's environments (list/show/inspect), check registry tasks (check), and publish datasets and push runs to a BenchFlow Hub (publish/push).

Output
bench hub [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
listList a hub's datasets or environments (benchflow or primeintellect).
showShow a dataset's tasks, or a hosted environment's metadata.
inspectInspect a file from a hub environment package.
publish (0.10)Publish a folder of tasks as an immutable dataset version on a BenchFlow Hub.
push (0.10)Push a finished run (traces, results, an embodied trial's record and video) to a BenchFlow Hub.
checkInventory or structurally check representative registry tasks.

bench hub list

List a hub's datasets or environments (benchflow or primeintellect).

Output
bench hub list [OPTIONS]

Options

OptionTypeDefaultHelp
--providertextbenchflowHub to browse: 'benchflow' (BenchFlow's dataset registry) or 'primeintellect' (hosted envs; needs the prime CLI)
--ownertextOwner/namespace filter (primeintellect)
--searchtextSearch query
--limitintegerMaximum results
--jsonflagEmit raw JSON

bench hub show

Show a dataset's tasks, or a hosted environment's metadata.

Output
bench hub show [OPTIONS] SOURCE_ENV
ArgumentTypeRequiredHelp
SOURCE_ENVtextyesA dataset on a BenchFlow Hub as org/name@version (e.g. robouse/metaworld-sample@0.6.1; read from --hub, or from $BENCHFLOW_HUB_URL when no --provider is given), a dataset of BenchFlow's registry as name@version (e.g. terminal-bench@2.0), or a hosted environment (e.g. primeintellect/general-agent)

Options

OptionTypeDefaultHelp
--versiontextVersion (of the dataset or hosted environment)
--providertextWhere to read it without a Hub: 'benchflow' (BenchFlow's registry; lists the dataset's tasks) or 'primeintellect' (default: benchflow for name@version, primeintellect for owner/name)
--jsonflagPrint the dataset's entry as JSON (for a Hub version, the version and its controls)
--hub (0.10)textA BenchFlow Hub to read org/name@version from, with its control results (default: $BENCHFLOW_HUB_URL when set)

bench hub inspect

Inspect a file from a hub environment package.

Output
bench hub inspect [OPTIONS] SOURCE_ENV
ArgumentTypeRequiredHelp
SOURCE_ENVtextyesHosted environment (e.g. primeintellect/general-agent)

Options

OptionTypeDefaultHelp
--versiontextHosted environment version
--pathtextREADME.mdFile inside the hosted environment package

bench hub publish (0.10)

Publish a folder of tasks as an immutable dataset version on a BenchFlow Hub.

Output
bench hub publish [OPTIONS] TASKS_DIR
ArgumentTypeRequiredHelp
TASKS_DIRpathyesFolder holding one folder per task

Options

OptionTypeDefaultHelp
--name (0.10)textThe version to publish, as org/name@version (e.g. robouse/metaworld-sample@0.6.1) Required.
--hub (0.10)textHub address (default: $BENCHFLOW_HUB_URL)
--description (0.10)textOne line on what it is
--license (0.10)textThe tasks' license, as an SPDX expression (e.g. Apache-2.0 AND MIT)
--kind (0.10)textWhat its tasks are, e.g. embodied
--source-repo (0.10)textWhere the tasks came from (a repository URL)
--source-commit (0.10)textThe commit they came from
--exporter (0.10)textWhat wrote the packages, e.g. 'robouse-export@d05027fb' (the tool and its commit)

bench hub push (0.10)

Push a finished run (traces, results, an embodied trial's record and video) to a BenchFlow Hub.

Output
bench hub push [OPTIONS] JOB_DIR
ArgumentTypeRequiredHelp
JOB_DIRpathyesA job folder (jobs/<job>) holding one finished run, or the run (jobs/<job>/<time>)

Options

OptionTypeDefaultHelp
--hub (0.10)textHub address (default: $BENCHFLOW_HUB_URL)
--dataset (0.10)textThe dataset version the job ran, org/name@version (default: what the job recorded)
--label (0.10)textA label for the run on the Hub

bench hub check

Inventory or structurally check representative registry tasks.

Output
bench hub check [OPTIONS]

Options

OptionTypeDefaultHelp
--registrytextRegistry JSON URL or local file (default: BenchFlow's registry).
--tasks-per-datasetinteger range2Number of representative tasks to select per registry dataset.
--leveltextinventoryCompatibility level to run: inventory or check.
--outpathOptional JSONL output path.
--cache-dirpath.cache/hub/registryCache directory for sparse clones.
--limitinteger rangeOptional cap on selected task refs.

bench daemon

Manage the opt-in warm local runtime.

Output
bench daemon [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
startStart a private runtime; attach runs with BENCHFLOW_DAEMON=auto.
statusShow whether this user's local runtime is running.
stopStop an idle local runtime; never interrupt an active call.

bench daemon start

Start a private runtime; attach runs with BENCHFLOW_DAEMON=auto.

Output
bench daemon start [OPTIONS]

Options

OptionTypeDefaultHelp
--prepareinteger range0Prepare up to N sandboxes ahead: after a one-task Docker run ends, the same command is made ready for its next identical call (0: off).
--prepare-ttlfloat range300.0Seconds a prepared sandbox waits for its call before it is removed.

bench daemon status

Show whether this user's local runtime is running.

Output
bench daemon status [OPTIONS]

bench daemon stop

Stop an idle local runtime; never interrupt an active call.

Output
bench daemon stop [OPTIONS]

bench sandbox

Daytona sandboxes: create, list and clean up (cleanup also removes leftover Docker containers).

Output
bench sandbox [OPTIONS] COMMAND [ARGS]...
CommandWhat it does
createCreate an environment from a task directory (does not start it).
listList active Daytona sandboxes (kept Docker sandboxes: their trial folders hold kept-sandbox.json).
attach (0.10)Open a root shell in a kept sandbox; with a command after --, run it there and exit with its status.
release (0.10)Delete a sandbox kept with --keep-sandbox.
cleanupClean up orphaned sandboxes and stale shared runtimes.

bench sandbox create

Create an environment from a task directory (does not start it).

Output
bench sandbox create [OPTIONS] TASK_DIR
ArgumentTypeRequiredHelp
TASK_DIRpathyesTask directory with task.md or task.toml + Dockerfile

Options

OptionTypeDefaultHelp
--sandboxtextdaytonaSandbox: docker, remote-docker, daytona, modal, apple-container, or agentcore

bench sandbox list

List active Daytona sandboxes (kept Docker sandboxes: their trial folders hold kept-sandbox.json).

Output
bench sandbox list [OPTIONS]

Options

OptionTypeDefaultHelp
--allflagEvery sandbox on the account, not only BENCHFLOW_DAYTONA_OWNER's
--jsonflagPrint the sandboxes as JSON

bench sandbox attach (0.10)

Open a root shell in a kept sandbox; with a command after --, run it there and exit with its status.

Output
bench sandbox attach [OPTIONS] TRIAL
ArgumentTypeRequiredHelp
TRIALpathyesThe trial folder of a run with --keep-sandbox, or its kept-sandbox.json

bench sandbox release (0.10)

Delete a sandbox kept with --keep-sandbox.

Output
bench sandbox release [OPTIONS] TRIAL
ArgumentTypeRequiredHelp
TRIALpathyesThe trial folder of a run with --keep-sandbox, or its kept-sandbox.json

bench sandbox cleanup

Clean up orphaned sandboxes and stale shared runtimes.

Output
bench sandbox cleanup [OPTIONS]

Options

OptionTypeDefaultHelp
--dry-runflagList sandboxes without deleting
--max-ageinteger range1440Delete sandboxes older than N minutes
--allflagDelete every sandbox of BENCHFLOW_DAYTONA_OWNER, whatever its age or activity, except a STARTED one or one a live run still holds (a CI teardown step); others are never touched
--idtext (repeatable)Delete this Daytona sandbox (repeatable), even when a live run lease holds it; only sandboxes of your owner scope

Commands hidden from bench --help

bench --help doesn't list these. They are internal, or older spellings kept so old scripts still run, and may change or go away in any release; each prints its own --help.

CommandWhat it does
bench eval createThe same as bench eval run. Run an evaluation; single task or batch.
bench eval continue-batchContinue all timed-out OpenHands runs under a directory tree.
bench agent createScaffold benchmarks/<name>/ for a new benchmark adoption (deprecated alias).
bench agent runDrive the conversion workflow by launching the host codex CLI (deprecated alias).
bench agent verifyRun the parity gate for an adopted benchmark; emit a verdict (deprecated alias).
bench hub envAlias of bench hub: use bench hub list/show/inspect.
bench hub env listList a hub's datasets or environments (benchflow or primeintellect).
bench hub env showShow a dataset's tasks, or a hosted environment's metadata.
bench hub env inspectInspect a file from a hub environment package.
bench embodiedEmbodied rollouts (robots and simulators): reports, evidence checks, export, specs.
bench embodied reportPer task: rewards by seed, mean, std, pass@k and reset reproducibility.
bench embodied exportWrite every trial's per-step transitions and episode index (steps.jsonl, episodes.jsonl).
bench embodied verify (0.10)Check each trial's files against its verdict now: record hashes, video copies, reward vs the record.
bench embodied check-specValidate an embodiment spec.
bench embodied robo-pathPrint the path of the agent-side robo script (standard library only).
bench continueResume a previous unfinished (timed-out) OpenHands run to completion. (DEPRECATED)
bench continue-batchContinue all timed-out OpenHands runs under a directory tree. (DEPRECATED)
bench adoptdeprecated; use bench eval adopt.
bench adopt initScaffold benchmarks/<name>/ for a new benchmark adoption (deprecated alias).
bench adopt convertDrive the conversion workflow by launching the host codex CLI (deprecated alias).
bench adopt verifyRun the parity gate for an adopted benchmark; emit a verdict (deprecated alias).
bench environmentDeprecated; use bench sandbox / bench hub.
bench environment createDeprecated; use bench sandbox create.
bench environment listDeprecated; use bench sandbox list (local) or bench hub list (hosted).
bench environment showDeprecated; use bench hub show.
bench environment inspectDeprecated; use bench hub inspect.
bench environment cleanupDeprecated; use bench sandbox cleanup.
bench monitorMonitor mode; score a rollout in production (#386).
bench monitor runScore one trajectory under monitor semantics.
bench monitor replayRe-score a persisted rollout under monitor semantics.
bench monitor watchStream-score live production events.
View as Markdown