Give any coding agent a spoken reply using a CLI and a Stop hook
The reason this is worth ten minutes: it is harness-agnostic. Because the mechanism is just a CLI the agent invokes, the same setup works in Claude Code, Codex, OpenCode, Devin or anything else that can run a shell command — no per-tool voice feature required. The suggested reply shape is the part that makes it useful rather than a novelty: one or two sentences on what was done, then a question about the next step, which turns a finished task into a decision point instead of a notification you have to go read.
"I Gave My Agents a Voice — And It's Wildly Useful" by Developers Digest — Watch on YouTube →
Step-by-Step Breakdown
-
Install the CLI and confirm it
Install the tool, then run its version command to confirm it is on your PATH. The install and login are separate steps.
-
Authenticate
The login command opens a browser to authenticate and provisions free credits, so you can test the whole flow before deciding whether it earns a place in your setup.
-
Pick a voice you can stand hearing all day
Run the CLI with sample text and try speakers and models until one is tolerable. This sounds trivial and is not — the whole value is that you will hear it dozens of times a day, and a voice you dislike makes you turn the feature off. The dashboard groups voices as professional, formal, casual and energetic, and supports cloning.
-
Tell the agent to use it, and how to learn it
The prompt pattern shown: ask for the work, then "once you are done, respond back with one or two sentences of what you did and then ask me a question about what we should do next. Use the CLI — run its
--helpcommand to learn how to use it." Pointing the agent at--helprather than documenting the flags yourself is the reusable move. -
Make it permanent in your agent instructions
Rather than repeating the instruction each session, put the preference in
CLAUDE.md,AGENTS.md, or the equivalent for your harness, or wrap it in a skill — so the agent does not have to rediscover the CLI at the start of every conversation. -
Or fire it deterministically from a Stop hook
If you want it to speak every time rather than when the model remembers to, attach it to the harness's stop hook. That moves it from an instruction the model may skip to a deterministic side effect of a turn ending — which is the difference between a habit and a feature.
Commands & Code Shown
rhyme --version
rhyme --version
Purpose: Confirms the CLI installed correctly and is on your PATH.
When to use: Immediately after install, before wiring it into any agent instruction — a missing binary shows up as an agent silently skipping the step.
rhyme login
rhyme login
Purpose: Opens a browser to authenticate and attaches free starting credits to the CLI.
When to use: Once per machine. Do this before testing, or every invocation fails.
rhyme "Hello, this is Developers Digest"
rhyme "Hello, this is Developers Digest"
Purpose: Speaks the given text with the default voice, showing a waveform, duration and generation speed in the terminal.
When to use: To sanity-check audio output and latency before handing the command to an agent.
rhyme "..." --speaker <name> --model <name>
rhyme "..." --speaker <name> --model <name>
Purpose: Selects a specific voice and model for the utterance.
When to use: Once you have picked a voice. A useful pattern suggested in the video: a different speaker per project directory, so you know which agent is reporting before you parse the words.
Gotchas & Caveats
- This uses a specific commercial text-to-speech service with a free credit tier. The pattern — CLI plus stop hook — is the transferable part and works with any TTS tool that ships a command-line interface.
- Voice cloning is offered (a short instant clone, or a longer professional one). Cloning your own voice is fine; cloning anyone else's without permission is not.
- Spoken output is additive, not a replacement — you still want the written transcript for anything you need to audit later.
Key Takeaways
- It works across harnesses because it is just a command. Claude Code, Codex, OpenCode and Devin are all demonstrated or named — nothing about the setup is tool-specific.
- Ask for a summary plus a question, not just a summary. Most coding agents end a turn without proposing a next step; this makes the end of a task a decision point.
- A Stop hook makes it deterministic. Instructions in a prompt get skipped; a hook does not.
- Put the preference in
CLAUDE.md/AGENTS.mdor a skill so the agent does not spend turns rediscovering the CLI. - A different voice per agent or per project is a real usability win once you run several at once — you identify the reporter before you parse the report.
- The underlying problem being solved is worth naming: with several agents running, the bottleneck is you reading long threads, and a spoken two-sentence handoff shortens that loop considerably.





