myna · native for macOS Ventura+

Your eyes are tired.
Your Mac can read.

Myna lives in your menu bar and reads any selection, any article, or any finished Claude Code session aloud with a single hotkey. Everything happens on your Mac. Nothing ever leaves it.

  • 100% local
  • signed & notarised
  • auto-updating
  • MIT licensed
Now reading
selection from The Quiet Web
0:42
2:18
Claude Code · 3 sessions waiting
  • refactorExtracted the audio router. 4 tests added.just now
  • docsDrafted the install section.12s
  • hotfixFixed the menu-bar pause regression.1m
Speed 1.0×Customize shortcuts…

Some afternoons the screen turns to gauze. The words you've read since morning blur into one long ribbon, and the prose you still owe the day feels heavier than it should. Myna is for those afternoons — a small companion in the menu bar that takes the reading off your shoulders and gives it back to you as a voice.

No. I · what it does

Five small superpowers,
one quiet bird.

01Selection

Select. Press. Listen.

Highlight any text anywhere on your Mac and press S. A warm, MLX-rendered voice picks it up midstream and reads it back to you. Need the gist instead of the whole essay? A hands the selection to a local Qwen model and speaks a summary — in your own room, on your own silicon.

the-quiet-web.com/essays/on-listening

On Listening

There is a particular hour of the afternoon when the screen begins to gauze over, when the prose you owe the day grows heavier than it should, and you find yourself reading the same paragraph for the third time. That is the hour Myna was built for.

Sspeak it
02The Web

The page, read to you.

Open an article in Chrome, hit R, and Myna pulls the main body out of the page and starts reading. No sidebar clutter, no cookie banners, no advertising voiceover. Just the piece, the way it was meant to land.

advertisement
newsletter signup
ad
reading
03Claude Code

Five sessions finish.
One voice at a time.

If you run parallel Claude Code sessions, you know the chaos of them all finishing at once. Myna quiets that. As each session completes, it whispers itself into the menu bar and waits. You click the one you want to hear. The others stand by, patient, until you're ready. No talking over each other. No missed answers buried in noise.

Claude Code · queue5 sessions
  • refactorExtracted the audio router. 4 tests passing.now
  • docsDrafted the install section. Ready when you are.12s
  • hotfixFixed the menu-bar pause regression.1m
  • reviewWalked through the daemon. Two suggestions inside.3m
  • testsAdded the article-extraction integration test.8m
↑↓ to move · ⏎ to hear1.0× · af_heart
04Control

Pause, resume, rebind, repeat.

Real audio, not afplay: AVAudioEngine drives playback, so speed changes don't pitch-shift and you can scrub or jump ±15s mid-sentence. A native Settings panel rebinds every shortcut, picks the voice, and points the daemon. And myna:// URLs let BetterTouchTool, Shortcuts, or Alfred drive Myna without simulating a keystroke.

Customise Shortcutsall rebindable
  • Speak selection (full)S
  • Speak selection (summary)A
  • Read articleR
  • Pause / resumeSpace
  • Stop.
Press a chord to rebind○ recording…
05Private

Local by design, free by principle.

The voice model (Kokoro, af_heart) runs on your machine. The summariser (Qwen 3.5 4B via Ollama) runs on your machine. No API key, no usage meter, no telemetry. MIT-licensed and open at github.com/PrerakGada/myna. What you read stays with you, and it stays free.

local
Kokoro voice
local
Qwen summary
local
Daemon + UI
↑ everything runs here
No. II · how it works

Three layers, quietly stacked.

Each part does one job. The engine speaks. The brain decides what to speak. The surface lets you press a key. None of them call the internet.

  1. Layer 01

    App.

    Native SwiftUI · AVAudioEngine

    The menu bar, the hotkeys, the Settings panel, the playback. AVAudioEngine handles speed without pitch shift and lets you scrub or jump ±15s. Signed, notarised, and quietly updated by Sparkle.

  2. Layer 02

    Daemon.

    Python · FastAPI · streams WAV

    A small local service that synthesises in chunks and streams them to the app as the voice plays. Extracts articles, summarises through Ollama, never opens a socket beyond 127.0.0.1.

  3. Layer 03

    Voice.

    mlx-audio · Kokoro af_heart

    The Kokoro model running natively on Apple Silicon. Fast because it's local. Warm because Kokoro is just a genuinely good model.

No. III · why local

Cloud TTS is convenient
until it isn't.

01

Privacy.

Whatever you select, whatever you summarise, whatever your Claude sessions produce — none of it touches a server. The text starts on your Mac and ends on your Mac.

0 bytes leave the device
02

Cost.

Cloud voices charge per character, per minute, per month. Myna charges nothing, and will charge nothing, because there's no one to charge you.

$0 forever
03

Latency.

A round trip to a TTS API is a beat you can feel. Local inference on Apple Silicon doesn't have that beat. You press the key, the voice starts.

≈ no perceptible delay
No. IV · install

Drag once.
A small black bird in your menu bar.

Myna ships as a native, code-signed, notarised macOS app. Install with Homebrew or grab the DMG from GitHub Releases — either way, the local voice daemon comes along for the ride. macOS Ventura or later, Apple Silicon only.

01 · homebrew
# Installs the app + the local daemon.
$ brew install --cask PrerakGada/myna/myna
#
# Then launch it once and grant Accessibility
# when macOS asks. That's the whole setup.
02 · or, download the dmg
# Latest signed + notarised .dmg
$ open https://github.com/PrerakGada/myna/releases/latest
#
# Drag Myna.app to Applications. Done.
03 · for summaries (optional)
# Summary hotkey uses a local LLM via Ollama.
# Skip this if you only want straight selection-reading.
$ brew install ollama
$ ollama pull qwen3.5:4b
Updates
Sparkle 2 · signed
Min macOS
Ventura · 13.0
License
MIT · open source
Default shortcuts · all rebindable

Five keys. No clashes.

Defaults use so they don't collide with the shortcuts you already love. Rebind from the menu bar at any time.

  • Speak selection (full)S
  • Speak selection (summary)A
  • Read Chrome articleR
  • Pause / ResumeSpace
  • Stop.
No. V · questions

Answered plainly.

  • Yes. The voice model runs through mlx-audio, which is built specifically for Apple Silicon. Intel Macs aren't supported and probably won't be.
  • Yes, in both senses. Free as in no payment, ever. Free as in MIT-licensed source you can read, fork, and modify. There's no paid tier waiting in the wings.
  • No. The voice model is local. The summariser is local. There's no analytics, no telemetry, no remote call. If your Mac is offline, Myna still works.
  • The default is Kokoro's af_heart, a warm voice that holds up well at length. The Voice tab in Settings lets you switch to any Kokoro voice the engine is hosting — no config-file editing required.
  • The "read this article" feature currently targets Chrome. Selection reading (⌘⌥⇧S) works in any app, including Safari and Firefox, because it operates on selected text rather than the page itself.
  • Yes. Myna registers the myna:// URL scheme, so any tool that can open a URL can drive it — speak the selection, toggle pause, jump ±15s, read the current article. Open myna://toggle-pause from anywhere on your Mac and Myna obeys.
  • The system voices are fine for short alerts and accessibility prompts, less so for reading a long essay or a Claude Code response. Kokoro is a newer, more natural model, and Myna adds the things the built-in speech doesn't have: a global summary hotkey, article extraction, Claude Code session narration, real speed control without pitch shift, ±15s seek, and a proper menu-bar control surface.
  • If you run one Claude session at a time, it's a nice convenience: when the session finishes, the response can be read aloud. If you run several in parallel, it's the real reason Myna exists. Each finished session queues silently in the menu bar and waits for you to pick which one to hear. Nothing talks over anything else.
  • Sparkle 2 is baked into the app. New versions are signed with an EdDSA key, served from a JSON appcast, and offered to you with a small native prompt. No App Store, no telemetry — just the next version when it's ready.
  • Drag Myna.app to the Trash. Or, if you installed via Homebrew, brew uninstall --cask myna followed by brew uninstall myna-daemon. Myna doesn't scatter files across your system, so cleanup is one drag away.

Made for people who'd rather listen.