Required fields are shown un-commented. Optional fields are commented out in template files and can be omitted to use platform defaults.
Eval Config
Used byosmosis eval submit to submit an evaluation run. The platform clones the workspace repository identified by the origin remote and runs the rollout server-side against a platform dataset.
configs/eval/my-rollout.toml
[experiment]
Omit both
branch and commit_sha to use the latest synced commit on the repository’s default branch. Branch submissions resolve the branch head once, so the run remains pinned to the resulting full commit SHA.
[evaluation]
All fields are optional. Omit values to use platform defaults.
[env] and [secrets] (evaluation)
Optional [env] variables and a required [secrets] table for the evaluation run container. Eval configs must include [secrets] — use required = [] only when the evaluation needs no secret refs. See [env] and [secrets] below for the full ruleset.
Benchmark Config
Used byosmosis benchmark submit to run a benchmark already added to the current workspace. Benchmark configs describe the task selection, agent harnesses and models, and execution settings. They do not reference workspace rollout code.
configs/benchmark/terminal-bench-smoke.toml
[experiment] (benchmark)
benchmark list shows both the key and the name; either one works here, as does the ID.
[tasks]
All fields are optional. Omit the section to run every task. task_names and categories are unioned when both are set. When task_set is set, its published sample is used instead of task_names or categories.
[[agents]] and [agents.model]
Each run requires one to eight agents. Harness availability depends on the selected benchmark. Across managed benchmarks, supported harness values are claude-code, codex, cursor-cli, gemini-cli, mini-swe-agent, openhands, opencode, and terminus-2. The Platform rejects a harness that is unavailable for the selected benchmark. Every agent needs its own [[agents]] entry regardless: a benchmark that runs only its official scaffold rejects every harness, and one that merely allows a harness runs its official scaffold when you omit the field. benchmark info reports which of the three applies.
For provider and endpoint models,
api_key_secret is the model’s Platform secret record name. harness_api_key_secret is separate and per-agent: it is required for cursor-cli and mini-swe-agent, and rejected for every other harness. Set it to CURSOR_API_KEY for cursor-cli and to MSWEA_API_KEY for mini-swe-agent. Those are the variables the harnesses read, and any other value is rejected at submit.
Register the record with osmosis secret set, then reference its name in the agent. For example, a Cursor CLI agent can use:
type = "hosted". Take both values from osmosis model list --type lora: base_model is the LoRA’s Base Model column and lora_model_name is its Name column.
osmosis model deploy before submitting; a run against an undeployed one is rejected, as is a base_model that does not match what that LoRA model was trained on. Hosted agents need no api_key_secret, since Osmosis serves them.
All secret fields contain record names, never credential values. [agents.env] contains literal variables for one agent; top-level [env] applies to every agent, and agent-specific values override the same global key.
[execution]
A benchmark takes one of three shapes, shown in the
LLM Judge row of benchmark info:
Register the record with
osmosis secret set.
[secrets]
A credential the run needs that no other field names — a registry dataset’s own API key, for instance. List the record name; the value is resolved at submit. The same section and resolution order apply to training and eval configs.
--secrets-file <path>, oneNAME=valueper line with#comment lines skipped;-reads stdin- a variable of that name in the CLI process environment
- an existing personal or workspace secret, resolved server-side
- a hidden interactive prompt, only in a terminal and only for names still unresolved
Run scope but does not add the value to the secret store or persistent run config, so you supply it again on every submit.
Resolved server-side (3). The name is already a personal or workspace secret, so the platform looks the value up itself. Nothing to supply locally; a personal secret overrides a workspace secret with the same name.
There is deliberately no --secret NAME=value flag: a value in argv lands in shell history, in ps output, and in any CI log running under set -x.
NAME=value lines a file does. Piping makes stdin non-interactive, so pass --yes to skip the submit confirmation.
Outside a terminal, a name with no value fails immediately and lists every missing name at once, so CI reports the whole gap rather than one name per retry.
Each --secrets-file line is dotenv-style NAME=value. The case-sensitive name must pass Python’s str.isidentifier() check. The CLI strips a leading export prefix and removes one matching pair of single or double quotes around the value. Blank lines and lines starting with # are ignored; inline comments, escape processing, and multiline values are not supported.
.env.run
[verifier]
Registry datasets declare credential templates the platform cannot enumerate, so a run names the Platform secret records supplying them here. Each record is delivered to the verifier under its own name, so name it for the variable the verifier reads. At most 16 names, each matching ^[A-Z][A-Z0-9_]*$.
[env] or any [agents.env], for the same reason as judge_api_key_secret.
Training Config
Used byosmosis train submit to submit a training run.
configs/training/my-rollout.toml
[experiment]
Omit both
branch and commit_sha to use the latest synced commit on the repository’s default branch. Branch submissions resolve the branch head once, so the run remains pinned to the resulting full commit SHA.
[training]
[sampling]
[checkpoints]
The platform enforces these ranges at submission. It does not check values against the selected model or backend, so an unsupported combination can surface during provisioning or execution.
[advanced]
Backend-specific fields for accounts explicitly enabled by Osmosis. Standard accounts and standard configs must omit [advanced]; the platform rejects it when the account is not enabled.
[env] and [secrets]
Use these sections to inject environment variables into the rollout container during training runs or evaluation runs. The same shape applies to both training and evaluation configs.
[env]keys must match^[A-Z_][A-Z0-9_]*$;[secrets].requirednames must match^[A-Z][A-Z0-9_]*$.- The same name cannot appear in both
[env]and[secrets].required. [env]keys starting with_OSMOSIS_are reserved by the platform and cannot be used.- Existing personal or workspace secret records are resolved server-side, so their values do not appear in the local config or CLI request. Values supplied locally through
--secrets-file, the process environment, or a hidden TTY prompt travel in that submission’s TLS request but are not added to the Osmosis secret store or persistent run config. - Eval configs must include
[secrets]. Userequired = []only when the evaluation needs no secret refs. - Training configs may omit
[secrets]. If you include the table, it must definerequired.
Secrets are scoped. A workspace secret is shared across the workspace; a personal secret is private to you and overrides the workspace secret of the same name at run time. Register secrets with
osmosis secret set before submitting a run that references them.