Windows app freezes during recurring heartbeat when in-app browser tab finalization times out

Open
#36,333 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
node.js, rust

Research direction

Start by reproducing the Windows heartbeat flow with browser.user.openTabs(), browser.user.claimTab(descriptor), URL/title verification, and browser.tabs.finalize() using the reported 8-second timeout. Trace the browser-control kernel reset and UI responsiveness after finalization hangs. Done means tab finalization releases the binding promptly, cleanup fails cleanly when needed, and recurring heartbeats no longer freeze the Windows app.

Written by the indexing model from the issue text.

Description

app automations browser bug tool-calls windows-os

Summary

The Codex Windows app repeatedly becomes unresponsive when a recurring thread heartbeat uses the in-app browser. Pausing the heartbeat stops the repeated freezes.

The browser can discover, claim, and verify the intended existing tab, but releasing the browser binding can hang until the bounded browser call times out and the Node-backed browser-control kernel resets.

Environment

  • Codex for Windows package: OpenAI.Codex 26.721.11231.0
  • OS: Windows 11 Pro, version 10.0.26200, build 26200
  • Automation type: thread heartbeat
  • Schedule: every 2 minutes on weekdays
  • In-app browser: 5-7 existing tabs
  • Automation has now been paused

Reproduction

  1. Open several tabs in the Codex in-app browser, including a TradingView chart.
  2. Create a lightweight recurring thread heartbeat every two minutes.
  3. On each heartbeat, run a local gate first. Most wakes finish in under one second without browser access.
  4. On an eligible wake, call browser.user.openTabs().
  5. Claim the matching descriptor with browser.user.claimTab(descriptor).
  6. Read the claimed tab URL/title to verify identity.
  7. Call browser.tabs.finalize() with an 8-second timeout.

Observed behavior

  • openTabs() returned the intended existing tab.
  • claimTab(descriptor) succeeded.
  • URL/title verification succeeded.
  • browser.tabs.finalize() timed out after 8 seconds.
  • Tool result: js execution timed out; kernel reset, rerun your request.
  • The Windows app subsequently showed “Codex is not responding” during repeated automation use.
  • Earlier, passing a user-tab ID into browser.tabs.get() returned Tab not found; switching to the supported descriptor-based claimTab() fixed claiming but not the finalization hang.
  • Task Manager screenshots showed normal overall machine load, so this did not appear to be system-wide CPU or memory exhaustion.

Relevant UTC timestamps from one reproduction:

  • Tab claim/verification attempt: 2026-07-31 around 14:16-14:17 UTC
  • Finalization timeout recorded: 2026-07-31 14:17:52 UTC

Expected behavior

  • Browser tab finalization should complete promptly and release the binding.
  • A lightweight recurring heartbeat should not make the Codex Windows UI unresponsive.
  • If cleanup fails, the browser operation should fail cleanly without hanging or requiring the browser-control kernel to reset.

Impact

Recurring browser-backed monitors are not reliable on Windows because cleanup can hang, and a frequent heartbeat amplifies the problem. The only safe mitigation was to pause the automation and use a persistent circuit breaker.

Additional notes

  • The automation was read-only and never placed or modified orders.
  • Browser calls were limited to 8 seconds, total intended browser work to 12 seconds, with no retries.
  • Credentials and private market-data values are intentionally omitted.
  • Session logs and screenshots can be provided privately if needed.
Dominant language
Rust
Stars
125k
Forks
19.5k
Avg merge
1m
Merged PRs (30d)
1k

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.

More from openai/codex

All issues in openai/codex

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.