Skip to content

auto update runner and update button - #101

Merged
danielehrhardt merged 4 commits into
mainfrom
godmode/22-auto-update-runner-and-update-button
Oct 7, 2026
Merged

danielehrhardt merged 4 commits into
mainfrom
godmode/22-auto-update-runner-and-update-button

Conversation

@danielehrhardt

Copy link
Copy Markdown
Contributor

Runners can now update themselves to the Godmode your computer runs, on their own or with an Update button on the runner card. The Update button also installs the runner's tool updates (Claude Code, uv, Chromium and so on).

I tested the real swap with two compiled builds. A runner got a new 68 MB build over the link in under a second, checked it, swapped itself, restarted and reconnected as the new build. The one-time install script for older runners also worked against a stand-in service: it skipped an address it couldn't reach, downloaded from the next one, checked the hash and replaced the program.

How a runner gets updated

  • Same kind of computer (Mac with Apple silicon to Mac with Apple silicon): your computer sends its own Godmode program over the encrypted link in 4 MB pieces, with live progress. It compares the exact program file, so different builds of the same version count as an update.
  • Different kind of computer (for example an Intel Mac or Linux): the runner downloads the release of the same version from usegodmode.com with your licence key.
  • Never a downgrade: a runner on a newer version than your computer is left alone.

On the runner, the new program is checked and started once as a test before it replaces the old one, so a damaged download never replaces a working program. If chats are working there, it waits until they finish. Then it restarts and reports if it came back as the wrong build.

Older runners: runners installed before this change can't receive it the normal way. They fetch the new program once from your computer through a short-lived download link, using the command channel the runner already has. That covers your runner "MacBook Pro von m". It happens automatically once the desktop app with this change is installed, as long as no chats are working there.

Auto-update: it's on by default for each runner. Updates start when a runner connects, every 15 minutes while it's connected, and when you switch it on. A failed automatic attempt isn't repeated for the same build for 6 hours, and it sends you a notification.

Runner card

  • Update strip: appears inside the card when there's something to do. It shows:
    • what the runner would get: "Godmode 0.1.0 · 998ec1e → 0.1.0 · 9036334", plus any tool updates
    • an Update button
    • "Sending…" with a percentage and progress bar
    • "Ready to install" while it waits for chats to finish
    • "Installing" and "Restarting", during which the card doesn't flash "offline"
    • failures, with Try again
  • When it can't be updated from here (a runner running from source, or a version that can't talk to yours anymore): the strip shows a copyable install command. The command has a placeholder for the licence key, because paired phones can read the runner list; the strip says where to find your key (Settings → License).
  • Version line: now shows the build, and "Up to date" when there's nothing to install.
  • Menu (the "..." button): a new Update automatically switch and Update now / Check for updates.

The update routes work only on your computer, not through Godmode Cloud. The architecture doc has a new "Updates" section.

Tests

  • New test/runner-updates.test.ts covers the update decision, the install on the runner (pieces arriving out of order, a damaged program, a program reporting the wrong version, a restart that came back as the wrong build) and the older-runner script. One new case was added to test/remote-e2e.test.ts.
  • Core and desktop typecheck pass. The full core suite has 3 test files failing, and they fail the same way on main: maintenance busy check, the Claude auto-updater test and folder routes.
  • I merged the latest main (PR recent only show from selected workspace #99) with no conflicts.

Screenshots

I rendered the card in each state with sample data. I couldn't get the menu to open for a screenshot.

  • /Users/danielehrhardt/.godmode/agents/godmode/workspace/task-22/runner-update-states-1.png (update available, sending, waiting, up to date)
  • /Users/danielehrhardt/.godmode/agents/godmode/workspace/task-22/runner-update-states-2.png (command to run by hand, failed, restarting, tool updates)

Things to know

  • Nothing changes until the desktop app is rebuilt and reinstalled with this branch.
  • If a runner's program is signed without a fixed developer certificate, macOS may ask for its permissions again after an update; the runner's health checks will show it.

Task #22 · done by Godmode with Godmode Bot

The controller sends its own program to a runner over the link in pieces (or the
runner downloads the same release from usegodmode.com), the runner checks it,
swaps it in once its runs are done and restarts. Runners from before the updater
fetch it once through runner_exec. Auto-update per runner, on by default; tool
updates on the runner go through the same request.
An update strip shows what the runner gets, the progress while it is sent, the
wait for its chats, the restart, failures with Try again and, where it can't be
updated from here, the command to run on it. The card menu gets Update
automatically and Update now / Check for updates.
@danielehrhardt
danielehrhardt merged commit 547109b into main Oct 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant