Rewind menu (Esc-Esc, /rewind) ignores keyboard input after resuming via `claude -r` picker
Summary
After resuming a session via the interactive claude -r picker, the rewind menu renders with the checkpoint list but completely ignores keyboard input (arrows, Enter, Esc). The only escape is killing the terminal.
The same session resumed via claude --resume <id> (direct, no picker) has a fully working rewind menu.
Environment
- Claude Code: 2.1.119
- OS: Windows 10 Pro (10.0.19045)
- Terminal: VS Code integrated terminal (ConPTY)
- Shell: bash (Git for Windows)
Reproduction
claude -r- Select any session from the picker
- Once loaded, press
EscEsc(or run/rewind) - Rewind menu appears, listing message checkpoints
- Arrow keys /
Enter/Escdo nothing — menu is unresponsive - Only fix: kill the terminal and start over
Workaround
claude --resume <session-id>
Direct resume (no picker) leaves the rewind input handler intact.
Investigation notes
- Reproduced across multiple sessions in the same project — universal, not session-specific data.
- JSONL of an affected session is structurally clean: all checkpoint
messageIdanchors resolve to real user messages, all referenced backup files exist in~/.claude/file-history/<sid>/, no terminal control bytes in content. - Initially suspected
custom-title/agent-nameentries (added by/rename); stripping them from the JSONL did not fix the bug. - Reproduced again in a session that had no
/rename/ no custom title — confirms picker, not data, is the trigger. - Other in-session TUI panes (slash menus, etc.) appear to work after picker-resume — only the rewind menu input is dead.
Likely cause: the -r picker is a separate Ink/TUI render that exits before the resumed session's TUI mounts; raw-mode / stdin handler state isn't fully restored on Windows ConPTY before the new TUI takes over, leaving the rewind menu's key subscription unbound.
Suggested fix
stdin is intact: typing and slash commands work after -r-resume. Only the rewind modal's useInput handler is dead. Other ▎ in-session modals worth testing to scope it (/agents, /permissions, etc.). Likely cause: the picker's Ink modal didn't fully unsubscribe its useInput hook on close, so when the rewind
▎ modal mounts later it gets shadowed by the stale subscription. Suggested fix: audit the modal input-stack unmount in the -r picker, or migrate it to the same modal API the working
▎ in-session menus use.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗