Skip to content

Run agents in a hidden page on macOS - #1893

Draft
loganj wants to merge 1 commit into
agents-link-runningfrom
agents-runner-page
Draft

loganj wants to merge 1 commit into
agents-link-runningfrom
agents-runner-page

Conversation

@loganj

@loganj loganj commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The Runner becomes its own service, apart from the Manager. On macOS it runs in a hidden agents webview, which the system never throttles. That page has the agent storage and the plugins' agent entries. The screens' page keeps the Manager.

Only JSON crosses, over the native agents port, on two lanes:

  • agents: the Manager and Runner link;
  • page: where agent storage is, the followed communities, and local activity.

Details:

  • The Runner owns presence, keep-awake, agent hooks and the reconnect of its own connections. A failed relay is retried at most every 30 s, whichever owner asks.
  • The Manager waits at most 10 s for the Runner's first decision.
  • The agents page starts the Runner once the screens' page says where agent storage is. The screens' page still loads and moves the storage first.
  • Other platforms keep the Runner in the screens' page.

Value: on macOS, agents keep running when the app's window is hidden or throttled.

This is column 4 of 4 in the Manager/Runner split. It squashes #1892 and #1893. It also carries #1735 (native work belongs to the webview that started it) and the native page parts of #1743 and #1744. #1735 can merge first; this PR then drops its copy.

Stack

  1. refactor(plugins): give plugins an agent entry, and split each harness into runtime and UI #1716: plugin split. Base: main.
  2. Give the Runner its own owner of agent state, in the same page #1748: the Runner owns agent state, in the same page.
  3. Cross between the Manager and the Runner only over the JSON link #1833: the Manager and the Runner cross only over the JSON link.
  4. Run agents in a hidden page on macOS #1893 (this PR): on macOS, agents run in a hidden page.

Validation at cadac4c1a

  • tsc is clean, and cargo fmt --check passes.
  • Full Vitest run: all pass, with no unhandled errors, except 3 tests that also fail on main on this machine (2 emoji-picker theme tests and one StatusEditor test).
  • Chromium agent specs (agent-*.spec.mjs and local-agent-activity.spec.mjs): 53 of 53 pass at 56d8d5b59. The only change since then is Cross between the Manager and the Runner only over the JSON link #1833's test-fixture fixes, plus one listener binding in the Claude and Codex tabs.
  • Rust tests: 576 pass. 2 nsec_backup keychain tests failed under the full parallel run and pass on their own; this PR does not touch that code.

Deferred: a real just desktop run on macOS. It is the only check that runs the hidden page and the native port together. Also a human test in the app.

🤖 Generated with Claude Code

@loganj
loganj force-pushed the agents-runner-page branch from 63430de to 56d8d5b Compare October 29, 2026 13:55
loganj added a commit that referenced this pull request Oct 29, 2026
The Runner becomes its own service, apart from the Manager, and on macOS
it runs in a hidden "agents" webview that the system never throttles,
with its storage and the plugins' agent entries. The screens' page keeps
the Manager. Only JSON crosses, over the native agents port, on two
lanes: "agents" for the Manager and Runner link, and "page" for where
agent storage is, the followed communities, and local activity.

- The Runner owns presence, keep-awake, agent hooks and the reconnect
  of its own connections.
  A failed relay is retried at most every 30 s, whichever owner asks.
- The Manager waits at most 10 s for the Runner's first decision.
- The agents page starts the Runner once the screens' page says where
  agent storage is; the screens' page still loads and moves it first.
- Other platforms keep the Runner in the screens' page.

Includes #1735 (page-owned native work), #1743 and #1744's native page.
Squashes #1892 and #1893.

Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@loganj
loganj changed the base branch from agents-runner-service to agents-link-running October 29, 2026 13:55
The Runner becomes its own service, apart from the Manager, and on macOS
it runs in a hidden "agents" webview that the system never throttles,
with its storage and the plugins' agent entries. The screens' page keeps
the Manager. Only JSON crosses, over the native agents port, on two
lanes: "agents" for the Manager and Runner link, and "page" for where
agent storage is, the followed communities, and local activity.

- The Runner owns presence, keep-awake, agent hooks and the reconnect
  of its own connections.
  A failed relay is retried at most every 30 s, whichever owner asks.
- The Manager waits at most 10 s for the Runner's first decision.
- The agents page starts the Runner once the screens' page says where
  agent storage is; the screens' page still loads and moves it first.
- Other platforms keep the Runner in the screens' page.

Includes #1735 (page-owned native work), #1743 and #1744's native page.
Squashes #1892 and #1893.

Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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