Repository navigation
auto update runner and update button - #101
Merged
danielehrhardt merged 4 commits intoOct 7, 2026
Merged
Conversation
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.
…e-runner-and-update-button
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
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
The update routes work only on your computer, not through Godmode Cloud. The architecture doc has a new "Updates" section.
Tests
test/runner-updates.test.tscovers 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 totest/remote-e2e.test.ts.main: maintenance busy check, the Claude auto-updater test and folder routes.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
Task #22 · done by Godmode with Godmode Bot