원클릭으로
wacli
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when the user asks to use a consumer integration that is not set up yet: WhatsApp as Me, Email, Google Workspace, Apple Notes, Apple Reminders, Telegram as Me, Google Maps Search, or creative audio. Route here only when the right integration exists but is blocked by missing login, OAuth, QR pairing, permissions, local dependency setup, configuration, or API credentials, and the response should guide setup in product language instead of dumping CLI commands.
Use for Google Workspace requests tied to Gmail, Google Calendar, Drive, Docs, Sheets, or Contacts, especially when the user explicitly mentions Google or needs cross-surface Google account access. Prefer this over generic email skills when the task is clearly in the Google ecosystem.
Use when the user asks to triage messages, emails, chats, inboxes, unread messages, recent messages, open replies, who they owe replies to, outreach, or reply drafting across one or more channels such as WhatsApp, Telegram, Gmail/email, Slack, Signal, iMessage, browser portals, or files. For broad sweeps, first produce a scoped prioritized triage list; for one known target, use single-thread draft mode. Always require user approval before any external reply/send.
Use for generic email tasks on connected mail accounts: search, read, summarize, draft, reply, forward, send, and organize email over IMAP/SMTP. This is the better match for normal mailbox work that is not specifically a Gmail or Google Workspace request.
Use for Telegram-as-me requests on this Mac: reading, sending, replying, or waiting as the user's real Telegram account. Do not use it for the normal Telegram bot channel, BotFather setup, or generic bot onboarding.
Help choose what to eat, pick from a menu or menu photo, find a restaurant or cafe nearby, compare delivery options, or choose a meal within dietary, budget, time, energy, comfort, or work-venue constraints. Use for requests such as 'what should I eat?', 'help me choose from this menu', 'find food near me', or 'compare these delivery options'.
| name | wacli |
| description | Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats). |
| homepage | https://wacli.sh |
| metadata | {"openclaw":{"emoji":"📱","displayName":"WhatsApp as Me","requires":{"bins":["wacli","./scripts/wacli-live.sh","./scripts/wacli-health.sh","./scripts/wacli-auth-local.sh","./scripts/wacli-send-safe.sh","./scripts/wacli-recent-reply.sh","./scripts/wacli-monitor-check.sh"]},"install":[{"id":"brew","kind":"brew","formula":"openclaw/tap/wacli","bins":["wacli"],"label":"Install wacli (brew)","versionCommand":["wacli","--version"],"versionRegex":"wacli v?(?<version>[0-9]+\\.[0-9]+\\.[0-9]+)","recommendedVersion":"0.11.1"},{"id":"go","kind":"go","module":"github.com/openclaw/wacli/cmd/wacli@v0.11.1","bins":["wacli"],"label":"Install wacli (go)","versionCommand":["wacli","--version"],"versionRegex":"wacli v?(?<version>[0-9]+\\.[0-9]+\\.[0-9]+)","recommendedVersion":"0.11.1"}]}} |
Use wacli only when the user explicitly asks you to message someone else on WhatsApp, when they ask to sync/search WhatsApp history, or when you are running a scoped WhatsApp monitor/reply-check on their behalf.
Do NOT use wacli for normal user chats; OpenClaw routes WhatsApp conversations automatically.
If the user is chatting with you on WhatsApp, you should not reach for this tool unless they ask you to contact a third party.
Automation Rule
skills/wacli/scripts/wacli-monitor-check.sh --target <phone-or-jid> --json
This is the default path for monitor jobs because it wraps reconciliation and
durable baseline state in one command.skills/wacli/scripts/wacli-recent-reply.sh --target <phone-or-jid> --jsonwacli-monitor-check.sh command
into the job payload.
Do not leave the waking run to rediscover the monitor procedure from scratch.wacli chats list --query <phone> as the primary discovery path for reply checks or monitors.
It can miss the real sibling @lid thread even when replies landed there.wacli sync + wacli messages list as the primary monitor
implementation when wacli-recent-reply.sh covers the same check.
Raw sync/list is debug or fallback material, not the default authored monitor path.skills/wacli/scripts/wacli-health.sh --json --ensure-owner.wacli-recent-reply.sh
or the narrowest chat read/search path that proves what the other person last
said. WhatsApp is live chat, so do not draft from memory, stale snippets, or a
prior read when current thread context can be checked.wacli doctor as fallback/debug-only.
Under a live OpenClaw-owned lock it can report CONNECTED false even when
wacli sync --follow is healthy, so do not use it as the primary readiness
source for agents.skills/wacli/scripts/wacli-live.sh ensure --json
to make sure one long-lived wacli sync --follow owner exists for the store.wacli ... commands are allowed. What
stays restricted by default is shell wrapping, pipes, chaining, and
redirection.wacli through openclaw nodes run, insert -- before the
child argv so flags like --json or --limit reach wacli instead of the
wrapper.wacli.wacli sync --json as a health or status probe.
wacli sync defaults to --follow=true, so it is a long-running command and
a bad fit for quick readiness checks.system.run.prepare is absent.consumer-setup skill.skills/wacli/scripts/wacli-send-safe.sh as the default path whenever the main ~/.wacli store might already have a live sync owner.
This is especially important for monitor-driven replies, Telegram-approved follow-up sends, and any wake flow that decides to answer on WhatsApp after first reading from the shared store.
The helper serializes sends per store, pauses/restores the recorded sync owner
when needed, and reconciles failed raw-send exits against exact local history.wacli send ... if skills/wacli/scripts/wacli-send-safe.sh covers the same send.
Manual stop/send/restart loops are a fallback-of-last-resort debug path, not the authored agent workflow.Setup Routing
wacli is missing, not authenticated, or has no usable chat history yet,
route setup through consumer-setup.wacli doctor shows AUTHENTICATED true but CONNECTED false, first
check skills/wacli/scripts/wacli-health.sh --json --ensure-owner before you
tell the user anything. Under lock, the wrapper is the source of truth and
raw doctor can be wrong.wacli is
the wrong surface. The built-in WhatsApp channel is separate from the
external wacli CLI.skills/wacli/scripts/wacli-auth-local.sh start.
It runs wacli auth in an isolated temp store, captures the terminal QR,
renders a real PNG, and returns a session id plus qrPath.MEDIA:<qrPath> in the final reply so
the QR remains scannable.skills/wacli/scripts/wacli-auth-local.sh wait --session <id> before claiming
WhatsApp is ready.Safety
wacli-send-safe.sh so approval cannot send a
stale or duplicate reply over newer relevant thread movement.Auth + sync
wacli auth (QR login + initial sync)wacli sync --follow (continuous sync)wacli sync --once --idle-exit 5s --jsonwacli doctorFind chats + messages
For broad WhatsApp triage, shortlist before deep reads. Start with cheap
chat/message discovery such as wacli chats list --limit 20 --json, targeted
wacli messages search ... --limit 20, or the existing recent-reply helpers
when the target is known.
Use previews, sender/contact, timestamp, unread/recent state, and helper
fields such as recentConversation, latestInboundReply, and continuity
to decide what deserves deeper reading.
Filter obvious noise early: muted group chatter, routine reactions, receipts, automated notifications, and media-only items that do not affect the user's next action.
Bucket triage results as Urgent, Needs reply soon, Waiting on them,
Schedule, Delegate, Archive / no action, or FYI.
State scope and confidence in every broad triage result: target set, timeframe/search terms, result count or limit, and what was excluded.
Treat "needs reply" as an inference until recent conversation context shows the user is likely the next responder.
Before drafting, sending, or monitor-driven reply decisions, use the narrowest current read/check path for the exact target and inspect enough conversation context to avoid answering a stale preview.
wacli chats list --limit 20 --query "name or number"
wacli messages search "query" --limit 20 --chat <jid>
wacli messages search "invoice" --after 2025-01-01 --before 2025-12-31
Recent-reply reconciliation for monitors/reply checks:
skills/wacli/scripts/wacli-recent-reply.sh --target <phone-or-jid> --json
This inspects the local wacli.db, resolves real sibling chats from stored
names/contacts/aliases, and returns the newest inbound from_me=0 across all
candidate chats, plus recentConversation and continuity fields for the
active chat.
Monitor job helper (stateful baseline + reconciliation in one command):
skills/wacli/scripts/wacli-monitor-check.sh --target <phone-or-jid> --json
This stores baseline state under ~/.openclaw/wacli-monitor-state/ by default
so cron jobs can use the same command on every wake.
For negotiation/follow-up monitors, do not compose a reply from only
latestInboundReply.effectiveText; use recentConversation so the wake run
sees prior outbound turns, and suppress sends when
continuity.lastOutboundIsRepeatOfPrevious is true unless the user explicitly
wants to resend the same line.
History backfill
wacli history backfill --chat <jid> --requests 2 --count 50Send
skills/wacli/scripts/wacli-send-safe.sh text --to "+14155551212" --message "Hello! Are you free at 3pm?"skills/wacli/scripts/wacli-send-safe.sh text --to "1234567890-123456789@g.us" --message "Running 5 min late."skills/wacli/scripts/wacli-send-safe.sh file --to "+14155551212" --file /path/agenda.pdf --caption "Agenda"verification.status as verified_local or
verified_local_after_failed_exit; otherwise open the chat or use a manual
wa.me fallback before claiming delivery or thread proof.wacli send ... is not allowed for real external contacts after safe-send
failure. Use it only for self-chat/test contacts or with explicit break-glass
approval.wacli send text --to "+14155551212" --message "Hello! Are you free at 3pm?"Monitor-driven reply send pattern
skills/wacli/scripts/wacli-recent-reply.sh ... --jsonskills/wacli/scripts/wacli-send-safe.sh text --to <phone-or-jid> --message "<approved reply>"Notes
~/.wacli (override with --store).--json for machine-readable output when parsing.<number>@s.whatsapp.net; groups look like <id>@g.us (use wacli chats list to find).<digits>@lid.
Linked-ID chats can use opaque @lid values that do not share the phone
digits. If you need to check whether a DM got a reply, resolve candidate chats
from actual stored data first, then inspect all of them.media_type=image (or another media type) with a
caption/body, or a media row with empty text where display_text is the only
visible clue.skills/wacli/scripts/wacli-health.sh --json --ensure-owner is the primary
health probe for agents:
not_authenticated usually means QR pairing has not been completed yet.paired_not_connected_readable means the account is paired and history is
readable, but no live owner is confirmed yet.healthy means OpenClaw has a live owner and chat history is readable.wacli doctor is fallback/debug-only:
AUTHENTICATED false usually means QR pairing has not been completed yet.AUTHENTICATED true + CONNECTED false may mean the phone/session is
offline, or just that another healthy sync owner already holds the store
lock.wacli chats list --json is the cheapest proof that history/search access is
actually working before you attempt send or backfill actions.skills/wacli/scripts/wacli-live.sh ensure --json is the preferred minimal
live-connection recovery path for agents when WhatsApp is paired but not
staying connected.skills/wacli/scripts/wacli-health.sh --json --ensure-owner is the preferred
normalized readiness check for agents. It intentionally avoids bare wacli sync.