Install a runner

Two commands on the box, and a pairing code you generate in the desktop app.

Before you start

The installer refuses anything it cannot support, with the reason:

RequirementIf it is missing
LinuxRefuses, and points macOS users at the desktop app
x86_64Refuses; arm64 builds are planned
curl, tar, sha256sumRefuses, naming the missing tool

Node is not a requirement — the bundle brings its own.

Install and pair

1

On the Linux box, run the installer — no root needed.

2

In the Strado app on your own machine, create a runner pairing code.

3

Back on the box, pair it with that code. The installer prints this exact line for you when it finishes.

The two commands, in that order:

curl -fsSL https://api.strado.io/install-runner.sh | sh
strado-runner pair --code PAIR-XXXX-XXXX

Pairing prints paired as "<name>" and restarts the service. The runner then appears in your desktop app, and its worktrees show up in the sidebar next to your local ones.

A pairing code expires, and works once. The app shows how long a code has left when it gives you one; if you come back to a stale code, or have already used it, generate another rather than retrying that one.

pair takes --name <name> to choose the runner's name rather than take the default from the hostname. A box that is already paired refuses to pair again unless you add --force.

Note

The installer never prompts for the code. It is piped from curl, so its stdin is the script itself — and a pasted secret would end up in your shell history. Pairing is always a separate command you run yourself.

What the installer did

It installs under ~/.strado/runner, keeping versions side by side:

PathWhat
~/.strado/runner/versions/<version>/One unpacked bundle per version
~/.strado/runner/currentSymlink to the active version — an upgrade swaps this
~/.strado/runner/bin/strado-runnerThe command, resolving through current
~/.strado/runner.jsonThis box's paired identity
~/.strado/runner.envOptional KEY=VALUE settings, read at start

It verifies the download's sha256 against the release feed and refuses to install on a mismatch, unpacks beside the running version rather than over it, and checks the bundle is complete before it becomes reachable.

It also appends ~/.strado/runner/bin to your PATH in ~/.profile, which takes effect in new shells. Re-running the installer upgrades in place and leaves your paired identity alone.

The service

If systemd is present, the installer registers a user unit at ~/.config/systemd/user/strado-runner.service and enables lingering for your account.

Both halves matter. A user unit runs as you, so the runner can read your SSH keys and git config and launch agent CLIs with your credentials — a system service could not. Lingering is what lets a user unit start at boot and survive logout, which is the whole point of a machine you are not sitting at.

Check it:

systemctl --user status strado-runner
strado-runner status

strado-runner status reports the version, the paired identity and its file, the API and relay it talks to, the service state, and — importantly — whether lingering is on. It says LINGER OFF — dies at logout when it is not.

Without systemd, the installer says so and you supervise strado-runner yourself.

Heads up

A systemd user service gets a minimal environment: no .zshrc, no nvm, no ~/.local/bin — which is exactly where claude, codex and opencode usually live. The installer works around this by snapshotting your login shell's PATH into the unit. Install a new agent CLI afterwards and that snapshot is stale, so run strado-runner env to re-capture it and restart the service. Without that, remote terminals fail with command not found and nothing explains why.

The commands

CommandWhat it does
strado-runner pair --code …Pair this box with your account
strado-runner statusVersion, identity, service state, linger
strado-runner install-serviceWrite the systemd unit and enable lingering
strado-runner envRe-capture the login PATH and restart
strado-runner logsTail the journal, or the log file without systemd. --follow to follow
strado-runner updateCheck for and apply a newer runner build
strado-runner unpairForget this box's identity
strado-runner versionPrint the bundle version

unpair only forgets the local file. The credential stays valid on any copy of it, so revoke the runner from your account as well — the command says so.

Where to go next