Hold a key, talk, and your words type into any Mac app, all on-device.
AI: local or online
not yet reviewed by publik. It is live now; the founder has not reviewed this version yet.
Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.
| Model | Quality | Per 1,000 uses |
|---|---|---|
| On your computer (Ollama, 4-bit download size) | ||
| Granite 4.2 3B2.2 GB | 9 | $0 |
| Phi-4 Mini2.5 GB | 6 | $0 |
| Llama 3.1 8B4.9 GB | 7 | $0 |
| gpt-oss 20B14 GB | 9 | $0 |
| Gemma 4 31B20 GB | 19* | $0 |
| Qwen3.5 35B-A3B24 GB | 19* | $0 |
| publik API | ||
| publik-fastGLM-5.3 Flash | 42 | $1.00 |
| publik-balancedMiMo-V2.6-Pro · Spokesman | 46 | $10.00 |
| publik-smartGPT-6 Sol | 48 | $18.00 |
Quality: Artificial Analysis Intelligence Index v4.3.2, read 2026-09-22 (publik API models 2026-09-25); * = estimated by Artificial Analysis. Sizes: the Ollama library, read 2026-09-22.
Every step written out. No terminal experience needed. Pick your setup.
Private, on-device voice-to-text for macOS.
An open-source Wispr Flow alternative. Hold a key, talk, let go, and it types for you in any app.
Okay so, Spokesman is a dictation app for Mac. You hold Control+Option, talk like you normally would, let go, and the text just shows up in whatever app you're in. Claude, ChatGPT, Codex, Slack, Mail, your editor, anywhere with a text box.
I built it because I wanted something like Wispr Flow, but that's a subscription and your voice goes to the cloud. I wanted the same feel without either of those. So this runs on Apple's on-device speech model (SpeechAnalyzer + DictationTranscriber), it transcribes while you're still talking so there's barely any wait when you let go, and the audio only lives in memory and then gets thrown away. It never touches disk and it never gets uploaded.
Most of what I dictate is long, messy prompts into Codex and Claude. I say "um", I restart sentences, I go "Tuesday, no, Thursday". I don't want that cleaned into some generic corporate paragraph though, I want it to still sound like me, just without the mess. So the cleanup here is pretty careful about what it touches.
Esc cancels. You can change the shortcut.
| History | Dictionary |
|---|---|
![]() | ![]() |
Everything in these screenshots is demo data, not my actual dictations.
store: false).Control+Option ─► AVAudioEngine (in-memory buffers)
│
▼
SpeechAnalyzer + DictationTranscriber (on-device, streaming)
│ biased by your personal vocabulary
▼
Local cleanup (fillers, stutters, self-corrections)
│ optional: Smart Formatting via your OpenAI key
▼
Accessibility / CGEvent paste into the focused app
The native app is in macos/ (Swift Package, AppKit, WKWebView dashboard, SMAppService for launch at login). The earlier Windows/Python version is still in src/spokesman/ for reference.
swift test --package-path macos
bash scripts/build-macos-app.sh
Product direction and design notes are in PLAN.md, docs/PRD.md, and DESIGN.md.
Issues and PRs are welcome. This started as my own daily driver, so honestly the stuff most likely to get merged is anything that keeps it fast, private and simple. If you're not sure whether something fits, just open an issue and ask.