Runner updates
A runner keeps itself current, on its own schedule and its own version number.
Independent of your desktop
The runner has its own version and its own release. Updating your desktop app
does not update a runner, and a runner updating does not require you to touch
your desktop. strado-runner version reports what a box is on.
It polls for a new build about every 15 minutes. On repeated failures it backs off rather than hammering the feed, up to a four-hour gap.
You can also do it by hand, which reports plainly when there is nothing to do:
strado-runner update
Setting STRADO_RUNNER_AUTOUPDATE=0 in ~/.strado/runner.env turns automatic
updating off and leaves the command available.
How an update is applied
The order is deliberate, and it is the order that keeps a half-installed runner from ever being reachable:
Download the new bundle and verify its sha256 before anything else happens.
Unpack it beside the running version — never over it.
Check the unpacked bundle actually contains what it should, and abort if not.
Swap the current symlink to the new version.
Refresh the systemd unit from the new bundle, keeping your captured PATH.
Restart the service.
The previous version is kept for rollback; older ones are pruned.
Step five matters more than it looks: rewriting the unit is what lets a
unit-level fix reach installs that already exist. The unit's KillMode=process
arrived that way, and without it a restart killed every agent session on the
box.
Note
Agent sessions survive a runner update. The PTYs live in ptyd, which is not
the updating process and is not in the part of the service systemd signals —
so the new version reattaches to sessions that never stopped.
A bundle reporting itself as dev never auto-updates.
When a runner will not come online
Work down this list; each step tells you something the next one assumes.
Is it paired? strado-runner status says NOT PAIRED when it is not, and
prints the pair command. A runner that has never paired exits deliberately, and
the service is configured not to restart it in a loop for that reason — only
pairing fixes it, and restarting cannot.
Is the service running? systemctl --user status strado-runner. If the
unit does not exist, strado-runner install-service writes it.
Will it survive logout? strado-runner status reports
LINGER OFF — dies at logout when lingering was never enabled. That is the
usual reason a runner is fine while you are connected and gone the next
morning.
What does it say? strado-runner logs, or strado-runner logs --follow.
It reads the journal under systemd and the log file without it.
Do agent commands resolve? A remote terminal failing with
command not found for claude or codex is almost always the captured
PATH going stale after you installed a CLI. strado-runner env re-captures
it and restarts the service.
Still nothing? strado-runner unpair, then pair again with a fresh code.
Revoke the old runner from your account too — unpairing only deletes the local
file, and the credential stays valid on any copy of it.