CodeInOven can turn your voice into text while you work, clean that text up before it lands in a field, and read a finished answer back to you. The speech models run on your machine. Nothing about a recording leaves it unless you turn on a setting that says it may.
Turn dictation on
Every editor that sends work to an agent carries a microphone control immediately before its send button. In the composer it takes the send slot while there is nothing to send, and sits beside it once there is. Click once to start recording, and click again to stop.
The control turns red and pulses while it captures, then shows a small waveform while the recording is processed. There is no recording timer. A recording ends when you stop it, or when the microphone permission is withdrawn, the input device disappears, the app quits, or storage runs out.
The microphone is hidden on a machine with no local speech-to-text model installed. Under Preferences on the Sound page, an Enable voice recording setting brings it back, and it is off by default. With that setting on and no local model installed, a finished recording is sent as an audio attachment to a conversation model that can hear it, and the transcript that comes back is cleaned up like any other. Turn it off and audio stays on the machine.
Choose a model
Open the Sound page and its Models tab. The tab has three parts: ASR for speech-to-text, TTS for spoken replies, and LLM for the model that cleans up a transcript. Each model appears as its own card with its runtime, size, licence, languages, and a link to its published source.
For dictation the cards are ranked. Parakeet TDT 0.6B v2 is marked as the best choice for English, and Parakeet TDT 0.6B v3 is marked for multilingual work. Fluid Speech Mini is an English option that holds on to a single speaker when a second voice is in the room. Whisper Base sits behind the Parakeet cards. For spoken replies the catalog offers Kokoro English, and cleanup can use Qwen3 or superwhisper S1 mini.
Download a model from its card and it becomes available to that capability. The weights arrive when you ask for them, separately from the app.
Import a model you already have
If you already keep models on disk, each card has its own Import button and its own Paste Path button. Import opens a file picker. Paste Path takes a folder or file path you paste in, and validates it as you type.
The paste dialog trims stray spaces and outer quotes, then tells you what it found: a supported model with its type, an empty location, a path that does not exist, a path it cannot read, or a format it cannot use. Import stays disabled until the path checks out. The app records where your model lives and leaves the files alone, so if you move the folder later, the model stops loading until you point at it again.
One active model at a time
Each capability keeps a single active model. A card you have installed offers Set Active, and the card that holds the place shows an Active badge. Setting a new active model for dictation replaces the previous one, and the header names the current model and says that only that model stays in memory.
Keeping one model resident is what makes the second recording instant. Models unload after a period of disuse. The Sound page offers 5, 10, 20, or 30 minutes, or keeping the model in memory until the app closes, and 30 minutes is the default.
Insert the text, or copy it
Before the microphone takes focus, the app remembers which field you were in and what was selected. When the transcript is ready, it replaces that selection or inserts at the caret, without overwriting the text around it. If the field is gone by then, the transcript is not pushed into some other editor: it stays in your history and on the clipboard.
A finished transcript does replace the clipboard contents. That is deliberate, so clipboard history picks it up.
Cleanup runs before insertion. Smart cleanup removes filler sounds and adds punctuation and capitalisation. Self-correction drops a retracted thought and keeps the final intent. Preserve technical keeps code identifiers and paths exact, so spoken words become the file name you meant. All three live under Preferences. When no cleanup model is installed, the raw transcript is inserted unchanged and the Models tab shows the download you need.
Keep the audio you want
The History tab lists every attempt, successful or not, with its audio file, its raw transcript, and its cleaned transcript. History keeps 30 attempts by default and you can set it from 1 to 500. When the list is full, the oldest attempt goes first, and its audio goes with it. Deleting an attempt yourself asks for confirmation first, and the Sound page reports how much audio you are holding.
Spoken replies
A finished answer has a speaker control beside copy and fork. One answer plays at a time: starting another stops the one playing. Headings, paragraphs, and list items are read in order, and the label of a link is followed by the word "link" rather than the address. Code blocks are skipped unless you turn on code reading. Long answers are spoken in pieces, so playback starts before the whole answer is ready.
What stays local
Audio, transcripts, history, model files, and learned corrections live in the app's own configuration directory. They never go into your repository. Cleanup is local by default, and the switch for doing it through a conversation model is off unless you turn it on. With a local model installed, dictation never contacts a speech service.
When a recording produces nothing
Start with the History tab: a failed attempt is listed there with the reason it failed. A permission refusal names the operating system setting to open, and the app asks for microphone access when you record rather than at launch, so a first recording is what raises the prompt. Check that the input device you expect is the one the system offers. If no model is installed for dictation, download one from the Models tab, or turn on Enable voice recording if you mean to send the audio to a conversation model instead.
If a download stops short, start it again. Unfinished downloads never become selectable.