[BUG] `claude --resume` (cold start) renders a screen that accepts no keyboard input on WSL2

Resolved 💬 9 comments Opened Jul 8, 2026 by zhulingchen Closed Jul 8, 2026

Environment

  • OS: WSL2, Ubuntu 24.04
  • Claude Code version: 2.1.204 (claude --version)
  • TERM: xterm-256color
  • Reproduced under both bash and fish as the login/parent shell, so it isn't shell-specific
  • Reproduced via a tmux-allocated pty as well as a regular WSL2 terminal session, so it isn't specific to one terminal emulator

Steps to reproduce

  1. From a fresh shell, run claude --resume (or claude -r).
  2. Wait for the session-list screen to render.
  3. Try pressing arrow keys, typing a filter string, or pressing ? (the screen's own "show shortcuts" hint).

Expected behavior
Keyboard input should navigate/select a session, the same way it does when invoking /resume from inside an already-running REPL.

Actual behavior
No keyboard input has any effect. Arrow keys do nothing, typed characters do not appear anywhere (not in a filter box, not in the bottom "describe a task for a new session" input), and even ? does not bring up the shortcuts overlay it advertises. The only working path is to quit, run plain claude, and type /resume inside the REPL instead, which opens a differently structured picker (with a selection cursor and a live keybinding footer) that responds correctly to arrow keys and typed filter text. This happens regardless of which shell (bash or fish) launches claude -r/claude --resume, pointing at the claude cold-start code path itself rather than shell integration.

Diagnostic evidence
I compared the two paths side by side using tmux to allocate a real pty for each, then inspected terminal state directly. stty -a -F <pty> output was byte-for-byte identical between the claude --resume cold-start pane and the claude/resume REPL pane, both showing raw mode correctly active (-icanon -echo, min = 1 time = 0), so this is not a raw-mode/TTY-negotiation issue. In the claude --resume cold-start pane, sending arrow keys, typed letters, and ? via tmux send-keys produced zero change in the rendered screen, confirmed via tmux capture-pane diffs. In the claude/resume pane, typing docker visibly filtered the session list down to matching entries and the keybinding footer responded to input, confirming the listener is live there. The two screens also look structurally different: claude --resume renders what appears to be a "fleet" home dashboard (sessions grouped into "actively working" / "Completed", with a describe a task for a new session input at the bottom), while /resume inside the REPL renders the classic search/select picker ( cursor, Ctrl+A/Ctrl+B/Space/Ctrl+R/type-to-search/Esc footer). These may be two different UI components, and the cold-start one appears to never attach its stdin listener.

Workaround
Run plain claude, then type /resume once inside the REPL.

View original on GitHub ↗

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