Repository navigation
Description
Summary
On Desktop 2.2.2 the built-in browser pane never becomes available: its side-panel launcher appears for a moment and then disappears, the browser.open ("Open browser") command stays disabled so Ctrl+Alt+B does nothing, and the browser.* Code Mode namespace is missing from the agent's tool catalog. No /api/rpc/experimental.browser/attach request reaches the server at all, so the pane never even starts its attach handshake.
Environment
- opencode version: 2.2.2 (Desktop; bundled CLI 2.2.2, background service 2.2.2 at
http://127.0.0.1:28894) - OS: Windows 11
Microsoft Windows [Version 10.0.26100.1742], x64 - Terminal: Unavailable: issue is in the Desktop app, not a terminal UI
- Shell:
C:\Windows\system32\cmd.exe - Install/channel: release, installed under
%LOCALAPPDATA%\Programs\ai.opencode.desktop, auto-updated to 2.2.2 on 2026-10-30 02:13 local - Active plugins: none (
"plugins": []in~/.config/opencode/opencode.json); nobrowserpermission rule anywhere inopencode.json/opencode.jsonc
Reproduction
- Launch OpenCode Desktop 2.2.2 on Windows 11 x64 and open a session.
- Open the side region's New tab launcher list: the globe (Open browser) item is listed only briefly, then disappears.
- Reload the window (or reopen the app); the same icon flashes in and out again.
- Press
Ctrl+Alt+B, or pick Open browser from the command palette: nothing happens. The command is disabled. - Ask the agent to use the browser tools (e.g.
browser.tabs.list): thebrowsernamespace does not exist in the catalog.
Expected Behavior
The browser pane opens from the launcher, from Ctrl+Alt+B, and the session exposes the browser.* Code Mode namespace, as documented in https://opencode.ai/v2/docs/tools ("Browser").
Actual Behavior
- The launcher is registered and then withdrawn immediately.
browser.opennever enables, so there is no keyboard or palette fallback.browser.*is absent from the tool catalog for the session.- Server log for this app session (
~/.local/share/opencode/log/opencode.log, app started 2026-10-30T02:30Z) contains zeroPOST /api/rpc/experimental.browser/attachentries, i.e. the pane does not attempt to attach. Earlier sessions do show failing attaches:
2026-10-29T12:24:25Z POST /api/rpc/experimental.browser/attach http.status=400
2026-10-29T13:51:25Z POST /api/rpc/experimental.browser/attach http.status=400
2026-10-30T01:49:45Z POST /api/rpc/experimental.browser/attach http.status=499
Additional Context
The availability gate in the shipped 2.2.2 bundle only depends on local state, which matches "no attach request is ever sent":
const available = (session: SessionRef) =>
!state.unsupported[session.server.id] && !!session.id && session.server.compatible && !layout.narrow()and the launcher is registered only when both gates pass:
if (!view || !value?.available(view) || !value.attached(view)) return undefined
→ { menu: "session.panel", id: "open", icon: "globe", keybind: "browser.open", order: 15 }state.unsupported[server.id] is set to true when the pane's control stream yields browser.pane.unsupported, which is produced for rpc.unavailable, rpc.method_not_found, and rpc.invalid_input (the 400 attach responses above fit the last one). That flag is not reset anywhere in the store, so a single failed attach disables the browser pane, its launcher, its command, and the browser.* tools for the rest of the app session — restarting the app is the only recovery, and it did not recover here.
Related observation in the same area: with the side region set to the Side tabs layout, clicking the side-panel launcher did not open the region at all (Ctrl+Shift+R / review.toggle still worked); switching the layout back to Tab made clicking work again.
Workarounds tried: window reload (launcher flashes again then disappears), layout switch (fixes only the click-to-open regression, not the pane).
Impact: the browser tooling introduced for Desktop is completely unreachable in this install, with no keyboard fallback.
Activity
opencodejr commentedon Oct 30, 2026
Thanks for the very detailed report and for digging into the bundle.
I think this is a duplicate of #60369. On Desktop 2.2.2 for Windows, the built-in browser part of the desktop build fails to load (
SyntaxError: Identifier 'n' has already been declared). When that happens the pane never starts, so noexperimental.browser/attachrequest is sent, the launcher disappears andbrowser.openstays disabled. That matches what you saw, including the zero attach requests after a restart and restarting not helping. You can check by looking for thatSyntaxError(ascope finalizer failederror for thebrowserscope) in the desktop app'smain.log.Possible duplicates and related issues, ordered by likelihood:
unsupported/replacedstates you describe, which hide the launcher until the app restarts (related fix: fix(browser): keep launcher available while pane is detached #60123). This is a real problem, but since it clears on restart it doesn't explain a failure that survives restarts.The bot will close this issue as a duplicate in 1 day unless you reply explaining how your problem is different, for example if
main.logdoesn't show thatSyntaxError.RonnyWu commentedon Oct 30, 2026
Confirmed — thank you for the pointer, that is exactly it. Closing this as a duplicate of #60369 is the right call.
Evidence from this machine (Windows 11
10.0.26100, Desktop 2.2.2), from%APPDATA%\ai.opencode.desktop\logs\20261030T014949\main.log:The timing lines up with a relaunch: the error is logged at
10:30:13.295, and a new instance starts 20 seconds later at10:30:33.923(logs\20261030T023033\main.log). So opening the pane crashes the main process while it imports the browser chunk, which also explains why restarting never helped.One detail that may be relevant to #60388: in the current instance,
main.logcontains only updater lines and noscope finalizer failedentry, because the pane never reaches the main-process import onceavailable()is false. The failure looks one-shot, on the first attach attempt after launch.Thanks also for the pointers to #60381 (New tab launchers ignoring clicks) and #60023 (sticky
unsupportedstate) — both match what I observed on the side-panel side.No objection to auto-closing this as a duplicate.
Hona commentedon Oct 30, 2026
Fixed in 2.2.3 by #60430.
The desktop main-process bundle declared
requiretwice, which broke the in-app browser and itsbrowser.*tools.Please update to 2.2.3. In the desktop app, use Check for Updates, or install it from the release page. If the browser pane still doesn't appear afterwards, please reopen this issue with your
main.logfrom the logs folder.opencodejr commentedon Oct 31, 2026
We haven't heard back, so I'm closing this as a duplicate of #60369. That issue covers the same problem on Desktop 2.2.2: the browser part of the desktop build fails to load (
Identifier 'n' has already been declared), so the pane never attaches, and the launcher,Ctrl+Alt+Band thebrowser.*tools all disappear. A fix is proposed in #60388. Please follow #60369 for updates. Related issues: #60023 (theunsupportedflag that hides the launcher until restart) and #60381 (New tab launchers ignoring clicks, which likely covers your Side tabs observation).If your
main.logdoesn't show thatSyntaxError, or the problem is still there once #60369 is fixed, please reply here with the details and we can reopen this.