claude-code - 💡(How to fix) Fix Double-Esc (message selector) freezes input dispatch in resumed sessions on macOS [3 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#53227Fetched 2026-04-26 05:21:07
View on GitHub
Comments
3
Participants
3
Timeline
13
Reactions
0
Author
Timeline (top)
labeled ×4commented ×3mentioned ×2subscribed ×2

Pressing Esc twice to open the message-selector (jump-to-previous-message) menu in a session started with claude --resume makes the TUI unresponsive. Arrow keys, Enter, and even Ctrl+C are ignored. The menu is rendered but no further input is processed.

The same key sequence works correctly in a brand-new session started with claude (no --resume), even after several turns.

Root Cause

Pressing Esc twice to open the message-selector (jump-to-previous-message) menu in a session started with claude --resume makes the TUI unresponsive. Arrow keys, Enter, and even Ctrl+C are ignored. The menu is rendered but no further input is processed.

The same key sequence works correctly in a brand-new session started with claude (no --resume), even after several turns.

Fix Action

Fix / Workaround

This strongly suggests the issue is input dispatch / TTY-mode handling, not a stuck syscall or runaway code path. After the message-selector is rendered, keystrokes from the terminal stop reaching the process loop.

Workaround currently in use

Code Example

Thread (com.apple.main-thread, serial):
  start (dyld)????????????kevent64 (libsystem_kernel.dylib)
  100% of samples in kevent64
RAW_BUFFERClick to expand / collapse

Summary

Pressing Esc twice to open the message-selector (jump-to-previous-message) menu in a session started with claude --resume makes the TUI unresponsive. Arrow keys, Enter, and even Ctrl+C are ignored. The menu is rendered but no further input is processed.

The same key sequence works correctly in a brand-new session started with claude (no --resume), even after several turns.

Environment

  • Claude Code: 2.1.118, 2.1.119, 2.1.120 (all reproduce)
  • macOS: 26.4.1 (ARM64)
  • Terminals tested: Warp, Apple Terminal.app — both reproduce
  • Reproduces on a second Mac as well, so this is not a single-machine config issue.

Reproduction steps

  1. claude --resume
  2. Pick any session from the picker and enter it
  3. Press Esc twice
  4. The message-selector list renders, but afterwards arrow keys, Enter, and Ctrl+C have no effect. Process must be killed from another terminal.

What does NOT reproduce the freeze

  • claude (new session) → double-Esc works normally, even after multiple turns
  • claude --bare (new session) → works normally

What still freezes

  • claude --resume (full plugins / hooks / MCP) → freeze
  • claude --bare --resume (no hooks, no LSP, no auto-memory, no plugin sync, no CLAUDE.md auto-discovery) → still freezes

So the trigger correlates with resume + message-selector, independent of plugins, hooks, LSP, MCP, CLAUDE.md size, or session jsonl size.

Isolation already attempted

Disabling each individually had no effect:

  • All five enabled plugins (telegram, swift-lsp, superpowers, codex, playwright) toggled off one at a time
  • Voice mode (push-to-talk) disabled
  • Stale orphan plugin processes (telegram MCP) cleaned up
  • Largest session jsonl files (18 MB / 7 MB / 3 MB / etc.) quarantined
  • Project .claude/ directory moved aside (hooks, skills, project settings, notion queue all gone)
  • CLAUDE.md removed
  • Sandbox forced off (sandbox.enabled: false)
  • Downgrade 2.1.119 → 2.1.118 attempted; same result

Stack sample at freeze

sample <pid> 3 shows the process is NOT in a busy loop or deadlock. Main thread is parked in kevent64 (idle, waiting for events). All worker threads are in normal waits (__ulock_wait2, __psynch_cvwait, etc.). CPU usage near zero.

Thread (com.apple.main-thread, serial):
  start (dyld) → ??? → ??? → ??? → ??? → kevent64 (libsystem_kernel.dylib)
  100% of samples in kevent64

This strongly suggests the issue is input dispatch / TTY-mode handling, not a stuck syscall or runaway code path. After the message-selector is rendered, keystrokes from the terminal stop reaching the process loop.

Workaround currently in use

  • Avoid double-Esc in resumed sessions
  • Use claude (new session) when needing to navigate history via the message-selector

Happy to provide additional sample dumps, debug logs (--debug), or a fuller reproduction recording on request.

extent analysis

TL;DR

The issue can be worked around by avoiding the double-Esc key sequence in resumed sessions or using claude to start a new session when needing to navigate history via the message-selector.

Guidance

  • The problem seems to be related to input dispatch or TTY-mode handling, specifically when resuming a session with claude --resume and using the double-Esc key sequence to open the message-selector menu.
  • To verify the issue, follow the provided reproduction steps and check if the TUI becomes unresponsive after pressing Esc twice.
  • As a temporary workaround, avoid using the double-Esc key sequence in resumed sessions or use claude to start a new session when needing to navigate history.
  • Providing additional sample dumps, debug logs (--debug), or a fuller reproduction recording may help identify the root cause of the issue.

Notes

The issue does not seem to be related to plugins, hooks, LSP, MCP, or session jsonl size, as disabling or removing these components did not resolve the issue.

Recommendation

Apply the workaround of avoiding the double-Esc key sequence in resumed sessions or using claude to start a new session when needing to navigate history, as the root cause of the issue is still unknown and no clear fix is available.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix Double-Esc (message selector) freezes input dispatch in resumed sessions on macOS [3 comments, 3 participants]