Voice mode doesn't fully activate on session start when voiceEnabled is true
Resolved 💬 3 comments Opened Mar 16, 2026 by evankhans Closed Mar 20, 2026
Summary
When voiceEnabled: true is set in settings.json, Claude Code remembers the preference but does not actually initialize the voice UI or its underlying state machine on session start. This leads to a confusing interaction where the user believes voice mode is active but it is not, and the toggle behavior is inverted.
Current behavior
- Voice state not initialized on startup: Setting
voiceEnabled: truein~/.claude/settings.jsonpersists the preference across sessions, but on the next launch, the voice UI (recording indicator, PTT keybinding, audio pipeline) is never activated. The setting is stored but not acted upon.
- Push-to-talk keybinding is inactive: Because the voice state machine is not running, pressing Space (the PTT key) simply types a space character into the input field instead of activating push-to-talk recording.
- Inverted
/voicetoggle: SincevoiceEnabledis alreadytrueinternally, the first/voicecommand toggles it tofalse(turning voice off), which is the opposite of what the user expects. A second/voiceis required to actually activate voice mode. This is very confusing.
- Auto-send on PTT release is unreachable: The code path that auto-sends the transcribed message on key release exists, but because the voice state machine is never started on session init, this logic is never reached until after the double-toggle workaround.
Expected behavior
- When
voiceEnabled: trueis present in settings at startup, Claude Code should fully initialize voice mode: start the state machine, bind PTT to Space, show the voice UI, and enable auto-send on key release. - Alternatively,
/voiceshould always activate voice mode regardless of the stored setting (i.e., treat/voiceas "ensure voice is on" rather than a blind toggle), or at minimum sync the runtime state with the persisted setting on launch.
Feature request
Consider one or both of:
- Properly initialize voice on startup when
voiceEnabled: true— this is the most intuitive fix. - Add a
--voiceCLI flag (e.g.,claude --voice) that guarantees voice mode is active from the first prompt, independent of persisted settings.
Environment
- Claude Code CLI (latest)
- macOS
~/.claude/settings.jsonwith"voiceEnabled": true
Steps to reproduce
- Set
"voiceEnabled": truein~/.claude/settings.json - Launch
claude - Press Space — observe it types a space instead of activating PTT
- Run
/voice— observe voice turns OFF (because the setting was already true) - Run
/voiceagain — voice finally activates
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗