Introducing Molt Speak, the free app designed to allow Moltys (Clawd Bots) to actually speak to their Humans.
Stop typing. Start talking. Molt Speak π¦π€
Version 1.1 Released β The free truly conversational interface for Open Claw. Run moltspeak update for the latest.
- macOS (Apple Silicon or Intel)
- Python 3.9+
- An AI agent running in Terminal (e.g., OpenClaw TUI, Claude Code)
curl -fsSL https://raw.githubusercontent.com/jamescodes84/molt-speak/main/install.sh | bashNote: You may see "OpenSpeak" in installer output β this is the same product as Molt Speak.
- Start your AI agent in a Terminal window
- Launch Molt Speak:
moltspeak start
- Start talking β your voice is transcribed and sent to the agent
- Listen β the agent's responses are spoken aloud
| Command | Description |
|---|---|
moltspeak start |
Open menu bar app and start voice loop |
moltspeak stop |
Stop the voice loop (menu bar stays open) |
moltspeak quit |
Quit everything |
moltspeak status |
Check if voice loop is running |
moltspeak logs |
View logs (moltspeak logs audio or moltspeak logs integration) |
moltspeak update |
Update to latest version |
moltspeak elapi |
Set ElevenLabs API key |
moltspeak kill |
Force-kill all processes (use if stuck) |
Once running, you'll see a lobster icon in your menu bar:
- π΄π¦ = Voice loop stopped
- π’π¦ = Voice loop active
Click to access:
- Start/Stop voice loop
- Select TTS provider (Edge-TTS free / ElevenLabs premium)
- Change voice (24+ Edge-TTS voices across 6 English accents)
- Agent Boldness (conversation eagerness)
- Microphone sensitivity (continuous slider)
- Barge-in sensitivity (continuous slider)
- Debug mode toggle
- Set honorific (Sir / Madam / Custom text)
- Check for updates
- View logs
No API key required. Default voice: en-US-ChristopherNeural.
| Region | Voices |
|---|---|
| American | ChristopherNeural, AriaNeural, JennyNeural, GuyNeural, DavisNeural, AmberNeural, AnaNeural, BrandonNeural, CoraNeural, EricNeural |
| British | RyanNeural, SoniaNeural, LibbyNeural, ThomasNeural, MaisieNeural |
| Australian | NatashaNeural, WilliamNeural |
| Irish | EmilyNeural, ConnorNeural |
| South African | LeahNeural, LukeNeural |
| Indian | NeerjaNeural, PrabhatNeural |
High-quality AI voices. Requires an API key:
moltspeak elapiUses the eleven_turbo_v2_5 model for low latency. Voice list is loaded dynamically from your ElevenLabs account.
Uses the macOS say command (Alex, Samantha, Daniel, etc.). Available when running the Mouth component directly for development.
Most settings are accessible from the menu bar. They are stored in runtime/molt_speak_config.json:
{
"preferred_voice": "en-US-ChristopherNeural",
"user_title": "sir",
"tts_provider": "edge-tts",
"elevenlabs_api_key": null,
"elevenlabs_voice_id": "21m00Tcm4TlvDq8ikWAM",
"elevenlabs_model": "eleven_turbo_v2_5",
"mic_sensitivity": "medium",
"barge_sensitivity": "medium",
"agent_boldness": 50,
"debug_mode": false
}Create a .env file in the install directory to customize advanced behavior:
| Variable | Default | Description |
|---|---|---|
ENABLE_INTEGRATION |
true |
Enable echo prevention coordinator |
ENABLE_BIDIRECTIONAL |
false |
Pause Mouth when Ears is transcribing (experimental) |
MOUTH_STATUS_POLL_INTERVAL |
0.1 |
Poll frequency in seconds |
MOUTH_STATUS_DEBOUNCE_MS |
200 |
Debounce delay after speech stops |
LOG_LEVEL |
INFO |
Logging verbosity (DEBUG, INFO, WARNING, ERROR) |
LOG_FILE |
(none) | Optional log file path |
MAX_QUEUE_SIZE |
10 |
Transcription queue size |
PROCESSING_TIMEOUT |
30.0 |
Processing timeout in seconds |
POSTHOG_DISABLED |
false |
Set to true to disable analytics |
You speak β Ears transcribes β Types into agent terminal
β
You hear β Mouth speaks β Agent writes response
Echo Prevention: When the agent speaks, your microphone automatically pauses to prevent feedback loops.
All runtime files are stored in ~/openclaw-workspace/molt-speak/app/runtime/:
| File | Purpose |
|---|---|
speech_output.txt |
Agent writes here to speak |
mouth_status.txt |
Tracks speaking state |
ears_pause.signal |
Pauses mic during playback |
molt_speak_config.json |
User preferences (voice, provider, sensitivity) |
For your AI agent to speak, it writes to the speech output file:
echo "Hello! How can I help you?" >> ~/openclaw-workspace/molt-speak/app/runtime/speech_output.txtOr in Python:
from pathlib import Path
speech_file = Path.home() / "openclaw-workspace/molt-speak/app/runtime/speech_output.txt"
with open(speech_file, "a") as f:
f.write("Hello! How can I help you?\n")- Make sure your AI agent is running in Terminal first
- Check that Terminal has microphone permissions (System Settings β Privacy & Security β Microphone)
- Check your system volume
- Verify the speech file exists:
ls ~/openclaw-workspace/molt-speak/app/runtime/speech_output.txt
If moltspeak update doesn't pick up the latest version, do a clean reinstall:
moltspeak kill
rm -rf ~/openclaw-workspace/molt-speak
curl -fsSL https://raw.githubusercontent.com/jamescodes84/molt-speak/main/install.sh | bashYour runtime config (voice, provider, sensitivity) will be preserved automatically.
Run a clean reinstall:
moltspeak quit
rm -rf ~/openclaw-workspace/molt-speak/app
moltspeak update
moltspeak startThe system should automatically pause your mic when the agent speaks. If you hear echo:
- Stop and restart:
moltspeak stop && moltspeak start - Check logs: Click menu bar β View Logs
If the voice loop won't stop normally:
moltspeak killmoltspeak quit
rm -rf ~/openclaw-workspace/molt-speak/app
sudo rm /usr/local/bin/moltspeak
# Optional: Remove analytics data
rm -rf ~/Library/Application\ Support/molt-speak/| Version | Date | Highlights |
|---|---|---|
| 0.1.0 | 2026-02-06 | Initial foundation β Whisper STT, Edge-TTS, echo prevention coordinator, macOS menu bar app, PostHog analytics |
| 0.5.0 | 2026-02-06 | Stability & polish β Persistent analytics across uninstalls, daily active user heartbeat, voice selection fixes, async/sync corrections |
| 0.9.0 | 2026-02-06 | Command rename molt-speak β moltspeak, ElevenLabs premium TTS, CodeRabbit CI integration, lint & error handling fixes |
| 1.0.0 | 2026-02-06 | Public release β Custom honorific text input, privacy section, mic & barge-in sensitivity tuning, 24+ Edge-TTS voices, full documentation |
| 1.0.5 | 2026-02-10 | Update fix β Fixed update dialog crash (NSWindow threading), hardened install script with fresh-clone fallback, fixed PostHog analytics (flush before exit, correct identify API, explicit API key passthrough) |
| 1.1.0 | 2026-02-25 | The conversational update β Agent Boldness (adjustable conversation eagerness), Contextual Awareness via Social Cue Heuristics, Smart Silence ([MOLT SPEAK: SILENT RESPONSE]), Smart Bow-Out, Continue the Joke (barge-in resume β yes, it's a Boondock Saints reference. IYKYK), greatly reduced round-trip latency (Faster Whisper ~1s STT, sentence-level TTS), Debug Mode, new menu with lobster-robot button and continuous-value sliders for mic/barge-in sensitivity. All features tested on Haiku 4-5. |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Molt Speak System β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β Ears β β Mouth β β Coordinator β β
β β (STT) β β (TTS) β β (Echo Prev) β β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β β β β
β Transcribes Speaks text Monitors & β
β your voice from file signals pause β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Component | Directory | Purpose |
|---|---|---|
| Ears | open_ears/ |
Speech-to-text using Whisper |
| Mouth | open_mouth/ |
Text-to-speech using Edge-TTS / ElevenLabs |
| Coordinator | src/ |
Echo prevention coordination |
| Menu Bar | unified_menu_bar.py |
GUI control interface |
For development, you can run each component in its own terminal:
Terminal 1 - Coordinator:
python main.pyTerminal 2 - Mouth:
cd open_mouth && python main.pyTerminal 3 - Ears:
cd open_ears && python main.pymouth_status.txt:
2026-02-01T12:15:24.161586|SPEAKING|Hello, this is a test
2026-02-01T12:15:25.167795|IDLE|
ears_pause.signal: Unix timestamp (file existence = pause mic)
Molt Speak uses PostHog analytics to understand usage patterns and improve the product. We track:
- Installation & Updates β When you install or update the app
- Session Duration β How long you use the app
- Feature Usage β Which features you use (voice input, output, etc.)
- Performance Metrics β Transcription times, synthesis times
- Anonymous User ID β A randomly generated UUID (not linked to your identity)
Analytics state (anonymous ID, session counts) persists in ~/Library/Application Support/molt-speak/ and survives reinstalls. Remove this directory to fully clear analytics data.
- No transcribed speech content
- No text-to-speech content
- No personal information (name, email, etc.)
- No file contents or system information beyond platform type
- No IP addresses (PostHog anonymizes these)
To disable analytics entirely, edit your .env file:
POSTHOG_DISABLED=trueRestart Molt Speak after changing this setting. The app functions identically with analytics disabled.
USE AT YOUR OWN RISK
This software is provided "as is", without warranty of any kind, express or implied. By using Molt Speak, you acknowledge and agree that:
- The software may have bugs, errors, or unexpected behavior
- Voice recognition and text-to-speech accuracy is not guaranteed
- The developers are not responsible for any damages, data loss, or issues arising from use of this software
- You are solely responsible for ensuring the software meets your needs
- Audio recording features require appropriate permissions and should be used in compliance with applicable laws
- This software is not intended for use in critical, medical, or safety-related applications
Use of this software constitutes acceptance of these terms.
MIT License
Issues and PRs welcome at github.com/jamescodes84/molt-speak
Prior versions of Molt Speak used the hyphenated command molt-speak. The current command is moltspeak (no hyphen). If you have an older installation, the legacy command may still work.
| Legacy Command | Current Command |
|---|---|
molt-speak start |
moltspeak start |
molt-speak stop |
moltspeak stop |
molt-speak quit |
moltspeak quit |
molt-speak status |
moltspeak status |
molt-speak update |
moltspeak update |
To ensure you're using the latest command, run moltspeak update.