Read mode already speaks arbitrary text out loud with no LLM involved, which is most of what
"make my script talk to me" needs. The three pieces below cover the rest of the design
space: whether you want the exact text spoken or an LLM's reply to it, and whether vtmate
should play the audio itself or hand you a wav to route elsewhere.
Speak exact text, no LLM: read mode from stdin (-r -)
Read mode reads a file or STDIN
phrase by phrase with an agent's voice and plays it through your normal audio device -
no LLM round trip, so it speaks precisely what you piped in. This is the simplest,
most direct building block for "say this out loud":
Speak a fixed message
echo "Good morning. Here is today's agenda: $(cat ~/agenda.txt)" | vtmate -r -
Speak the outcome of a build
echo "Build failed, check the last 20 log lines: $(tail -20 build.log)" | vtmate -r -
Speak an LLM's reply instead: single run mode (-q)
Single run mode takes a prompt,
gets one reply from the agent's LLM, speaks it through your normal audio device, and
exits. Use this when you want the agent to react to or summarize something, not just
read it verbatim:
Ask the agent to react to something
vtmate -q -p "Reminder: time to stand up and stretch"
The agent's reply is what gets spoken here, not necessarily your exact text - see
Read mode above when you want the
words spoken exactly as written.
Hands you a wav instead: headless read (-r-stdout)
CLI: STT / TTS covers
-r-stdout/--r-stdout in full: it streams synthesized speech as a
wav to STDOUT instead of playing it, with no on-screen text, navigation, or audio device
needed - the right tool when you want to generate or pipe audio rather than have vtmate
play it itself, e.g. from a headless machine with no local speakers.
Render text to a file
echo "Deployment finished." | vtmate -r-stdout - -a reader > deploy-done.wav
Pipe it to another machine's speakers over SSH
echo "Backup complete." | vtmate -r-stdout - -a reader | ssh mediabox aplay -
Put it in a crontab
Any of the three building blocks work from cron exactly as they do from an interactive shell - redirect stdout/stderr so cron's own mail doesn't fill up with vtmate's terminal output:
# Every weekday at 9am, read today's agenda out loud, verbatim
0 9 * * 1-5 echo "Good morning. Here is today's agenda: $(cat ~/agenda.txt)" | vtmate -r - >/dev/null 2>&1
# Every hour, have the agent react with a reminder
0 * * * * vtmate -q -p "Twenty-twenty rule: look at something 20 feet away for 20 seconds" >/dev/null 2>&1
Anything you can script into a shell one-liner - a log tail, a curl
response, the output of another program - can become something vtmate reads out loud to
you, or renders to a wav for whatever plays audio on that machine.