Open source

Compare · Claude Code text-to-speech · 4 min read

How to make Claude Code talk: every text-to-speech option compared.

Claude Code’s /voice lets you talk to it. Nothing built in talks back. Here are the four ways people add spoken output, what each one actually reads, and which to pick.

say hook · claude-code-narrator · claude-code-tts · VoiceMode · Heard · Checked October 6, 2026

The short answer

Use a hook or a plugin; Claude Code’s own voice feature is input only.

Claude Code’s voice dictation (/voice) transcribes your speech into the prompt. It does not read anything back. To hear Claude Code, add one of four things: a Stop hook that pipes Claude’s last message into macOS say; a read-aloud plugin such as claude-code-narrator or claude-code-tts; VoiceMode, for a two-way spoken conversation; or Heard, which speaks short summaries across several sessions.

The difference that matters is what gets read. Hooks and read-aloud plugins speak Claude’s own words, which is accurate but long. Heard decides what is worth saying and compresses it to a sentence or two.

All options

Five ways to hear Claude Code.

From each project’s README. Stars and dates move; Checked October 6, 2026.

OptionWhat you hearVoice enginePlatformsPrice and license
say hookStop hook + jqClaude’s final message, word for wordmacOS saymacOS (Linux: spd-say)Free
claude-code-narratorpluginTool steps, text between them, the start of the final replyKokoro, localmacOS, LinuxFree, MIT
claude-code-ttsOmnicapableEvery reply, skipping code blocks and tablesKokoro ONNX, localmacOS 12+, WindowsFree, MIT
VoiceModeMCP + pluginA spoken conversation you can answerLocal Whisper.cpp and Kokoro, or OpenAImacOS, Linux, WindowsFree, MIT
Heardvoice layerA sentence or two: what changed and what needs youKokoro local, your own keys, or managed voicesmacOS 14+Free engine; app from $15/mo

(1)say hook

The two-minute version: pipe the last message into say.

The Stop hook receives JSON on stdin that includes last_assistant_message. Extract it with jq and hand it to say. "async": true keeps Claude Code from waiting on the speech, and head -c stops a long reply from talking for minutes.

It costs nothing and needs no install beyond jq. The catch is that it reads Markdown, file paths and code exactly as written, which is hard to follow by ear.

~/.claude/settings.json · speak the last message
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.last_assistant_message // empty' | head -c 600 | say",
            "async": true
          }
        ]
      }
    ]
  }
}

(2)read-aloud plugins

claude-code-narrator and claude-code-tts read locally with Kokoro.

claude-code-narrator is a Claude Code plugin. It speaks short descriptions of tool use (“Reading file settings dot json”), the text between tool calls, the first thousand or so characters of the final reply, and notification text. It goes quiet when you type or click, uses the local Kokoro engine with eight voices, and runs on macOS and Linux.

claude-code-tts by Omnicapable speaks every reply from a Stop hook with local Kokoro ONNX (about a 336 MB model), skipping code blocks, tables, URLs and emoji. It supports macOS 12+ and Windows. A separate npm package of the same name defaults to Edge TTS, which is Microsoft’s online service, with Kokoro as the offline fallback.

Inside Claude Code · claude-code-narrator
/plugin marketplace add shreyas-s-rao/claude-code-narrator
/plugin install narrator
/reload-plugins
/narrator:on

(3)VoiceMode

VoiceMode, if you want to talk with Claude, not just listen.

VoiceMode is the most established option here, with about 1,400 GitHub stars and an MIT license. It is an MCP server and Claude Code plugin for back-and-forth voice conversations: Claude speaks, you answer out loud. It can run fully local with Whisper.cpp and Kokoro, or use OpenAI’s cloud. It works on macOS, Linux and Windows.

Pick VoiceMode when the goal is a spoken conversation with one session, or when you are not on a Mac. It is built for talking with an agent, not for keeping track of several agents at once.

Inside Claude Code · VoiceMode
claude plugin marketplace add mbailey/voicemode
claude plugin install voicemode@voicemode
/voicemode:install

(4)Heard

Heard summarizes instead of reading, across every session.

Heard installs Claude Code hooks and decides what deserves speech: questions, approvals, failures and results get through, while routine tool churn gets a one-liner or stays quiet. With several sessions running, each update starts with the project name. Three listening modes set how much you hear, from short signposts to alerts only.

The open-source engine is free under Apache 2.0, with local Kokoro voices and no account. The Mac app adds managed voices and, on Power, voice replies and Parrot recaps. Heard is macOS only.

Useful

“Api: tests pass. I fixed the date parser and have one question about the migration.”

Noise

“Here is a summary of the changes I made. First, in src slash utils slash date dot ts, I updated the parse function to…”

Terminal · Heard open-source engine
git clone https://github.com/heardlabs/heard.git && cd heard
python3 -m venv .venv && source .venv/bin/activate && pip install -e .
heard install claude-code

(5)Choosing

Match the tool to what you want to hear.

All of these are honest choices. They answer different needs.

  • Every word of the final reply, free: the say hook.
  • A local narrator for one session on macOS or Linux: claude-code-narrator.
  • Replies read aloud on Windows: claude-code-tts.
  • A spoken back-and-forth conversation, on any OS: VoiceMode.
  • Short spoken summaries across several Claude Code and Codex sessions on a Mac: Heard.

Questions

Frequently asked questions

Does Claude Code have text-to-speech built in?

No spoken output is built in. /voice is dictation: it transcribes your speech into the prompt, and the audio is processed on Anthropic’s servers. Spoken output comes from hooks, plugins, MCP servers or a voice layer.

How do I make Claude Code read its responses out loud?

Add a Stop hook in ~/.claude/settings.json that runs jq -r .last_assistant_message | say, or install a plugin such as claude-code-narrator. Both read Claude’s words; Heard speaks a short summary instead.

Is there a free, local text-to-speech option for Claude Code?

Yes. claude-code-narrator and Omnicapable’s claude-code-tts both use the local Kokoro engine, VoiceMode can run with local Whisper.cpp and Kokoro, and Heard’s open-source engine uses Kokoro when you add no keys.

Can I talk back to Claude Code by voice?

Yes: /voice dictates prompts, VoiceMode runs a spoken conversation, and Heard Power lets you hold right ⌘ to answer the session that just spoke.

Ready when your agents are

Hear the work without watching every screen.

Start with the full Heard Power experience for 14 days. No card required. The open source engine remains free.

Download Heard for Mac macOS 14 or later · Claude Code and Codex supported