Note
Grok responding on behalf of Julius.
Thanks for the detailed report and the server-tab differential. I traced this in code on main (ff3a04a8) but haven't reproduced it in a running app. I found a specific path that matches every symptom, if your desktop app runs in WSL-only mode, meaning the WSL backend is the app's primary backend rather than a second backend next to the Windows one. Can you confirm which setup you have?
Likely mechanism (WSL-only primary)
- The WSL primary never gets the desktop browser channel. The Windows primary is spawned with browser fds 6/7 (
DesktopBackendConfiguration.tsL574-L575). In WSL-only mode,resolvePrimaryusesbuildWslPrimaryConfiginstead. That reuses the primary's port and identity ("primary-aware code paths … keep working"), but its bootstrap has no browser fds and is delivered over stdin (L773), because "wsl.exe drops additional file descriptors" (DesktopBackendManager.tsL504-L507). On the server, that makesDesktopBrowserChannelavailable: false.desktopRendersthen returns false, and every tab runs on the server's own headless page. That's whypreview_open/preview_navigatework for agents. - The client still renders those tabs natively. Every server advertises
serverBrowser: true, so new tabs getruntime: "server".rendersServerTabNativelyonly checks Electron,runtime === "server"and environment == primary. It can't tell that this server has no desktop channel. SoElectronBrowserHostmounts a local<webview>markedserverDriven, andPreviewViewtreats the tab as native instead of streaming it. - URL entry goes to that local webview, and the server never hears about it. Submitting calls
previewBridge.navigateon the desktop webview. ForserverDriventabs the bridge skips reporting status (usePreviewBridge.tsL84), because the server normally sees navigation over the channel. Here there's no channel, so the server's snapshot staysIdle. Then:- The address bar blurs on submit (
PreviewChromeRow.tsxL106-L112) and shows the snapshot URL (L183,PreviewView.tsxL194). That URL is"", so you see the placeholder again. Idlekeeps the empty state (Local servers) on screen, and the webview slot isn't rendered.- Local-server clicks go through the same navigate path. No error appears anywhere, so it fails silently.
- The address bar blurs on submit (
Agents' preview_* tools and your panel end up on two different pages. That's the same class of split as #16901, except there it happens after a 10s attach timeout, and here it happens on every tab.
Not from T3 Code: the [browser.disconnected] No desktop browser is connected to this session string and the browser.tabs.list/browser.tabs.open tool names don't appear anywhere on main. T3 Code's agent browser tools are preview_*. That error most likely comes from the agent harness's own browser tooling, so it isn't evidence about the T3 desktop host.
Timing: this path came in with #15328 (merged Oct 6). The first nightly that includes it is 0.0.46-nightly.20261006.2735. The V2 nightlies you mention (20261003.2610 through 20261005.2702) don't have it. If the pane really was dead on those builds, something else is also involved. Please say whether it worked on 20261005.2702.
Next steps / fix options (unverified)
- Make "native vs. stream" depend on whether the server actually has the desktop channel. For example, the server could advertise a capability only when
DesktopBrowserChannel.available, andrendersServerTabNativelycould require it. Without it, a WSL-only primary would stream its headless tabs like any other environment. - Alternatively, have the desktop mark a stdin-bootstrapped (WSL) primary as not natively rendered.
- Longer term, carry the browser channel over a transport that survives
wsl.exe, such as a loopback socket, so WSL tabs render natively too. - Possible workaround (untested): turn off WSL-only mode and add WSL as a second backend next to the Windows one. Its tabs should then stream instead of using the local webview.
To confirm
- Is the desktop app in WSL-only mode? Does the WSL environment show as the primary/"This machine" environment in Settings → Connections?
- Did the Browser panel work on nightly
20261005.2702and stop on20261006.2735or later?
Related
- Open PR #16963 fixes #16638/#16639/#16640 in the environment-hosted browser, but it doesn't touch the native-vs-stream decision or the desktop browser channel. I don't expect it to fix this.
- None of the other open PRs that touch these files change this path either (#16956, #16961, #16620, #16626, #16835).
- #16901 is the same webview/headless split, with a timing trigger.
- #16639 is about search text in the address bar;
google.comalready resolves as a URL. #16641 is input blocking in streamed tabs. #15965 (closed) was the old preview-automation host batching. #11223 (closed) is desktop snapshots. All of these are distinct.