Talk to Claude. Hear it talk back. In English or Czech. Fully local, on your Mac.
Kick off a task, then go do something else. flowcode is a tiny native macOS menu-bar app that gives Claude Code β and the Claude desktop app (Chat, Cowork, Code) β a voice: it reads each new reply aloud the moment it lands (local Kokoro TTS), so you hear when Claude finishes, asks a question, or needs your call β without babysitting the terminal. When it's your turn, hold Right Option (β₯) and talk (local Whisper STT); your words are pasted in, and you press Enter. A Jarvis-style orb pulses while it speaks.
The only truly Mac-native, voice-first companion for Claude Code: read-aloud and dictation β no Electron, no cloud, no account, no freemium. Claude runs completely unmodified; flowcode just sits beside it. English out of the box; Czech one click away.
- π Stop watching the scrollback. Claude works while you do something else; the reply is spoken the instant it arrives β tool calls and code blocks skipped, so you hear the answer, not the plumbing β and you come back exactly when you're needed.
- ποΈ Talk instead of type, safely. Hold Right Option, speak, release β transcribed locally and pasted into whatever's focused (terminal, editor, the Claude desktop app). It never presses Enter β you stay in control of every commit.
- π Fully on-device, private. Kokoro TTS + Whisper STT run on localhost β your voice and Claude's
words never leave your Mac (verifiable with
lsof/ Little Snitch). No telemetry, no account, no plugin.
Honest scope: this is read-aloud + push-to-talk dictation today β a voice layer, not hands-free barge-in conversation (yet). Install is build-from-source (
scripts/setup.sh) β there's no prebuilt one-click download yet.
- π Read-aloud β every new assistant message is spoken via local Kokoro TTS, with the orb pulsing to the speech. Tool-call narration and code blocks are skipped β you hear the prose, not the plumbing.
- ποΈ Push-to-talk dictation β hold Right Option (β₯), speak, release. Your words are transcribed by local Whisper and pasted into whatever app is focused (your terminal, an editor, the Claude desktop app, anywhere). It never presses Enter β you commit.
- π» Claude Code and Claude Desktop β reads the Claude desktop app's replies aloud too (Chat, Cowork, Code), and dictates into it. Choose Listen to βΈ Claude Code / Claude Desktop / Both.
- π English & Czech β Language βΈ English / ΔeΕ‘tina. Czech read-aloud uses an on-demand neural voice that downloads only when you ask for it; English never downloads anything.
- ποΈ Read-aloud modes β Read replies βΈ Off / Full / Compact. Compact speaks just the gist (first + last sentence) when a reply runs long.
- β―οΈ Pause / Resume the whole voice layer with ββ₯Space or the menu β the mic is released the moment you're not dictating.
- β¦ Orb HUD β a luminous, audio-reactive orb that shows when flowcode is listening, speaking, or idle.
- β‘ Local-first & private β TTS and STT are localhost services; nothing is sent to the cloud.
| π€ Claude Code | Any session, completely unmodified β flowcode reads the transcript it already writes. |
| π» Claude Desktop | Reads Chat / Cowork / Code replies aloud (via the Accessibility tree) and dictates into them. |
| π£οΈ Kokoro TTS | Local English text-to-speech (127.0.0.1:8880) β read-aloud, with a pickable voice. |
| π¨πΏ Czech (optional) | On-demand neural voice (Coqui VITS) + multilingual Whisper β downloaded only when you pick Czech. |
| βοΈ Whisper STT | Local speech-to-text (127.0.0.1:2022) β push-to-talk dictation, English & Czech. |
| π₯οΈ macOS 14+ | Apple Silicon (M-series). Menu-bar agent, no Dock icon. |
| β¨οΈ Your terminal / editor | Warp, Terminal, iTerm2, VS Codeβ¦ dictation pastes into the focused app. |
flowcode is installed by an AI coding agent (Claude Code) β there's intentionally no prebuilt download. The agent handles the whole setup: voice services, build, and walking you through the two macOS permission toggles. Requires macOS 14+ on Apple Silicon (the local TTS stack has no Intel builds) and the Xcode 16+ Command Line Tools (Swift 6).
What a first install actually costs: ~3β5 GB of downloads/builds (whisper.cpp compile + multilingual Whisper model + Kokoro TTS with its PyTorch runtime), typically 15β45 minutes depending on your connection. The two voice services then stay resident (~1.5β2 GB RAM). If the final health check says a service isn't listening yet, it's usually still downloading β re-run
scripts/setup.sha few minutes later.
git clone https://github.com/michalstrnadel/flowcode-app.git
cd flowcode-app
claude # then say: "set up flowcode"Claude Code reads AGENTS.md (and the bundled /setup skill) and installs
everything end to end. Any agent that follows AGENTS.md works the same way.
git clone https://github.com/michalstrnadel/flowcode-app.git
cd flowcode-app
scripts/setup.shThen launch flowcode.app β the orb appears in your menu bar. setup.sh checks prerequisites
(Homebrew, uv, Swift), installs + starts Kokoro and Whisper as
launchd agents, builds + signs the app, and opens the right System Settings panes. It's idempotent β
safe to re-run.
| Feature | Microphone | Accessibility |
|---|---|---|
| Read-aloud (Claude Code) | β | β |
| Read-aloud (Claude Desktop) | β | β (to read its on-screen text) |
| Dictation (β₯) | β | β (to paste the transcript) |
Claude Code read-aloud works immediately with no permissions. Dictation and Claude Desktop read-aloud need Accessibility (the same single grant); dictation also needs the Microphone. flowcode prompts the first time you hold β₯. (macOS can't grant these from a script β you flip the toggles in System Settings β Privacy & Security.)
Pick Language βΈ ΔeΕ‘tina in the menu and flowcode offers to download a neural Czech voice
(~350 MB, one-time, fully offline) β English users never download it. Prefer the CLI? Run
scripts/setup.sh --czech or the /czech-voice skill. Czech dictation works with the
multilingual Whisper model (small by default; setup.sh --model medium for higher accuracy).
β Speaking β reading Claude's reply
βββββββββ
Pause Voice ββ₯Space β Resume Voice
Stop Speaking (enabled while speaking)
βββββββββ
Read replies βΈ Full Β· Compact Β· Off (how much to speak; live)
Voice βΈ Sky Β· Bella Β· Adam Β· β¦ (pick a Kokoro voice β English)
Language βΈ English Β· ΔeΕ‘tina (read-aloud + dictation; live)
Listen to βΈ Claude Code Β· Claude Desktop Β· Both
Hold Right Option (β₯) to dictate
βββββββββ
β Read messages aloud (experimental switch; relaunch to apply)
β Launch at Login (real SMAppService login item)
Open Logβ¦
βββββββββ
Quit flowcode βQ
Claude Code JSONL βtailββ
βββΆ flowcode βHTTPββΆ Kokoro :8880 (EN) / Coqui :8771 (CS) ββΆ π + orb
Claude Desktop AX ββββββ
β₯ hold βββΆ mic capture ββHTTPβββΆ Whisper STT (:2022) ββpasteβββΆ focused app
flowcode reads from one or both sources: it tails the transcript Claude Code already writes
(~/.claude*/projects/β¦/<session>.jsonl, active session only), and/or observes the Claude desktop
app's on-screen replies via the macOS Accessibility tree (it keeps conversations server-side, so
there's no file to tail). Each new reply is spoken by Kokoro (English) or the on-demand Coqui voice
(Czech). The mic opens only while you hold β₯, and closes the instant you let go. No socket, no
Python core, no MCP server β read-aloud and dictation are self-contained in the Swift app plus the
local voice services.
Reading the Claude desktop app is best-effort. It scrapes the app's Accessibility tree, which a future Claude UI update could change. If it misbehaves, switch Listen to β Claude Code or Read replies β Off; the Claude Code path is unaffected.
- No audio β confirm the services:
curl -fsS http://127.0.0.1:8880/v1/audio/voicesandcurl -fsS http://127.0.0.1:2022/health. Re-runscripts/setup.shif needed; logs are in~/.voicemode/logs/. - Dictation silent β grant Accessibility + Microphone to flowcode, then relaunch. (Dev builds are ad-hoc signed, so a rebuild may require re-granting.)
- The orb is stuck β Pause/Resume (ββ₯Space), or quit and relaunch.
flowcode began as a real-time, interruptible voice core (barge-in, streaming TTS, semantic
endpointing, a confirmation gate, and a swarm/orchestration HUD), built on a fork of
voicemode. That code is still in the repo but off by
default β it needs a running voicemode voice core and a control socket, which the shipping
read-aloud experience never uses. It's preserved as the roadmap to true barge-in. See
PLAN.md and BOUNDARIES.md (these predate the current default).
swift build # flowcodeKit + the menu-bar app
swift run flowcode # run from the build dir (dev, ad-hoc signed)
swift run flowcode-selftest # headless verification harness β must print ALL PASS
scripts/preflight.sh # build + selftest + watchdog typecheck gateSee DISTRIBUTION.md for the notarized-release pipeline (Developer ID + Sparkle +
Homebrew) and CLAUDE.md for contributor conventions.
Voice engines: Kokoro (TTS) and Whisper (STT). Built on a fork of
voicemode (Mike Bailey). Full attribution in
THIRD-PARTY-NOTICES.md.
MIT β’ Michal Strnadel (michalstrnadel)
