9.5kā
by odrobnik
announcer ā OpenClaw Skill
announcer is an OpenClaw Skills integration for coding workflows. Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS.
Skill Snapshot
| name | announcer |
| description | Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS. OpenClaw Skills integration. |
| owner | odrobnik |
| repository | odrobnik/announcer |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @odrobnik/announcer |
| last updated | Feb 7, 2026 |
Maintainer

name: announcer description: "Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS." summary: "House-wide TTS announcements via AirPlay speakers, Airfoil, and ElevenLabs." version: 1.1.0 homepage: https://github.com/odrobnik/announcer-skill metadata: { "openclaw": { "emoji": "š¢", "requires": { "bins": ["python3", "ffmpeg"], "apps": ["Airfoil"], "env": ["ELEVENLABS_API_KEY"], "skills": ["elevenlabs"] }, }, }
Announcer
Play TTS announcements through AirPlay speakers via Airfoil and ElevenLabs.
How It Works
- Generate speech via ElevenLabs (high-quality opus ā stereo MP3)
- Connect to AirPlay speakers via Airfoil
- Play an optional chime (gong) followed by the announcement
- Disconnect speakers after playback
Requirements
- Airfoil (Rogue Amoeba) ā running on the host Mac
- ElevenLabs API key ā set
ELEVENLABS_API_KEYenv var - ffmpeg ā for audio format conversion
- elevenlabs skill ā sibling skill for TTS generation
Configuration
User config lives at ~/clawd/announcer/config.json:
{
"speakers": ["Living (2)", "Kitchen", "Office"],
"excluded": ["Computer"],
"elevenlabs": {
"voice_id": "your-voice-id",
"format": "opus_48000_192"
},
"audio": {
"output_format": "mp3",
"stereo": true,
"sample_rate": 48000,
"bitrate": "256k",
"chime_file": "gong_stereo.mp3"
},
"airfoil": {
"source": "System-Wide Audio",
"connection_timeout_seconds": 30,
"volume": 0.7
}
}
Config Fields
| Field | Description |
|---|---|
speakers | AirPlay speaker names to connect |
excluded | Speaker names to never connect |
elevenlabs.voice_id | ElevenLabs voice to use |
audio.chime_file | Chime sound file in assets/ (set null to disable) |
airfoil.connection_timeout_seconds | Time to wait for speakers to connect |
airfoil.volume | Speaker volume (0.0ā1.0) |
Usage
# Announce to all configured speakers
python3 skills/announcer/scripts/announce.py "Dinner is ready!"
# Announce to specific speakers only
python3 skills/announcer/scripts/announce.py "Wake up!" --speakers "Kids Room"
# Skip the chime
python3 skills/announcer/scripts/announce.py "Quick note" --no-gong
File Structure
announcer/
āāā SKILL.md
āāā assets/
ā āāā gong_stereo.mp3 # Announcement chime
āāā scripts/
āāā announce.py # Main announcement script
User config (not part of skill):
~/clawd/announcer/
āāā config.json # Speaker list, voice, audio settings
announcer-skill
š¢ House-wide TTS announcements via AirPlay speakers using Airfoil and ElevenLabs.
An OpenClaw skill.
Works with any AirPlay speakers, including HomePods, Apple TVs, and third-party AirPlay receivers.

How It Works
- Selects System-Wide Audio as the Airfoil source
- Connects to all configured speakers and waits until every one is online
- Sets the volume to the configured level
- Plays an optional chime (gong) followed by the TTS announcement
- Disconnects speakers after playback
Quick Start
# Announce to all configured speakers
python3 skills/announcer/scripts/announce.py say "Dinner is ready!"
# List available speakers
python3 skills/announcer/scripts/announce.py speakers
See SKILL.md for full documentation, configuration, and usage details.
Homepage
Permissions & Security
Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.
Requirements
- **Airfoil** (Rogue Amoeba) ā running on the host Mac - **ElevenLabs API key** ā set `ELEVENLABS_API_KEY` env var - **ffmpeg** ā for audio format conversion - **elevenlabs skill** ā sibling skill for TTS generation
Configuration
User config lives at `~/clawd/announcer/config.json`: ```json { "speakers": ["Living (2)", "Kitchen", "Office"], "excluded": ["Computer"], "elevenlabs": { "voice_id": "your-voice-id", "format": "opus_48000_192" }, "audio": { "output_format": "mp3", "stereo": true, "sample_rate": 48000, "bitrate": "256k", "chime_file": "gong_stereo.mp3" }, "airfoil": { "source": "System-Wide Audio", "connection_timeout_seconds": 30, "volume": 0.7 } } ``` ### Config Fields | Field | Description | |-------|-------------| | `speakers` | AirPlay speaker names to connect | | `excluded` | Speaker names to never connect | | `elevenlabs.voice_id` | ElevenLabs voice to use | | `audio.chime_file` | Chime sound file in `assets/` (set `null` to disable) | | `airfoil.connection_timeout_seconds` | Time to wait for speakers to connect | | `airfoil.volume` | Speaker volume (0.0ā1.0) |
FAQ
How do I install announcer?
Run openclaw add @odrobnik/announcer in your terminal. This installs announcer into your OpenClaw Skills catalog.
Does this skill run locally or in the cloud?
OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.
Where can I verify the source code?
The source repository is available at https://github.com/openclaw/skills/tree/main/skills/odrobnik/announcer. Review commits and README documentation before installing.
