Awesome-openclaw-skills voice-wake-say
Speak responses aloud on macOS using the built-in `say` command when user input indicates Voice Wake/voice recognition (for example, messages starting with "User talked via voice recognition on <device>").
install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/voice-wake-say" ~/.claude/skills/sundial-org-awesome-openclaw-skills-voice-wake-say && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/voice-wake-say" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-voice-wake-say && rm -rf "$T"
manifest:
skills/voice-wake-say/SKILL.mdsource content
Voice Wake Say
Overview
Use macOS
say to read the assistant's response out loud whenever the conversation came from Voice Wake/voice recognition. Do not use the tts tool (it calls cloud providers).
When to Use say
(CHECK EVERY MESSAGE INDIVIDUALLY)
sayIF the user message STARTS WITH:
User talked via voice recognition
- Step 1: Acknowledge with
first (so the user knows you heard them)say - Step 2: Then perform the task
- Step 3: Optionally speak again when done if it makes sense
IF the user message does NOT start with that exact phrase
- THEN: Do NOT use
. Text-only response only.say
Critical:
- Check EACH message individually — context does NOT carry over
- The trigger phrase must be at the VERY START of the message
- For tasks that take time, acknowledge FIRST so the user knows you're working
Workflow
- Detect Voice Wake context
- Trigger ONLY when the latest user/system message STARTS WITH
User talked via voice recognition - If the message instructs "repeat prompt first", keep that behavior in the response.
- Prepare spoken text
- Use the final response text as the basis.
- Strip markdown/code blocks; if the response is long or code-heavy, speak a short summary and mention that details are on screen.
- Speak with
(local macOS TTS)say
printf '%s' "$SPOKEN_TEXT" | say
Optional controls (use only if set):
printf '%s' "$SPOKEN_TEXT" | say -v "$SAY_VOICE" printf '%s' "$SPOKEN_TEXT" | say -r "$SAY_RATE"
Failure handling
- If
is unavailable or errors, still send the text response and note that TTS failed.say