- macOS downloads are signed and notarized.
- Homebrew installs verified native archives on Apple Silicon, Intel, and both Linux architectures.
- Release binaries for macOS are now Developer ID signed and notarized, so direct downloads pass Gatekeeper.
- Homebrew release updates now use verified binary archives and checksums for both macOS and Linux architectures, including Linux ARM.
- Release archives retain their architecture-specific names; the universal macOS archive now uses
sag_<version>_universal_darwin_all.tar.gz, andSHA256SUMSreplaces the versioned checksum manifest and per-archive checksum files.
- macOS release builds now explicitly retain the existing macOS 15 minimum when the build runner or SDK changes.
- Source-install documentation now requires Go 1.25+, matching
go.mod.
- Updated Oto to 3.4.1 and purego to 0.11.0 for upstream platform and FFI fixes; refreshed Go/Node setup and lint tooling while retaining Go 1.25+ support. CI now also verifies the docs build.
- Explicit
--formatvalues now override output-extension inference, preserving the requested ElevenLabs audio format. (#21/#22, thanks @100yenadmin)
- Added live-tested 60db provider support via
/default-voices,/myvoices, and/tts-synthesize, including bounded NDJSON decoding, incomplete-response rejection, and PCM-to-WAV playback. (#20, thanks @manishEMS47)
- Release archives now include target-specific macOS and Linux assets for Homebrew and aqua installers.
- Voice discovery: semantic
--queryover name/description/labels, repeatable--labelfilters, preview playback via--try, metadata caching, and server-side name search when supported. - Bare
sagnow reads piped stdin like macOSsay, soecho "hello" | sagspeaks the text without requiring thespeaksubcommand. (#14, thanks @atdrendel)
--formatand.ogg/.opusoutput paths now request native ElevenLabs Opus output instead of always receiving MP3. (#16, thanks @derspotter)- Long TTS generation no longer hits hidden 60s/90s internal timeouts; use
--timeoutorSAG_TIMEOUTwhen you wantsagto enforce a limit. (#17/#18, thanks @sumurtk2) --no-playand--no-streamare now accepted aliases for--play=falseand--stream=false.- macOS playback now defaults to
afplayfor better AirPlay routing, with--player oto/SAG_PLAYER=otoavailable as a fallback. (#15, thanks @s0up4200)
- Voice ID resolution respects
--voice-idand avoids misclassifying long names;--ratenow overrides--speedvalidation. (#7, thanks @joelbdavies) - Voice name matching now uses exact/substring checks without falling back to unrelated voices; voice search is handled client-side. (#8, thanks @joelbdavies)
sag helpandsag completionno longer default tospeak. (#4, thanks @GiGurra)
--api-key-fileandELEVENLABS_API_KEY_FILE/SAG_API_KEY_FILEsupport for loading API keys from a file. (#6, thanks @GiGurra)
-o/--outputnow disables speaker playback by default unless--playis explicitly set. Previously-osaved to file AND played through speakers, which was confusing.
- Voice control flags:
--stability,--similarity/--similarity-boost,--style,--speaker-boost/--no-speaker-boost. - Request controls:
--seed,--normalize (auto|on|off),--lang(ISO 639-1). --metricsto print basic request stats (chars/bytes/duration) to stderr.sag promptingcommand and README section with prompting tips.
- Default model is now
eleven_v3(override with--model-id eleven_multilingual_v2for a stable baseline).
- Release metadata only (patch bump).
- Initial release of
sagElevenLabs TTS CLI with macOSsay-style flags. - Streaming default playback to speakers with optional file output; cross-platform audio via go-mp3 + oto.
- Voice listing (
sag voices) and voice resolution by name/ID, including?to list. - macOS
saycompatibility:-v/--voice,-r/--rate,-f/--input-file,-o/--output, plus accepted no-op flags. - Auto-routing bare
sag ...text/flags tospeaksubcommand, including npm/pnpm--pass-through support. - Speed control (
--speedor--rate), latency tier selection, model/format overrides with extension inference. - Default voice fallback to first available when none provided; env support
ELEVENLABS_VOICE_IDorSAG_VOICE_ID. - Config via
ELEVENLABS_API_KEY/SAG_API_KEY;--api-keyand--base-urloverrides. - Tests for format inference, text sourcing, voice resolution helpers, and default
speakrouting behavior. - Help/README improvements: feature overview, examples for subcommand-less usage, and voice discovery guidance.
- Homebrew tap formula (
brew install steipete/tap/sag) and release playbook. - CI workflow (lint + tests) and golangci-lint config.
- Documentation: README, docs/spec.md, and usage examples.
- Version flag (
--version/-V) reporting 0.1.0; help available without API key.