Skip to main content
Run osmosis -h to see all available commands. Every sub-command supports -h / --help. The global output flags --json and --plain are position-independent — they work before or after the command:
osmosis --json <command>
osmosis <command> --json
Use --json for automation and AI agents. Use --plain for low-noise shell output.

auth

Manage CLI authentication.
CommandDescription
osmosis auth loginAuthenticate via browser OAuth or personal access token
osmosis auth logoutRevoke the current session and clear local credentials
osmosis auth whoamiShow the authenticated user, token expiration, and linked workspace
osmosis auth login
osmosis auth whoami
When you run osmosis auth whoami from inside a workspace repository, the CLI also resolves the linked Platform workspace. --json reports it as a workspace object (id, name, role); other modes show Workspace and Role rows. Outside a workspace repository, or when offline or logged out, workspace is null and the command still works.

doctor

Inspect and optionally repair the workspace directory scaffold.
osmosis doctor [path] [--fix]
Argument / OptionTypeDefaultDescription
pathpath.Path inside the workspace directory
--fixflagCreate missing scaffold directories without overwriting existing files
When you are logged in and the workspace directory has a Platform-connected origin remote, doctor also reports the linked workspace (Linked workspace: <name>, or the workspace resource field in --json). The lookup is best-effort — offline or logged out, the field is null and doctor still works.

template

Add starter rollouts from the Osmosis workspace template catalog.

template list

osmosis template list
Lists available starter templates.

template apply

osmosis template apply <name> [--force]
Argument / OptionTypeDescription
namestr (required)Template name from osmosis template list
-f, --forceflagReplace the template-owned rollout directory and config files

rollout

Create local rollout scaffolds and list synced rollouts.

rollout init

osmosis rollout init <name> [--force]
Creates:
  • rollouts/<name>/main.py
  • rollouts/<name>/pyproject.toml
  • rollouts/<name>/README.md
  • configs/eval/<name>.toml
  • configs/training/<name>.toml
Argument / OptionTypeDescription
namestr (required)Lowercase rollout name using letters, digits, and hyphens
-f, --forceflagReplace existing scaffold paths for this rollout

rollout list

osmosis rollout list [--limit N] [--all]
OptionTypeDefaultDescription
--limitint50Maximum number of rollouts to show
--allflagShow all rollouts

eval

Submit and manage evaluation runs, and run LLM-as-judge rubric scoring locally.

eval submit

Submit an evaluation run from a TOML config under configs/eval/. The platform clones the workspace repository identified by the origin remote and runs the rollout server-side, so push your commits before submitting.
osmosis eval submit <config_path> [--yes]
Argument / OptionTypeDescription
config_pathpath (required)Eval TOML under configs/eval/
-y, --yesflagSkip the confirmation prompt
osmosis eval submit configs/eval/my-rollout.toml
Config values come from the local TOML file. Rollout code comes from the synced workspace repository (or the pinned [experiment].commit_sha).

eval list

List evaluation runs for the current workspace repository, including each run’s status, average reward, and progress.
osmosis eval list [--limit N] [--all]
OptionTypeDefaultDescription
--limitint50Maximum number of evaluation runs to show
--allflagShow all evaluation runs

eval info

Show details, results, and metrics for an evaluation run.
osmosis eval info <name_or_id> [--output PATH]
Argument / OptionTypeDescription
name_or_idstr (required)Evaluation run name or ID
-o, --outputpathWhere to write the metrics JSON file
The sidebar shows status, progress (rows completed and percent), and duration. Below the sidebar, the output includes:
  • Summary — pass rate, tokens used, reward stats (including mean), and per-status row counts.
  • Configuration — entrypoint, commit SHA, dataset stats, pass thresholds, pass@k, token limits, timeouts, [env] keys, and resolved secret scopes.
  • Results — per-row reward, pass/fail, and the most recent platform logs.
For completed runs, eval info also fetches metrics (duration, pass rate, tokens used, reward statistics, and pass@k) from the platform and exports them as JSON:
  • In rich mode, the CLI saves metrics under .osmosis/metrics/ by default when metrics are available.
  • In JSON or plain mode, pass -o / --output to write the metrics file.
  • A trailing slash or existing directory uses the default filename. The CLI replaces non-.json extensions and creates parent directories automatically.
  • If metrics are not yet available (for example, the run is still pending), the CLI prints a notice instead of writing a file.
osmosis eval info my-eval-run
osmosis --json eval info my-eval-run -o ./eval-metrics.json

eval stop

Stop a pending or running evaluation run.
osmosis eval stop <name_or_id> [--yes]
Argument / OptionTypeDescription
name_or_idstr (required)Evaluation run name or ID
-y, --yesflagSkip the confirmation prompt

eval logs

Show the most recent lifecycle logs for an evaluation run, oldest first. Use this to diagnose failed runs.
osmosis eval logs <name_or_id> [--limit N] [--cursor CURSOR]
Argument / OptionTypeDefaultDescription
name_or_idstr (required)Evaluation run name or ID
--limitint50Entries per page (1–200)
--cursorstrCursor from a previous page’s next_cursor
When older entries exist, --json output includes a non-null next_cursor. Pass it back with --cursor to page further back in time.

eval rubric

Run LLM-as-judge evaluation locally over a JSONL conversation file. This sub-command does not require a workspace directory or platform authentication and does not run a rollout.
osmosis eval rubric -d <data.jsonl> -r <rubric> --model <model>
OptionTypeDefaultDescription
-d, --datastr (required)Path to JSONL conversations
-r, --rubricstr (required)Rubric text or @file.txt
--modelstr (required)Judge model in LiteLLM format
-n, --numberint1Number of evaluation runs per record
-o, --outputstrPath for JSON output
--api-keystrAPI key for the judge model
--timeoutfloatRequest timeout in seconds
--score-minfloat0.0Minimum score
--score-maxfloat1.0Maximum score

secret

Manage environment_secret records referenced by the [secrets].required list in train and eval configs. The platform never returns secret values — these commands show or accept names and metadata only. Values are read from a hidden interactive prompt or a named environment variable, never as a plaintext command-line argument. Each secret has a scope:
  • Workspace secrets are shared across the workspace. Creating, updating, or deleting them requires an admin or owner role.
  • Personal secrets are private to you. When a workspace and a personal secret share a name, your personal value wins at run time. Use personal secrets for overrides, such as swapping in your own provider API key without affecting teammates.
Secret names must match ^[A-Z][A-Z0-9_]*$ (SCREAMING_SNAKE_CASE).

secret list

List secrets visible to you in the current workspace (names and metadata only — never values).
osmosis secret list [--scope all|workspace|personal] [--limit N] [--all]
OptionTypeDefaultDescription
--scopestrallFilter by scope: all, workspace, or personal
--limitint50Maximum number of secrets to show
--allflagShow all secrets
The output includes a Scope column labeled Workspace or Personal.
osmosis secret list
osmosis secret list --scope personal

secret set

Create or update (upsert) a secret. The CLI reads the value from the env var named by --env VARNAME; without that flag, you type the value at a hidden interactive prompt. In --json or --plain (non-interactive) modes, you must pass --env.
osmosis secret set <name> [--scope workspace|personal] [--env VARNAME]
Argument / OptionTypeDefaultDescription
namestr (required)Secret name in ^[A-Z][A-Z0-9_]*$
--scopestrpersonalpersonal (private to you) or workspace (shared with the workspace)
--envstrRead the value from this environment variable
# Create or update your personal secret (default scope):
osmosis secret set OPENAI_API_KEY

# Read the value from an env var (recommended for scripts and CI):
OPENAI_API_KEY=sk-... osmosis secret set OPENAI_API_KEY --env OPENAI_API_KEY

# Workspace-shared secret (requires admin or owner role):
OPENAI_API_KEY=sk-... osmosis secret set OPENAI_API_KEY --scope workspace --env OPENAI_API_KEY

secret delete

Delete a secret within the given scope. The CLI prompts you to confirm unless you pass --yes.
osmosis secret delete <name> [--scope workspace|personal] [--yes]
Argument / OptionTypeDefaultDescription
namestr (required)Secret name to delete
--scopestrpersonalScope of the secret to delete
-y, --yesflagSkip the confirmation prompt
osmosis secret delete OPENAI_API_KEY --yes
osmosis secret delete OPENAI_API_KEY --scope workspace --yes

dataset

Manage platform datasets for the current workspace repository.
CommandDescription
osmosis dataset upload <file> [--overwrite] [--yes]Upload a CSV, JSONL, or Parquet dataset
osmosis dataset download <name> [-o PATH] [--overwrite]Download a dataset file
osmosis dataset list [--limit N] [--all]List datasets
osmosis dataset info <name>Show dataset details and processing status
osmosis dataset preview <name> [--rows N]Preview uploaded dataset rows
osmosis dataset validate <file>Validate a dataset locally
osmosis dataset logs <name> [--limit N] [--cursor CURSOR]Show lifecycle logs for a dataset (oldest first)
osmosis dataset upload data/train.jsonl
osmosis dataset info train
osmosis dataset preview train --rows 5
Dataset names are derived from the file name without its extension. If a dataset with that name already exists, the upload fails — pass --overwrite to replace it (the old record is soft-deleted). Use osmosis dataset logs <name> to diagnose failed uploads. --limit accepts 1–200 entries (default: 50). When older entries exist, the --json output includes a non-null next_cursor; pass it back with --cursor to page further back in time.
osmosis dataset upload requires --yes (-y) in non-interactive modes (--json, --plain, or when stdin is piped). Running without it raises INTERACTIVE_REQUIRED, even with --overwrite. Add --yes to CI jobs and scripted uploads to skip the confirmation prompt.

train

Submit and manage training runs for the current workspace repository.

train submit

osmosis train submit <config_path> [--yes]
Argument / OptionTypeDescription
config_pathpath (required)Training TOML under configs/training/
-y, --yesflagSkip confirmation prompt
Config values come from the local TOML file. Training code comes from the synced workspace repository.

train info

osmosis train info <name> [--output PATH]
Shows run details, checkpoints, and metrics. The summary panel includes progress (current_step / total_steps with percent complete) and the latest reward while the run is in flight. In rich mode, metrics are saved under .osmosis/metrics/ by default.

train logs

Show the most recent lifecycle logs for a training run, oldest first. Use this to diagnose failed or crashed runs.
osmosis train logs <name> [--limit N] [--cursor CURSOR]
Argument / OptionTypeDefaultDescription
namestr (required)Training run name
--limitint50Entries per page (1–200)
--cursorstrCursor from a previous page’s next_cursor
When older entries exist, --json output includes a non-null next_cursor. Pass it back with --cursor to page further back in time.

Other train commands

osmosis train list [--limit N] [--all]
osmosis train stop <name> [--yes]
train list shows status, current step / total steps, and the latest reward for each run.

model

Manage base (foundation) models and LoRA models produced by training runs. Deploying a LoRA model exposes it for inference.

model list

List base models and LoRA models for the current workspace as two independently paginated sections (base first, then LoRA). The base table shows Name, Created, and Created By. The LoRA table shows Name, Base Model, Training Run, Checkpoint Step, Training Reward, and Created. When deployment info is available, the LoRA table also shows Deployment Status and a deployment-quota summary below it (for example, 2 of 5 inference deployments used).
osmosis model list [--type all|base|lora] [--limit N] [--all]
OptionTypeDefaultDescription
--typestrallFilter to a single list: all, base, or lora
--limitint50Maximum number of models to show per type
--allflagShow all models of each type
--limit and --all apply to each list independently, and each list carries its own pagination cursor (next_offset).
osmosis model list
osmosis model list --type lora
osmosis model list --type base --limit 50
osmosis --json model list
--json output keys each list separately, so the structure itself identifies which list is which:
{
  "base_models": { "items": [...], "next_offset": null },
  "lora_models": { "items": [...], "next_offset": null },
  "active_deployments": 2,
  "max_active_deployments": 5
}
When deployment info is available, the active_deployments / max_active_deployments quota keys appear for --type all and --type lora, but not for --type base.

model info

Show details for a single LoRA model: base model, training run, checkpoint step, training reward, Hugging Face export status, and deployment status when deployment info is available.
osmosis model info <lora-model>

model deploy

Deploy or reactivate a LoRA model by name.
osmosis model deploy <lora-model>

model undeploy

Transition a LoRA model’s deployment to inactive (idempotent). The LoRA model remains in the training run history.
osmosis model undeploy <lora-model>
The standalone osmosis deployment, osmosis deploy, and osmosis undeploy commands have been removed. Use osmosis model deploy <lora-model> and osmosis model undeploy <lora-model> instead.

upgrade

Self-upgrade the CLI to the latest version published on PyPI.
osmosis upgrade
The CLI auto-detects your install method (pip, pipx, or uv tool) and runs the appropriate upgrade command.