openai / openai/codex

Bug Report: Chat messages intermittently fail to send because the in-app browser route is unavailable

Open
#44,338 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app browser bug windows-os
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

Bug Report: Chat messages intermittently fail to send because the in-app browser route is unavailable

Summary

Chat inside the OpenAI Codex/ChatGPT Windows desktop app intermittently appears frozen or unresponsive.

When the issue occurs, the message remains in the composer and is never submitted. Sending the same message again after the in-app browser route recovers works normally. This indicates that the model or ChatGPT backend is not hanging; the desktop app is losing the message before submission.

Local application logs repeatedly report:

No ChatGPT browser route is available for browser session

The evidence points to a race condition in the in-app browser (IAB) session-routing lifecycle.

Environment

  • OS: Windows
  • Application package: OpenAI.Codex
  • Executable process: ChatGPT.exe
  • Package builds observed in affected logs:
    • 26.901.6511.0
    • 26.903.8094.0
  • Chat surface: embedded ChatGPT Chat in the Windows desktop app
  • Multiple Codex tasks may be active concurrently
  • The failure also occurs without MCP tools, plugins, or local connectors

User-visible behavior

  1. A prompt is entered in Chat.
  2. The Send button is clicked.
  3. No response begins.
  4. The prompt sometimes remains in the composer as an unsent draft.
  5. There is no visible error explaining that submission failed.
  6. Retrying later may send the same prompt successfully.
  7. Once submission succeeds, ChatGPT responds normally in approximately 10 seconds.

Expected behavior

Clicking Send should either:

  • submit the message exactly once, or
  • display a clear error and preserve the draft if submission is impossible.

The app should not silently discard or delay the Send action because an internal browser route is temporarily unavailable.

Actual behavior

The app attempts to access the browser session before a valid route/listener has been registered.

Repeated log entry:

[browser-use-iab-api] IAB_LIFECYCLE iab backend info request failed
errorMessage="No ChatGPT browser route is available for browser session <conversation-id>"
request=getInfo

In affected sequences, the route is registered only after the failed requests. Logs show the following lifecycle pattern:

No ChatGPT browser route is available
created browser use host
syncing browser use active state
registered debugger listener

The browser-use host may be created using a transient identifier such as:

client-new-thread:<uuid>

while the failing request uses the durable Codex conversation ID. This suggests a temporary identity/rebinding mismatch.

Quantitative evidence from one affected application run

  • Missing ChatGPT browser-route errors: 585
  • ResizeObserver loop completed with undelivered notifications: 3,334
  • Browser-use hosts created: 66
  • Debugger listeners registered: 74
  • Debugger listeners unregistered: 37

Failures commonly occur in bursts rather than as isolated errors.

Stale browser-tab evidence

The application’s internal browser registry reported as many as:

appBrowserTabCount=9

although only one browser tab was visible to the user.

The internal registry also retained several thread/browser-use entries after visible tabs had been closed. This suggests stale or hidden IAB tabs and routes are accumulating.

Scope isolation

The following observations exclude several alternative causes:

  • The same Chat request succeeds after the route is registered.
  • Ordinary Chat prompts without MCP tools or plugins reproduce the problem.
  • The failure can occur before any request reaches ChatGPT.
  • The prompt remains in the composer, showing that submission was not completed.
  • No corresponding application-process crash was observed.
  • Renderer processes remained responsive.
  • The issue is therefore not specific to a local MCP server, tunnel, connector, port, or model-generation failure.

Likely root cause

A race condition exists between:

  1. browser-use session creation,
  2. transient-to-durable conversation ID rebinding,
  3. debugger-listener registration,
  4. browser route lookup, and
  5. Chat message submission.

Concurrent active tasks and accumulated hidden browser tabs appear to increase the likelihood of the race.

A secondary renderer problem is also present: repeated ResizeObserver errors may cause UI jank, but they do not fully explain the missing browser route.

Impact

  • Chat appears dead even though the backend is available.
  • User prompts may remain unsent without a visible error.
  • Retrying can cause uncertainty about duplicate submission.
  • Automated Chat validation becomes unreliable.
  • Restarting the application only provides temporary recovery.
  • The problem becomes more frequent when several Codex tasks use browser sessions concurrently.

Temporary workaround

Fully restarting the desktop application clears the in-app browser registry and usually restores Chat temporarily.

Reducing concurrent in-app browser/browser-use sessions also reduces recurrence, but this is not an acceptable permanent solution because the application supports parallel tasks.

Requested fix

Please consider the following application-level protections:

  1. Register the browser route before exposing the session as active.
  2. Make transient client-new-thread:* to durable conversation-ID rebinding atomic.
  3. Queue or retry getInfo and Send operations while route registration is pending.
  4. Never silently lose a Send action.
  5. Display a recoverable error when route acquisition times out.
  6. Dispose stale hidden browser tabs and obsolete session routes.
  7. Deduplicate concurrent route-creation attempts.
  8. Add lifecycle telemetry that correlates the transient thread ID, durable conversation ID, browser tab ID, route key, and web contents ID.
  9. Prevent ResizeObserver error loops from degrading the primary renderer.

Relevant log location

C:\Users\<user>\AppData\Local\Codex\Logs\

A sanitized affected log can be provided. Conversation content, account identifiers, and unrelated local data should be removed before submission.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing concurrent in-app browser activity and inspect the logs under C:\Users<user>\AppData\Local\Codex\Logs. Trace the reported session-creation, ID-rebinding, route-registration, and Send sequence. Done means Send submits exactly once or preserves the draft with a recoverable error, without missing-route failures or stale routes accumulating.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.