Help us improve
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
Manage WhatsApp from your terminal: send messages to contacts/chats, search messages across chats with filters, export chat histories to JSON/CSV/MD, list/backfill contacts/groups/chats, react with emojis, count messages, and check connection status via wu-cli powered by local MCP server.
npx claudepluginhub ibrahimhajjaj/wu-cli --plugin wu-whatsappShare bugs, ideas, or general feedback.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
WhatsApp messaging for Claude Code via Baileys WebSocket client
WhatsApp channel for Claude Code — linked-device messaging bridge with built-in access control. Manage pairing, allowlists, and policy via /whatsapp-claude-channel:access.
Get notified on WhatsApp when Claude completes tasks, encounters errors, or needs your input
Search WhatsApp messages and retrieve media from the native macOS client database
iMessage messaging bridge powered by Linq with built-in access control. Manage pairing, allowlists, and policy via /imessage:access.
Automate WeChat Desktop via Computer Use — send messages, read chats, search contacts, forward messages with optimized action sequences
WhatsApp CLI tool — like gh is to GitHub, wu is to WhatsApp.
Built on @whiskeysockets/baileys.
npm install -g @ibrahimwithi/wu-cli
Requires Node.js 20+.
# Authenticate (scan QR code)
wu login
# Or use pairing code instead
wu login --code 15551234567
# Start collecting messages
wu listen
# Search messages
wu messages search "meeting tomorrow"
# Send a message
wu messages send 1234567890@s.whatsapp.net "Hello!"
# List your groups
wu groups list --live
By default, wu operates in opt-in mode — no messages are collected until you allow specific chats:
# Allow all group messages (read-only)
wu config allow '*@g.us' --mode read
# Allow full access to a specific chat
wu config allow 1234567890@s.whatsapp.net
# Start collecting
wu listen
| Command | Description |
|---|---|
wu login | Authenticate with WhatsApp via QR code |
wu login --code <phone> | Authenticate via pairing code |
wu logout | Clear session |
wu status | Show connection status and account info |
| Command | Description |
|---|---|
wu messages list <jid> | List messages in a chat |
wu messages search <query> | Full-text search messages (FTS5 ranked) |
wu messages send <jid> [text] | Send text, media, or poll |
wu messages react <jid> <id> <emoji> | React to a message |
wu messages delete <jid> <id> | Delete a message for everyone |
wu messages export <jid> | Export messages to a file (jsonl/json/markdown/csv) |
# Send with media
wu messages send 1234567890@s.whatsapp.net --media photo.jpg --caption "Check this out"
# Create a poll
wu messages send 120363XXX@g.us --poll "Lunch?" --options "Pizza,Sushi,Tacos"
# Reply to a message
wu messages send 120363XXX@g.us "Agreed" --reply-to BAE5ABC123
# Search within a specific chat
wu messages search "budget" --chat 120363XXX@g.us --limit 20
# Download all undownloaded media in a chat
wu media download-batch 120363XXX@g.us --limit 50 --concurrency 4
# Export all messages since a timestamp to a file
wu messages export 120363XXX@g.us --after 1772548621 --format jsonl --output data/export.jsonl
# Export as readable markdown
wu messages export 120363XXX@g.us --format markdown --output data/chat.md
| Command | Description |
|---|---|
wu chats list | List all chats |
wu chats search <query> | Search chats by name |
wu contacts list | List all contacts |
wu contacts search <query> | Search contacts by name or phone |
wu contacts info <jid> | Show contact details |
| Command | Description |
|---|---|
wu groups list | List groups (cached) |
wu groups list --live | Fetch groups from WhatsApp |
wu groups info <jid> | Show group details and participants |
wu groups create <name> [jids...] | Create a new group |
wu groups invite <jid> | Get invite link |
wu groups leave <jid> | Leave a group |
wu groups rename <jid> <name> | Rename a group |
wu groups join <code-or-url> | Join a group by invite code or URL |
wu groups participants <jid> | List group participants |
| Command | Description |
|---|---|
wu media download <msg-id> | Download media from a message |
wu media download-batch <jid> | Download undownloaded media in parallel |
wu media send <jid> <path> | Send a media file |
| Command | Description |
|---|---|
wu history backfill <jid> | Request older messages from WhatsApp |
# Backfill 50 older messages for a group
wu history backfill 120363XXX@g.us --count 50
# With JSON output
wu history backfill 120363XXX@g.us --count 20 --json
# Run as a foreground daemon — collects messages continuously
wu daemon
# Install as a systemd service (Linux)
wu daemon install
# Remove systemd service
wu daemon uninstall
# View daemon logs
wu daemon logs
The daemon auto-reconnects on connection drops, logs health every 5 minutes, and stores all messages to SQLite.
Run the daemon on a VPS collecting messages 24/7, query from your local machine. All communication over SSH — no exposed ports, no extra auth.
# --- On the VPS ---
npm i -g @ibrahimwithi/wu-cli
wu login
wu daemon install
# --- On your local machine ---
# Add the remote
wu remote add vps user@your-vps-ip
# Push your constraints to the server
wu remote setup vps --push
# Pull the database
wu sync pull
# Continuous sync every 30s
wu sync pull --watch --interval 30
# Install as a systemd timer (Linux)
wu sync install --interval 60