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
- Install Claude Code >= 2.1.0 on Ubuntu 24.04 (tested via both
npm install -gand native installer viacurl -fsSL https://claude.ai/install.sh | bash) - Run
claudein interactive mode - 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) = 1etc. 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.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗