codex resume interactive picker hangs/freezes when session files are large; codex resume <id> works fine

Open 💬 3 comments Opened May 31, 2026 by xyx0527
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

codex resume interactive picker hangs/freezes when session files are large; codex resume <id> works fine

Summary

The interactive session picker launched by codex resume becomes completely unresponsive when the session list contains large .jsonl files. The UI renders the list but pressing Enter has no effect and no error is shown. Passing the session ID directly via codex resume <session-id> works correctly as a workaround.

The same symptom appears in the Codex desktop app (Windows Store): opening an existing conversation freezes the UI indefinitely, while creating a new conversation works fine. This suggests both issues share the same root cause — synchronous loading/rendering of large session history data blocks the UI thread.

Environment

| Field | Value |
|---|---|
| Codex CLI version | codex-cli 0.135.0 |
| OS | Windows 10 Home China (running CLI via PowerShell 7) |
| Hardware | Intel Core i9-13980HX, 32 GB RAM |
| Desktop App version | OpenAI.Codex 26.527.3686.0 (Microsoft Store) |

Session file sizes

The largest session file is ~17 MB. The picker freezes when this session is visible in the list.

rollout-2026-05-11T23-56-03-019e17c0-...  17,745,306 bytes  (last modified 2026/5/20)
rollout-2026-03-26T21-03-02-019d2a3d-...  11,095,058 bytes
rollout-2026-04-11T22-28-55-019d7cf2-...   9,076,656 bytes
rollout-2026-04-25T22-25-38-019dc508-...   8,972,159 bytes
rollout-2026-03-31T19-24-38-019d43a3-...   6,409,606 bytes
... (14 session files total)

Steps to Reproduce

  1. Accumulate several long Codex sessions over time (largest ~17 MB .jsonl)
  2. Run codex resume in PowerShell or WSL bash
  3. Interactive picker renders the session list correctly
  4. Highlight any session entry and press Enter
  5. Nothing happens — no response, no error, no session loads

Expected Behavior

Pressing Enter on a highlighted session should resume that session immediately.

Actual Behavior

  • Enter key has no effect
  • The picker remains frozen on screen
  • No error message or feedback is shown
  • CPU and memory usage remain normal (UI thread blocked, not crashed)
  • Ctrl+C is required to exit

Workaround

Passing the session ID directly bypasses the picker and works correctly:

codex resume 019e17c0-add1-7980-95d9-03fffecb18c8

Root Cause Hypothesis

The interactive picker appears to load or render session preview data synchronously on the UI thread. When session files are large (10–17 MB), this blocks input handling entirely. The codex resume <id> path skips the preview rendering step and therefore succeeds.

The Codex desktop app (Windows Store) exhibits identical behavior: existing conversations freeze the UI on open, while new conversations work fine. Both regressions appeared after recent app updates, suggesting a shared code path for session history loading was affected.

Related Issues

  • #19923 — Codex Windows "not responding" freeze/hang with long chat/thread
  • #20214 — Codex App frequently freezes/stutters on Windows 11 when opening existing chat sessions
  • #20544 — Codex Desktop freezes when opening mini/popout windows; image-heavy histories are much worse
  • #24251 — Windows Desktop freezes at turn start and completion
  • #28363 — Windows Codex app hangs indefinitely during context compaction

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 2 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #25390
  • #25163
  • #24676
  • #25215
  • #25251

Powered by Codex Action

grnbtqdbyx-create · 2 months ago

I built a small read-only helper for this exact failure mode, in case it helps people attach diagnostics without sharing private transcripts:

npx trace-to-skill@latest session-audit ~/.codex --format json

It walks local Codex JSONL/state files and reports only metadata: rollout JSONL size, line count, largest line size, parse-error count, session_index.jsonl line count vs rollout file count, state_5.sqlite / goals_1.sqlite presence, and signal counts such as thread/resume, thread/goal/get, response_item, function_call, and input_image.

Release: https://github.com/grnbtqdbyx-create/trace-to-skill/releases/tag/v0.1.54
Schema: https://github.com/grnbtqdbyx-create/trace-to-skill/blob/main/schemas/session-audit-result.schema.json

The intended use is to paste the summarized JSON/Markdown shape here, not the private rollout transcript contents.

Necmttn · 2 months ago

The picker should list from lightweight metadata and hydrate session bodies only after selection.

A safe list row needs session id, title, cwd, model, timestamps, source file path, file size, and maybe last summary. Large JSONL bodies, tool outputs, and images can stay behind byte offsets until the user opens a session.

That would explain why direct codex resume <id> works while the picker freezes: selection and hydration are coupled.

---

_Generated with ax._