[BUG] v2.1.204: new --resume session picker ignores all keyboard input (regression from 2.1.203)

Resolved 💬 5 comments Opened Jul 8, 2026 by saionji Closed Jul 8, 2026

Summary

In v2.1.204, the new claude --resume session picker (the "N awaiting input · N working · N completed" grouped view) ignores all keyboard input — typing, arrow keys, Enter, ?, and double Ctrl-C all do nothing. The process must be killed externally. In a project with 29 sessions the "Completed" group also never renders any session rows (only the group header and the "describe a task for a new session" input box appear).

Downgrading to 2.1.203 (or 2.1.201/2.1.202, which use the previous picker UI) fully restores --resume under identical conditions, so this is a regression introduced in 2.1.204.

Environment

  • Claude Code v2.1.204, native installer, Linux 6.8.0-124-generic (Ubuntu)
  • Settings of note: "tui": "fullscreen", "permissions": {"defaultMode": "auto"}, model claude-fable-5[1m]
  • Reproduced in a real terminal and in fresh tmux panes (100x30), across two unrelated projects

Steps to reproduce

  1. Upgrade to 2.1.204
  2. Run claude --resume in a project with past sessions
  3. Picker shows the header (0 awaiting input · 0 working · N completed), the Completed N group header, and the task-description input box
  4. Press anything — nothing happens; typed characters never appear in the input box, arrows/Enter don't navigate or expand, Ctrl-C twice does not exit

Diagnostics performed

  • Keystrokes reach the process: launching the picker under strace -f -e trace=read shows the main process reading the injected keys (e.g. read(11, "X", 262144) = 1, read(11, "\33[B", 262144) = 3) — input arrives at the app layer but the UI never reacts. The process sits at 0% CPU (sleeping), so it is not busy parsing.
  • Not the session files: moving all *.jsonl files (and separately all session subdirectories) out of ~/.claude/projects/<proj>/ does not help — the picker still ignores input with zero sessions on disk. No corrupt jsonl found (all final lines valid JSON, no NUL bytes). The project does have large transcripts (634MB total, largest 54MB), but that was ruled out as the cause.
  • Not the daemon state: claude daemon stop --any (killing a leftover background session) followed by a fresh picker launch — still frozen.
  • Not project config: temporarily removing the project .claude/ directory changes nothing; a second project with no .claude/ at all shows the same input-dead behavior (its 2 session rows do render there, but Down+Enter never resumes a session).
  • --debug-file log shows a normal startup (/resume: loading sessions for cwd=..., found 29 session files on disk) with no subsequent errors related to the picker; only unrelated startup noise (a plugin MCP config validation error, network timeouts to Grove/bootstrap endpoints behind a proxy).
  • Version bisect in the same terminal/tmux/project: 2.1.201, 2.1.202, 2.1.203 (previous "Resume session (1 of 29)" picker with search box) all render the full session list and navigate correctly. 2.1.204 is the first broken version.

Expected

Session rows render and keyboard input (navigate/select/exit) works, as in ≤2.1.203.

Workarounds found

  • claude --continue (bypasses the picker)
  • claude install 2.1.203 / running the pinned older binary from ~/.local/share/claude/versions/

Possibly related but distinct: #52995 / #22204 attribute resume hangs to large session files; in this case the freeze persists with zero session files on disk, so the trigger appears to be the new picker UI itself (possibly its interaction with tui: "fullscreen" or the auto permission mode — not isolated further).

View original on GitHub ↗

This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗