voiceEnabled: true in settings.json does not activate voice mode on session startup

Resolved 💬 2 comments Opened Mar 17, 2026 by siobhandpm Closed Apr 14, 2026

Bug Report

Summary

When voiceEnabled: true is set in ~/.claude/settings.json, voice mode is not active on session startup. The setting appears to be read but the runtime state is not initialised from it.

---

Steps to Reproduce

  1. Add the following to ~/.claude/settings.json:

``json
{
"voiceEnabled": true
}
``

  1. Start a new Claude Code session.
  2. Press and hold Space — spaces are typed into the input instead of voice recording activating.
  3. Run /voice — the response is "Voice mode disabled" (toggling it OFF, implying the runtime believed it was ON).
  4. Run /voice a second time — the response is "Voice mode enabled".
  5. Press and hold Space — voice recording now works correctly.

---

Expected Behaviour

If voiceEnabled: true is present in settings.json, voice mode should be active from the moment the session starts, with no manual toggle required.

---

Actual Behaviour

Voice mode state is not correctly initialised from the persisted setting. On startup:

  • The Space key does not trigger voice recording.
  • The /voice command reports "Voice mode disabled" on first invocation (suggesting it read true from settings but toggled it to false on the first /voice call — a state inversion bug).
  • A second /voice call correctly enables it.

The toggle appears to be flipping state relative to an already-incorrect baseline, requiring two /voice commands to reach the expected initial state.

---

Environment

  • OS: Windows 11
  • Shell: bash (Git Bash / WSL)
  • Claude Code version: latest
  • Setting file location: ~/.claude/settings.json

---

Severity

Low-impact but consistently reproducible. Users who rely on voiceEnabled: true for a voice-first workflow must manually re-enable voice on every session start.

---

Suggested Fix

On session initialisation, read voiceEnabled from settings.json and set the runtime voice state directly (do not toggle from a default-false baseline). The toggle command should flip the current runtime state, not assume a default.

View original on GitHub ↗

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