Skip to content

elijahrenner/voiceclaw

Repository files navigation

VoiceClaw Banner

🦞 a claw for your voice 🦞
Hold a button. Say what you need. It gets done.

Claude Sonnet macOS WhisperKit Fully Headless


πŸ”₯ What is VoiceClaw?

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.


πŸš€ What it can do

πŸ“§ 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

⚑ Quick start

# 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 talk

🦞 Notification icon fix

By 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/null

Then go to System Settings > Notifications and make sure VoiceClaw (formerly terminal-notifier) is set to Banners.


πŸŽ™οΈ Voice mode

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"

πŸ–₯️ CLI mode

  🦞 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
────────────────────────────────────────────────
❯

🧠 How it works

πŸŽ™οΈ 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.


🦞 OpenClaw integration

VoiceClaw optionally integrates with OpenClaw for cross-platform messaging:

npm install -g openclaw
openclaw configure
openclaw plugins enable whatsapp
openclaw gateway  # start the gateway

When the gateway is running, VoiceClaw can send and read messages across WhatsApp, Telegram, Discord, Slack, Signal, iMessage, and more.


πŸ“ Architecture

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

πŸ”’ Privacy

  • 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

VoiceClaw Logo
Built on the Claude Agent SDK
Part of the OpenClaw ecosystem 🦞

About

🦞 Voice-first AI productivity agent β€” your voice, your agent, your claw

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors