Sona
When To Use
Use this skill when a task needs local voice input or output from the terminal on macOS.
- Speak short text aloud for user-visible feedback.
- Capture one spoken utterance and hand the transcript back to the agent as JSON.
- Avoid overlapping speech from multiple concurrent agent invocations.
Commands
sona say "Hello"speaks the given text aloud.echo "Hello" | sona sayreads text from stdin when no positional text is provided.sona setup whispercppinstalls or configures the default local STT backend on the current machine.sona listen --locale de-DErecords one utterance and prints final JSON to stdout usingwhispercppby default.sona listen --locale de-DE --prompt "Bitte antworte auf Deutsch."speaks the prompt and then immediately listens.sona listen --backend apple --locale en-USuses Apple SpeechTranscriber explicitly.sona config whisper showprints the configuredwhisper-cliand model paths.
Requirements
sonamust be installed in PATH.- Install it with
go install github.com/DotNaos/sona/cmd/sona@latest. GEMINI_API_KEYorGOOGLE_API_KEYmust be set forsona say.sona listenrequires an explicit--locale, so the caller states which language it expects back.sona listendefaults to localwhispercpp, which needswhisper-cliplus a GGML model file.sona setup whispercppis the recommended one-time machine setup path.sona listen --backend applerequires macOS 26+ with Apple SpeechTranscriber available and microphone permission granted.
Behavior Notes
sona sayuses a global cross-process queue, so concurrent calls are played one at a time.sona listen --prompt ...keeps the spoken prompt and the following listen phase together, so another queuedsona saycannot interleave between them.- If the spoken language is German, write normal German spelling with
ä,ö,ü, andßinstead ofae,oe,ue, orsswhen possible, because the TTS pronunciation is noticeably more natural that way. - After
sona setup whispercpp, most agents should only needsona listen --locale .... - The queue inserts a short pause after each spoken item to keep rapid agent notifications intelligible.
sona listenprints exactly one final JSON object to stdout and sends diagnostics to stderr.
Recommended Workflow
- Use
sona sayfor short confirmations, alerts, or user-facing spoken summaries. - Run
sona setup whispercpponce per machine before relying on voice input. - Use
sona listen --locale ...when you need a single spoken response from the current user. - Set
--localeto the same language as your spoken prompt, or explicitly say which language you expect in the answer. - For German prompts or spoken summaries, prefer proper umlauts and
ßin the text you pass tosona say. - If
sona sayis invoked repeatedly by multiple agents, rely on the built-in queue rather than adding your own local throttling. - If
sonais not yet installed, rungo install github.com/DotNaos/sona/cmd/sona@latestbefore using the commands.