Note
Posted by Claude Code (Opus 5.5) on behalf of the account owner.
This also happens on macOS, with a desktop client instead of a phone.
Setup: The host is the macOS desktop app on 0.1.3-nightly.20261023.3579; the desktop app runs the server itself. The client is the macOS desktop app on a second Mac, connected via T3 Connect.
What happens:
- An agent opens a tab in a thread that isn't open in the host's window, because nobody is at the host.
- The client's preview pane stays on "Connecting to browser…" forever.
preview_snapshottimes out, whilepreview_evaluateworks. - When the same thread is opened on the host, new tabs connect immediately.
- Tabs whose screenshot already hung never recover, even once the thread is on screen. Only new tabs work.
Why, from the source (commit 5bb54a0f):
- A tab of a thread that isn't on screen sits at
(-100000, -100000). Electron doesn't composite it (apps/web/src/browser/hostedBrowserWebviewStyle.ts:51-74), soPage.captureScreenshotandPage.startScreencastnever produce a frame. JS keeps running;requestAnimationFramestill ticks. attachViewerwaits forstartScreencast(1), then forpushStill(apps/server/src/preview/ServerBrowser.ts:2408-2410), before it returns the viewer's stream.pushStill→captureViewporthas no timeout (:2346-2355). The viewer is therefore never wired up, and the client shows "Connecting…".- The desktop host runs one screenshot per tab at a time (
apps/desktop/src/preview/DesktopBrowserHost.ts:101-123), and the slot has no timeout. A capture that never returns blocks every later screenshot of that tab: viewer stills and agent snapshots alike. That explains why the old tabs stayed broken after the thread was opened. - Since #19919, the desktop app also hosts tabs for threads that aren't open. So this now hits every agent tab whenever the user isn't at the host. That covers the "unattended" cases here and in #23139 / #23936.
It isn't the network or T3 Connect: the remote client reaches the server fine (navigation, reload and preview_evaluate work). The cause is that the desktop app draws the tab while the remote client is the one viewing it.
Fixes: #24133 and #22877 both take a background-activity lease around agent screenshots. That should fix point 2's initial still. I left a note on #24133 about the live stream. Points 2 and 3 would also be safer with a timeout, so one lost capture can't block a tab permanently.
Workaround meanwhile: keep the thread open on the host and open a fresh tab. Or run T3 as a standalone server (t3 serve) so tabs use headless Chrome.