AXP CLI

Canonical command reference for the AXP CLI.

axp is the command-line interface for the AXP agent experimentation platform.

Installing, pinning a version, and uninstalling are done with the install script rather than with axp subcommands; see Installation. You can update either way — with axp update (below) or by re-running the installer.

axp <COMMAND>

Global Options

axp --help
axp --version
OptionDescription
-h, --helpPrint help.
-V, --versionPrint version.

axp --version also checks for a newer stable release. It prints axp is up to date. when you're current, or how to update with axp update when a newer release is available. (Other commands print the same upgrade notice when one is available, but never the "up to date" line.)

The generated help command prints the top-level help or the help for a given subcommand.

axp help [COMMAND]

Command index

Author experiments

CommandUse
experiment createScaffold experiment YAML.
experiment schemaPrint a supported experiment schema.
experiment validateValidate experiment YAML.
experiment resolveResolve variant coordinates and fingerprints.
introGenerate a first local CLI-install experiment.

Run experiments

CommandUse
runSubmit an experiment to the AXP platform.
local runRun an experiment locally in Docker.
cancelCancel queued or in-flight platform runs.
runs statusShow one platform run's status and per-variant detail.
runs listList local and remote runs (alias: axp list).
sandbox cleanList or remove orphaned local sandbox containers.

Inspect results

CommandUse
local queryQuery a local or downloaded run with DuckDB.
queryQuery uploaded platform data with ClickHouse SQL.
uploadUpload local run data to the platform.
downloadDownload platform run data locally.
promptPrint an agent prompt template for a run.
send-debugUpload a debug bundle for a local run.

Manage platform access

CommandUse
authManage CLI authentication and active org.
secretsManage org-scoped secret values.

Maintain the CLI

CommandUse
release-notesPrint AXP release notes.
updateInstall the latest stable AXP release.

Author experiments

experiment create

Authoring commands live under axp experiment (create, schema, validate, resolve).

Write a templated <name>.yaml in the current directory.

axp experiment create <NAME>
ArgumentDescription
<NAME>Experiment name in kebab-case. Becomes the file name and the experiment id.
OptionDescription
--schema-version <N>Experiment schema version to scaffold. Defaults to the latest supported version.
--dir <DIR>Directory where <NAME>.yaml is written. Default ..
-h, --helpPrint help.

intro

Write a curated four-variant CLI-install experiment for first-time local use. The command is non-interactive and writes YAML for a local experiment. The smoke command and optional output assertion are hidden test oracles, not agent-visible guidance. The generated variants share the same task description — your --target-description — and vary only the install pointer: no pointer, CLI name, install docs URL, then exact install command.

axp intro <NAME> \
  --cli <CLI_NAME> \
  --target-description <DESCRIPTION> \
  --install-docs <URL> \
  --install-command <COMMAND> \
  --smoke-command <COMMAND> \
  [--smoke-output-contains <TEXT>]

Example:

axp intro my-first-experiment \
  --cli mycli \
  --target-description 'a CLI for managing OLAP databases' \
  --install-docs https://example.com/install \
  --install-command 'npm install mycli' \
  --smoke-command 'mycli --version' \
  --smoke-output-contains 'mycli version'
ArgumentDescription
<NAME>Experiment name in kebab-case. Becomes the file name and experiment id.
OptionDescription
--cli <CLI_NAME>Target CLI or product name.
--target-description <DESCRIPTION>Product-specific description of the target, woven into the shared install task each variant receives.
--install-docs <URL>Installation documentation URL used by the documented variant.
--install-command <COMMAND>Exact install command used by the explicit variant.
--smoke-command <COMMAND>Hidden post-install verification command the harness reruns after the agent finishes.
--smoke-output-contains <TEXT>Optional text that must appear in the hidden smoke command's combined stdout/stderr. Use this to disambiguate same-named CLIs.
--dir <DIR>Directory where <NAME>.yaml is written. Default ..
--forceOverwrite an existing <NAME>.yaml file.
-h, --helpPrint help.

experiment schema

Print an experiment schema document to stdout.

axp experiment schema [OPTIONS]
OptionDescription
--schema-version <N>Experiment schema version to print. Defaults to the latest supported version.
-h, --helpPrint help.

experiment validate

Schema-validate an experiment YAML. On success, prints a confirmation and the next axp run command to stdout; on schema failure, prints a single-line error and exits non-zero. Valid experiments may also print non-fatal lint warnings to stderr without changing the exit code.

axp experiment validate <EXPERIMENT>

Successful validation output:

Validated <EXPERIMENT>
Next: run it with `axp run <EXPERIMENT>`

Advisory warnings use warning[<rule>]: <location>: <message> on stderr. For example, warning[polls-for-file-in-setup] flags variant setup scripts that appear to wait for files that another isolated variant might create.

ArgumentDescription
<EXPERIMENT>Path to the experiment YAML.
OptionDescription
--no-aiSkip the AI review (below) and run only the static schema checks. Also skipped when AXP_NO_AI_LINT=1.
-h, --helpPrint help.

AI review

After the schema checks, axp experiment validate runs a best-effort AI review of the experiment's design quality — grading it against AXP authoring best practices such as a single clear evaluation question, task-focused prompts, axes/extensions that isolate a meaningful difference, tests that verify a real success artifact, and sensible secrets and limits. The review is advisory: it prints to stderr and never changes the exit code, so the result on stdout stays machine-readable.

  • Signed in — with a saved login (axp auth login) or AXP_API_KEY set — the review runs a fast model through 514-managed model access and prints a prioritized, severity-tagged list of suggestions under an AI review header. It makes one short model call that counts toward your organization's managed-access usage.
  • Signed out — no network call. axp experiment validate prints a one-line note that signing in unlocks AI hints.
  • Before sending YAML for review, AXP elides large unbroken inline payloads such as base64 or hex fixture data, while keeping the surrounding YAML, prompts, and setup commands visible to the reviewer.
  • If the review can't run (for example, the platform is unreachable, or the experiment is still too large after eliding embedded blobs), it degrades to a one-line AI review skipped note and validation still succeeds.

Pass --no-ai (or set AXP_NO_AI_LINT=1) to skip the review entirely — useful in CI, scripts, or when offline. Set AXP_AI_LINT_MODEL to review with a different model. Color and emoji appear only on an interactive terminal and honor NO_COLOR. Signing in is covered in Secrets and auth.

experiment resolve

Resolve an experiment's variant coordinates and fingerprints using the canonical Rust resolver. This is mainly useful for local development, debugging platform resolution, and checking the exact variant ids a YAML file produces.

axp experiment resolve [OPTIONS] <EXPERIMENT>
ArgumentDescription
<EXPERIMENT>Path to the experiment YAML.
OptionDescription
--jsonEmit the ResolveExperimentResponse JSON shape the platform client parses.
-h, --helpPrint help.

Run experiments

run

Submit an experiment to the AXP platform and poll it to completion. The platform dispatches one managed sandbox per (variant × repeat) job; results land in your organization's data and the run details page. For local Docker runs, use local run.

axp run [OPTIONS] <EXPERIMENT>

Requires axp auth login (or AXP_API_KEY). The platform supplies model access for agent: claude, agent: codex, and agent: cursor variants, so you do not pass a model key. Experiments that reference org secrets via environment_variables (axp://secrets/<slug>) are supported — dispatch resolves them server-side from your org's secret store; a referenced slug that doesn't exist fails fast at submit. See Runs for the full platform-vs-local comparison.

ArgumentDescription
<EXPERIMENT>Path to the experiment YAML.
OptionDescription
--variant <ID>Submit only this variant from the experiment's resolved variants. Repeatable; comma-separated values are also accepted. When omitted, all variants run.
-n, --repeat <N>Submit each variant N times; the platform creates one job per (variant × repeat). Must be at least 1. The platform caps variants × repeat per request and rejects oversized matrices at submit. Default 1.
--detachSubmit and exit immediately instead of polling status.
--mockUse the platform's deterministic mock driver (test mode; no LLM, no model spend).
--file <[VARIANT:]NAME=SOURCE | SOURCE::DEST>Stage files into every variant's /workspace before setup. Built locally and uploaded content-addressed before submit; the in-sandbox bridge verifies and extracts them. NAME=SOURCE binds/overrides a declared files entry; VARIANT:NAME=SOURCE targets one variant's entry; SOURCE::DEST adds an ad-hoc entry staged into every variant. Repeatable. See Files.
--file-sha256 <[VARIANT:]NAME=HASH>Verify a staged files entry against an expected SHA-256 after upload. Repeatable.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
-h, --helpPrint help.

axp run prints a run id. Pass it to runs status to check progress later, to cancel to stop queued or in-flight jobs, or to axp download and axp runs list to find or fetch results once the run completes.

cancel

Cancel some or all jobs in a platform run. Queued jobs are canceled immediately; in-flight jobs are signalled and finalize shortly after.

axp cancel [OPTIONS] <RUN_REQUEST_ID>
ArgumentDescription
<RUN_REQUEST_ID>Run id, as printed by axp run.
OptionDescription
--run <RUN>Cancel only these run ids (UUID, comma-separated). Default cancels every job in the request.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
-h, --helpPrint help.

runs status

Show one platform run's status: its lifecycle roll-up, every (variant × repeat) run's current status and phase, and a status summary. Pass the run id printed by axp run. This reads the same status axp run polls, so you can check on a run you submitted with --detach or detached from with Ctrl-C.

axp runs status [OPTIONS] <RUN_REQUEST_ID>
ArgumentDescription
<RUN_REQUEST_ID>Run id, as printed by axp run.
OptionDescription
--watchPoll until the run reaches a terminal status, streaming per-run transitions. Ctrl-C stops watching; the run continues on the platform.
--jsonPrint the status as JSON instead of a table.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
-h, --helpPrint help.

The command exits non-zero when the run is terminal with any failed or canceled run, so it can gate a script. A still-running run exits zero.

runs list

List recent runs, newest first. By default, axp runs list combines local runs from ./.axp/runs/ with remote platform runs. If you are signed out or offline, it skips the remote list with a note and still shows local runs. axp list is a kept alias of this command.

axp runs list [OPTIONS]
OptionDescription
--localShow only local runs under ./.axp/runs/. This makes no network request and does not require sign-in.
--remoteShow only platform runs. Requires axp auth login or AXP_API_KEY; auth or permission errors fail the command.
--status <STATUS>Filter by status, such as running, complete, or failed.
--limit <LIMIT>Maximum remote runs to fetch. Defaults to 50; the platform caps this at 500.
--jsonPrint rows as JSON instead of a table.
--org <ORG_ID>Use this org for the remote query without changing the active CLI org.
--output-root <OUTPUT_ROOT>Where to read local runs from. Default ..
-h, --helpPrint help.

The table columns are ID, EXPERIMENT, STATUS, TYPE, and CREATED. The TYPE column is local or remote. Use a remote ID with runs status or axp download, or a local ID with axp local query.

local

Local-only commands.

axp local <COMMAND>
CommandDescription
runRun an experiment locally in Docker.
queryQuery a local run with DuckDB.
helpPrint this message or the help of the given subcommand.

local run

Run an experiment locally in Docker across its resolved variants, writing results under ./.axp/runs/<run-id>/. This is the pre-platform axp run: local sandboxes, local artifacts, optional axp upload afterwards. On first run it pulls 514labs/axp-base from Docker Hub.

axp local run [OPTIONS] [EXPERIMENT]

Requires Docker, plus a model credential for each selected agent (ANTHROPIC_API_KEY / OPENAI_API_KEY / CURSOR_API_KEY) — or --managed-model-access to have the platform mint one. Like axp run, it resolves environment_variables (axp://secrets/<slug> references come from your org's secret store); additionally, local sources (./.env / --env-file / host / --env) override the YAML for a matching name, and --file stages local files. See Environment and Auth for precedence.

ArgumentDescription
[EXPERIMENT]Path to the experiment YAML.
OptionDescription
--resolve-variantsResolve the variant matrix and plan builds, then exit 0 without creating containers or making API calls.
-j, --jobs <JOBS>Maximum number of variants to execute concurrently. Builds remain sequential regardless. Default 1.
-n, --repeat <N>Run the experiment this many times, end-to-end. Each repeat produces its own run ID under ./.axp/runs/ so results can be aggregated for statistical significance. Default 1.
--env-file <PATH>Override environment_variables (by name) from this dotenv file; also satisfies deprecated secrets names. Repeat for multiple files; later files override earlier files. Explicit files beat the auto-loaded ./.env; see Environment and Auth for the full resolution order.
--env <NAME[=VALUE]>Override one environment_variables name with NAME=VALUE, or NAME to read from host env. Repeatable. Highest precedence.
--file <[VARIANT:]NAME=SOURCE | SOURCE::DEST>Stage local files into every variant's /workspace before setup. NAME=SOURCE binds or overrides the source of the experiment's files entry named NAME; VARIANT:NAME=SOURCE targets one variant's entry; SOURCE::DEST stages an ad-hoc entry at the workspace-relative DEST into every variant. Repeatable. CLI paths resolve against the current directory. See Files.
--file-sha256 <[VARIANT:]NAME=HASH>Verify a staged files entry against an expected SHA-256 after staging. Repeatable. A mismatch fails staging.
--variant <ID>Run only the specified variant from the experiment's resolved variants. Pass multiple times to run several variants. When omitted, all variants run. Find IDs in the experiment YAML or via --resolve-variants.
--watchLive-tail each variant's agent events and pretty-print the human-relevant ones (assistant text, tool calls, plan updates, errors, cost) as the run unfolds.
--watch-rawLike --watch, but dump the raw JSONL frame for each event. Implies --watch.
--mockUse the in-process mock driver (test mode; no LLM).
--managed-model-accessUse AXP-provided model access instead of supplying your own Anthropic, OpenAI, or Cursor API key. Supports agent: claude, agent: codex, and agent: cursor.
--api-base-url <URL>Use a non-default AXP platform URL for --managed-model-access. Only needed when the AXP team gives you a preview or local URL.
--output-root <PATH>Where to write .axp/runs/<id>/. Default ..
-h, --helpPrint help.

sandbox clean

List or remove orphaned sandbox containers left behind by a crashed or SIGKILL'd axp local run. Containers are matched by the ai.514.axp.* labels AXP attaches at create time. Without --yes this is a dry run that only lists the orphans it would remove.

axp sandbox clean [OPTIONS]
OptionDescription
--yesActually remove the orphaned containers. Without this flag, sandbox clean only lists them. Accepts --force as an alias.
-h, --helpPrint help.

Inspect results

local query

Run SQL against a local raw run under .axp/runs/<run-id>/ or downloaded platform Parquet under .axp/downloads/<run-id>/. For raw runs, the CLI derives query Parquet under .axp/derived/<run-id>/query/ on demand. It exposes runs, agent_events, tool_calls, messages, harness_spans, tests, artifacts, and experiment_runs.

axp local query <RUN_ID> <SQL>

Example:

axp local query my-run-01HX... "SELECT * FROM runs LIMIT 10" --table
ArgumentDescription
<RUN_ID>Run ID under .axp/runs/<run-id>/ or .axp/downloads/<run-id>/.
<SQL>SQL query to run against the local logical tables.
OptionDescription
--tableRender output as a monospace ASCII table instead of NDJSON.
-h, --helpPrint help.

query

Run read-only ClickHouse SQL against uploaded Source/Facts tables through the AXP platform. Unlike axp local query, this command is scoped to the active organization and can query across all uploaded runs in that org. It requires axp auth login or axp auth connect.

Available tables are artifacts, runs, tests, tool_calls, messages, harness_spans, and agent_events. SHOW TABLES and DESCRIBE [TABLE] <table> are supported for discovery.

axp query <SQL>

Example:

axp query "SELECT run_request_id, count() AS variants FROM runs GROUP BY run_request_id" --table
ArgumentDescription
<SQL>ClickHouse SQL query to run against uploaded Source/Facts tables.
OptionDescription
--limit <LIMIT>Maximum rows to return. Defaults to 100; values above 1000 are rejected.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
--tableRender output as a monospace ASCII table instead of NDJSON.
-h, --helpPrint help.

upload

Upload a run to platform-app. The CLI uploads artifacts.parquet; the platform derives the analytical tables from those raw artifacts. On success, the CLI prints that derivation is starting and points you to the Experiments area, where the platform shows experiment, run, and variant details for uploaded data.

axp upload [OPTIONS] [RUN_ID]
ArgumentDescription
[RUN_ID]Run ID. Omit to use the most recent completed run.
OptionDescription
--forceOverwrite an existing upload of the same run.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
-h, --helpPrint help.

download

Download a run's Parquet files from the AXP platform.

axp download [OPTIONS] [RUN_ID]
ArgumentDescription
[RUN_ID]Run ID. Omit to use the most recent completed local run. When provided, the ID is resolved on the platform and does not need to exist under local .axp/runs/.
OptionDescription
--forceOverwrite an existing .axp/downloads/<run-id>/ directory.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
-h, --helpPrint help.

prompt

Print a templated prompt for a run to stdout, designed for piping into a local agent CLI. <PROMPT_NAME> selects the template (matching prompts/<name>.md); only explore ships today.

axp prompt <PROMPT_NAME> [RUN_ID]

Example:

axp prompt explore 01HX... | claude
ArgumentDescription
<PROMPT_NAME>Name of the prompt template, e.g. explore.
[RUN_ID]Run ID. Omit to use the most recent local run, the same default as axp download.
OptionDescription
-h, --helpPrint help.

send-debug

Bundle a run, its source experiment, and host metadata into a tar.gz and upload it to the AXP platform for debugging and reproduction. Bundles include agent and test logs verbatim, so the CLI warns and prompts before uploading unless you pass --yes.

axp send-debug [OPTIONS] [RUN_ID]
ArgumentDescription
[RUN_ID]Run ID. Omit to use the most recent completed run.
OptionDescription
--note <NOTE>Free-form note recorded in the bundle metadata and platform index row.
--out <PATH>Also write the assembled tar.gz to this path. Useful with --dry-run.
--org <ORG_ID>Use this org for the command without changing the active CLI org.
--no-workspaceExclude variants/*/workspace/ from the bundle.
--no-fs-diffExclude variants/*/fs-diff/ from the bundle.
--dry-runBuild the bundle and print stats without connecting or uploading.
--yesSkip the secret-leak confirmation prompt.
-h, --helpPrint help.

Manage platform access

auth

Authenticate with the AXP platform by saving an API key for the CLI.

axp auth <COMMAND>
CommandDescription
loginLog in by pasting an API key, or pass --token.
connectLog in by redeeming a one-time code from the AXP MCP connector.
logoutForget the local credentials file. Does not revoke the Clerk key.
orgsList organizations available to the current API key, or switch the active org.
whoamiShow the identity resolved by the platform API.
helpPrint this message or the help of the given subcommand.
OptionDescription
-h, --helpPrint help.

auth login

Log in by pasting an API key, or pass --token.

axp auth login [OPTIONS]
OptionDescription
--token <TOKEN>API key to use, instead of being prompted interactively.
-h, --helpPrint help.

auth connect

Log in by redeeming a one-time code returned by the AXP MCP connector.

axp auth connect --code <CODE>
OptionDescription
--code <CODE>One-time code returned by the AXP MCP cli_auth.start tool.
-h, --helpPrint help.

auth logout

Forget the local credentials file. Does not revoke the Clerk key.

axp auth logout
OptionDescription
-h, --helpPrint help.

auth whoami

Show the identity resolved by the platform API.

axp auth whoami [OPTIONS]
OptionDescription
--jsonEmit JSON.
-h, --helpPrint help.

auth orgs

List organizations available to the current API key. Without options, this defaults to list output.

axp auth orgs [OPTIONS]
OptionDescription
--listList organizations available to the current API key.
--jsonEmit JSON for list output.
--switch <ORG_ID>Switch the active organization by org id.
-h, --helpPrint help.

secrets

Manage your organization's secret store. Stored values are encrypted, addressed by a kebab-case slug, and referenced from experiments as axp://secrets/<slug> in environment_variables. Reads never return a value — there is no command that prints a secret. Requires axp auth login (or AXP_API_KEY); all subcommands operate on the active org (or --org <ORG_ID>).

axp secrets set <slug> [--description <text>]   # create or overwrite; prompts for the value (never echoed) or reads stdin
axp secrets list [--limit <n>] [--page-token <t>] [--json]   # slugs + audit metadata only
axp secrets rm <slug>                            # idempotent
SubcommandDescription
set <slug>Store or overwrite a value. The value is read from a TTY prompt (never echoed) or stdin when piped. Omitting --description preserves the existing description on overwrite.
listList slugs with description + created/updated/who. Never prints values. Paginated with --limit / --page-token; --json for scripts.
rm <slug>Remove a secret. Removing a missing slug is a no-op (not an error).

See Environment and Auth for the store model and who can resolve secrets.

Maintain the CLI

release-notes

Fetch release-note metadata from the stable download index and print the resolved notes as Markdown.

axp release-notes [OPTIONS] [VERSION]
ArgumentDescription
[VERSION]Release version to show. Omit it, or pass latest, to show the latest release notes. Version tags may include v or axp-cli-v prefixes.
OptionDescription
--rawPrint the fetched release-note Markdown without AXP metadata or fallback banners. Requires an exact release-note match for VERSION.
--source-urlPrint only the resolved release notes URL.
-h, --helpPrint help.

When an exact patch version has no dedicated notes, AXP falls back to the newest release-note entry from the same minor line that is not newer than the requested version. The rendered output includes the release title, date, source URL, and a fallback notice when the resolved notes differ from the requested version.

update

Download and install the latest stable AXP release. This runs the same steps as the installer — it fetches the latest stable build, verifies it, and switches axp over to it — so it's the quickest way to get the newest version. The update takes effect the next time you run axp.

axp update

To see the exact install command without running anything — for example to review it or run it yourself — use --print:

axp update --print
OptionDescription
--printPrint the install command instead of running it.
-h, --helpPrint help.

axp update always installs the latest stable release. To install a specific version or a branch build, run the installer directly with an axp@<version> spec (see Installation).