Skip to main content
Use orbit to manage fleet records and local client settings. Operational commands use the Gateway API; local Gateway profile, extension, trust, DNS, and HTTP profile commands follow their own documented behavior. The CLI does not open an SSH session to a managed Node. Humans and coding agents use the same commands. Human output is readable in a terminal. A command’s machine mode preserves its documented JSON document or event stream. The API reference documents Gateway operations for clients that call it directly or through the PHP SDK.

Find a command

These entry points show local command information without changing fleet records. Help, command-list formats, version output, and shell completion keep their own formats. They do not gain product JSON envelopes, prompts, or progress output. An unknown command reports the error on standard error and exits with status 1.

Command families

Commands are grouped by the record they manage. Each family has its own page with every command, argument, and option.

Select a Gateway

The CLI stores Gateway profiles in $HOME/.orbit/config.json. Set ORBIT_HOME to move that directory. Commands that require a Gateway use the selected profile.
gateway:add fetches the Gateway root certificate, pins it, and installs it in the operating-system trust store. The gateway family and the Gateway trust reference describe the trust sequence and its recovery paths.

Name the record you mean

Use the arguments and selectors documented for the command. A numeric ID, name, slug, UUID, or Route domain is accepted only where that command permits it. In a terminal, a command prompts for a required target or value you omit and offers a default where one exists. With --json or --no-interaction, it refuses the omitted input with its documented error code. When a command permits a prompt, enter a value or select from its admitted choices. Invalid prompted input is checked before the command continues. Cancelling before work begins selects no target and starts no mutation. An interruption after work starts may leave partial work; inspect the reported result before retrying. Use --no-interaction or -n to disable prompts. Supply required values through the command’s arguments and options. For automation, use the command’s documented noninteractive inputs and explicit consent option.

Confirm destructive changes

Read the command’s confirmation and override options before automating a destructive change. An existing consent option and an override can have different effects. For example, discarding dirty source is separate from choosing an output format. Do not assume that --force has the same meaning across families or that selecting JSON authorizes a mutation. The contributor CLI design standard defines the shared consent rules. Each family page documents its supported options and refusal conditions.

Read machine-readable output

Use --json where the command supports it. Preserve its documented shape when writing scripts; a final-response command and a streaming command have different contracts. Framework commands such as list use their own format options. Gateway command failures use a stable error code and request correlation when available:
Error codes are namespaced by family, such as node.not_active, schedule.calendar_invalid, or env.operation_busy. The reference pages list each family’s codes and what the Gateway leaves in place after a refusal. instance:deploy and instance:rollback stream newline-delimited JSON (NDJSON) instead of one document, because they report phases and application output while the Gateway is still working. The instance family describes that event stream.

Follow a request through the Gateway

Use a Gateway request ID, when the result supplies one, to find the matching Activity. A local or parser failure may have no Gateway request; its error request ID is null.
Activity records identify the operation, target, caller, and result. They never contain commands, environment values, credentials, or remote output.

Retry after a connection failure

A command that reads from the Gateway retries the read once. When the connection is refused, reset, or closed before any HTTP response, the CLI waits 250 milliseconds and sends the same read again with the same request ID. A Caddy reload on the Gateway can cause these failures. The CLI never retries a change, a read that received any HTTP response (including a 5xx error), a timeout, or a deployment stream. A second failure ends the command with the error. The read and its retry share the 900-second request timeout, so the retry never extends it. A refused or reset connection usually fails within milliseconds, so the retry usually adds about 250 milliseconds.

Exit status

A successful command exits with 0. A handled failure returns the command’s documented nonzero status. Local commands do not need a Gateway request to succeed. Parser usage errors, product refusals, and failed streams keep their existing statuses; scripts should check the exit status as well as the result.

Enable an extension

Some command families are hidden until you enable them at the Gateway. The Gateway state composes the CLI, MCP, API, and web surfaces for every client. extension:enable only reveals a family; proxycli:setup separately deploys its collector. See extension and proxycli.
The extension family lists the available extensions.

Shell completion

The CLI is a Laravel Zero application, so orbit completion bash and orbit completion zsh print a completion script for your shell.