Docs/Desktop/Power Features/Voice Dictation

Voice Dictation

Talk instead of typing. Dictate an issue description or a prompt straight into a running coding session, using any OpenAI-compatible speech-to-text endpoint.

The longest thing you write in Lanes is usually the prompt an agent starts from, and it is the part where typing slows you down most. Dictation puts a microphone on the places that prose lives: the issue description, a running session, and workspace chat.

Lanes never submits for you. A transcript lands in the field, or in the CLI's own input line, exactly as if you had typed it. You press Enter.

Connect a provider

Open Settings, then Voice. Until a key is set, the microphone buttons do not appear.

Pick a preset, paste your key, and press Record a test. The preset fills in a base URL and a matching model together, which is the pair people get wrong: a model id from one provider is a 404 on another.

PresetBase URLModel
OpenAIhttps://api.openai.com/v1whisper-1
Groqhttps://api.groq.com/openai/v1whisper-large-v3-turbo
Local serverhttp://localhost:8080/v1whisper-1

Any endpoint that accepts a POST to /audio/transcriptions works. If you are pointing at something else, include the version segment yourself: OpenAI's base URL ends in /v1, Groq's in /openai/v1.

macOS asks for the microphone the first time you record, and only that once. If you decline, use Open next to System permission on the same page to turn it back on.

Dictate into an issue or a session

The microphone is the leftmost button in the footer, on both subtabs. Click to start, click again to stop.

  • Issue: the transcript goes in at your cursor, so you can dictate into the middle of something you already wrote.
  • Session: it goes into the agent's own input box. Read it, edit it, press Enter.
  • Workspace chat: it goes into your draft.

Words appear as you speak rather than all at once when you stop. While a phrase is being transcribed, a ring spins around the stop button, so a pause looks different from a stall.

Only one microphone runs at a time. Starting a recording greys out the others rather than taking the microphone away from a sentence you are in the middle of.

Teach it your vocabulary

The Vocabulary field on the Voice page is the highest-value setting on it. It is a list of names and jargon to expect, and for a coding tool that is the difference between

lanes, taury, zoo stand, work tree

and

Lanes, Tauri, zustand, worktree

Put your stack, your repo names, and the words you say all day into it. Set Language too if you always dictate in one: skipping detection is faster and more accurate on short clips.

Set up a session to dictate into

Notes

Where your key lives. In ~/.lanes/integrations.json, alongside your GitHub and Linear tokens, readable only by your user account. The request is made by the app rather than the page, so the key never passes through the web view. Your audio goes to the base URL you configured and nowhere else.

Why the session text is not corrected. A CLI's input line cannot take back characters it has already been given, so a session receives each phrase once and never a revision. A word spanning two phrases can come out wrong there. An issue description has no such limit: it is rewritten as it refines, and a final pass over the whole recording replaces it when you stop.

A recording stops itself after three minutes, so a microphone left open by accident does not stay open. What was said up to that point is still transcribed.

Silence is discarded before it is sent. Speech models fed silence tend to invent a plausible sentence rather than return nothing, and an invented sentence is the last thing you want typed into a live session.