Speaking at the Caret with Saycaret
Saycaret is a local speech-to-text app for Linux and macOS that streams your words into the focused field while you speak, without your audio ever leaving your machine.
I dictate a lot during my day, mostly prompts for AI agents in the terminal or in the browser.
On Ubuntu, I was using Handy. I had to wait for the text to show up after speaking, and when the focus was not at the right place, it typed characters all over the place.
That’s why I’m building Saycaret. It runs locally on my machine and streams the text into the focused field as I go, improving it while I speak. On Linux, it types through the input method instead of faking key presses, so when the focus moves, the text waits until I put it somewhere.
The key available features include:
- Text streamed into the focused field as you speak
- Local speech recognition, your audio and words never leave the machine
- A single global shortcut to start and stop dictating
- Word fixes for names and terms the model keeps getting wrong
- History of recent dictations
- Available on Linux first, and on macOS with Apple Silicon
Letting AI Tools Use It
Saycaret also comes with an MCP server, behind a switch in its settings that is off by default. Once enabled, an AI agent like Claude Code can transcribe an audio file, search past dictations or add a word fix.
It started as a way to debug the app: I wanted Claude to read the logs, check the app state and capture the pill while I was testing on my own machine.
How I Built It
I built Saycaret mostly by talking to Claude, from the first design draft to the macOS version, with separate threads for the app, the website and a security review.
Under the hood, it’s a Tauri 2 app with a Rust speech engine running NVIDIA’s Parakeet models through sherpa-onnx, and a React interface.