agent-activity
Streams what the agent is doing into the room, as rows the desktop client renders in an **events drawer** above the composer (collapsed: avatar, pulsing dots,…
Send WhatsApp messages, list chats, and search history via wacli (local CLI backed by a synced store at ~/.wacli). Unpaired? Run the guided connect flow (scripts/guided_connect.py) from chat — no terminal needed.
$ npx -y skills add sonichi/sutando --skill whatsapp --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/whatsappContext preview
The summary Claude sees to decide when to auto-load this skill.
Send WhatsApp messages, list chats, and search history via wacli (local CLI backed by a synced store at ~/.wacli). Unpaired? Run the guided connect flow (scripts/guided_connect.py) from chat — no terminal needed.
name: whatsapp description: Send WhatsApp messages, list chats, and search history via wacli (local CLI backed by a synced store at ~/.wacli). Unpaired? Run the guided connect flow (scripts/guided_connect.py) from chat — no terminal needed.
Send messages, list chats, and search history using [wacli](https://github.com/openclaw/wacli) — a local CLI that syncs a WhatsApp Web session into `~/.wacli/`. No third-party service, no API key; the auth flow is a QR-code scan from the user's phone.
brew install openclaw/tap/wacli # one-time install (3rd-party tap, NOT Homebrew-core) wacli auth # opens a QR for the user to scan from WhatsApp → Linked Devices
`openclaw/tap` is a third-party Homebrew tap (not Homebrew-core), and wacli stores a WhatsApp Web session locally at `~/.wacli/`. Review the tap source before installing if security-sensitive.
The session lives at `~/.wacli/`. Stays signed in across reboots until the user revokes the linked device from their phone.
Optional `.env` settings (label shown in WhatsApp's Linked Devices screen on the user's phone):
WACLI_DEVICE_LABEL=Sutando # any string; appears next to the device in WhatsApp → Linked Devices
WACLI_DEVICE_PLATFORM=CHROME # default per wacli is DESKTOP; CHROME is the fallback if an invalid value is set.
# See wacli's docs (https://github.com/openclaw/wacli) for the full platform-string list.When the user asks to connect WhatsApp, do NOT tell them to open a terminal. Run the orchestrator and relay its line protocol into the chat:
python3 skills/whatsapp/scripts/guided_connect.py --phone "+14155551234" # preferred python3 skills/whatsapp/scripts/guided_connect.py # QR fallback
it emits `PAIR_CODE: XXXX-XXXX`, which you relay as text — the user types it under WhatsApp → Linked devices → "Link with phone number". A QR posted into the chat cannot be scanned when the chat is open on the same phone.
Codes rotate; each new `QR_PNG:` line supersedes the previous image, so re-post it. `QR_TEXT: <payload>` appears instead if the qrcode lib is absent.
chats probe passed — confirm to the user and offer a closed-loop test send to a recipient THEY name (wacli refuses self-sends by design).
a documented wacli limitation.
wacli send text --to "+14155551234" --message "Hello!" # send wacli send text --to "+14155551234" --message "$(cat draft.txt)" # multi-line via stdin / file wacli chats list --limit 20 # recent chats wacli messages search "keyword" --limit 10 # search history wacli messages list --chat "+14155551234" --limit 20 # read a thread
Phone numbers are in E.164 (`+countrycode...`). For groups, pass the JID returned by `wacli chats list` instead of a phone number.
Synthesizes the proposal in [PR #180](https://github.com/sonichi/sutando/pull/180) by @priyansh4320 (stale + conflicts, never landed) and the wacli reference already documented in CLAUDE.md's "Built-in capabilities" section. Issue #179 (asking for WhatsApp support) was closed 2026-05-16 noting the capability had landed as inline doc.
My AI Stand — Realtime by Day, Rewriting Itself by Night. Summon my AI superpower. Voice, vision, screen, meetings, calls when I'm engaged. Learns my patterns, ships its own code when I'm not. Runs across my Macs, interacts with people & their Stands.
Repo: sonichi/sutando
Streams what the agent is doing into the room, as rows the desktop client renders in an **events drawer** above the composer (collapsed: avatar, pulsing dots,…
Local Agent Registry — a standalone, dependency-free service that tracks running Claude Code (and other) agent instances. Agents self-register on startup and…
**Prefer the `ag2-space` MCP tools when they are connected and the room exposes them** — availability is per-room and per-actor, so check…
Deterministic final-answer normalizer — a last-step pass for any task that ends in a *precise* answer (a number, a short string, a comma-list). Applies the…
Transcribes audio files and voice notes to text via Gemini 2.5-flash. Integrates with Slack, Discord, and Telegram bridges so voice clips surface as readable…
Act back on the owner's Bee wearable — the TOOL half of the Bee integration (channels-vs-tools split). The Bee CHANNEL (ag2-sparrow's `sources/bee.py` watcher)…