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:

1

Download the new bundle and verify its sha256 before anything else happens.

2

Unpack it beside the running version — never over it.

3

Check the unpacked bundle actually contains what it should, and abort if not.

4

Swap the current symlink to the new version.

5

Refresh the systemd unit from the new bundle, keeping your captured PATH.

6

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.

Where to go next