skills/edge-tts/SKILL.md
Generate complete, production-ready TTS (Text-to-Speech) scripts and CLI tools using edge-tts — Microsoft's neural voice engine with 400+ natural-sounding voices. Use this skill whenever the user wants to speak text aloud from the terminal/PowerShell, list or search voices, select voices by name/language/gender, control rate/volume/pitch, save speech to MP3/audio files, or pipe text into a speak command. Trigger for ANY request involving TTS, speech synthesis, say command, speak function, voice output, edge-tts, or audio from scripts — even small snippets. Always check installation first and prefer uv tool install for setup.
npx skillsauth add lirrensi/agent-cli-helpers edge-ttsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use edge-tts — free, neural-quality voices (400+), works from any terminal. No Windows API nonsense. Sounds like a real human. 🎉
Always check if installed first:
Get-Command edge-tts -ErrorAction SilentlyContinue
Install with uv (preferred):
uv tool install edge-tts
Fallback with pip:
pip install edge-tts
This installs two executables: edge-tts (generate audio) and edge-playback (speak aloud).
Speak aloud (use edge-playback, NOT edge-tts --play):
edge-playback --text "Hello world"
Save to MP3:
edge-tts --text "Hello world" --write-media output.mp3
⚠️
--playflag does NOT exist on Windows. Always useedge-playbackto speak aloud.
List ALL voices (400+):
edge-tts --list-voices
Filter voices by language in PowerShell:
edge-tts --list-voices | Select-String "en-US"
edge-tts --list-voices | Select-String "Female"
Recommended English neural voices:
| Voice | Gender | Style |
|---|---|---|
| en-US-AriaNeural | Female | Natural, warm |
| en-US-JennyNeural | Female | Friendly |
| en-US-GuyNeural | Male | Natural |
| en-US-EricNeural | Male | Calm |
| en-GB-SoniaNeural | Female | British |
| en-GB-RyanNeural | Male | British |
| en-AU-NatashaNeural | Female | Australian |
Use a specific voice:
edge-playback --voice "en-US-AriaNeural" --text "Hi, I'm Aria!"
edge-tts --voice "en-US-AriaNeural" --text "Hi" --write-media aria.mp3
All adjustments use +X% or -X% string format:
# Rate: default is +0%, range roughly -50% to +100%
edge-playback --voice "en-US-AriaNeural" --rate "+20%" --text "Faster speech"
edge-playback --voice "en-US-AriaNeural" --rate "-30%" --text "Slower speech"
# Volume: default +0%
edge-playback --voice "en-US-AriaNeural" --volume "+50%" --text "Louder"
# Pitch: default +0Hz
edge-playback --voice "en-US-AriaNeural" --pitch "+10Hz" --text "Higher pitch"
When the user wants a full CLI wrapper script, generate this:
<#
.SYNOPSIS
TTS CLI wrapper around edge-tts / edge-playback.
.DESCRIPTION
Speaks text aloud or saves to MP3. Supports pipeline input,
voice selection, rate/volume/pitch control, and voice listing/search.
.EXAMPLE
.\Say.ps1 "Hello world"
.\Say.ps1 -Text "Hello" -Voice "en-US-AriaNeural" -Rate "+20%"
.\Say.ps1 -Text "Hello" -OutFile speech.mp3
.\Say.ps1 -List
.\Say.ps1 -Search "en-GB"
"Hello from pipeline" | .\Say.ps1
#>
[CmdletBinding(DefaultParameterSetName = 'Speak')]
param(
[Parameter(ParameterSetName='Speak', Position=0, ValueFromPipeline=$true)]
[string]$Text,
[Parameter(ParameterSetName='Speak')]
[string]$Voice = 'en-US-AriaNeural',
# Rate adjustment e.g. "+20%", "-10%"
[Parameter(ParameterSetName='Speak')]
[string]$Rate = '+0%',
# Volume adjustment e.g. "+50%", "-20%"
[Parameter(ParameterSetName='Speak')]
[string]$Volume = '+0%',
# Pitch adjustment e.g. "+5Hz", "-10Hz"
[Parameter(ParameterSetName='Speak')]
[string]$Pitch = '+0Hz',
# Save to MP3 file (speaks aloud if omitted)
[Parameter(ParameterSetName='Speak')]
[string]$OutFile,
# Also speak aloud when saving to file
[Parameter(ParameterSetName='Speak')]
[switch]$Also,
[Parameter(ParameterSetName='List', Mandatory)]
[switch]$List,
[Parameter(ParameterSetName='Search', Mandatory)]
[string]$Search
)
begin {
# Check edge-tts is installed
if (-not (Get-Command edge-tts -ErrorAction SilentlyContinue)) {
Write-Error "edge-tts not found. Install with: uv tool install edge-tts"
exit 1
}
# LIST mode
if ($PSCmdlet.ParameterSetName -eq 'List') {
edge-tts --list-voices
return
}
# SEARCH mode
if ($PSCmdlet.ParameterSetName -eq 'Search') {
Write-Host "Voices matching '$Search':" -ForegroundColor Cyan
edge-tts --list-voices | Select-String $Search
return
}
}
process {
if ($PSCmdlet.ParameterSetName -ne 'Speak') { return }
if (-not $Text) { return }
$baseArgs = @(
'--voice', $Voice,
'--rate', $Rate,
'--volume', $Volume,
'--pitch', $Pitch,
'--text', $Text
)
if ($OutFile) {
& edge-tts @baseArgs --write-media $OutFile
Write-Host "Saved to: $OutFile" -ForegroundColor Green
if ($Also) {
& edge-playback @baseArgs
}
} else {
& edge-playback @baseArgs
}
}
# Simple string
"Good morning!" | .\Say.ps1
# From file
Get-Content notes.txt | .\Say.ps1 -Voice "en-GB-SoniaNeural"
# Command output
(Get-Date -Format "dddd, MMMM d") | .\Say.ps1
# Save to file
"Hello" | .\Say.ps1 -OutFile hello.mp3
# Speak AND save
.\Say.ps1 -Text "Hello" -OutFile hello.mp3 -Also
--play doesn't exist on Windows — always use edge-playback executable instead+X% / +XHz format — not plain numbersffmpeg -i out.mp3 out.waven-US-AriaNeural not en-us-arianeuraluv tool install puts executables in uv's tool bin — make sure it's on PATHdata-ai
Portable SSH profile manager for agents. Run remote commands on saved hosts by friendly name instead of typing user@host -i key every time. Type less crap around your SSH commands.
development
Autonomous execution mode triggered by the word "engage". Use when the user has finished planning and wants the agent to execute autonomously without further questions until the workflow is fully complete. The agent must build, test, verify, and deliver proof of work — never exiting with an incomplete or unverified result. Trigger on: "engage", "go autonomous", "execute the plan", "run it", "make it happen", or any explicit signal to switch from planning mode into fully autonomous build-and-verify mode.
tools
Use this skill when you need to manage project tasks — create, update, complete, prioritize, filter, review, track dependencies, or find unblocked work. Trigger on: 'add a task', 'create task', 'show tasks', 'what's next', 'mark done', 'update task', 'task status', 'task history', 'next task', 'task inbox', 'list tasks', 'init tasks', 'task deps', 'ready tasks', 'blocked tasks', 'search tasks', 'tag-any', 'dependency graph'. Also use proactively when starting a new work session — check `tasks status` and `tasks ready` to orient yourself. This skill covers the project's static, file-based task system (persistent, in-repo history) with typed dependency tracking, ready queue, and priority management — NOT ephemeral runtime task tools.
tools
On-demand skill loading from a local skill registry. Trigger on: "skill store", "load skill", "find a skill", "list skills", "import skill", "skill-store", "browse skills", "search skills", or any request to fetch a skill that is NOT currently loaded in the active context. This skill is NOT for managing the already-loaded skills in your prompt. It is for accessing the much larger skill storage (~100s to 1000s) that you only bring into context when you need them. Think of it as a lazy loader: the skills here stay on disk until you explicitly call for them via CLI.