Push-to-talk dictation: hold a key, talk, release — the interaction none of the voice PRs implement #7417
alidarvishi14
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
This is not another "add voice support" request — it is about one specific interaction model that none of the existing voice work implements, and that I think is the reason the earlier attempts keep stalling.
What I mean
Hold a key. Talk. Release. The transcript lands in the composer. You never leave the composer, never click anything, never review a panel.
That is how Wispr Flow, superwhisper, macOS dictation and the Claude Code desktop app do it, and it is the thing that makes voice actually usable for short bursts — "run the tests again", "revert that last edit", "check the second file too".
Why this is a distinct ask
I went through the existing work, and every implementation is a modal panel, not a key:
CONFLICTINGCONFLICTINGCONFLICTINGCONFLICTINGIn #6625 — the most current one — the only keyboard handling in the entire diff is
window.addEventListener("keydown", cancelOnEscape). Recording starts fromonClick={() => void startVoiceTranscription()}and ends fromonClick={onStop}/onClick={onSend}. There is no held-key path anywhere in any of these branches.A panel is a destination: open it, record, watch a waveform, stop, review, insert, close. Push-to-talk is modeless: the held key is the recording state, so there is no panel to open, no timer to watch, no cancel affordance to design (releasing early with no speech is the cancel), and no lifecycle to clean up on navigation. It is a meaningfully smaller surface than what has been attempted four times.
On the earlier decision
#653 was closed
NOT_PLANNEDin March with "out of scope, there are apps that do this already." I would gently push back on that specific reasoning: people reach for those third-party apps because the in-app options are panels. Nobody installs Wispr Flow to get a waveform — they install it to get a key. The panel-shaped version is the one that loses to external tools; the key-shaped version is the one that does not.Also worth noting
@akhmerov's unanswered follow-up on that thread: codex app-server has supported voice input since v0.147.Smallest useful scope
Known blocker
On signed macOS builds this cannot work until #5321 lands — the desktop build has no
com.apple.security.device.audio-inputentitlement, so the OS never even shows a microphone prompt. That PR is+3lines andMERGEABLE, with an open question about also settingentitlementsInheritfor Electron helper processes (which is exactly the renderer path any dictation feature needs). See also #728 and #7268.All reactions