Bug Report: Chat messages intermittently fail to send because the in-app browser route is unavailable
Nobody has claimed this yet.
- 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.026.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
- A prompt is entered in Chat.
- The Send button is clicked.
- No response begins.
- The prompt sometimes remains in the composer as an unsent draft.
- There is no visible error explaining that submission failed.
- Retrying later may send the same prompt successfully.
- 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:
- browser-use session creation,
- transient-to-durable conversation ID rebinding,
- debugger-listener registration,
- browser route lookup, and
- 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:
- Register the browser route before exposing the session as active.
- Make transient
client-new-thread:*to durable conversation-ID rebinding atomic. - Queue or retry
getInfoand Send operations while route registration is pending. - Never silently lose a Send action.
- Display a recoverable error when route acquisition times out.
- Dispose stale hidden browser tabs and obsolete session routes.
- Deduplicate concurrent route-creation attempts.
- Add lifecycle telemetry that correlates the transient thread ID, durable conversation ID, browser tab ID, route key, and web contents ID.
- Prevent
ResizeObservererror 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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