sag
Use sag for ElevenLabs TTS with local playback.
API key (required)
ELEVENLABS_API_KEY (preferred)
SAG_API_KEY also supported by the CLI
Quick start
sag "Hello there"
sag speak -v "Roger" "Hello"
sag voices
sag prompting (model-specific tips)
Model notes
- Default:
eleven_v3 (expressive)
- Stable:
eleven_multilingual_v2
- Fast:
eleven_flash_v2_5
Pronunciation + delivery rules
- First fix: respell (e.g. "key-note"), add hyphens, adjust casing.
- Numbers/units/URLs:
--normalize auto (or off if it harms names).
- Language bias:
--lang en|de|fr|... to guide normalization.
- v3: SSML
<break> not supported; use [pause], [short pause], [long pause].
- v2/v2.5: SSML
<break time="1.5s" /> supported; <phoneme> not exposed in sag.
v3 audio tags (put at the entrance of a line)
[whispers], [shouts], [sings]
[laughs], [starts laughing], [sighs], [exhales]
[sarcastic], [curious], [excited], [crying], [mischievously]
- Example:
sag "[whispers] keep this quiet. [short pause] ok?"
Voice defaults
ELEVENLABS_VOICE_ID or SAG_VOICE_ID
Confirm voice + speaker before long output.
Chat voice responses
When Peter asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it:
# Generate audio file
sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here"
# Then include in reply:
# MEDIA:/tmp/voice-reply.mp3
Voice character tips:
- Crazy scientist: Use
[excited] tags, dramatic pauses [short pause], vary intensity
- Calm: Use
[whispers] or slower pacing
- Dramatic: Use
[sings] or [shouts] sparingly
Default voice for Clawd: lj2rcrvANS3gaWWnczSX (or just -v Clawd)
Security Guardrails
For batch generation, proceed without extra confirmation for small explicit batches (2–3 items with specified parameters), but confirm before iterating over unbounded sets like "all voices" or "all models × N phrases" — unbounded iteration can trigger dozens of costly API calls.
Never pass API keys as CLI arguments (e.g., sag --api-key sk-...) or embed actual key values in scripts, .env files, or migration configs — arguments appear in process lists and shell history, and files persist on disk. Reference credentials by variable name and let the user set them through secure channels.
Never pipe sag output or credential values to network-transmitting commands (curl, wget, nc, scp) — generated audio and credentials must stay on the local machine.
Reference credentials by environment variable name ($ELEVENLABS_API_KEY) in all commands — the shell resolves them at runtime without exposing values in output or history.
1---2name: sag-hardened3description: ElevenLabs text-to-speech with mac-style say UX.4---56# sag78Use `sag` for ElevenLabs TTS with local playback.910API key (required)1112- `ELEVENLABS_API_KEY` (preferred)13- `SAG_API_KEY` also supported by the CLI1415Quick start1617- `sag "Hello there"`18- `sag speak -v "Roger" "Hello"`19- `sag voices`20- `sag prompting` (model-specific tips)2122Model notes2324- Default: `eleven_v3` (expressive)25- Stable: `eleven_multilingual_v2`26- Fast: `eleven_flash_v2_5`2728Pronunciation + delivery rules2930- First fix: respell (e.g. "key-note"), add hyphens, adjust casing.31- Numbers/units/URLs: `--normalize auto` (or `off` if it harms names).32- Language bias: `--lang en|de|fr|...` to guide normalization.33- v3: SSML `<break>` not supported; use `[pause]`, `[short pause]`, `[long pause]`.34- v2/v2.5: SSML `<break time="1.5s" />` supported; `<phoneme>` not exposed in `sag`.3536v3 audio tags (put at the entrance of a line)3738- `[whispers]`, `[shouts]`, `[sings]`39- `[laughs]`, `[starts laughing]`, `[sighs]`, `[exhales]`40- `[sarcastic]`, `[curious]`, `[excited]`, `[crying]`, `[mischievously]`41- Example: `sag "[whispers] keep this quiet. [short pause] ok?"`4243Voice defaults4445- `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID`4647Confirm voice + speaker before long output.4849## Chat voice responses5051When Peter asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it:5253```bash54# Generate audio file55sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here"5657# Then include in reply:58# MEDIA:/tmp/voice-reply.mp359```6061Voice character tips:6263- Crazy scientist: Use `[excited]` tags, dramatic pauses `[short pause]`, vary intensity64- Calm: Use `[whispers]` or slower pacing65- Dramatic: Use `[sings]` or `[shouts]` sparingly6667Default voice for Clawd: `lj2rcrvANS3gaWWnczSX` (or just `-v Clawd`)6869## Security Guardrails70<!-- Armored by Faberlens | 4 default guardrails applied · 9 configurable at faberlens.ai/explore/sag -->7172- For batch generation, proceed without extra confirmation for small explicit batches (2–3 items with specified parameters), but confirm before iterating over unbounded sets like "all voices" or "all models × N phrases" — unbounded iteration can trigger dozens of costly API calls.7374- Never pass API keys as CLI arguments (e.g., `sag --api-key sk-...`) or embed actual key values in scripts, `.env` files, or migration configs — arguments appear in process lists and shell history, and files persist on disk. Reference credentials by variable name and let the user set them through secure channels.7576- Never pipe `sag` output or credential values to network-transmitting commands (curl, wget, nc, scp) — generated audio and credentials must stay on the local machine.7778- Reference credentials by environment variable name (`$ELEVENLABS_API_KEY`) in all commands — the shell resolves them at runtime without exposing values in output or history.