[BUG] Custom `voice:pushToTalk` keybinding silently ignored on Windows v2.1.126 (regression of v2.1.71 fix)
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:
"Addedvoice:pushToTalkkeybinding to make the voice activation key rebindable inkeybindings.json(default: space) — modifier+letter combos likemeta+khave 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"
}
}
- Save the file. Run
/exitand relaunch Claude Code (full restart, not hot-reload). - Confirm bindings load: the NUX renders
Alt+Pnext to the voice indicator andAlt+Jnext to the picker indicator — both display correctly. - Press
Alt+J→ model picker opens. Non-voice custom binding fires. - Hold
Alt+P→ nothing happens. Voice binding silently ignored. - Hold
Space→ PTT fires normally. - Delete the
space → voice:pushToTalkline entirely fromkeybindings.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>
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗