Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/chendrizzy/claude-tts/setupgit clone --depth 1 https://github.com/chendrizzy/claude-ttsWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00033 | $0.00844 |
| Opus 5 | $0.00016 | $0.00422 |
| Sonnet 5 | $0.00007 | $0.00169 |
| Haiku 4.5 | $0.00003 | $0.00084 |
Grade A, and why
tts:setup scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
What it actually says
You are running first-run setup for the claude-tts plugin.
Invoke the tts-setup skill and follow it end-to-end. The skill bootstraps:
- Detect the platform and architecture (macOS/Linux, arm64/x86_64).
- Ensure
uvand a project virtual environment are available. - Pick the speech engine.
- Ask whether voices vary per project or stay shared across all projects.
- Ask for voice gender policy: balanced, female-only, male-only, mostly female,
or mostly male. The stable config values are
balanced,female_only,male_only,female_preferred, andmale_preferred; mostly means 80/20. - Pick the LLM backend for content routing.
- Calibrate the chosen backend against the bundled mini-eval.
- Install the OS background service (launchd on macOS, systemd --user on Linux).
- Write
~/.config/claude-tts/config.json. - Verify the daemon starts and the socket binds at
${CLAUDE_TTS_SOCKET:-${XDG_RUNTIME_DIR:-/tmp}/claude-tts.sock}.
Run the skill now. Do not hardcode absolute paths — always use ~/.config/claude-tts
and the XDG socket expression above. If a step cannot complete, report which step
failed and the single most likely remediation, then stop.
Note: the full bootstrap and calibration logic lives in the tts-setup skill. If the
skill reports it is a stub, tell the user setup automation is not yet available in
this build and point them at /tts:doctor to check current health.
Only edge-tts and kokoro expose bundled gender metadata in this plugin. For
say, espeak, and voicebox, setup must keep project_voices.enabled=false
and explain that gender/per-project assignment is not enforceable for that
engine. Changing a generated voice pool can remap projects, so restart the daemon
after changing these preferences.
Optional post-setup integrations (not part of the automated skill flow):
-
Cursor editor. To drive TTS from Cursor too, manually wire the three
cursor-*.shhooks (cursor-pre-tool-use.sh,cursor-post-tool-use.sh,cursor-after-agent-response.sh) into Cursor's hook config — they are not registered inhooks/hooks.json, so Claude Code never loads them. They map Cursor'spreToolUse/postToolUse/afterAgentResponseevents onto the Claude Code hooks withCLAUDE_TTS_PASSTHROUGH=false(the gate defaults totrue; setting it false keeps Cursor's stdout clean). On macOS the after-response hook uses GNUtimeout—brew install coreutils. Knobs:CLAUDE_TTS_ENABLED,CLAUDE_TTS_PYTHON,CLAUDE_TTS_PASSTHROUGH. See the Cursor section of the README for the full steps. -
🔊 statusline segment. Everything spoken is logged to a bounded per-session JSONL (
~/.claude/logs/tts/spoken/<session>.jsonl), readable with/tts:log; sub-agents and background-agents each get their own session file. Thestatuslineconfig block (subagent_aware,active_window_s,include_subagent_in_main) is VIEW-ONLY — it tunes what that view shows, not what the daemon logs. The repo ships the config block and the spoken log; the wrapper that renders the live 🔊 segment in your statusline is a personal/global file and is not shipped here.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 59 lines · 33 tokens per session scan A e29420c94027
tts:setup is a command published in the GitHub repository chendrizzy/claude-tts (1 stars, last pushed 16d ago), licensed MIT. It adds 33 tokens to every session and 844 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
notify
Poll the inbox for new notifications addressed to you.
database-setup
Use when a project needs to store data and has no database yet. Setting up Supabase, creating tables, writing queries, and connecting them to the frontend. Written for designers.
wp-polylang
Translate an existing WordPress site into a second language using Polylang.
wp-cinematic-init
Scaffold a cinematic-scroll WordPress theme from an existing demo or from scratch. Installs cinematic-scroll-kit as a recommended skill, picks the cinematic starter, then defers to /wp-init with --mode=cinematic for the rest of the bootstrap (project info, ACF flavor, server, vhost).
export
GDPR Article 20 — export all memories you own as portable JSON.
netllm-doctor
Troubleshoot netllm misconfigurations (PATH, providers, mDNS, agent health).