[FEATURE] Voice: add custom vocabulary support for domain-specific and non-English terms
Problem
The voice feature uses the platform's speech-to-text engine without any way to correct domain-specific or non-English terminology. Words that aren't in the engine's default vocabulary get silently substituted with phonetically similar English words, with no way to override this.
For example, a non-English domain term or a project-specific identifier (e.g. a Dutch, German, or French word, a medical/legal/logistics term, or a custom product name) is consistently misrecognized and replaced with an unrelated word, making voice input unreliable for projects that use specialized vocabulary.
Expected Behavior
Developers should be able to define a custom vocabulary so that voice input reliably captures the terms they use in their codebase — including non-English words, acronyms, and domain-specific identifiers.
Suggested Solutions
Any of the following would significantly improve the experience:
- Custom vocabulary file — A user-configurable list of words/phrases (e.g. in
~/.claude/voice-vocabulary.txt) that are passed as hints to the speech-to-text engine. - Post-transcription substitution map — A simple find-and-replace map applied after transcription (e.g.
"misheard-word" → "intended-term"), which would work regardless of the underlying STT engine. - STT engine hints API — If the underlying engine supports recognition hints (e.g. Google Cloud Speech-to-Text supports
SpeechContext), expose a way to pass them through Claude Code's voice config.
Use Case
This affects any developer working in:
- Specialized domains (medical, legal, logistics, finance) with domain-specific terminology
- Codebases with custom identifiers, acronyms, or product names
Environment
- Platform: Linux
- Claude Code voice feature (platform speech-to-text backend)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗