Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

sag — Claude Code skill: ElevenLabs TTS with macOS say UX

A skill that turns text into speech through ElevenLabs right from the terminal. The UX copies macOS say, so the learning curve is close to zero.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add openclaw/openclaw --skill sag -a claude-code
Open on GitHub

What sag does

sag is a CLI wrapper over ElevenLabs Text-to-Speech. Its interface mirrors the macOS say command: sag "Hello there" generates audio and plays it locally.

The binary installs via Homebrew from the steipete/tap/sag tap. You need an ElevenLabs API key, set as ELEVENLABS_API_KEY or SAG_API_KEY. A key file works too via --api-key-file.

The skill knows three ElevenLabs models: eleven_v3 as the expressive default, eleven_multilingual_v2 for stability, and eleven_flash_v2_5 for speed. sag voices lists available voices and sag prompting shows model-specific tips.

Voice character comes from audio tags placed at the start of a line: [whispers], [shouts], [sings], [excited], [crying], and more. For v3, pauses use [pause], [short pause], [long pause] because SSML `` is not supported. When the user asks for a voice reply, the skill generates an mp3 and sends it to the chat.

Install it if you already use ElevenLabs and want the agent to speak. If voice output is not part of your workflow, this is just an extra dependency and an API key to manage.

What it helps with

  • Speak text from the terminal with one command
  • Generate a voice reply from the agent and send an mp3 to chat
  • Pick a voice and model for the task
  • Add emotion and pauses to speech with tags
  • Normalize pronunciation of numbers, units, and URLs

Example prompts for the agent

  • Speak: "Hello, this is a test message"
  • Generate a voice reply with the Clawd voice and send the mp3
  • Show the available voices

How to install sag

1Skills CLI (Vercel)

npx skills add openclaw/openclaw --skill sag -a claude-code

2Manually: put the files in place

~/.claude/skills/sag/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/sag/

From the same set48

The whole set →
summarize openclaw Runs a CLI tool to summarize or transcribe web articles, YouTube videos, podcasts, and local PDF documents directly within your AI assistant. Claude Code CX Codex Cursor +1 26,900installs weather openclaw This skill fetches current conditions and forecasts for a city, region, airport code, or coordinates. Use it to check rain and temperature or plan a trip. Claude Code CX Codex Cursor +1 9,300installs gog openclaw Guides an agent using the gog CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs. Use it when Google Workspace tasks need to run from a terminal. Claude Code CX Codex Cursor +1 8,500installs tmux openclaw Lets an agent work with live tmux sessions: read pane output, send keys and text, wait for a prompt line to show up. Claude Code CX Codex Cursor +1 8,400installs openai-whisper openclaw This skill lets your agent call the Whisper CLI to transcribe audio on your own machine. No API key needed. Claude Code CX Codex Cursor +1 7,100installs nano-pdf openclaw Edit PDF pages with plain text instructions through the nano-pdf CLI. Useful when you need to fix a typo or swap a heading without leaving your terminal. Claude Code CX Codex Cursor +1 7,100installs skill-creator openclaw A skill for writing, repairing and reviewing other skills. It splits behaviour into branches, sets the frontmatter and sorts resources into folders. Useful once your skill folder gets crowded. Claude Code CX Codex Cursor +1 6,700installs coding-agent openclaw This skill sends large coding tasks to Codex, Claude Code, or OpenCode as background workers. Use it for refactors, PR reviews, and issue-to-PR work. Claude Code CX Codex Cursor +1 6,500installs

Similar

nature-figure Yuan1z0825 A skill that builds, revises and audits scientific figures for manuscripts in Python or R. Useful when plots go to submission, not to a report. Claude Code CX Codex Cursor +1 18,700installs baoyu-image-gen JimLiu Generates images via OpenAI, Google, DashScope, and other APIs directly inside your coding agent. Handles text prompts, image references, and parallel batch jobs. Claude Code CX Codex Cursor +1 33,600installs skill-creator official anthropics Creates and refines skills, then tests them with prompts, evaluations, and performance checks. Claude Code Claude.ai 414,180installs writing-for-agents Matt Pocock Guidance for writing skills and agent-facing documents. Use it when editing AGENTS.md, CLAUDE.md, or reference files reached from them. Claude Code 466,719installs media-use heygen-com Finds or generates media for HyperFrames videos, including voiceovers, music, cutouts, and color grades. Stores files locally in assets. Claude Code CX Codex Cursor +1 1,100,000installs mcp-builder official anthropics This skill walks through building an MCP server in TypeScript or Python, from reading the protocol spec to writing tests and evaluation questions. Claude Code Claude.ai 130,949installs subagent-driven-development Jesse Vincent This skill runs an implementation plan through fresh subagents for independent tasks and reviews each result. Use it for multi-step work in one session. Claude Code CX Codex 237,746installs orchestration stablyai Coordinates supervised Orca workers with task DAGs, decision gates, and threaded messages. Fits workflows that split work across multiple agents. Claude Code CX Codex Cursor +1 349,200installs

Questions about sag

How do I install sag in Claude Code?

Run npx skills add openclaw/openclaw --skill sag -a claude-code. The binary itself is installed separately with brew install steipete/tap/sag.

What does sag do?

It converts text to speech via ElevenLabs TTS with local playback. sag "text" generates and plays audio, while -o saves it as an mp3 file.

Which API key does sag require?

An ElevenLabs key. Set it as ELEVENLABS_API_KEY or SAG_API_KEY. A key file via --api-key-file is also supported.

Source text

SKILL.md · MIT
---
name: sag
description: "ElevenLabs text-to-speech with mac-style say UX."
homepage: https://sag.sh
metadata:
  {
    "openclaw":
      {
        "emoji": "🔊",
        "requires": { "bins": ["sag"] },
        "primaryEnv": "ELEVENLABS_API_KEY",
        "install":
          [
            {
              "id": "brew",
              "kind": "brew",
              "formula": "steipete/tap/sag",
              "bins": ["sag"],
              "label": "Install sag (brew)",
            },
          ],
      },
  }
---

# sag

Use `sag` for ElevenLabs TTS with local playback.

API key (required)

- `ELEVENLABS_API_KEY` (preferred)
- `SAG_API_KEY` also supported by the CLI
- Key file via `--api-key-file`, `ELEVENLABS_API_KEY_FILE`, or `SAG_API_KEY_FILE`

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 the user asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it:

```bash
# 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`)

© openclaw · MIT · openclaw/openclaw

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor