Voice Input
Speech-to-text dictation built on the OpenAI Realtime API, with an optional AI correction pass over the dictated text in agent input bars.
Overview
Voice Input lets you dictate into any agent's hybrid input bar. Audio streams to the OpenAI Realtime API, and text appears in the input bar as you speak. An optional AI correction pass cleans up the dictated passage before you send the command, fixing punctuation, technical terms, and filler words.
You need two things to get started: an OpenAI API key and microphone permission at the OS level. One key handles both transcription and AI correction, so there's only one to configure.
Upgrading from an Earlier Version
Version 0.10.0 changed the transcription backend from Deepgram to the OpenAI Realtime API. On first launch after upgrading, Daintree migrates your saved settings. Any OpenAI key you had saved for correction is reused as your transcription key, old Deepgram keys are dropped, and legacy transcription model selections are rewritten to the current model.
Prerequisites
- OpenAI API key (starts with
sk-). This one key handles both real-time transcription and the AI correction pass. Create one at platform.openai.com/api-keys. The key is validated when you save. - Microphone access granted at the OS level (macOS, Windows, or Linux).
Transcription is billed per minute of audio, correction per token, both on your OpenAI account. See OpenAI's pricing for current rates.
Setup
Enable Voice Input
Voice Input is a global setting. The same configuration applies across all your projects.
- Open Settings > Voice Input.
- In the Speech-to-text section, toggle Voice input on.
- Grant microphone permission if you haven't already (see below).
- Choose your microphone (see Select a Microphone).
- Enter your OpenAI API key (starts with
sk-). The key is validated when you save and shows as Configured once accepted. - Choose your language from the 10 supported options: English, Spanish, French, German, Japanese, Chinese, Korean, Portuguese, Italian, and Russian.
- Select a paragraph break strategy. Spoken commands (default, English only) lets you say "new paragraph" to insert a break. Manual Enter requires you to press Enter instead. Non-English languages fall back to Manual Enter automatically.
Grant Microphone Permission
Daintree needs microphone access from your operating system before it can capture audio. The settings panel shows your current permission status and gives instructions for your OS.
Open System Settings > Privacy & Security > Microphone and enable Daintree. If permission hasn't been requested yet, Daintree shows a Request button that triggers the system dialog.
If permission was denied earlier, click Open System Settings in the Daintree settings panel to go straight to the Microphone privacy settings. Toggle Daintree on, then click Re-check back in Daintree.
Open Windows Settings > Privacy & security > Microphone and confirm desktop app access is allowed. Daintree shows a Request button if permission hasn't been determined yet.
If access was denied, click Open System Settings in the Daintree settings panel to jump to the Microphone privacy page. Enable access, then click Re-check in Daintree.
Grant microphone access through your system audio settings. Linux doesn't support the in-app Request button, so you'll set permissions through your desktop environment or audio manager (e.g. PipeWire, PulseAudio).
Once permissions are granted externally, click Re-check in the Daintree settings panel to confirm access.
Select a Microphone
The Microphone dropdown sits just below the permission row in the Speech-to-text section. It defaults to System default, which follows whatever input device your OS is using. Pick a specific device from the list to pin dictation to it regardless of the system default.
The list comes from your operating system's audio inputs. It refreshes when devices change, so plugging in a headset or USB mic mid-session adds it to the list. A refresh button next to the dropdown re-enumerates the inputs manually if you need it.
Starting and Stopping Dictation
There are three ways to start voice dictation:
- Mic button. Each agent panel has its own mic button in the hybrid input bar. Click it to start recording for that panel.
- Keyboard shortcut: Cmd+Shift+V on macOS, Ctrl+Shift+V on Windows/Linux. Toggles voice dictation for the focused panel. When an agent input bar has focus, the same shortcut pastes clipboard content as plain text instead of toggling voice.
- Action palette: search for "Toggle Voice Dictation".
While recording, the mic button shows an animated ring that pulses with your audio level, and a square stop icon replaces the mic icon. Click it again or press the shortcut to stop. In agent input bars, pressing Enter also stops recording and triggers the wait-before-submit flow. Press Escape to cancel an active recording; the text dictated so far stays in place.
Text appears in the input bar as you speak. Interim (in-progress) transcription shows at reduced opacity, then solidifies once the transcription is final. The session moves through five states: idle, connecting (up to 10 seconds), recording, finishing (up to 3 seconds to drain final text), and back to idle.
Toolbar Indicator
When a recording session is active, a mic icon appears in the global toolbar with a pulsing accent dot and elapsed time in M:SS format. The tooltip shows which project and worktree is recording. Clicking the indicator focuses the panel where recording is happening. It doesn't stop the session.
Submitting While Recording
Pressing Enter while recording, or while AI corrections are still in flight, triggers the wait-before-submit flow:
- Daintree stops the recording session.
- A spinner overlay appears on the input bar, which becomes read-only.
- Daintree waits up to 10 seconds for any pending AI corrections to settle.
- Once corrections finish, or the timeout is reached, the text is submitted.
Press Escape to cancel the wait and keep the text in the input bar for further editing.
Paragraph Breaks
Spoken Commands (Default, English Only)
With the spoken-command strategy selected, you can say formatting commands while dictating. Daintree applies them in post-processing and strips them from the transcript:
| Spoken command | Inserts |
|---|---|
| "new paragraph" | A blank line (\n\n) |
| "new line" | A single newline (\n) |
| "period" / "full stop" | . |
| "comma" | , |
| "question mark" | ? |
| "exclamation point" / "exclamation mark" | ! |
Only a trailing chain of commands at the end of an utterance is converted. Commands in the middle of a sentence ("I'll add a new paragraph here") stay literal, so you can still talk about them. Chains work too: "hello comma new paragraph" becomes hello,\n\n. You can also press Enter at any time to commit the current paragraph manually.
Manual Enter
With the manual strategy, paragraph breaks come from pressing Enter only. Spoken formatting commands are disabled. Choose this if you dictate in a non-English language, or if you want explicit control over paragraph breaks.
AI Text Correction
When AI correction is enabled, Daintree sends the whole dictated passage to the OpenAI Responses API once recording stops, then replaces the raw text with the corrected version. It fixes punctuation, filler words (um, uh), technical term spelling, and homophones.
The pass runs only after a clean stop, with correction enabled and text to correct. It doesn't run if you cancel with Escape, hit an error, or stop one recording to immediately start another.
While the request is in flight, the dictated text carries a green dotted underline. When the response comes back, the corrected version replaces it in place. If you start editing that text mid-correction, Daintree keeps your raw version instead. Interim text that's still being transcribed shows in a separate faded italic style, so you can tell the two states apart.
Enable AI Correction
- In Settings > Voice Input, find the AI text correction section. It's visible once Voice Input is enabled.
- Toggle AI text correction on.
- Choose a correction model. GPT-5 Mini (higher quality, recommended) is the default. GPT-5 Nano is faster and costs less.
There's no separate key to enter. Correction reuses the OpenAI API key from the Speech-to-text section.
Custom Instructions
You can add project-specific correction rules in the Custom Instructions textarea. They're appended to the core correction prompt, so the AI applies them alongside its built-in rules. For example: "Always capitalize ProductName as one word" or "React component names should use PascalCase."
The Inspect core prompt toggle in settings lets you view the full base correction prompt, read-only. Your project name and custom dictionary terms are injected into this prompt automatically.
File Reference Resolution
When AI correction is enabled, Daintree can detect spoken file references and resolve them into @file links. Use natural phrases as you dictate:
- "Link to the auth helper"
- "At file the button component"
- "Reference the user model"
- "Add file the config service"
- "Open the main layout"
Daintree detects these patterns and sends them to a file resolver, which searches the project file tree and uses AI to pick the best match. The resolved path appears as an @path/to/file reference and renders as a clickable file chip in the input bar.
If resolution fails, the text falls back to @?description so you can see what was being looked up and fix it by hand.
This feature requires AI correction to be enabled. It's toggled via Resolve file references in settings, on by default when your OpenAI key is configured.
Custom Dictionary
The custom dictionary lets you add up to 100 domain-specific terms: project names, product names, technical vocabulary, and abbreviations the base model might not get right. Each term counts toward the 100-term limit shown next to the field.
Add terms in Settings > Voice Input under the Speech-to-text section. Each one appears as a removable pill. The terms are injected into the AI correction prompt as highest-priority required substitutions, so the correction pass spells them the way you intend.
Your project name is included automatically. There's no need to add it yourself.
Settings Reference
All voice input settings are in Settings > Voice Input.
Speech-to-text
| Setting | Values / Notes |
|---|---|
| Voice input | Enabled / Disabled (default: Disabled) |
| Microphone | System default (default) or a specific input device |
| OpenAI API Key | sk-... prefix, validated on save. Powers both transcription and correction. |
| Language | English, Spanish, French, German, Japanese, Chinese, Korean, Portuguese, Italian, Russian |
| Paragraph Breaks | Spoken commands (default, English only) or Manual Enter |
| Custom Dictionary | Up to 100 terms, injected into the correction prompt |
AI text correction
This section is only visible when Voice Input is enabled.
| Setting | Values / Notes |
|---|---|
| AI text correction | Enabled / Disabled (default: Disabled) |
| Correction Model | GPT-5 Mini (higher quality, recommended, default) or GPT-5 Nano (faster, lower cost) |
| Resolve File References | Enabled by default when an OpenAI key is configured |
| Custom Instructions | Free-form textarea for project-specific correction rules |
Correction uses the OpenAI API key from the Speech-to-text section. This section has no separate key.
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| Toggle voice dictation (global) | Cmd+Shift+V / Ctrl+Shift+V |
| Paste as plain text (when input bar has focus) | Cmd+Shift+V / Ctrl+Shift+V |
| Commit paragraph / submit | Enter |
| Cancel recording or wait-before-submit | Escape |
The Cmd+Shift+V shortcut is context-sensitive in agent input bars: it toggles voice when the bar is unfocused, and pastes clipboard content as plain text when it has focus. Escape cancels an active recording, keeping the text dictated so far, and also cancels the wait-before-submit flow. See Keyboard Shortcuts for the full reference.
Troubleshooting
Mic button is hidden
The microphone button only appears when Voice Input is fully configured. Check that:
- Voice Input is enabled in Settings > Voice Input.
- A valid OpenAI API key has been entered.
- Microphone permission is granted at the OS level.
"Connection timed out"
Daintree couldn't reach the OpenAI Realtime API within 10 seconds. Check your internet connection, confirm your OpenAI API key is valid, and confirm your account has available credits.
"Invalid API key"
Shown when saving settings if the key format is wrong or the key is no longer valid. Re-enter a valid OpenAI key. They start with sk-.
Spoken paragraph commands aren't working
Spoken commands (like "new paragraph") only work when:
- The language is set to English.
- The paragraph break strategy is set to Spoken commands.
Also remember that only a trailing chain of commands at the end of an utterance is converted. A command in the middle of a sentence stays literal.
AI correction not running
The correction pass only runs after a clean stop. Check that:
- AI text correction is toggled on and a valid OpenAI API key is entered.
- There's dictated text present when you stop.
- You stopped the recording normally. Cancelling with Escape, hitting an error, or stopping one recording to immediately start another all skip the pass.
File references showing as @?
The @?description format means file resolution failed for that reference. It happens when the project file tree has no close match, or when the description was too vague for the AI to resolve. Use more specific descriptions when you dictate file references.