Some checks failed
deploy / deploy (push) Waiting to run
generate / generate (push) Waiting to run
nix-eval / nix-eval (push) Waiting to run
publish / version (push) Waiting to run
publish / build-cli (push) Blocked by required conditions
publish / sign-cli-windows (push) Blocked by required conditions
publish / build-electron (map[bun_install_flags:--os=darwin --cpu=arm64 host:macos-26 platform_flag:--mac --arm64 target:aarch64-apple-darwin]) (push) Blocked by required conditions
publish / build-electron (map[bun_install_flags:--os=darwin --cpu=x64 host:macos-26-intel platform_flag:--mac --x64 target:x86_64-apple-darwin]) (push) Blocked by required conditions
publish / build-electron (map[host:blacksmith-4vcpu-ubuntu-2404 platform_flag:--linux target:x86_64-unknown-linux-gnu]) (push) Blocked by required conditions
publish / build-electron (map[host:blacksmith-4vcpu-ubuntu-2404-arm platform_flag:--linux --arm64 target:aarch64-unknown-linux-gnu]) (push) Blocked by required conditions
publish / build-electron (map[host:blacksmith-4vcpu-windows-2025 platform_flag:--win target:x86_64-pc-windows-msvc]) (push) Blocked by required conditions
publish / build-electron (map[host:windows-2025 platform_flag:--win --arm64 target:aarch64-pc-windows-msvc]) (push) Blocked by required conditions
publish / publish (push) Blocked by required conditions
test / unit (linux) (push) Waiting to run
test / unit (windows) (push) Waiting to run
test / e2e (linux) (push) Waiting to run
test / e2e (windows) (push) Waiting to run
typecheck / typecheck (push) Waiting to run
containers / build (push) Has been cancelled
docs-locale-sync / sync-locales (push) Has been cancelled
nix-hashes / compute-hash (blacksmith-4vcpu-ubuntu-2404, x86_64-linux) (push) Has been cancelled
nix-hashes / compute-hash (blacksmith-4vcpu-ubuntu-2404-arm, aarch64-linux) (push) Has been cancelled
nix-hashes / compute-hash (macos-15-intel, x86_64-darwin) (push) Has been cancelled
nix-hashes / compute-hash (macos-latest, aarch64-darwin) (push) Has been cancelled
storybook / storybook build (push) Has been cancelled
nix-hashes / update-hashes (push) Has been cancelled
2.1 KiB
2.1 KiB
Desktop Voice Control
Overview
OpenCode Desktop includes built-in microphone voice control for Windows (and other Electron platforms). Speak to fill the prompt, or issue short voice commands such as send, clear, and stop.
Requirements
- OpenCode Desktop app (Electron)
- One cloud STT API key in the environment:
DEEPGRAM_API_KEY(recommended for streaming)GROQ_API_KEYOPENAI_API_KEY
- Optional native recorder: SoX (
winget install sox) or FFmpeg
If missing, the app automatically falls back to browsergetUserMediacapture in the renderer.
Usage
- Open Settings → Voice
- Choose provider, language, and hotkey (default
Alt+Space) - Press the microphone button next to Send, or press the global hotkey
- Speak
- Press the hotkey / button again to stop
- Review the inserted text, then send (or say
sendif commands are enabled)
Voice commands
When Voice commands is enabled, short phrases are treated as commands instead of dictation:
| Phrase | Action |
|---|---|
| send / submit / go | Submit prompt |
| run / execute | Submit prompt |
| accept / approve / yes | Allow pending permission once |
| reject / deny / no | Deny pending permission |
| clear / reset / erase | Clear prompt |
| stop / cancel / abort | Stop generation |
| scroll up / scroll down | Scroll timeline |
| focus | Focus prompt |
| new line / line break | Insert newline |
Longer utterances are always treated as dictation text.
Architecture
Hotkey / Mic button
→ Desktop main VoiceManager
→ Native SoX/FFmpeg capture OR renderer PCM stream
→ Cloud STT (Deepgram WS / Groq / OpenAI Whisper)
→ IPC transcription event
→ App VoiceProvider
→ Command parser OR prompt insert
Packages
packages/desktop/src/main/voice/— main-process capture, STT, IPC, hotkeyspackages/app/src/voice/— UI, context, command parser, settingspackages/opencode/src/config/voice.ts— Effect Schema for voice config
Security
API keys are read only from environment variables. They are never written to opencode.json or electron-store.