[BUG] Custom `voice:pushToTalk` keybinding silently ignored on Windows v2.1.126 (regression of v2.1.71 fix)

Resolved 💬 2 comments Opened May 1, 2026 by mansooraftab Closed May 1, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

voice:pushToTalk is documented as rebindable via ~/.claude/keybindings.json per the v2.1.71 release notes:

"Added voice:pushToTalk keybinding to make the voice activation key rebindable in keybindings.json (default: space) — modifier+letter combos like meta+k have zero typing interference"

In practice on v2.1.126 / Windows 11, custom voice bindings are silently not honored. The keybinding parser accepts them and the NUX renders the bound key correctly, but the voice subsystem never actually subscribes to the bound key — only Space triggers PTT, regardless of what's in the file.

This is voice-specific, not a general keybindings problem. In the same file, in the same Chat context, with one restart: a custom meta+j → chat:modelPicker binding fires correctly, while a custom meta+p → voice:pushToTalk binding does not.

Issue #33393 was the original feature request, closed as duplicate — presumably consolidated with the v2.1.71 implementation work. On v2.1.126 the actual runtime behavior contradicts the release-note claim.

What Should Happen?

A custom binding like "meta+p": "voice:pushToTalk" in keybindings.json should fire push-to-talk on Alt+P. The voice subsystem should subscribe to whichever key is bound to voice:pushToTalk in the file, not be hardcoded to Space.

Error Messages/Logs

None. This is a silent-failure case: the binding parses without complaint, the NUX renders the custom key, no errors or warnings are emitted. Pressing the bound key simply produces no observable behavior.

Steps to Reproduce

~/.claude/keybindings.json — Chat-context excerpt; everything else default:

{
  "context": "Chat",
  "bindings": {
    "meta+p": "voice:pushToTalk",
    "meta+j": "chat:modelPicker"
  }
}
  1. Save the file. Run /exit and relaunch Claude Code (full restart, not hot-reload).
  2. Confirm bindings load: the NUX renders Alt+P next to the voice indicator and Alt+J next to the picker indicator — both display correctly.
  3. Press Alt+J → model picker opens. Non-voice custom binding fires.
  4. Hold Alt+P → nothing happens. Voice binding silently ignored.
  5. Hold Space → PTT fires normally.
  6. Delete the space → voice:pushToTalk line entirely from keybindings.json, restart, hold Space → PTT still works. Indicates Space PTT is a hardcoded built-in default rather than file-driven.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

Unknown — never personally observed working on any version.

Claude Code Version

2.1.126

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

Environment:

  • OS: Windows 11 Pro 10.0.26200
  • Shells tested: Git Bash and PowerShell (same result in both)
  • Voice mode: enabled, hold mode

Related:

  • Issue #33393 (closed as duplicate) — original feature request asking for exactly this rebinding
  • v2.1.71 release notes — claim feature was implemented

---
<sub>_Reproduction steps and write-up drafted with assistance from Claude Code._</sub>

View original on GitHub ↗

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