Repository navigation
Device groups: secondaries keep every feature and stand in, phones follow, no more Google logouts - #218
Merged
Conversation
Google, Microsoft, Apple, Amazon, PayPal, Meta and others sign a session out everywhere when its cookies show up on a second computer. Runners now get every cookie except those sites'; devices of a group get none unless the group seeds them, and then only for sites they have no cookies for yet. The receiving computer drops session-bound cookies itself, so an older controller can't sign it out either.
… Full Disk Access and runner-twin fixes - Sidebar popover: one inset for header, rows and footer; roles as quiet tags; state in words (Away since, Takes over in, Stands in, slow connection); Full Disk Access chip and runner-twin hint; hand-off as a two-line button that is only solid while work runs and hides when there is nowhere to go; no monospace in the sidebar row - Settings > Devices: While the primary is away (switch, minutes, live stand-in state with pending changes), Browser sign-ins (own / seed), Full Disk Access note with how-to, Use only the app for a runner twin (POST /api/devices/retire-runner), copy without the old read-only wording - Away banner on secondaries: countdown to taking over, standing-in state - Places: This computer name from THIS_COMPUTER, runner twins after their device and named as runners; Runner tag in the Run on chip and the chat pill - Screenshots in docs/screenshots/device-groups-v2
… link fullDiskAccess() answers from the last probe and asks again in the background when that is older than ten minutes. runnerInfo() reports it as fullDiskAccess.
macOS asks the person at the computer before a program may open the Desktop and other folders, and whatever asked waits until someone answers. On a runner nobody may be there for hours: two runs waited six hours for a Desktop prompt until the watchdog stopped them. While runs work on a Mac, services/macPrompts.ts follows tccd's log (log stream, or log show while a step is silent where it can't stream) for prompts of this program or Godmode's app. A pending prompt labels the silent runs it holds, sends one warning notification, and keeps the watchdog from stopping a silent run; a run stopped after the prompt was given up (2 hours) names it. Without Full Disk Access the system prompt tells agents to keep out of those folders or say so first.
The phone knows the computers of its pairing's device group (from GET /api/mobile/me) and moves on to another one when the computer it uses is out of reach: the one that answered last first, then the primary, then the rest. Only the paired computer or the primary can unpair it with a refused key; another computer of the group may not have the key yet. Home, the live accessory and Settings show which computer it goes through.
The group copies pairings and removals between its computers within seconds, so the paired computer is the one reliable judge. A refused key from the primary, like from any other computer of the group, means it doesn't have the key yet: the phone tries the next one.
…rors Right after macOS asks, every run still looks silent: who a prompt holds is decided once the runs at work wrote again, and only runs in a step of their own count. The watchdog spares a silent run only for as long as a prompt is waited for, and names a dialog only for the runs it held and nobody answered. With the stream, only its answer ends a prompt; without it, runs going on again do. A line that can't be handled no longer ends the reader, a stream that ended is started again, the watch ends when runs vanish without an event, and the human hears about the same dialog at most every half hour. Full Disk Access is decided by what Godmode starts, and an app known only by its bundle id is recognised in the prompt line.
…on, real screenshots
# Conflicts: # packages/core/src/remote/linkServer.ts
…pens its own database
…e slots, missed automations from their schedules
…r question, settings travel back, docs
…rn, missed windows, failed joins, settle wait
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.
Why
On the second Mac a simple "download these two files to the desktop" chat was stopped twice by the watchdog ("no sign of life for 60 minutes"). The cause, from that Mac's own log: macOS asked whether Godmode may open the Desktop folder (12:16) and nobody was there to click Allow until 18:39. Every command that touched
~/Desktopwaited, including Claude Code itself. The chat also ran on an old runner of that Mac, not on the Godmode app of the device group (the same computer was paired twice).Beyond that bug, a device group only half worked: while the primary was away a secondary was read only, schedules stopped, the phone could not connect anywhere else, and copying browser sessions to the other computer signed you out of Google.
What changes
A secondary keeps every feature while the primary is away, and stands in for it
Phone app
macOS permission prompts
Browser sign-ins
UI
Screenshots
Real two-core sandbox (both computers are this Mac, hence the same name):
More states, light and dark, are in
docs/screenshots/device-groups-v2/.Tests
devices-e2ecovers two real cores. The secondary works offline and stands in, continues the primary's running chat, hands everything back, and the primary does not pick the chat up again.replica.test.ts: last writer wins, ties, deletions, deferred rows, delete cascades, unsafe folder names.mac-prompts.test.ts: the parser was checked against the second Mac's real log.browser-sessions.test.ts.apps/mobile/src/lib/peers.test.ts.secretswrites (keys now come from the schema), the replica tables in backups (left out now, and restoring a backup inside a group is refused), late automation ticks that a stand-in already ran, missed automations, duplicate My-tasks for questions, the hand-back when the primary drops again, and a returning primary resuming a chat the secondary continued.modstests that also fail on main on this Mac.pnpm -r typecheckand the mobile typecheck pass.