Reference
Extension Support
Where ota stops today and where explicit extension execution begins.
referenceautomation buildersintermediatestable2026-05-30
Recommended next
Current boundary
Extensions are explicit descriptors, not hidden runtime plugins.
The page separates discovery, explicit execution, and custom remote execution so users do not have to infer the boundary from code.
- core commands do not execute extension providers at runtime
- top-level
extensionsis parsed for discovery and inspection - explicit check execution happens through
ota extensions --run <name> - explicit export publication happens through
ota extensions --publish <name> - custom remote execution is selected by
execution.backends.remote.provider - use
check_providerwhen a repo check must stay explicit but still be runnable - use
export_providerwhen a publish or export step should stay separate from core commands - use
backend_providerwhen ota must delegate remote task execution to your own transport or platform
Core command boundary
ota doctorstays core-focusedota runstays task-focusedota upstays repo readiness focusedota checkstays check-focused
Example
This page describes the current shipped seam and the structured contract for custom remote execution.
Extension descriptorsyaml
extensions: release-check: kind: check_provider command: ota-ext-check api_version: 1 description: Run a custom repo readiness check release-upload: kind: export_provider command: ota-ext-upload api_version: 1 description: Upload the release bundle to an artifact endpoint remote-shell: kind: backend_provider command: ota-ext-remote-shell api_version: 1 description: Execute tasks through a custom remote backend config: transport: ssh workspace_root: /workspaceUse cases
- a readiness checker exists as contract data without becoming hidden runtime behavior
- a release flow needs a clearly named publish seam
- a remote backend needs a structured request and response contract
- an agent or CI job needs to inspect extension intent before running it
- the user should understand the boundary from one page instead of reverse-engineering the runtime
Backend provider wire contract
When ota hands execution to a backend_provider, the provider gets a structured request and must return a structured response.
That makes the adapter easy to debug and keeps the contract stable across HTTP, SSH, queues, or custom platform APIs.
Requestjson
{ extension_id: "remote-shell", extension_kind: "backend_provider", api_version: 1, command_context: "run", repo_context_path: "/workspace/repo", working_dir: "/workspace/repo", task: { name: "build", command: "pnpm build", mode: "capture", target: "sandbox-dev", cwd: "/workspace", environment: { NODE_ENV: "production" } }}Responsejson
{ ok: true, result: { exit_code: 0, stdout: "build succeeded\n", stderr: "", target: "sandbox-dev" }, errors: []}What this is not
- not automatic plugin execution
- not a hidden extension framework
- not a replacement for
tasks - not a general-purpose runtime plugin host