Interactive input broken on Linux (regression between 2.0.77 and 2.1.6)

Status Closed — not planned
Reported on v2.1.6
Maintainer reply None cached
Activity 5 comments · opened Mar 2, 2026 · closed Apr 2, 2026

Description

Claude Code interactive mode drops nearly all keystrokes on Linux. The input handler appears to stop reading from stdin after initialization. Non-interactive mode (claude -p) works fine.

Environment

  • OS: Ubuntu 24.04.3 LTS (Noble Numbat)
  • Kernel: 6.14.0-37-generic (also reproduced on 6.17.0-14-generic)
  • Architecture: x86_64
  • Node.js: v24.13.0 (via nvm)
  • Working version: 2.0.77
  • Broken versions: 2.1.6, 2.1.5, 2.1.61, 2.1.63 (both npm and native installer)

Reproduction

  1. Install Claude Code >= 2.1.0 on Ubuntu 24.04 (tested via both npm install -g and native installer via curl -fsSL https://claude.ai/install.sh | bash)
  2. Run claude in interactive mode
  3. Type any text — approximately 4 out of 5 keystrokes are dropped/ignored

Diagnostic findings

  • Normal terminal input: works fine
  • Node.js raw mode test (readline + setRawMode + keypress events): works fine
  • Ink-style stress test (heavy ANSI rendering + raw mode input): works fine
  • Claude Code interactive mode: broken — keystrokes not registered
  • Claude Code non-interactive (claude -p "hello"): works fine
  • strace: shows the main Claude Code process (PID reading stdin byte-by-byte during config initialization) stops reading from fd 0 entirely after startup. User keystrokes never reach the process. Zero read(0, ...) calls corresponding to typed characters.

What was ruled out

  • Not SSH-related (reproduced directly on the machine with physical access)
  • Not terminal-related (reproduced across Ghostty, Terminus, and local terminal)
  • Not tmux-related (reproduced with and without tmux)
  • Not config-related (reproduced with empty {} settings, disabled plugins, removed statusLine/hooks)
  • Not resource-related (machine has 15GB RAM, <2GB used, low CPU)
  • Survives full reboot
  • Survives complete reinstall (rm -rf + fresh install)
  • Version 2.0.77 works perfectly on the same machine

Key evidence

The strace (strace -e read,poll -f -o trace.log claude) shows:

  • During startup: read(0, "c", 1) = 1 etc. reading config JSON char by char
  • After startup: no further reads from fd 0 — the interactive input handler never reads user keystrokes

This suggests something changed in the stdin/input handling between 2.0.77 and 2.1.x.

View original on GitHub ↗

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