whatsapp-wacli-linux
Skill42 starsChanged 8 days agoMITView on GitHub
Use wacli (WhatsApp CLI) to sync, search, send messages, manage contacts/groups, and backfill chat history. REQUIRES AUTHENTICATION FIRST. Linux x86_64 binary.
- Deletes or force-pushes
- Installs packages
In this repository29 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- app-creatorSkill
- bento-slidesSkill
- brochure-designerSkill
- business-card-readerSkill
- claude-designerSkill
- codebase-to-courseSkill
- daily-briefingSkill
- diagram-designSkill
- fable-modeSkill
- ffmpeg-video-processingSkill
- frontend-designSkill
- gamma-presenterSkill
- gitSkill
- hotel-finderSkill
- humanizerSkill
- in-depth-researchSkill
- jclaw-apiSkill
- jira-operationsSkill
- powerpoint-pptxSkill
- research-paper-writer-proSkill
- restaurant-recommenderSkill
- skill-creatorSkill
- ui-ux-pro-maxSkill
- visual-explainerSkill
- whatsapp-wacli-macSkill
- writing-standardsSkill
- youtube-transcriptSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Always use this path when invoking commands.
- Very specific: line 28
If it prints needs install, build it from source:
- Very specific: line 57
Use ./skills/whatsapp-wacli-linux/tools/wacli chats list or contacts search to find JIDs.
≈ “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
WhatsApp wacli Skill
Binary location: ./skills/whatsapp-wacli-linux/tools/wacli
Always use this path when invoking commands.
Bootstrap (First-time setup)
Before running any wacli command, check whether the binary is present:
test -x ./skills/whatsapp-wacli-linux/tools/wacli && echo "ready" || echo "needs install"If it prints needs install, build it from source:
# Ensure build dependencies are available
which go || (echo "Go 1.25+ is required — install from https://go.dev/dl/" && exit 1)
which gcc || apt-get install -y gcc 2>/dev/null || yum install -y gcc 2>/dev/null
git clone --depth 1 https://github.com/steipete/wacli /tmp/wacli-src \
&& cd /tmp/wacli-src \
&& CGO_ENABLED=1 go build -tags sqlite_fts5 -o /tmp/wacli-bin ./cmd/wacli \
&& cp /tmp/wacli-bin ./skills/whatsapp-wacli-linux/tools/wacli \
&& chmod +x ./skills/whatsapp-wacli-linux/tools/wacli \
&& rm -rf /tmp/wacli-src /tmp/wacli-binNote: CGO is required (SQLite dependency).
gccmust be present. Builds natively for linux/amd64.
Once the binary is present, proceed to Authentication below.
CRITICAL: Phone Number Format
Phone numbers must be digits only with country code, without the + prefix:
- Correct:
[PHONE_NUMBER] - Wrong:
+[PHONE_NUMBER](causes timeout/resolution errors)
For groups, use JID format: [PHONE_NUMBER]@g.us
Use ./skills/whatsapp-wacli-linux/tools/wacli chats list or contacts search to find JIDs.
Authentication (Required First)
./skills/whatsapp-wacli-linux/tools/wacli authThis displays a QR code. The user must scan it with WhatsApp (Settings > Linked Devices > Link a Device). The command stays running while waiting for the scan and initial sync. Use a timeout of at least 120 seconds.
Check auth status:
./skills/whatsapp-wacli-linux/tools/wacli auth statusLogout:
./skills/whatsapp-wacli-linux/tools/wacli auth logoutDiagnostics:
./skills/whatsapp-wacli-linux/tools/wacli doctorSending Messages
Text message
./skills/whatsapp-wacli-linux/tools/wacli send text --to [PHONE_NUMBER] --message "Hello!"File (image/video/audio/document)
./skills/whatsapp-wacli-linux/tools/wacli send file --to [PHONE_NUMBER] --file /path/to/photo.jpgOptional flags:
--caption "Description"— caption for images/videos/documents--filename report.pdf— override the display filename--mime image/jpeg— override auto-detected MIME type
Messages
List messages in a chat
./skills/whatsapp-wacli-linux/tools/wacli messages list --chat [PHONE_NUMBER]@s.whatsapp.net --limit 20Optional: --after 2025-01-01 --before 2025-12-31
Search messages (full-text)
./skills/whatsapp-wacli-linux/tools/wacli messages search "keyword" --limit 20Optional filters:
--chat <JID>— restrict to a specific chat--from <JID>— restrict to a specific sender--after 2025-01-01/--before 2025-12-31— date range--type image|video|audio|document— media type filter
Show a specific message
./skills/whatsapp-wacli-linux/tools/wacli messages show --chat <JID> --id <MESSAGE_ID>Show context around a message
./skills/whatsapp-wacli-linux/tools/wacli messages context --chat <JID> --id <MESSAGE_ID> --before 5 --after 5Chats
List chats
./skills/whatsapp-wacli-linux/tools/wacli chats list --limit 20Search chats by name/number
./skills/whatsapp-wacli-linux/tools/wacli chats list --query "name or number"Show a specific chat
./skills/whatsapp-wacli-linux/tools/wacli chats show --jid [PHONE_NUMBER]@s.whatsapp.netContacts
Search contacts
./skills/whatsapp-wacli-linux/tools/wacli contacts search "name" --limit 20Show a specific contact
./skills/whatsapp-wacli-linux/tools/wacli contacts show --jid [PHONE_NUMBER]@s.whatsapp.netSet a local alias for a contact
./skills/whatsapp-wacli-linux/tools/wacli contacts alias set --jid [PHONE_NUMBER]@s.whatsapp.net --alias "Mom"Remove an alias
./skills/whatsapp-wacli-linux/tools/wacli contacts alias rm --jid [PHONE_NUMBER]@s.whatsapp.netRefresh contacts from session store
./skills/whatsapp-wacli-linux/tools/wacli contacts refreshGroups
List groups
./skills/whatsapp-wacli-linux/tools/wacli groups listRefresh groups (live from WhatsApp)
./skills/whatsapp-wacli-linux/tools/wacli groups refreshGet group info
./skills/whatsapp-wacli-linux/tools/wacli groups info --jid <GROUP_JID>Rename a group
./skills/whatsapp-wacli-linux/tools/wacli groups rename --jid [PHONE_NUMBER]@g.us --name "New Name"Join a group by invite code
./skills/whatsapp-wacli-linux/tools/wacli groups join --code <INVITE_CODE>Leave a group
./skills/whatsapp-wacli-linux/tools/wacli groups leave --jid <GROUP_JID>Manage group invite links
./skills/whatsapp-wacli-linux/tools/wacli groups invite --jid <GROUP_JID>Manage group participants
./skills/whatsapp-wacli-linux/tools/wacli groups participants --jid <GROUP_JID>Sync
One-time sync (sync until idle, then exit)
./skills/whatsapp-wacli-linux/tools/wacli sync --onceContinuous sync (keeps running)
./skills/whatsapp-wacli-linux/tools/wacli sync --followOptional flags:
--download-media— download media files during sync--refresh-contacts— refresh contacts from session store--refresh-groups— refresh group list from WhatsApp--idle-exit 30s— exit after idle period (with--once)
History Backfill
Request older messages for a specific chat from the primary device:
./skills/whatsapp-wacli-linux/tools/wacli history backfill --chat <JID> --requests 10 --count 50Flags:
--count 50— messages per request (recommended: 50)--requests 10— number of requests to attempt--wait 1m— time to wait per request for a response--idle-exit 5s— exit after idle
Note: Best-effort. Primary device must be online. WhatsApp may not return full history.
Media
Download media from a message
./skills/whatsapp-wacli-linux/tools/wacli media download --chat <JID> --id <MESSAGE_ID>Optional: --output /path/to/save
Global Flags (available on all commands)
| Flag | Purpose |
--json | Output JSON instead of human-readable text |
--store DIR | Custom store directory (default: ~/.wacli) |
--timeout 5m | Command timeout for non-sync commands |
Environment Variables
| Variable | Purpose |
WACLI_DEVICE_LABEL | Linked device label shown in WhatsApp |
WACLI_DEVICE_PLATFORM | Override device platform (default: CHROME) |
Exec Tool Examples
# Authenticate (use timeout=120 for QR scan)
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli auth", "timeout": 120})
# Send text (NO + prefix on phone number)
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli send text --to [PHONE_NUMBER] --message 'Hello!'"})
# Send file
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli send file --to [PHONE_NUMBER] --file /tmp/report.pdf --caption 'Monthly report'"})
# Search messages (JSON for parsing)
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli messages search 'invoice' --json"})
# List recent chats
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli chats list --limit 10"})
# One-time sync
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli sync --once", "timeout": 60})
# Check auth status
exec({"command": "./skills/whatsapp-wacli-linux/tools/wacli auth status"})Important Notes
- Phone numbers: digits only, no + prefix — e.g.,
[PHONE_NUMBER]not+[PHONE_NUMBER] - Auth required first — run
authand scan QR before any other command - Primary device must be online — phone needs WhatsApp running for sync/send
- Store lock — only one wacli process can run at a time. If you get a lock error, wait or kill the other process
- Rate limits — respect WhatsApp's sending limits
- Third-party tool — not affiliated with WhatsApp/Meta; uses WhatsApp Web protocol
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.

