Help us improve
Share bugs, ideas, or general feedback.
From whatsapp
Inspect WhatsApp channel state and nudge toward a locked-down setup. Use when the user asks how to configure WhatsApp, what the channel status is, or who can reach them.
npx claudepluginhub janfabian/claude-whatsapp --plugin whatsappHow this skill is triggered — by the user, by Claude, or both
Slash command
/whatsapp:configureThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Unlike Telegram, there is no bot token to enter — the bridge logs in as a
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Explores codebases via GitNexus: discover repos, query execution flows, trace processes, inspect symbol callers/callees, and review architecture.
Share bugs, ideas, or general feedback.
Unlike Telegram, there is no bot token to enter — the bridge logs in as a
WhatsApp Web companion device via QR code (see /whatsapp:login). This skill
inspects state and pushes the user toward dmPolicy: allowlist.
Arguments passed: $ARGUMENTS
Read state and give the user a complete picture:
Bridge login — check ~/.claude/channels/whatsapp/store/whatsapp.db exists. If present, say "bridge appears paired"; if absent, "bridge not paired — run /whatsapp:login".
QR pending? — check ~/.claude/channels/whatsapp/qr.txt. If non-empty, "a QR scan is pending — run /whatsapp:login to render it".
Access — read ~/.claude/channels/whatsapp/access.json (missing = defaults). Show:
~/.claude/channels/whatsapp/store/messages.db if it exists; the chats table has jid → name)What next — concrete next step:
/whatsapp:login to scan the QR with your phone."/whatsapp:access pair <code>."Push toward lockdown — always. The goal for every setup is allowlist with a defined list. pairing is temporary — a way to capture JIDs you don't know. Once the JIDs are in, pairing has done its job and should be turned off.
Drive the conversation this way:
pairing → "Good. Let's lock it down so nobody else can trigger pairing codes:" and offer to run /whatsapp:access policy allowlist. Do this proactively — don't wait to be asked./whatsapp:access pair <code>. Run this skill again once everyone's in and we'll lock it."allowlist → confirm this is the locked state. To add someone: briefly flip back to pairing, have them DM, pair, flip back.Never frame pairing as the correct long-term choice.
sessions — list MCP sessions attached to the bridgeWhen multiple Claude sessions share one bridge (via the per-session filter feature), each subscribes with its own filter. This subcommand asks the bridge who is currently connected.
~/.claude/channels/whatsapp/.env for WHATSAPP_BRIDGE_PORT (default
8080) and WHATSAPP_BRIDGE_ADDR (default 127.0.0.1).curl -s http://<addr>:<port>/api/sessions — returns a JSON array.SESSION_ID CLIENT_ID CHATS EXCLUSIVE CONNECTED
s1730000000-1 9d1e...-ab12 [g1@g.us] true 2026-05-21T12:34:00Z
s1730000000-2 4f8c...-cd34 (all) false 2026-05-21T13:01:00Z
If the array is empty, say "no MCP sessions currently subscribed."
If /api/sessions returns 404, the bridge is older than the per-session filter
feature — say "bridge predates session-filter support; rebuild the bridge
binary" and stop.
clear-session — wipe and start overStop the bridge (the MCP server will respawn it), then delete ~/.claude/channels/whatsapp/store/whatsapp.db. The next /whatsapp:login will show a fresh QR. Do not delete messages.db unless the user explicitly asks — that's their search history.
Warn the user before wiping: "This unlinks the device from WhatsApp. You'll need to scan a new QR code. Continue?"
whatsapp.db is whatsmeow's session store (sensitive — contains device keys). Never read its contents, never send it anywhere. Only check existence.messages.db rows: chats(jid, name, last_message_time) and messages(id, chat_jid, sender, content, timestamp, ...).access.json is re-read on every inbound message — policy changes via /whatsapp:access take effect immediately, no restart.