Upgrades and uninstall
Everything on this page is the same script you installed with. Keep it, or fetch it again from the release URL; both work.
sh install.sh # upgrade, keeping the pairingsh install.sh --status # what is installed, and is it runningsh install.sh --uninstall # stop and remove the service and the programsh install.sh --uninstall --purge # also delete credentials and workspacesUpgrading
Section titled “Upgrading”Re-running the installer is the upgrade. There is no separate command. It downloads the new release, verifies its checksum, replaces the program atomically, rewrites the service definition, and restarts the service.
Three things it deliberately does not do:
- It does not re-pair. It finds the saved credential and keeps it, so the runner stays the same machine in your fleet with the same history. The output says
Already paired. - It does not sign the runner in again. A runner that is already signed in to a coding agent keeps that sign-in.
- It does not leave you on a broken version. If the new release cannot stay up after the restart, the installer rolls back to the one that could.
Pin a version with --version when you need to:
sh install.sh --version v1.2.0Checking what is installed
Section titled “Checking what is installed”--status reads local state only. It needs no network and no running workspace:
$ sh install.sh --status
CommandChain runner
program /home/maya/.local/bin/commandchain-runner (0.1.2) service /home/maya/.config/systemd/user/commandchain-runner.service state running logs /home/maya/.local/state/commandchain-runner/runner.log workspaces /home/maya/.commandchain/workspaces state dir /home/maya/.commandchain
follow the log: tail -f /home/maya/.local/state/commandchain-runner/runner.log service starts and stops: journalctl --user -u commandchain-runner
Credentials file: /home/maya/.commandchain/runner.json
https://your-commandchain tenant alpenglow runnerId 32c152e4-3d5e-49a1-b3df-20b95c0a74b6 displayName maya-macbook adapters claude-code-cli pairedAt 2026-07-23T20:32:15.947ZRead it top down: the program and its version, whether the service is actually running, where to follow the log, and which instances this machine is paired with. The credential itself is not printed, here or anywhere.
For the same picture with sign-ins and anything left to do, open the runner with commandchain-runner. See the runner screen.
Both platforms name tail, because on both the service appends the runner’s output to a file. The Linux systemd journal holds the unit’s start and stop records only, so it is not where a runner that is failing to start explains itself.
Uninstalling
Section titled “Uninstalling”--uninstall is the careful one. It stops and removes the service and deletes the program, and it keeps your pairing credential and your workspaces.
$ sh install.sh --uninstallThat is deliberate. A task branch that has not been pushed yet lives in a workspace, and a preserved pairing means reinstalling later puts the same machine back in your fleet rather than a new one.
--purge is the thorough one, and it only ever happens on that explicit second flag:
$ sh install.sh --uninstall --purgeIt additionally deletes ~/.commandchain: the pairing credential, the runner’s own coding-agent sign-ins, your agent setup choice, and every workspace, including work that has not been pushed. Your own coding CLI sign-ins are not touched.
None of these commands asks for administrator rights, and none of them touches anything outside your home directory.
Removing the runner from your workspace
Section titled “Removing the runner from your workspace”Uninstalling from the machine stops the runner; it does not remove the record of it. To retire it in the app, open Settings, then Runners, and remove it there. A runner has to be offline and holding no active work before it can be retired, which is what stops a machine’s history being orphaned mid-run.
Next steps
Section titled “Next steps”- Install a runner: the original command and its options.
- Troubleshooting: a service that will not start or stay up.
- Workspaces and git: what
--purgedeletes.