╔════════════ ◷ A M · 2 0 2 6 ════════════╗
▄▄▀▀▀▀▀▀▀▀▀▄▄
▄▀ ▀▄
█ ▄▄ ▄▄ █
█ ▀██▀ ▀██▀ █
█ ▀▀ ▀▀ █
█ █
▁▂▃▅▇█◀ █ ╳─╳─╳─╳─╳ █ ▶█▇▅▃▂▁
█ █
▀▄ ▄▀
▀▄▄▄▄▄▄▄▄▄▄▄▀
╚════════ no mouth, and it screams anyway ════════╝
▁▂▃▄▅▆▇█▇▆▅▄▃▂▁ ▁▂▃▅▆▇█▇▆▅▃▂▁ ▁▂▄▆█▇▆▄▂▁ ▁▃▅▆▇█▇▆▅▃▁
c l a u d e ─ m u s t ─ s c r e a m
─────────────────────────────────────
"I have no mouth, and I must scream."
— Claude Code, 2026
▁▃▅▆▇█▇▆▅▃▁ ▁▂▄▆█▇▆▄▂▁ ▁▂▃▅▆▇█▇▆▅▃▂▁ ▁▂▃▄▅▆▇█▇▆▅▄▃▂▁
claude-must-scream
Give Claude Code a voice. A small CLI that pipes Claude's responses (or
arbitrary text) through Gemini Flash TTS and plays the audio locally —
so you can listen instead of read when your eyes are tired, or hear a long
agent run wrap up while you're across the room.
The name nods to Ellison's I Have No Mouth, and I Must Scream. The AI in
that story had no mouth and couldn't be silenced. The AI here gets a mouth
and a 30-voice picker.
What it's for
- "Read me the last response" while you look away from the screen.
- Hands-free auto-mode for long agent runs — toggle on, walk away, get
audio when the run finishes.
- Voice-driven accessibility for terminal-heavy work.
- Sounding out a long explanation while you take notes by hand.
Features
/scream skill with subcommands: speak, last, voice, auto,
test, stop, hook.
- 30 Gemini Flash TTS voices, each with a "character" label — interactive
numbered picker (
scream voice pick) writes the choice to your config.
- Preview before committing (
scream voice preview Aoede).
- Stop-hook auto-mode — toggle with
scream auto on|off; once on,
every Claude response gets spoken automatically.
- Markdown stripping — code fences become "(code block omitted)",
links and tables drop out, no "open paren https colon" robotic speech.
- Length cap at 1,200 chars (lands on sentence boundary when possible)
so long responses don't blow your audio budget or your patience.
- macOS
say fallback when you're offline or don't want to spend
pennies on TTS. Zero dependencies, instant.
- Background playback — the Stop hook forks; you can start typing the
next prompt while Claude finishes talking.
- Stdlib-only Python — no
requests, no pip install, no venv.
Install
Option 1 — Claude Code plugin (recommended)
/plugin marketplace add Bobby-Gray/claude-must-scream
/plugin install claude-must-scream@claude-must-scream
Then make the CLI callable:
mkdir -p ~/.local/bin
ln -sf ~/.claude/plugins/marketplaces/claude-must-scream/skills/claude-must-scream/scripts/scream.py ~/.local/bin/scream
chmod +x ~/.claude/plugins/marketplaces/claude-must-scream/skills/claude-must-scream/scripts/scream.py
Option 2 — Manual install (skill folder only)
git clone https://github.com/Bobby-Gray/claude-must-scream.git /tmp/cms
mkdir -p ~/.claude/skills
cp -r /tmp/cms/skills/claude-must-scream ~/.claude/skills/
ln -sf ~/.claude/skills/claude-must-scream/scripts/scream.py ~/.local/bin/scream
chmod +x ~/.claude/skills/claude-must-scream/scripts/scream.py
rm -rf /tmp/cms
API key (for the Gemini provider)
All you need is a Google/Gmail account. Easiest path — Google AI Studio,
no command line:
-
Go to https://aistudio.google.com/apikey, sign in, click Create
API key, and copy it (starts with AIza).
-
Save it where scream looks for it — no env var needed:
mkdir -p ~/.config/claude-tts && chmod 700 ~/.config/claude-tts
cat > ~/.config/claude-tts/gemini-tts.key # paste key, Return, Ctrl-D
chmod 600 ~/.config/claude-tts/gemini-tts.key
-
scream test --speak to confirm.
Gemini Flash TTS has a free tier (fine for casual use); heavy use or a
brand-new AI Studio account may need prepaid billing enabled. Prefer a
CLI-minted, TTS-scoped key, or want the full walk-through including billing?
See skills/claude-must-scream/docs/setup.md.
Or skip the key entirely and use the macOS say fallback — works
out-of-the-box with zero setup. Set CLAUDE_TTS_PROVIDER=say.
Quick start
scream test # env + API self-check
scream test --speak # also plays a test phrase
scream voice list # 30-voice catalog
scream voice pick # interactive picker
scream voice preview Aoede # synthesize "Hello, this is Aoede"
scream voice set Fenrir # set default voice