1# Voice input
2
3Dictate into the composer instead of typing. The transcript lands in your draft
4for review, and only sending the message sends anything to an agent. Dictation
5also works in citation comments, diff and file annotations, pull request
6comments, replies, and review summaries, and in the desktop app's browser
7annotation editor.
8
9On iPhone and Android, voice input transcribes on the device by default. To opt in
10to a named environment on that phone, open **Settings → Voice → Transcribe on**. See
11[Voice input on mobile](./composer.md#voice-input-on-mobile).
12
13## Choose where audio goes
14
15On web and desktop, you choose where transcription runs.
16Nothing is sent until you choose one: open **Settings → Voice** and set
17**Transcribe with** to the environment that should transcribe for you.
18On a new device, the microphone or dictation shortcut opens that setting from the composer.
19Microphone audio recorded on this device is sent to that environment over your
20authenticated connection, transcribed there, and discarded. The choice is saved
21on this device only, so every computer and browser you use asks for it once.
22Set it back to **Off** at any time; a recording in progress is discarded.
23
24If the chosen environment goes offline, voice input waits for it. T3 Code never
25substitutes another environment.
26
27For cloud dictation, choose **OpenAI** or **Grok Voice Transcribe** via the environment
28you want to use. If it needs a key, enter one and choose **Save and enable**.
29You can also choose a [secret provider](secrets.md) instead of **Value** and enter a
30reference. Unlock the vault on that environment before dictating. Anyone with
31dictation access to the environment can use the key, but only this device opts in.
32If a key is already saved, just confirm the provider. After
33you stop, the environment forwards your recording and any vocabulary hints to
34the selected provider, which bills its API account. No local model download or chat
35subscription is needed. Switch back to **This device** on mobile or **Off** on
36web and desktop to stop sharing. Removing the key stops that provider for everyone
37on the environment.
38
39**OpenRouter** works the same way but has no default model: pick one from its live
40speech-to-text catalog when you enable it, or later under **Manage OpenRouter**.
41The model choice is yours alone and needs no settings access, so anyone with
42dictation access can pick a different model without touching the saved key.
43OpenRouter chooses who runs the model. T3 requests zero data retention; your
44OpenRouter account can also allow safety retention. If no endpoint qualifies,
45dictation fails instead of switching models.
46Vocabulary hints are not sent to OpenRouter; dictionary spellings are applied
47after transcription. If OpenRouter stops listing your model, dictation stops
48until you choose another.
49
50## Set up a model
51
52In **Settings → Voice → Transcription**, download a model and choose **Use model** if it
53isn’t already selected. **Test model** lets you try it without sending a message.
54If you use the composer microphone before a model is installed, it offers to download one.
55The recommendation uses your Voice language, or your system’s preferred languages with **Auto-detect**.
56
57If another app already downloaded one of these models, you don’t need a second copy.
58**Download** first looks in Handy’s model folder and the Hugging Face cache on that
59environment and uses a copy it finds there instead of downloading. For a copy anywhere
60else, on web or desktop, paste the path of the model file or its folder under the model
61list and choose **Use existing**. The path is on the environment
62that transcribes, not on the device you are using. T3 Code checks that the file is exactly a
63model from its list and then uses it in place. Removing the model in T3 Code leaves your file
64alone; if the other app deletes it, download or link the model again. Files in another
65format, such as Core ML, ONNX, or MLX builds of the same model, can’t be used.
66
67Select the languages you dictate in to compare models that support all of them.
68Accuracy shows how often the model got words or characters wrong in each
69language; speed is the time to transcribe 30 seconds on a reference GPU. Choose
70**All languages** to browse the full catalog. Filtering does not switch your model.
71
72**Advanced** controls GPU or CPU use and when an idle model is unloaded. With hardware set to
73**Auto**, a recording that fails on the GPU is retried once on that same
74environment's CPU; a GPU you picked yourself reports the error instead. Nothing
75is ever retried on another environment. Models marked **Live preview** show
76text while you speak. Other models can process long recordings in chunks at pauses
77while you record; models with built-in long-form support transcribe when you stop.
78
79## Dictate
80
81Press the microphone in the composer, or `mod+shift+d` (`mod` is Command on
82macOS and Ctrl elsewhere). While you record, the microphone shows live bars and
83Send becomes Stop. Press the shortcut again, the bars, or Stop to finish; `Esc`
84discards the recording and leaves your draft unchanged. Recordings last up to
85five minutes. Text is inserted at the cursor or replaces the selection you had
86when recording started, and the editor is read-only while dictation runs.
87
88Using your send shortcut while dictating finishes the recording and sends the
89draft once the transcript has been inserted. Cancelling also cancels that queued send. In
90the other editors, Save, Comment, Reply, Submit review, or Attach works the
91same way, and the shortcut targets the editor that has focus, or the composer
92when none does. In the desktop browser's annotation editor, the microphone and
93the shortcut work while the page has focus; the page you are annotating never
94sees the recording, which runs in T3 Code itself.
95
96**Dictation shortcut** in Voice settings picks how the keybinding behaves:
97**Auto** tap-toggles or records while held, **Hold** records only while the keys
98are down, and **Toggle** always needs a second press. Change the chord itself in
99[Keybindings settings](./keybindings.md).
100
101## Improve recognition
102
103- **Language** picks what you speak. **Auto** lets a multilingual model detect
104 it. Models that translate offer **Translate to English**.
105- **Dictionary** holds names and terms the model should get right. Add an alias
106 under a term when transcription keeps producing a particular misspelling.
107 Your dictionary is saved on this device. The name of the project you dictate
108 in is sent along as a hint.
109- **Project dictionary** is vocabulary saved with a project on its environment,
110 so everyone who dictates in that project gets the same spellings. Pick the
111 project at the top of Settings to edit it; with an environment selected, the
112 entries apply to every project there. Project spellings win when they overlap
113 your personal dictionary. Each recording carries up to 100 entries from the
114 two combined.
115- **Silence filtering** is on by default. Your chosen environment skips non-speech
116 audio before transcription. Turn it off to keep those sections. Filtering happens
117 after upload: it does not grant permission to send audio or reduce how much is sent.
118- **Remove filler words** drops hesitation sounds from finished transcripts.
119
120Language and these preferences travel with each recording to the chosen
121environment; nothing else about the project is sent.
122
123## Clean up transcripts
124
125**Transcript cleanup** is a separate choice and is off by default. When on, the
126finished transcript and up to 1,024 characters each from before, inside, and
127after your selection are sent to the cleanup model on the draft's environment,
128which fixes punctuation, numbers, and spoken corrections such as "make it 42,
129sorry, 24". Depending on the model, that can involve an external service. Audio is never
130sent to it. Use the built-in instructions or write your own, press **Skip**
131while cleanup runs to insert the raw transcript, and if cleanup fails the raw
132transcript is inserted.
133
134Cleanup uses the environment's text generation model unless you pick a
135**Cleanup model** for that environment, for example a cheaper or faster one.
136It can be a text generator instead of a coding agent; see
137[text generation models](./text-generation.md).
138
139If cleanup misses the way you correct yourself, set a **Correction cue**: the
140word or phrase you say to flag a correction, such as "scratch that". Cleanup
141applies the correction only where the context shows one and drops the cue, and
142the model hears the cue as a dictionary hint.
143
144## Test and troubleshoot
145
146In **Settings → Voice**, voice input uses the first connected microphone in the
147**Microphone** list. A microphone joins the list below System default the first
148time it is seen, so nothing changes until you move it up. If a preferred
149microphone is unplugged, the next connected one is used.
150
151**Test microphone** records from that microphone for up to ten seconds and
152plays it back in your browser; the audio stays on this device and is never transcribed, so silent playback
153points at the microphone. **Test model** on the selected model shows a transcript using the
154same environment, language, and dictionary as the composer, but skips transcript
155cleanup even when it is on, so you see what the model heard. Browser recording
156needs HTTPS or localhost and microphone permission; for a remote server over
157plain HTTP, use the desktop app.