Running work¶
Once you have added a machine, your agent can run things on it. You ask for the work; it picks the machine and connects.
You: run the test suite on the Linux box and tell me what failed
Commands¶
fleet ssh gpu-box -- nvidia-smi # run one command, print its output
fleet ssh gpu-box # an interactive shell, as with plain ssh
fleet ssh a -- 'cd ~/proj && make test' # by alias; quote anything with && or |
Put the remote command in single quotes. Your own shell reads the command before
fleet does, and expands $HOME, ${VAR} and a leading ~ with this machine's values.
PowerShell does it even inside double quotes, so from Windows fleet ssh gpu-box -- ls
"$HOME" asks a Linux box about C:\Users\you. In single quotes the command reaches the
machine as you typed it, and that machine expands it. fleet warns when a command bound
for a Linux or macOS machine contains your Windows home folder.
fleet ssh finds the machine's address, user, port and key file, and runs your own
ssh with them, so the agent needs none of them and never builds an ssh command by
hand. It connects exactly as ssh does from this machine — your ssh config, keys and
agent, Tailscale SSH — and with keys only: it never prompts for a password. It works on
every OS: on a Windows machine the command goes to its shell as it is, and the remote
command's exit code comes back in every case.
Long jobs¶
Training runs and other long jobs should not depend on the connection staying open. Start them detached, with their output in a file:
You: start the training on gpu-box in the background and log to train.log
which the agent turns into something like
fleet ssh gpu-box -- 'cd ~/proj && nohup python train.py > train.log 2>&1 &'
fleet ssh gpu-box -- 'tail -n 20 ~/proj/train.log' # later: how is it going
A tmux or screen session works as well. Apps that use fleet through MCP give each
command two minutes, so for them starting detached is the only way to run anything
longer.
Code and data¶
fleet has no copy command. Get code onto a machine the way you would by hand: clone it
there (fleet ssh gpu-box -- 'git clone …'), or pull from wherever your data lives.
scp and rsync work as they always do: fleet's machines are reached with your ssh, so
any route it uses, they can use too.
When a machine refuses¶
| What you see | What it means |
|---|---|
NAME refused us a moment ago |
The machine is up but did not let fleet in on the last reading. fleet doctor NAME says why and gives the fix — usually your key on the machine (more). |
Permission denied (publickey) |
The same, from ssh itself: fleet doctor NAME. |
No device named … |
Check the name with fleet ls; an alias works too. |
NAME has no endpoint recorded |
fleet knows the machine but not how to reach it. fleet edit NAME --ssh "ssh user@host". |
NAME is this machine |
Run the command here, without fleet ssh. |