Native voice channel for your AI agents (v1.10.13). Zig single binary — Claude Code, Cursor, Cline talk through it. Neural Pt-BR by default. Tech-report mode + audio post-fx + structured logging. Clone your own voice. Offline, ~91 ms warm synth, $0 per message.
Your AI agents already write, build, deploy, and review. They should also talk — without stealing focus, without a Python venv, without paying ElevenLabs per token, without a shell-out from every tool.
agent-tts stream reads stdin and emits sentences as terminators arrive. MCP say_stream(stream_id, chunk, final?) matches the LLM delta shape. Hear the agent before it finishes thinking.
Voice cloning
Record 30–90 seconds via the menubar window with a guided Pt-BR script. XTTS-v2 sidecar produces an embedding.npz. Use it from any client via --voice <slug>.
History + pause/resume/replay
SQLite WAL keeps every utterance. Pause mid-playback, resume from the same cursor, replay any past item by id. CLI + MCP + menubar all hit the same ops.
Menubar floating player
macOS NSStatusItem + floating NSPanel. Skip / Replay / voice picker — without opening a terminal. Read →
SSML & prosody
W3C SSML 1.1 subset: <emphasis>, <break>, <prosody>, <say-as>, plus <phoneme alphabet="ipa"> and <sub alias="…"> (v1.10.12) for brand-name IPA and code-identifier substitution. Parse < 0.2 µs / 280 chars. Read →
Tech-report mode
--profile tech ships research-anchored Faber knobs (length=1.05 / noise=0.35 / noise_w=0.45) plus an ~80-entry acronym + unit + brand glossary, a CamelCase splitter and a version/commit-hash/URL/path/hex normalizer. tech_profile_search MCP tool A/Bs four bundles in one round-trip (v1.10.8 / v1.10.9).
Audio post-fx pipeline
--postfx clean|tech|broadcast spawns ffmpeg with RNNoise + 4-band EQ + de-esser + 2:1 compressor between piper and zaudio. Per-chunk; falls back to dry PCM if ffmpeg or the RNNoise model is missing. postfx_ms logged per chunk (v1.10.10).
Per-call Piper knobs
--length-scale / --noise-scale / --noise-w flags + matching MCP say params. No daemon restart for A/B. synth_voice_test and voice_knob_search MCP tools batch up to 16 variants in one call (v1.10.7 / v1.10.8).
Structured logging
~/.cache/agent-tts/daemon.log with ISO 8601 lines, rotating at 10 MiB × 3 backups. AGENT_TTS_LOG_LEVEL / _SCOPES / _PATH / _MAX_BYTES filter without rebuild. Worker watchdog kills hung ffmpeg, defer finishPlaying keeps the queue advancing (v1.10.13).
Locked constraints
Platform: macOS Apple Silicon + Intel universal binary. Linux code paths compile on ubuntu-latest CI (espeak-ng + systemd); v1.3 ships structurally, runtime testing in flight.
Footprint: single ~1 MB binary (zig build). Piper voice ONNX (~63 MB) and XTTS-v2 (~1.8 GB) are opt-in downloads to ~/.cache/agent-tts/.
Architecture: CLI + daemon + MCP + menubar all share the binary or the same UNIX socket protocol.
Pt-BR human cadence: cardinals, abbreviations, and punctuation pauses preprocessed in 2–5 µs.
Offline by default: no cloud, no telemetry, no quota. Voice models cached locally.
License
Dual MIT OR Apache-2.0 for the agent-tts source. GPL-3.0-or-later inherits when you build with -Dwith-piper=true (libpiper is GPL). The XTTS sidecar runs out-of-process so MPL-2.0 (Coqui TTS) stays at the process line.