One file on your PATH
The CLI and the terminal dashboard are the same static binary. It has no runtime under it and no daemon beside it, so installing it is downloading a file and removing it is deleting one.
Two ways in, the same binary
$ curl -fsSL https://pilots.run/install.sh | shpilot: looking for pilot_linux_amd64pilot: sha256 verifiedlands in ~/.local/bin, and asks for no sudo
The script is short enough to read before you run it, and the same address in a browser shows it as text. It picks the binary for your system from the latest release, checks it against the checksum file published beside it, and renames it into place, so a download that dies halfway never leaves a broken command behind.
$ npm install -g pilots$ npx pilots deploythe second line runs it with nothing installed
The package carries the binary for every supported system and a launcher that picks
yours. No install script downloads anything, so it works with scripts disabled and
behind a registry mirror. The command it installs is pilot.
From installed to a URL
Four commands cover most of what people do in the first session, and
pilot --help groups the rest by what you are trying to get done.
-
pilot loginOpens the GitHub device page in a browser and stores a key in
~/.config/pilots/credentials, a file only your user can read. On a machine with no browser,--tokenstores a key you already have. -
pilot deployRun it inside a project. It takes a compose file, a Dockerfile, or neither, and a WebJs app needs no configuration at all. The last line it prints is the URL.
-
pilot mcp install claude-codeWrites the fleet into your coding agent's config, merged with what is already there. The agents page lists every harness it knows.
-
pilot tuiThe fleet as a terminal dashboard you leave open: machines, services, logs and a console, from the same binary.
Upgrading follows how it arrived
Installed by the script
pilot upgrade
Downloads the newest release, checks it against the checksum file published beside
it, and swaps it in with one rename, so an interrupted upgrade leaves the old binary
working. pilot upgrade --check reports and changes nothing.
Installed from npm
npm install -g pilots@latest
That file belongs to npm. pilot upgrade notices where it is running
from and prints this command, and leaves the file alone.
Removing it
rm ~/.local/bin/pilot
Or npm rm -g pilots. Your key is the one other file,
~/.config/pilots/credentials. Delete both and nothing of the CLI is left on
the machine.
Where it stops
Two limits worth knowing before you depend on it.
Linux and macOS, x64 and arm64
There is no Windows binary, because the CLI does not build for Windows. WSL is Linux, so both commands above work there unchanged. On Windows itself the npm launcher says exactly this and points at WSL, so the failure explains itself.
A checksum is not a signature
The checksum proves the file you received is the file the release published. Someone
able to replace a release could replace its checksum file as well. The npm package
carries a provenance record, which ties it to the commit and the workflow run that
built it, and the
source (opens in a new tab)
builds with go build ./cmd/pilot from apps/pilot.