Skip to main content

say

Summarize and simplify the last agent message, then speak it aloud via Gemini TTS (Vertex AI, voice Charon), in whatever language the user is using in the session. Falls back to sag/macOS say.

来源信息

仓库
Vesely/skills
最近来源活动
2026年6月28日 19:46
检测到的 SKILL.md 语言
英语
星标
28
Forks
4

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
say
description
Summarize and simplify the last agent message, then speak it aloud via Gemini TTS (Vertex AI, voice Charon), in whatever language the user is using in the session. Falls back to sag/macOS say.
allowed-tools
["Bash(bun:*)","Bash(sag:*)","Bash(say:*)"]
when_to_use
Use when the user wants the previous answer read aloud in a short, simplified form. Trigger phrases: '/say', 'say it', 'read that out', 'voice that', 'speak that'. Also when the user asks to hear a spoken recap of what was just said.
argument-hint
[optional: voice name or extra instruction]
arguments
["instruction"]
context
inline
# Say Take the **last assistant message** in this conversation, compress it into a short, spoken-friendly recap, and play it aloud with the Gemini TTS helper. It auto-plays. ## Inputs - `$instruction`: (Optional) Override, e.g. a Gemini voice name (e.g. `Kore`, `Aoede`) or a tweak like "even shorter" / "in English". If absent, use the default voice **Charon**. ## Steps ### 1. Summarize and simplify the last message Boil the previous assistant message down to a short spoken gist. Be brief, but **never drop the parts that matter** — in priority order, keep: 1. **What changed / what was done** (high-level, simplified — no IDs, file paths, or detail). 2. **Any decision or input needed from the user** (and the options, in a few words). 3. **What's next.** Aim for **1–2 sentences (~15–30 words)** when it's just an outcome. If there's a decision or a next step, add one more short sentence for it (≤3 sentences total). Drop markdown, code, lists, caveats, and hedging. Match the language of the source message and speak in that same language (don't hardcode one). **Success criteria**: A terse plain-text recap (≤3 sentences, no markdown/symbols) in the original language that still conveys what changed and any pending decision or next step. ### 2. Speak it via Gemini TTS Run the helper — it synthesizes speech and auto-plays via `afplay`: ```bash bun run ~/.claude/skills/say/gemini-say.ts "<recap, plain sentences>" ``` - Default voice is **Charon** (David's pick). To use another Gemini voice, pass it as the 2nd positional arg: `... "<recap>" Kore` (options: Kore, Puck, Charon, Aoede, Leda, Orus, Zephyr, Fenrir, …). - Write the recap as **plain sentences** — Gemini derives pauses from punctuation. Do NOT add `[short pause]` tags (that was sag-only and gets read literally). - The helper prints token usage + approx cost (~0.1 Kč / recap). It uses a Vertex service account (provide it via the `GEMINI_SAY_ENV` file — see `gemini-say.ts` header), region `us-central1`, model `gemini-2.5-flash-preview-tts`. - Plays by default; `--no-play` writes the file only, `-o <path>` sets the output path. - **Playback speed:** Charon reads a touch slowly, so playback is sped up ~1.07× via ffmpeg `atempo` (tempo only, pitch preserved — far cleaner than `afplay -r`). Override with `GEMINI_SAY_RATE` (`1.0` = off); needs `ffmpeg`, falls back to plain `afplay` without it. - **Audio ducking:** during playback the helper pauses other audio (Spotify / Music / browser / YouTube) via `nowplaying-cli` and resumes only what it paused — so the voice isn't a mishmash with background media. No-op if `nowplaying-cli` (Homebrew, optional) is absent or nothing is playing. **Fallbacks** (only if the helper errors): `sag --speed 1.1 "<recap>"` (ElevenLabs — may be quota-exhausted; add `--lang <code>` to force a language) or `say -r 188 "<recap>"` (macOS, low quality; add `-v <voice>` for a language-specific voice). **Success criteria**: the helper prints `OK …` and audio plays. Reply with one short confirmation line; do NOT embed a `MEDIA:` reference. ## Rules - Speak the **last assistant message**, summarized — not raw. - Keep it brief (≤3 sentences), but never sacrifice a pending decision or next step for brevity — those always make the cut. Trim detail, not substance. - Plain-text recap only — no markdown/symbols, they get read literally.
在 GitHub 查看