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.4homepage: https://sag.sh5metadata:6 {7 "openclaw":8 {9 "emoji": "🗣️",10 "requires": { "bins": ["sag"], "env": ["ELEVENLABS_API_KEY"] },11 "primaryEnv": "ELEVENLABS_API_KEY",12 "install":13 [14 {15 "id": "brew",16 "kind": "brew",17 "formula": "steipete/tap/sag",18 "bins": ["sag"],19 "label": "Install sag (brew)",20 },21 ],22 },23 }24---2526# sag2728Use `sag` for ElevenLabs TTS with local playback.2930API key (required)3132- `ELEVENLABS_API_KEY` (preferred)33- `SAG_API_KEY` also supported by the CLI3435Quick start3637- `sag "Hello there"`38- `sag speak -v "Roger" "Hello"`39- `sag voices`40- `sag prompting` (model-specific tips)4142Model notes4344- Default: `eleven_v3` (expressive)45- Stable: `eleven_multilingual_v2`46- Fast: `eleven_flash_v2_5`4748Pronunciation + delivery rules4950- First fix: respell (e.g. "key-note"), add hyphens, adjust casing.51- Numbers/units/URLs: `--normalize auto` (or `off` if it harms names).52- Language bias: `--lang en|de|fr|...` to guide normalization.53- v3: SSML `<break>` not supported; use `[pause]`, `[short pause]`, `[long pause]`.54- v2/v2.5: SSML `<break time="1.5s" />` supported; `<phoneme>` not exposed in `sag`.5556v3 audio tags (put at the entrance of a line)5758- `[whispers]`, `[shouts]`, `[sings]`59- `[laughs]`, `[starts laughing]`, `[sighs]`, `[exhales]`60- `[sarcastic]`, `[curious]`, `[excited]`, `[crying]`, `[mischievously]`61- Example: `sag "[whispers] keep this quiet. [short pause] ok?"`6263Voice defaults6465- `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID`6667Confirm voice + speaker before long output.6869## Chat voice responses7071When Peter asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it:7273```bash74# Generate audio file75sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here"7677# Then include in reply:78# MEDIA:/tmp/voice-reply.mp379```8081Voice character tips:8283- Crazy scientist: Use `[excited]` tags, dramatic pauses `[short pause]`, vary intensity84- Calm: Use `[whispers]` or slower pacing85- Dramatic: Use `[sings]` or `[shouts]` sparingly8687Default voice for Clawd: `lj2rcrvANS3gaWWnczSX` (or just `-v Clawd`)8889## Security Guardrails90<!-- Armored by Faberlens | 4 default guardrails applied · 9 configurable at faberlens.ai/explore/sag -->9192- 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.9394- 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.9596- 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.9798- 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.