benedict

Talk instead of typing. Anywhere on Linux.

Hold a key, say what you mean, let go. The words appear at your cursor — your editor, your terminal, any text box. The transcription comes from ChatGPT's dictation, which is about as good as speech-to-text gets.


Why this exists

ChatGPT's dictation is genuinely excellent. It punctuates. It keeps the sentence together when you stumble. It handles the names and jargon you actually use. And if you already pay for ChatGPT, it costs nothing extra.

The problem was never the transcription. It was the ritual around it: open the browser, find the tab, click the microphone, speak, copy the text, switch back to what you were doing, paste. Seven steps between a thought and the page.

Benedict is those seven steps, reduced to one key.

What it feels like

  1. Hold RightCtrl+Space. A quiet notification slides in telling you the microphone is live and which one it is.
  2. Speak. ChatGPT transcribes as you go. A small floating pill at the bottom of the screen shows the words forming in real time, so you can trust it heard you.
  3. Let go. The transcript is pasted wherever your cursor was waiting, and your previous clipboard is put back the way it was.

That is the whole interaction. There is no window to manage and no app to switch to — Benedict keeps a hidden browser signed in on your behalf so the tab is always warm.

press → speak → release → pasted

How it works, roughly

A single Chrome instance runs out of sight, dedicated to dictation and signed into your account. When you hold the key, Benedict asks ChatGPT to start listening. When you release, it reads the finished transcript and types it into the window you were already using — picking the right paste shortcut for terminals and editors on its own.

Nothing you dictate is ever sent as a chat message, and the composer is cleared after every use. Audio only ever goes where ChatGPT's dictation needs it; your transcripts stay on your machine.

In action

A few glimpses of the loop while it runs. These are faithful mockups of the on-screen output, not stock illustrations.

Desktop while dictating: a terminal window and the Benedict status pill streaming a transcript at the bottom
Mid-sentence. The terminal stays where it is, and the pill streams the transcript as it forms.
Terminal output of benedict config listing the effective settings
Every UI detail is a setting — pill position, margin, whether notifications accompany it. benedict config shows the effective values.
Side by side terminal prompts labeled before and after, the after containing the dictated sentence
On release, the transcript is inserted at the cursor exactly as if you had typed it.
Terminal output of benedict doctor showing all nine checks passing
benedict doctor checks every moving part, so when something breaks you find out in one command.

Getting started

You need Ubuntu on GNOME Wayland with PipeWire, Google Chrome, and a ChatGPT account. Then three commands:

git clone https://github.com/Anikate-De/benedict ~/dev/benedict
cd ~/dev/benedict
sudo ./scripts/setup.sh

Sign in once — importing the session from the browser you already use is the quickest path — then start the service:

benedict login --import
systemctl --user enable --now ydotoold benedict

Run benedict doctor if anything feels off, and benedict --help to see the rest. Want to preview the status pill without dictating? benedict pill plays a short demo. The README has the full configuration reference, uninstall steps, and a troubleshooting section.

Roadmap

v0.2 — the pill grows up: live state, the active microphone, the transcript streaming in with a blinking caret, configurable position and screen margin, notifications that mirror it, a checklist in benedict doctor, and new [ui] settings with benedict config.

v0.1 — the first release: hold-to-talk, hidden ChatGPT, focus-aware paste, clipboard restore, and transcript history.

Still thinking about the roadmap. As and when I use it, more features will come.