Getting started

Install

Install ota from release binaries first, and from source when you are developing it.

learnnew usersbasicstable2026-08-19

Release binaries

For most users, install the published binary. Choose your install method based on what you need to prove:

Pin to a specific release

Use OTA_VERSION when you need deterministic proof on one exact released version. This is the path for CI workflows, protected deployments, and reproducible installs.

macOS / Linuxbash
curl -fsSL https://dist.ota.run/install.sh | OTA_VERSION=vX.Y.Z sh
macOS / Linux (PATH)bash
curl -fsSL https://dist.ota.run/install.sh | OTA_VERSION=vX.Y.Z sh -s -- --setup-path
Windowspowershell
$env:OTA_VERSION = "vX.Y.Z"irm https://dist.ota.run/install.ps1 | iex
Windows (PATH)powershell
$env:OTA_VERSION = "vX.Y.Z"& ([scriptblock]::Create((irm https://dist.ota.run/install.ps1))) -SetupPath

Install one exact commit (unreleased)

Use OTA_GIT_REV when you need to test or use one exact unreleased source revision. This pins to an immutable commit hash and does not follow branches.

macOS / Linuxbash
curl -fsSL https://dist.ota.run/install.sh | OTA_GIT_REV=<commit-hash> sh -s -- --from-git
macOS / Linux (PATH)bash
curl -fsSL https://dist.ota.run/install.sh | OTA_GIT_REV=<commit-hash> sh -s -- --from-git --setup-path
Windowspowershell
$env:OTA_GIT_REV = "<commit-hash>"& ([scriptblock]::Create((irm https://dist.ota.run/install.ps1))) -FromGit
Windows (PATH)powershell
$env:OTA_GIT_REV = "<commit-hash>"& ([scriptblock]::Create((irm https://dist.ota.run/install.ps1))) -FromGit -SetupPath

Follow a pressure-testing branch

Use OTA_GIT_BRANCH only for active pressure testing or development. This tracks a moving branch tip and does not provide deterministic proof.

macOS / Linuxbash
curl -fsSL https://dist.ota.run/install.sh | OTA_GIT_BRANCH=<branch-name> sh -s -- --from-git
macOS / Linux (PATH)bash
curl -fsSL https://dist.ota.run/install.sh | OTA_GIT_BRANCH=<branch-name> sh -s -- --from-git --setup-path
Windowspowershell
$env:OTA_GIT_BRANCH = "<branch-name>"& ([scriptblock]::Create((irm https://dist.ota.run/install.ps1))) -FromGit
Windows (PATH)powershell
$env:OTA_GIT_BRANCH = "<branch-name>"& ([scriptblock]::Create((irm https://dist.ota.run/install.ps1))) -FromGit -SetupPath

From source

Use the source install path when you are working from a cloned checkout.

macOS / Linuxbash
./scripts/install.sh --from-source
macOS / Linux (PATH)bash
./scripts/install.sh --from-source --setup-path
Windowspowershell
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1 -FromSource
Windows (PATH)powershell
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1 -FromSource -SetupPath

After installation

  • Confirm the binary is available with ota --version.
  • Use ota --version --json when CI or tools need explicit build provenance (semver, source_build, full source commit, dirty) plus schema_version and contract_capabilities.
  • Treat schema_version as the coarse contract-generation marker and contract_capabilities as the additive feature-support catalog.
  • Run ota doctor in a repo before you write or execute tasks.
  • Use ota validate --help to confirm the CLI is available and responsive.
Post-install verificationbash
ota --versionota --version --jsonota doctor --plainota validate --help

Install the Ota skill

Install the skill after ota is already on PATH and the binary verifies cleanly.

The source of truth lives in ota-run/skills, and ota skills install writes that first-party distribution into the selected agent skill directory.

Codexbash
ota skills install --agent codex
Claude Codebash
ota skills install --agent claude