ra-yavuz › claude-can-speak

claude-can-speak logo

claude-can-speak

Let Claude Code decide what to say out loud. Most "speak Claude aloud" tools read every reply at you. This one leads with a skill that lets Claude voice only what is worth hearing, a "build is done", a heads-up, a shoutout, while everything else stays text. The speak-everything firehose is included too, but the deliberate skill is the point. Local neural voice, no cloud, no API keys.

Two ways to use it

ModeWhat it doesEnable
Deliberate
the headline
A speak skill lets Claude choose what to voice: "the build is done", a heads-up while you look away, a shoutout. Selective, on purpose, model-controlled. This is what most other tools do not do. claude-can-speak install-skill
Firehose
optional
A Stop hook speaks every finished reply. It has its own explicit on/off switch (off by default), independent of Claude Code's /voice dictation. claude-can-speak on
or /ccs on

Requirements

Claude Code, Node.js 16+ / npm, and Docker (the TTS engines run in a container so they never touch your host Python). On Linux you also need an audio player: pw-play, paplay, or aplay. The CLI checks for Docker and tells you how to install it if it is missing.

Install

npm install -g claude-can-speak
claude-can-speak setup     # Docker check, build, install skill + /ccs + hook

# then restart Claude Code once. Deliberate mode is on; the firehose is off
# by default. Turn the firehose on when you want every reply spoken:
claude-can-speak on        # speak every reply (terminal)
/ccs on                    # same, from inside Claude Code
claude-can-speak off       # back to silent (default)

If npm install -g fails with EACCES (a system-owned npm prefix like /usr), either set a user prefix once with npm config set prefix ~/.npm-global and add ~/.npm-global/bin to your PATH, or install with sudo. Models download on first use into ~/.cache/claude-can-speak/models; nothing model-shaped ships in the package.

The toggle is a command, not a built-in slash setting. claude-can-speak does not hook into Claude Code's /voice; if you type / in Claude Code before setup and find nothing, that is expected. Control the firehose from the terminal with claude-can-speak on / off, or from inside Claude Code with the /ccs slash command that setup installs. After turning the firehose on, replies are spoken from the next session that starts; Claude Code reads its hook roster at session start, so start a fresh session once after the first setup for the speak-every-reply hook to take effect.

Check it:

claude-can-speak status     # gate, container, voice, model cache
claude-can-speak test       # speak a sample line

Choosing a voice

The default is Kokoro af_heart (natural US English). List options with claude-can-speak voices. For German or Turkish, switch to the multilingual Piper engine:

claude-can-speak engine piper
claude-can-speak voice de_DE-thorsten-high   # German
claude-can-speak voice tr_TR-dfki-medium     # Turkish

Interrupting

Stop playback any time with claude-can-speak stop, or just send your next message: a UserPromptSubmit hook silences the previous reply. A new reply also supersedes the old one. Interrupts stop both in-flight synthesis and active playback.

How it works

When a reply finishes and the firehose is on, the Stop hook strips markdown and code, then hands the text to a persistent Docker container that synthesises a WAV with Kokoro or Piper; the host plays it. The container starts once and stays warm, so the model import cost is paid once, not per reply. Only audio crosses back to the host. The speak skill drives the same pipeline through claude-can-speak say, but only when Claude (or you) chooses to speak. Everything runs locally: no network at speak time, no telemetry.

Disclaimer / no warranty

This software is provided as is, without warranty of any kind, express or implied. The author is not liable for any damage, data loss, or other harm arising from its use. It runs background processes, plays audio, builds and runs a Docker container, and downloads third-party speech models from the internet on your behalf. You are responsible for complying with the licences of the bundled engines and the downloaded models. By installing or using this software you accept full responsibility for any consequences. Full text: repo README and THIRD_PARTY.md; licence: MIT.