Esc does not interrupt streaming response (Ctrl+C works); reproduces across terminals on latest 2.1.187 / macOS

Open 💬 0 comments Opened Jun 24, 2026 by darion-yaphet

What happened

Pressing Esc while Claude is actively streaming a response does nothing — the
generation continues. Ctrl+C interrupts correctly in the same moment, so the
interrupt path itself works; only the Esc keybinding is dead.

Repro

  1. Start claude in the terminal
  2. Ask anything that produces a multi-second streaming response
  3. While it is streaming, press Esc → no effect, output keeps going
  4. Press Ctrl+C instead → interrupts immediately

Scope / what I already ruled out

  • Cross-terminal: reproduces in both Kaku and Ghostty → not a single terminal emulator
  • Latest version: 2.1.187, claude update reports up to date
  • Single install: removed a leftover npm global (@anthropic-ai/claude-code@2.1.156); now only the native ~/.local/bin/claude remains; still reproduces
  • No Vim mode, no custom ~/.claude/keybindings.json
  • No global key remapper (no Karabiner-Elements / Hammerspoon / etc. running)
  • Not a timing issue: Esc is pressed during active streaming (the window where it should interrupt)
  • Ctrl+C interrupting fine → interrupt mechanism works, Esc keycode handling specifically does not

Environment

  • Claude Code: 2.1.187 (native install, ~/.local/bin/claude)
  • macOS 14.6 (23G80), arm64
  • Terminals confirmed: Kaku 0.12.1, Ghostty
  • TERM=xterm-256color

Why the detail matters

"Cross-terminal + latest version + Ctrl+C works but only Esc fails" should narrow
this to Esc keycode handling in the TUI rather than terminal/config/version.

View original on GitHub ↗