Koder supports interactive voice dictation in terminal sessions.
Current interaction model:
- Enable voice with
/voice - Double-tap
Spacein interactive mode to start recording - Press
SpaceorEnterto stop recording - Koder transcribes the audio and auto-sends the transcript as a user message
- When partial transcripts are available, they are shown directly in the input box while transcribing
Implemented now:
- Interactive push-to-talk style dictation using the terminal prompt
- Provider-backed speech-to-text for:
openaichatgptgooglegeminiazure
- Top-level
voiceconfiguration in~/.koder/config.yaml /voice,/voice status,/voice provider ...
Not fully finished yet:
- Real-device validation across all platforms
- Windows-specific bring-up and troubleshooting
- Full voice subsystem integration
Voice settings live at the top level of ~/.koder/config.yaml:
voice:
enabled: false
provider: null
model: null
api_key: null
base_url: null
api_version: nullFields:
voice.enabled- Enables interactive voice dictation
voice.provider- Overrides the chat model provider for voice
- Supported values:
openai,chatgpt,google,gemini,azure
voice.model- Optional transcription model override
voice.api_key- Optional voice-specific API key override
voice.base_url- Optional voice-specific base URL override
voice.api_version- Optional API version override
- Currently only used for Azure
Resolution order:
voice.*- OAuth-backed provider credentials where supported
- provider-specific env vars
model.*fallback when provider family matches
Voice mode commands:
/voice
/voice status
/voice provider openai
/voice provider google
/voice provider azure
/voice provider clear/voice status reports:
voice_enabledvoice_providervoice_modelvoice_base_urlvoice_api_versioneffective_provider
Use when you want OpenAI-native transcription models.
model:
provider: openai
name: gpt-5.4
voice:
enabled: true
provider: openai
model: gpt-4o-mini-transcribe
api_key: sk-...
base_url: https://api.openai.com/v1Notes:
- If
voice.provideris omitted, Koder falls back tomodel.provider - If
voice.modelis omitted, the current default isgpt-4o-mini-transcribe
Use when you want to keep chat and voice on OpenAI-family routing but authenticate via koder auth login chatgpt.
model:
provider: chatgpt
name: gpt-5.2
voice:
enabled: true
provider: chatgpt
model: gpt-4o-mini-transcribeNotes:
voice.api_keyis optional if you already authenticated with:koder auth login chatgpt
voice.base_urlcan still be set if you need a custom OpenAI-compatible endpoint
Use when you want Gemini-backed audio transcription.
model:
provider: google
name: gemini/gemini-2.5-pro
voice:
enabled: true
provider: google
model: gemini-2.5-flash
api_key: your-google-api-keyNotes:
voice.base_urlis not normally needed for Google/Gemini- If
voice.modelis omitted, the current default isgemini-2.5-flash
Equivalent to Google-family voice routing, but explicit if your main model naming already uses gemini.
model:
provider: gemini
name: gemini/gemini-2.5-pro
voice:
enabled: true
provider: gemini
model: gemini-2.5-flash
api_key: your-gemini-api-keyUse when your chat and transcription deployments are hosted on Azure OpenAI.
model:
provider: azure
name: your-chat-deployment
api_key: your-azure-api-key
base_url: https://YOUR_RESOURCE.openai.azure.com/openai/deployments/your-chat-deployment
azure_api_version: 2025-04-01-preview
voice:
enabled: true
provider: azure
model: your-transcribe-deployment
api_key: your-azure-api-key
base_url: https://YOUR_RESOURCE.openai.azure.com/openai/deployments/your-transcribe-deployment
api_version: 2025-04-01-previewAzure notes:
voice.modelshould be your transcription deployment namevoice.base_urlcan be either:- the resource root, like
https://YOUR_RESOURCE.openai.azure.com - or a deployment URL containing
/openai/deployments/...
- the resource root, like
- Koder extracts the Azure endpoint from
voice.base_url voice.api_versionoverridesmodel.azure_api_version
Recommended setup patterns:
- Same provider for chat and voice
- Set
model.provider - Omit
voice.provider
- Set
- Different provider for voice
- Set
voice.provider - Optionally set
voice.model,voice.api_key,voice.base_url
- Set
Example: chat on OpenAI, voice on Google
model:
provider: openai
name: gpt-5.4
voice:
enabled: true
provider: google
model: gemini-2.5-flash
api_key: your-google-api-keyIf /voice says credentials are missing:
- For
chatgpt:- run
koder auth login chatgpt - or set
voice.api_key
- run
- For
google:- run
koder auth login google - or set
voice.api_key
- run
- For
openai:- set
voice.api_key
- set
- For
azure:- set
voice.api_key - set
voice.base_url - set
voice.model - usually set
voice.api_version
- set
If recording fails:
- Make sure the
sounddevicedependency is installed viauv sync - Verify your microphone is available to the terminal process
- Try again and read the full
Voice error: ...text shown in the input box
If the wrong provider is used:
- check
/voice status - verify
voice.provider - verify
effective_provider
model:
provider: azure
name: your-chat-deployment
api_key: your-azure-api-key
base_url: https://YOUR_RESOURCE.openai.azure.com/openai/deployments/your-chat-deployment
azure_api_version: 2025-04-01-preview
cli:
stream: true
voice:
enabled: true
provider: azure
model: your-transcribe-deployment
api_key: your-azure-api-key
base_url: https://YOUR_RESOURCE.openai.azure.com/openai/deployments/your-transcribe-deployment
api_version: 2025-04-01-preview