π¦ a claw for your voice π¦
Hold a button. Say what you need. It gets done.
VoiceClaw is a voice-first AI agent that handles your entire digital life β email, calendar, texts, notes, web browsing, and more β using only your voice.
Imagine calling someone who's sitting at your computer at home. That's VoiceClaw. π¦
You're driving. You're walking. You can't look at your phone. Just hold a button, tell VoiceClaw what you need, and it actually does it β sends the email, creates the calendar invite, texts your cofounder, checks your grades, orders food. Whatever.
Zero windows. Zero popups. Zero interruptions. Everything happens invisibly.
| π§ Communication | π Productivity | π Web & Media |
|---|---|---|
| βοΈ Read & send Gmail (3 accounts) | π Check & create calendar events | π Web search (Brave) |
| π¬ Read & send iMessages | π Apple Notes & Reminders | π΅ Spotify control |
| πΌ Read Outlook inbox | π₯ Contact lookup (275+ contacts) | π Browse LinkedIn, X, Alma |
| π¦ OpenClaw channels (WhatsApp, Telegram, Slack, Discord, Signal) | β° Scheduled recurring tasks | π File search via Spotlight |
| βοΈ Draft outreach (2-3 variants!) | π§ Persistent memory across sessions | πΈ Screenshots, clipboard |
| π― Smart email routing (personal/work/school) | π VIP message alerts | π System controls |
# 1. Setup (one time β checks deps, permissions, creates Chrome profile)
cd ~/voiceclaw
bash setup.sh
# 2. Create your personal config files (gitignored)
cp user_context.example.md user_context.md
cp .mcp.example.json .mcp.json
cp schedules.example.json schedules.json
# 3. Run!
python3 cli.py # π₯οΈ CLI mode β type tasks
python3 voiceclaw.py # ποΈ Voice mode β hold right β to talkBy default, macOS notifications show the terminal-notifier icon. To show the VoiceClaw lobster logo instead:
# Replace terminal-notifier's icon with VoiceClaw logo
cd ~/voiceclaw
# Generate .icns from logo
mkdir -p /tmp/vc_icon.iconset
for size in 16 32 64 128 256 512 1024; do
sips -z $size $size logo.png --out /tmp/vc_icon.iconset/icon_${size}x${size}.png 2>/dev/null
done
cp /tmp/vc_icon.iconset/icon_1024x1024.png /tmp/vc_icon.iconset/icon_512x512@2x.png
cp /tmp/vc_icon.iconset/icon_64x64.png /tmp/vc_icon.iconset/icon_32x32@2x.png
iconutil -c icns /tmp/vc_icon.iconset -o /tmp/VoiceClaw.icns
# Replace icon and rename app
TN_APP="$(brew --prefix)/Cellar/terminal-notifier/$(brew list --versions terminal-notifier | awk '{print $2}')/terminal-notifier.app"
cp "$TN_APP/Contents/Resources/Terminal.icns" "$TN_APP/Contents/Resources/Terminal.icns.bak"
cp /tmp/VoiceClaw.icns "$TN_APP/Contents/Resources/Terminal.icns"
/usr/libexec/PlistBuddy -c 'Set :CFBundleName VoiceClaw' "$TN_APP/Contents/Info.plist"
/usr/libexec/PlistBuddy -c 'Set :CFBundleDisplayName VoiceClaw' "$TN_APP/Contents/Info.plist"
# Clear icon cache (may need logout/login for full effect)
touch "$TN_APP"
killall NotificationCenter 2>/dev/nullThen go to System Settings > Notifications and make sure VoiceClaw (formerly terminal-notifier) is set to Banners.
Hold right command β a waveform appears on the right edge of your screen, driven by your actual mic input. Let go, and WhisperKit transcribes locally on-device. Your task gets queued and executed by the agent.
Say things like:
- "Email Philip saying we should hop on a call tomorrow at 3"
- "What's on my calendar today?"
- "Text mom I'll be home by 6"
- "Add a reminder to submit the ISEF forms by Friday"
- "Check my last 5 emails"
- "Play some focus music"
- "Look up the best pizza near Thetford"
π¦ voiceclaw v0.2
openclaw: whatsapp, imessage, telegram
mcp: memory, brave-search, filesystem
ββββββββββββββββββββββββββββββββββββββββββββββββ
β― send an email to philip about the pitch deck
β Ή Thinking
βΈ contacts.sh search "Philip"
βΈ gmail compose β philipmeng8@gmail.com
βΏ Sent from elijah@shepherdhealth.ai to Philip
βΏ Subject: "pitch deck updates"
π¦ 8s Β· 3t Β· $0.012
ββββββββββββββββββββββββββββββββββββββββββββββββ
β―
ποΈ Voice Input π₯οΈ CLI Input
β β
βΌ βΌ
WhisperKit Text prompt
β β
βββββββββ¬ββββββββββββββββ
βΌ
π Daily Brief injected
(calendar + email + messages + browsing + reminders)
β
βΌ
π€ Claude Sonnet Agent
(stealth AppleScript, headless Chrome CDP, sqlite, shell, MCP tools)
β
βββββββββΌββββββββ¬βββββββββββ¬βββββββββββ
βΌ βΌ βΌ βΌ βΌ
π§ π
π¬ π π¦
Gmail Calendar iMessage Chrome OpenClaw
(API) (osascript) (sqlite) (CDP) (channels)
Everything is headless. A hidden Chrome instance runs on localhost:9222 with your saved sessions. AppleScript commands go through stealth.sh which saves your focus, runs the command, hides the app, and restores focus β all in milliseconds.
VoiceClaw optionally integrates with OpenClaw for cross-platform messaging:
npm install -g openclaw
openclaw configure
openclaw plugins enable whatsapp
openclaw gateway # start the gatewayWhen the gateway is running, VoiceClaw can send and read messages across WhatsApp, Telegram, Discord, Slack, Signal, iMessage, and more.
voiceclaw/
βββ cli.py # CLI REPL β persistent session, multi-turn
βββ voiceclaw.py # macOS app β voice recording, task queue, edge indicator
βββ agent/
β βββ client.py # Claude Agent SDK + MCP servers
β βββ system_prompt.py # Agent brain β tools, rules, routing
β βββ sync.py # Context sync (calendar, email, iMessage, history)
β βββ renderer.py # CLI output (spinner, shimmer, tool display)
β βββ openclaw.py # OpenClaw CLI wrapper
β βββ schedule.py # Cron-based recurring tasks
β βββ monitor.py # VIP message & calendar alerts
β βββ chrome_bg.py # Hidden Chrome on CDP port 9222
β βββ stealth.sh # Zero-interruption AppleScript wrapper
β βββ contacts.sh # Instant contact lookup via sqlite
β βββ user_context.py # User profile loader
βββ user_context.md # Your profile, contacts, communication rules
βββ .daily_brief.md # Auto-synced daily context snapshot
βββ tasks.md # Voice task queue
βββ setup.sh # One-time setup + permission checker
- All voice transcription happens locally via WhisperKit β audio never leaves your machine
- Contacts, messages, and calendar data are read from local databases (sqlite)
- The hidden Chrome profile stays on your machine at
~/.voiceclaw_chrome_profile - Personal config files are
.gitignoredβ never committed - Agent runs via Claude API β prompts are sent to Anthropic's servers
Built on the Claude Agent SDK
Part of the OpenClaw ecosystem π¦