Skip to content

michalstrnadel/flowcode-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

54 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

flowcode β€” the voice of Claude Code

flowcode πŸ”Š β€” the voice of Claude Code

Talk to Claude. Hear it talk back. In English or Czech. Fully local, on your Mac.

CI macOS 14+ Swift 6 Build from source Local-first MIT License


flowcode in action β€” reading a Claude Code reply aloud while the orb pulses in the menu bar, plus push-to-talk dictation

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.

Why you'll want this

  • πŸ‘‚ 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.

What it does

  • πŸ”Š 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.

flowcode's orb reacting to speech, with a live audio waveform

Works with

πŸ€– 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.

Install

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.sh a few minutes later.

Recommended β€” let Claude Code install it

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.

Manual β€” run the script yourself

git clone https://github.com/michalstrnadel/flowcode-app.git
cd flowcode-app
scripts/setup.sh

Then 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.

Permissions (one time)

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.)

Czech voice (optional)

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).

The menu

β—‰  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

How it works

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.

Troubleshooting

  • No audio β†’ confirm the services: curl -fsS http://127.0.0.1:8880/v1/audio/voices and curl -fsS http://127.0.0.1:2022/health. Re-run scripts/setup.sh if 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.

Experimental / dormant

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).

Building from source

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 gate

See DISTRIBUTION.md for the notarized-release pipeline (Developer ID + Sparkle + Homebrew) and CLAUDE.md for contributor conventions.

Credits

Voice engines: Kokoro (TTS) and Whisper (STT). Built on a fork of voicemode (Mike Bailey). Full attribution in THIRD-PARTY-NOTICES.md.

License

MIT β€’ Michal Strnadel (michalstrnadel)

About

πŸ”Š The voice of Claude Code. A tiny native macOS menu-bar app that reads Claude Code & the Claude desktop app's replies aloud (local Kokoro TTS) and lets you dictate prompts by holding βŒ₯ (local Whisper STT) β€” with a Jarvis-style audio-reactive orb. Fully local, no cloud, no account. English + Czech. Swift 6, MIT.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors