vtmate
🇬🇧

Tutorial

Building programs that talk to you

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.