add-mouth
Skill7 starsChanged 19 days agoMITView on GitHub
Give your Founder OS a mouth - have it read an answer out loud or render it to an audio file, from any skill, without the full conversational voice loop. Trigger on "add a mouth", "add mouth", "read this out loud", "let it speak", "give it a voice out", or "set up text-to-speech". The default holds the accessibility floor: your operating system's built-in speech (Windows SAPI, macOS say, Linux espeak), NO extra key and NO paid service. A free fully-local upgrade (Piper) gives a better voice offline; a premium mouth (ElevenLabs) is an opt-in paid choice, never the default. This is the swappable "mouth" from the brain / mouth / hands scaffold - it plugs into the same brain as text or voice.
- Reads credentials
- Installs packages
In this repository100 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- notion-package/CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- add-handsSkill
- add-voiceSkill
- approval-gatesSkill
- auditSkill
- backupSkill
- blind-spot-reviewSkill
- bottleneck-diagnosticSkill
- brain-logSkill
- brain-passSkill
- brain-snapshotSkill
- brand-interviewSkill
- brand-voice-interviewSkill
- business-context-loaderSkill
- campaign-from-themeSkill
- capture-sweepSkill
- catch-upSkill
- client-updateSkill
- connectSkill
- content-repurposerSkill
- content-startSkill
- context-persistenceSkill
- cross-linkSkill
- data-securitySkill
- decision-frameworkSkill
- decisions-startSkill
- delivery-startSkill
- email-drafterSkill
- employee-reviewSkill
- finance-importSkill
- forcing-questionsSkill
- founder-coachingSkill
- founder-next-moveSkill
- founder-os-setupSkill
- founder-reviewSkill
- founder-scope-challengeSkill
- github-opsSkill
- handoff-protocolSkill
- hireSkill
- historySkill
- housekeepingSkill
- ingestSkill
- knowledge-captureSkill
- legal-complianceSkill
- linkedin-brand-directionSkill
- linkedin-network-scanSkill
- linkedin-postSkill
- linkedin-power-auditSkill
- linkedin-startSkill
- linkedin-warm-revivalSkill
- lintSkill
- list-prunerSkill
- log-archiveSkill
- log-replySkill
- meeting-prepSkill
- memory-passSkill
- menuSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 61
Read its output back honestly: which engine it wired, and which upgrades are available versus not yet set up.
- Distinctive: line 86
A dead end when an engine is missing: No Piper on PATH or no key present falls back to the OS-native mouth with a plain message, never a …
- Distinctive: line 92
No em dashes or en dashes in anything you write here.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Add a mouth
Runs on: local-exec - the happy path runs a local Python setup that writes a gitignored voice/ config and a say helper, then speaks through your machine. On a read-only or cloud surface, explain the options but do NOT claim the mouth is wired or that anything spoke - it has not until the user runs it locally.
The OS ships complete as text. This adds a mouth: it can speak an answer out loud or render it to an audio file you keep. It is the voice-OUT half of the sensory layer, and it is deliberately separate from add-voice (the full talk-and-listen loop). You can have a mouth without ever holding a conversation - useful when you want a brief read back while your hands are busy, or a draft heard aloud before you send it.
This is the swappable mouth from the brain / mouth / hands scaffold. The brain (your files and answers) stays the same; the mouth is how it speaks. Nothing here is required.
The accessibility floor (the rule that governs the default)
The default mouth is your operating system's own built-in speech - Windows SAPI, macOS say, Linux espeak or spd-say. No extra key, no paid service, no pip install, no model download. It speaks on the subscription-free tools your machine already has. Everything past that is opt-in and disclosed.
The options
| Option | What it adds | Needs | Default? |
| OS-native | Speak through your machine's built-in voice; render to a file | nothing extra | YES |
| Piper | A noticeably better voice that still runs fully offline | one download + Piper on PATH | no - opt-in, free |
| ElevenLabs | Broadcast-quality voice for something you publish | a paid API key | no - opt-in, paid |
| Browser | The voice the add-voice page already uses, inside that loop | the add-voice skill | no - that is the voice loop |
Full detail, the exact install per option, and the cost-and-locality trade are in references/mouth-options.md. The trade is load-bearing: the engine you pick changes voice quality, whether your text leaves the machine, and whether it costs anything. State it before they commit, never after.
Pre-flight
- A mouth needs something to say. It reads text you pass it or pipe in; it does not generate content. If the user wants the OS to "read today's brief", they run the brief skill and pipe its text to the mouth.
- Confirm a local runtime: this skill runs Python and your machine's speech tools. On a web-only surface, walk the options and stop - do not claim it spoke.
The flow
1. Confirm the option (default to OS-native)
Say one line: "I'll wire the OS-native mouth - it speaks through your machine, no key needed. Want the better offline voice (Piper, free, one download) or a premium one (ElevenLabs, paid) instead, or shall I wire the default?" Default to OS-native unless they ask otherwise. One recommendation, the upgrades named, no open menu.
2. Run the setup
python skills/add-mouth/setup.pyIt detects which mouths your machine can use right now (OS-native is almost always available; it checks whether Piper is on PATH and whether an ElevenLabs key is present in .env), writes voice/mouth-config.json bound to this machine, and copies a say helper into the gitignored voice/. It installs nothing and needs no key. Pass --engine piper or --engine elevenlabs to pick an upgrade you have already set up; pass --voice <name> to choose a voice the engine offers.
Read its output back honestly: which engine it wired, and which upgrades are available versus not yet set up.
3. Speak something and prove it
Pipe the text in as a quoted block, never inside quotes on the command line. Text read aloud is often someone else's (an email, a page, a transcript), and inside double quotes its backticks and $(...) would run as commands. Between the two marker lines bash reads every character as plain text. Every line starts at the left edge with no spaces in front:
PYTHONUTF8=1 python voice/say.py <<'FOUNDER_OS_SAY_END'
Your three priorities today are ...
FOUNDER_OS_SAY_ENDTo render a file instead of speaking, put --out brief.wav after say.py on the first line and keep the rest. Keep the file name to letters, digits, dots, dashes and underscores. Text another command prints can be piped straight in: <that command> | PYTHONUTF8=1 python voice/say.py. PYTHONUTF8=1 makes Python read the piped text as UTF-8 on Windows, so a curly quote or Arabic does not break it. If the text has a line that reads exactly FOUNDER_OS_SAY_END, do not run it. Say that one line has to go first.
The OS-native and Piper mouths write a .wav file (an .aiff on macOS); only the ElevenLabs mouth writes .mp3. Use the extension the chosen engine produces. A clean proof is: a line you pass comes back as speech through your machine, and --out writes a playable audio file. Do not say "the mouth works" until that has happened on the user's machine.
What it does and does not do
- Does: speak text through a free, keyless, local mouth by default; render to an audio file; let any skill pipe its output to the mouth; swap to a better free voice (Piper) or a premium one (ElevenLabs) on request, with the trade stated first; degrade honestly when an engine is not present.
- Does not: generate content (it speaks what it is given), send or publish the audio anywhere, or claim to be local when ElevenLabs is the chosen engine (that sends your text to ElevenLabs to synthesize). Sending or posting the audio is an action - that belongs to
add-hands, behind its confirm gate, not here.
The guardrails this skill is built against
- A silent paid charge. ElevenLabs is never the default and never auto-selected; it is wired only when the user asks for it and only after the cost note. The default mouth cannot bill you.
- A false "local" claim. OS-native and Piper are fully local; ElevenLabs is not. The config records which engine is active and
say.pyprints the locality of the engine it used, so a user is never misled about where their text went. - A dead end when an engine is missing. No Piper on PATH or no key present falls back to the OS-native mouth with a plain message, never a traceback.
Runtime honesty
This skill needs a local runtime. On a web-only agent that cannot run Python or your machine's speech tools, do not claim a mouth is installed. Walk the user through the same options and say plainly the setup and the speaking have to run in Claude Code (or any local-runtime agent pointed at the folder).
No em dashes or en dashes in anything you write here. Hyphens only.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

