[Windows] Codex Desktop exits when Browser Use creates first IAB tab after route mismatch

Open 💬 4 comments Opened Jul 15, 2026 by S0L0RIEN

What version of the Codex App are you using?

Codex Desktop Microsoft Store package: 26.707.9981.0

Bundled Browser plugin selected by the task: openai-bundled/browser/26.707.72221

What subscription do you have?

ChatGPT account in Codex Desktop. Subscription details omitted from this diagnostic.

What platform is your computer?

Windows 10.0.26200.8655 x64.

What issue are you seeing?

Codex Desktop exits completely when Browser Use creates its first controlled in-app-browser tab. Windows itself remains stable; this is only a Codex Desktop process/AppX-container termination.

Browser runtime initialization, acquiring agent.browsers.get("iab"), and reading browser documentation all succeed. The failure occurs when tabs.new() creates and attaches the blank controlled about:blank webview.

The Desktop lifecycle logs show the persisted task route and a temporary client-new-thread:* route diverging. The tab is attached under the temporary route, after which Codex Desktop disappears without a crash dialog.

What steps can reproduce the bug?

  1. Fully quit and relaunch Codex Desktop.
  2. Use one persisted root task.
  3. Do not run collaboration subagents or parallel Browser Use tasks.
  4. Enable the bundled Browser plugin.
  5. Initialize the documented Browser runtime and acquire the IAB backend.
  6. Run:
await iab.nameSession("Built-in browser health check");
const tab = await iab.tabs.new();
await tab.goto("https://example.com/");

The app exits during/just after tabs.new(), before navigation completes.

Sanitized lifecycle evidence

The persisted route is captured, but a Browser Use host is created for a temporary draft ID:

IAB_LIFECYCLE captured browser use session route
conversationId=<persisted-id>

IAB_LIFECYCLE created browser use host
conversationId=client-new-thread:<temporary-id>

The first backend-info request can complete, then the repeated request for the persisted task fails:

IAB_LIFECYCLE iab backend info request completed
conversationId=<persisted-id>

IAB_LIFECYCLE iab backend info request failed
conversationId=<persisted-id>
errorMessage="No ChatGPT browser route is available for browser session <persisted-id>"

The new blank tab is mapped under the temporary route:

IAB_LIFECYCLE iab createTab mapped page to tab
conversationId=<persisted-id>
pageKey=1:client-new-thread:<temporary-id>:browser-use:<redacted>
routeKey=1:client-new-thread:<temporary-id>

[mcp-app-sandbox] mcp_app_sandbox.attach_unmatched
guestWebContentsId=2 url=undefined urlProtocol=invalid

The final Desktop log entry shows the IAB webview reaching dom-ready on about:blank. Approximately three seconds later, Windows AppModel records the Codex Desktop AppX container as destroyed.

There is no Codex Application Error/WER entry and no Windows crash or BSOD. Codex simply disappears and must be relaunched.

What is the expected behavior?

  • The temporary draft route should be atomically canonicalized to the persisted task ID before tabs.new().
  • The controlled IAB tab should remain attached to the current root task.
  • A route-binding failure should return a recoverable Browser error instead of terminating Codex Desktop.
  • Navigation to https://example.com/ should complete normally.

Additional information

  • Reproduced multiple times after a full Codex restart.
  • Reproduced with one root task and no subagents, so concurrency is not required.
  • Not website-specific; the controlled tab exits while still on about:blank.
  • The same class of draft-to-persisted route divergence is discussed in #20678, but that report is explicitly macOS-focused.
  • #33133 contains the same attach_unmatched ... url=undefined urlProtocol=invalid signature on macOS; this report adds a deterministic Windows Codex Desktop AppX-container exit.
  • The older generic Windows close/disappear report #24998 did not include this Browser/IAB reproduction or route evidence.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗