[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73276":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},73276,"wacli","openclaw\u002Fwacli","openclaw","WhatsApp CLI: sync, search, send","https:\u002F\u002Fwacli.sh",null,"Go",2518,303,19,1,0,5,27,175,15,92.95,"MIT License",false,"main",true,[27,28,29],"cli","go","whatsapp","2026-06-12 04:01:08","# 🗃️ wacli — WhatsApp CLI: sync, search, send\n\nA scriptable WhatsApp client built on [`whatsmeow`](https:\u002F\u002Fgithub.com\u002Ftulir\u002Fwhatsmeow). Pairs as a linked WhatsApp Web device, mirrors your messages into a local SQLite store, and gives you offline search, sending, and chat\u002Fgroup\u002Fcontact management from the command line.\n\n> Third-party tool. Uses the WhatsApp Web protocol via `whatsmeow`. Not affiliated with WhatsApp.\n\nFull documentation: **\u003Chttps:\u002F\u002Fwacli.sh>**\n\n## Features\n\n- **Auth + sync** — QR pairing, one-shot or follow-mode sync, optional media downloads, optional signed webhook fan-out.\n- **Offline message store** — SQLite with FTS5 search (LIKE fallback), filterable by chat, sender, direction, time, and media type, with status broadcasts stored separately.\n- **Sending** — text with mentions\u002Freplies\u002Flink-previews, files (image\u002Fvideo\u002Faudio\u002Fdocument, ≤100 MiB), stickers, voice notes, reactions, and status broadcasts; rapid-send guardrails and retry-receipt grace.\n- **History backfill** — best-effort per-chat requests to your primary device for older messages.\n- **Contacts \u002F chats \u002F groups \u002F channels** — search, alias, tag, archive, pin, mute, mark-read, rename, prune, manage participants and invite links, send to channels.\n- **Diagnostics + safety** — `doctor`, read-only mode, store locks with owner reporting, panic recovery, bounded media queue, owner-only DB perms.\n- **Scriptable** — `--json` everywhere, `--events` NDJSON lifecycle stream, deterministic exit codes.\n\n## Install\n\n### Homebrew (recommended)\n\n```bash\nbrew install steipete\u002Ftap\u002Fwacli\n```\n\nIf a Linux install reports `Binary was compiled with 'CGO_ENABLED=0'`, run `brew update && brew reinstall steipete\u002Ftap\u002Fwacli`.\n\n### Build from source\n\n`wacli` uses `go-sqlite3`, so cgo + a C compiler are required.\n\n- macOS: Xcode Command Line Tools.\n- Debian\u002FUbuntu: `sudo apt install build-essential`.\n\n```bash\nCGO_ENABLED=1 CGO_CFLAGS=\"-Wno-error=missing-braces\" \\\n  go install -tags sqlite_fts5 github.com\u002Fopenclaw\u002Fwacli\u002Fcmd\u002Fwacli@latest\n```\n\nFor local development:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fwacli.git\ncd wacli\nCGO_ENABLED=1 CGO_CFLAGS=\"-Wno-error=missing-braces\" \\\n  go build -tags sqlite_fts5 -o .\u002Fdist\u002Fwacli .\u002Fcmd\u002Fwacli\n.\u002Fdist\u002Fwacli --help\n```\n\n### Docker\n\n```bash\ndocker build -t wacli .\ndocker run --rm -it -v \"$PWD\u002F.wacli:\u002Fdata\" wacli auth\ndocker run --rm -v \"$PWD\u002F.wacli:\u002Fdata\" wacli sync --follow\n```\n\nThe image keeps WhatsApp auth, SQLite, config, and cache under `\u002Fdata`; it also includes `ffmpeg` for media helpers.\n\n## Quick start\n\n```bash\n# 1. Pair (shows QR), then bootstrap sync\nwacli auth\n\n# 2. Keep syncing in the background (no QR; needs prior auth)\nwacli sync --follow\n\n# 3. Search\nwacli messages search \"meeting\"\n\n# 4. Send\nwacli send text --to 1234567890 --message \"hello\"\nwacli send file --to mom --file .\u002Fpic.jpg --caption \"hi\"\nwacli send status --message \"available today\" --background-color '#1f7a8c'\n\n# 5. Diagnostics\nwacli doctor\n```\n\nRecipients accept a JID, phone number (E.164 or formatted), channel JID, or a synced contact\u002Fgroup\u002Fchat name. Ambiguous names prompt in a TTY; pass `--pick N` in scripts.\n\nMore recipes — replies, mentions, stickers, voice, reactions, statuses, channels, history backfill, chat management — live in the [docs](https:\u002F\u002Fwacli.sh).\n\n## Documentation\n\n| Area | Pages |\n| --- | --- |\n| **Setup** | [overview](docs\u002Foverview.md) · [auth](docs\u002Fauth.md) · [accounts](docs\u002Faccounts.md) · [sync](docs\u002Fsync.md) · [doctor](docs\u002Fdoctor.md) |\n| **Messaging** | [messages](docs\u002Fmessages.md) · [calls](docs\u002Fcalls.md) · [send](docs\u002Fsend.md) · [media](docs\u002Fmedia.md) · [presence](docs\u002Fpresence.md) |\n| **Address book** | [contacts](docs\u002Fcontacts.md) · [chats](docs\u002Fchats.md) · [groups](docs\u002Fgroups.md) · [channels](docs\u002Fchannels.md) |\n| **History** | [history coverage \u002F fill \u002F backfill](docs\u002Fhistory.md) |\n| **Local store** | [store](docs\u002Fstore.md) · [companion integrations](docs\u002Fintegrations.md) |\n| **Misc** | [profile](docs\u002Fprofile.md) · [version](docs\u002Fversion.md) · [completion](docs\u002Fcompletion.md) · [release](docs\u002Frelease.md) |\n\n## Configuration\n\nDefault store: `~\u002F.local\u002Fstate\u002Fwacli` on Linux, `~\u002F.wacli` elsewhere. Existing `~\u002F.wacli` directories on Linux keep working. Use `wacli accounts add NAME` and `--account NAME` for first-class multi-account stores.\n\n**Global flags:** `--store DIR`, `--account NAME`, `--json`, `--events`, `--full`, `--timeout DUR`, `--lock-wait DUR`, `--read-only`.\n\n**Environment overrides:**\n\n| Variable | Effect |\n| --- | --- |\n| `WACLI_STORE_DIR` | Default store directory. |\n| `WACLI_READONLY` | `1`\u002F`true`\u002F`yes`\u002F`on` enables read-only mode. |\n| `WACLI_DEVICE_LABEL` | Linked-device label shown in WhatsApp. Defaults to `wacli - \u003COS> (\u003Chost>)`. |\n| `WACLI_DEVICE_PLATFORM` | Linked-device platform. Defaults to `DESKTOP`; invalid values fall back to `CHROME`. |\n| `WACLI_SYNC_MAX_MESSAGES` | Stop sync once total local messages exceed this count. |\n| `WACLI_SYNC_MAX_DB_SIZE` | Stop sync once `wacli.db` + sidecars reach a size like `500MB` or `2GB`. |\n\n## Backfilling older history\n\n`wacli sync` only stores what WhatsApp Web sends opportunistically. To fetch *older* messages, `wacli` issues on-demand history requests to your **primary device** (your phone), which must be online.\n\n- Best-effort: WhatsApp may not return full history.\n- One request anchors on the **oldest locally stored message** in that chat — run `sync` first.\n- Recommended `--count 50` per request (max 500). Max `--requests 100` per run.\n- `history coverage` shows which chats are eligible. `history fill --dry-run` plans without connecting.\n\n```bash\nwacli history coverage --include-blocked\nwacli history fill --dry-run --kind group --limit 20\nwacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50\n```\n\nLoop over every known chat:\n\n```bash\nwacli --json chats list --limit 100000 \\\n  | jq -r '.data[].JID' \\\n  | while read -r jid; do\n      wacli history backfill --chat \"$jid\" --requests 3 --count 50\n    done\n```\n\n## Credits\n\nHeavily inspired by [`whatsapp-cli`](https:\u002F\u002Fgithub.com\u002Fvicentereig\u002Fwhatsapp-cli) by Vicente Reig.\n\n## Maintainers\n\n- Created by [@steipete](https:\u002F\u002Fgithub.com\u002Fsteipete)\n- Currently maintained by [@dinakars777](https:\u002F\u002Fgithub.com\u002Fdinakars777)\n\n## License\n\nSee [`LICENSE`](LICENSE).\n","wacli 是一个基于命令行的 WhatsApp 客户端，支持消息同步、搜索和发送。它通过与 WhatsApp Web 协议配对并使用 whatsmeow 库来实现功能。wacli 能够将消息镜像到本地 SQLite 数据库中，并提供离线搜索、消息发送以及聊天\u002F群组\u002F联系人管理等功能。其核心特点包括：支持 QR 配对及消息同步、具备强大的离线存储与搜索能力（利用 FTS5）、可发送多种类型的消息（文本、文件、语音等），并且具有良好的脚本编写支持。适用于需要自动化处理 WhatsApp 消息或希望在命令行环境中高效管理 WhatsApp 交流的用户。",2,"2026-06-11 03:44:49","high_star"]