Skip to content

Command reference

Every fleet command and option. fleet COMMAND --help prints the same, and each command accepts --help. For what to use when, start with the guides; for files, settings and environment variables, see configuration.

Command What it does
fleet ls List every device with live resource availability.
fleet show Full detail for one device.
fleet add Add a machine: how you reach it over ssh, or a name from fleet ls --discover.
fleet edit Change a device's address or settings after it was added.
fleet install Install fleet on a device, so you and its agents can use fleet from there too.
fleet update Update fleet on the machines that have it, the way it was installed there.
fleet ps What is running on every GPU, across the fleet, and which GPUs are idle.
fleet models Every model being served across the fleet: which server, where, and how to reach it.
fleet top Live view of the fleet, or of one device. Like htop, for your machines.
fleet rm Stop watching a machine: take it out of this machine's list.
fleet ssh Open a shell on a device, or run a command: fleet ssh machine_A -- nvidia-smi.
fleet setup Teach your coding agents to use fleet.
fleet uninstall Take fleet off this machine: out of your agents, and with --purge its files.
fleet paths Show where fleet keeps its state.
fleet doctor Why a machine will not let fleet in, and the one thing to do about it.

fleet ls

List every device with live resource availability.

fleet ls [OPTIONS] [NAMES]...

Example:

fleet ls --json
Argument
NAMES only these devices
Option
--json print JSON instead of a table, for scripts and agents
--refresh, -r force a live probe
--rescan also re-read software versions and folder sizes, which machines otherwise cache for 6 hours
--wait SECONDS with --rescan: wait up to this long for the folder sizes it started measuring
--online only reachable devices
--discover list machines in your ~/.ssh/config and on your tailnet that are not added yet
--hide NAME with --discover: never offer this one again; repeatable
--unhide NAME with --discover: offer it again
--all with --discover: include hidden ones
--fields A,B,... with --json: only these keys of each machine, e.g. free_vram_mib,gpus,usd_per_hour
--tag NAME only machines carrying this tag or fact; repeatable, and all must match

fleet show

Full detail for one device.

fleet show [OPTIONS] [NAME]

Example:

fleet show machine_A
Argument
NAME defaults to this machine
Option
--json print JSON instead of a table, for scripts and agents
--refresh, --no-refresh probe it now; --no-refresh shows the last reading
--rescan also re-read software versions and folder sizes, which machines otherwise cache for 6 hours
--wait SECONDS with --rescan: wait up to this long for the folder sizes it started measuring

fleet add

Add a machine: how you reach it over ssh, or a name from fleet ls --discover.

fleet connects exactly as you do -- your ssh config, your keys and agent, Tailscale SSH, the key on your rental provider's account -- and installs nothing there.

fleet add [OPTIONS] [SSH_COMMAND]

Example:

fleet add "ssh -p 58418 root@1.2.3.4"
Argument
SSH_COMMAND e.g. "ssh -p 58418 root@1.2.3.4"
Option
--self record the machine you are on, with no ssh
--name what to call it; guessed from the host if omitted
--alias SHORT a short handle to type instead of the name
--tag NAME label it; repeatable. fleet ls --tag NAME finds it again
--kind permanent|rental|shared|appliance|mobile
--json print JSON instead of a table, for scripts and agents
--dry-run probe and show what would be recorded; record nothing

fleet edit

Change a device's address or settings after it was added.

Rentals recycle IPs and ports, so --ssh re-points a device without losing its name, tags, cost or history. Tags, cost, a note, folders (--path) and declared servers (--endpoint) are written to that machine's own machine.yaml, so everyone who looks at it reads the same; --local keeps tags and cost here instead.

fleet edit [OPTIONS] [NAME]

Example:

fleet edit machine_A --ssh "ssh -p 40001 root@5.6.7.8"
Argument
NAME defaults to this machine
Option
--ssh CMD new address, e.g. "ssh -p 2222 root@5.6.7.8"
--disk-path PATH watch this mount or directory for free space; repeatable
--clear-disk-paths go back to autodetecting mounts
--name NEW rename it; the id and its history stay
--alias SHORT a short handle to type instead of the name; --alias "" removes it
--tag NAME add a label; repeatable
--untag NAME remove a label; repeatable
--cost USD what it costs per hour, for the $/HR column and the fleet's burn rate; 0 clears it
--note TEXT a line about the machine; --note "" clears it
--path KIND=PATH where this machine keeps models, datasets, media...: models=/data/models; repeat a kind for several, models= clears it
--endpoint NAME=PORT[/PATH] a model server fleet would not find by itself: myllm=9000 or myllm=9000/v1; myllm= removes it. Never a key
--local keep --tag/--untag/--cost in this machine's own list instead of on that machine
--json print JSON instead of a table, for scripts and agents

fleet install

Install fleet on a device, so you and its agents can use fleet from there too.

A machine fleet only looks at needs nothing installed; this is for one you also work on. It installs from git; re-running updates an existing install.

fleet install [OPTIONS] [NAME]

Example:

fleet install machine_A
Argument
NAME the machine to install fleet on
Option
--repo URL git URL to clone; defaults to config or this checkout
--ref branch or tag to install (default: main)
--forward-agent, --no-forward-agent authenticate the clone as you, leaving no credential on the device

fleet update

Update fleet on the machines that have it, the way it was installed there.

A machine with fleet from PyPI gets uv tool upgrade (or pipx upgrade), one with fleet's own checkout is updated from git, and your own source install is left as it is. --repo or --ref asks for git everywhere. Updates this machine without ssh, and --all every machine that runs fleet.

A device with no fleet is skipped and named, never given one: most of a fleet is meant to have nothing installed, and fleet install NAME is how you change that on purpose.

fleet update [OPTIONS] [NAME]

Example:

fleet update --all
Argument
NAME defaults to this machine
Option
--all every device that already runs fleet
--repo URL git URL to deploy from; defaults to config or this checkout
--ref branch or tag (default: main)

fleet ps

What is running on every GPU, across the fleet, and which GPUs are idle.

fleet ps [OPTIONS] [NAMES]...

Example:

fleet ps --json
Argument
NAMES only these machines
Option
--json print JSON instead of a table, for scripts and agents
--refresh, -r force a live probe

fleet models

Every model being served across the fleet: which server, where, and how to reach it.

fleet models [OPTIONS] [NAMES]...

Example:

fleet models --json
Argument
NAMES only these machines
Option
--json print JSON instead of a table, for scripts and agents
--refresh, -r force a live probe
--rescan also re-measure the model folders, which machines otherwise cache for 6 hours

fleet top

Live view of the fleet, or of one device. Like htop, for your machines.

Anything unreachable backs off instead of being redialled every couple of seconds. Shared multi-user hosts are probed only when asked for by name (fleet ls NAME).

fleet top [OPTIONS] [NAME]

Example:

fleet top machine_A -i 1
Argument
NAME one device, instead of the whole fleet
Option
--interval, -i seconds between refreshes (default: 2.0)

fleet rm

Stop watching a machine: take it out of this machine's list.

Nothing is changed on the machine itself -- fleet put nothing there but the notes fleet edit --path wrote, which stay with it.

fleet rm [OPTIONS] NAME

Example:

fleet rm machine_A
Argument
NAME (required) the exact name; a prefix is never enough
Option
--yes, -y do not ask for confirmation

fleet ssh

Open a shell on a device, or run a command: fleet ssh machine_A -- nvidia-smi.

The wrapper resolves the endpoint and connects exactly as you would, so an agent never needs an address, a key or a password -- only the machine's name.

fleet ssh [OPTIONS] NAME [-- COMMAND...]

Example:

fleet ssh machine_A -- nvidia-smi
Argument
NAME (required) a machine's name or alias

fleet setup

Teach your coding agents to use fleet.

An agent with a shell gets a skill, which costs nothing until a task actually needs a machine. A desktop client has no shell, so it gets fleet mcp registered as an MCP server instead -- merged into its config beside whatever else is already there.

fleet setup [OPTIONS]

Example:

fleet setup --dry-run
Option
--target an agent name, or all | auto (whatever is installed) (default: auto)
--project write into the current directory, not your home
--dry-run show what would change; write nothing
--uninstall remove what setup installed
--refresh rewrite only what fleet already installed, so it matches this fleet; adds nothing new

fleet uninstall

Take fleet off this machine: out of your agents, and with --purge its files.

Nothing on the machines fleet looked at changes. The program itself is removed last, by you: the command to run is printed at the end.

fleet uninstall [OPTIONS]

Example:

fleet uninstall --purge
Option
--purge also delete fleet's files here: its list of machines, cache and logs
--yes, -y do not ask; needed without a terminal
--json print JSON instead of a table, for scripts and agents

fleet paths

Show where fleet keeps its state.

fleet paths [OPTIONS]

Example:

fleet paths

fleet doctor

Why a machine will not let fleet in, and the one thing to do about it.

fleet connects exactly as you do and manages no access, so the fix is yours to make: usually putting your key on the machine, adding it to a rental provider's account, or a rule in your Tailscale SSH policy. This names the one for each machine. It changes nothing.

fleet doctor [OPTIONS] [NAME]

Example:

fleet doctor gpu-box
Argument
NAME one machine; all that are failing if omitted
Option
--json print JSON instead of a table, for scripts and agents