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

  1. Voice state not initialized on startup: Setting voiceEnabled: true in ~/.claude/settings.json persists 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.
  1. 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.
  1. Inverted /voice toggle: Since voiceEnabled is already true internally, the first /voice command toggles it to false (turning voice off), which is the opposite of what the user expects. A second /voice is required to actually activate voice mode. This is very confusing.
  1. 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: true is 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, /voice should always activate voice mode regardless of the stored setting (i.e., treat /voice as "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:

  1. Properly initialize voice on startup when voiceEnabled: true — this is the most intuitive fix.
  2. Add a --voice CLI 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.json with "voiceEnabled": true

Steps to reproduce

  1. Set "voiceEnabled": true in ~/.claude/settings.json
  2. Launch claude
  3. Press Space — observe it types a space instead of activating PTT
  4. Run /voice — observe voice turns OFF (because the setting was already true)
  5. Run /voice again — voice finally activates

View original on GitHub ↗

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