Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Rich627/whatsapp-claude-plugin --skill configuregit clone --depth 1 https://github.com/Rich627/whatsapp-claude-pluginWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/rich627/whatsapp-claude-plugin/configure)<a href="https://agentmods.dev/skills/rich627/whatsapp-claude-plugin/configure"><img src="https://agentmods.dev/badge/skills/rich627/whatsapp-claude-plugin/configure/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/rich627/whatsapp-claude-plugin/configure"><img src="https://agentmods.dev/badge/skills/rich627/whatsapp-claude-plugin/configure.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00046 | $0.01287 |
| Opus 5 | $0.00023 | $0.00643 |
| Sonnet 5 | $0.00009 | $0.00257 |
| Haiku 4.5 | $0.00005 | $0.00129 |
Grade D, and why
configure scanned grade D with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
4. `chmod 600 ~/.whatsapp-channel/.env` — the file may contain credentials. Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
- Bash(rm -rf *) How it starts
The opening of the file, as written. The whole thing — 119 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/whatsapp-channel:configure — WhatsApp Channel Setup
Writes configuration to ~/.whatsapp-channel/.env and orients the
user on access policy. The server reads both files at boot.
Arguments passed: $ARGUMENTS
Dispatch on arguments
No args — status and guidance
Read both state files and give the user a complete picture:
-
Phone number — check
~/.whatsapp-channel/.envforWHATSAPP_PHONE_NUMBER. Show set/not-set; if set, show the number. -
Auth state — check whether
~/.whatsapp-channel/.baileys_auth/creds.jsonexists and hasregistered: true. Show paired/not-paired. -
Access — read
~/.whatsapp-channel/access.json(missing file = defaults:dmPolicy: "pairing", empty allowlist). Show:- DM policy and what it means in one line
- Allowed senders: count, and list JIDs
- Pending pairings: count, with codes and sender JIDs if any
-
What next — end with a concrete next step based on state:
- No phone number → "Run
/whatsapp-channel:configure <phone>with your WhatsApp phone number (e.g.886912345678, no leading +)." - Phone set but not paired → "Exit and launch with:
claude --dangerously-load-development-channels plugin:whatsapp-channel@whatsapp-claude-pluginThe pairing code will appear automatically. Enter it on your phone: WhatsApp > Linked Devices > Link a Device > Link with phone number instead." - Paired → "Ready. Your own number is auto-added to the allowlist.
To add others: have them DM the linked number, then approve with
/whatsapp-channel:access pair <code>."
- No phone number → "Run
Push toward lockdown — always. The goal for every setup is allowlist
with a defined list. pairing is not a policy to stay on; it's a temporary
way to capture WhatsApp 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:
- Read the allowlist. Tell the user who's in it.
- Ask: "Is that everyone who should reach you through this channel?"
- If yes and policy is still
pairing→ "Good. Let's lock it down so nobody else can trigger pairing codes:" and offer to run/whatsapp-channel:access policy allowlist. Do this proactively — don't wait to be asked. - If no, people are missing → "Have them DM the number; you'll approve
each with
/whatsapp-channel:access pair <code>. Run this skill again once everyone's in and we'll lock it." - If the allowlist is empty and they haven't paired themselves yet → "DM the linked number to capture your JID first. Then we'll add anyone else and lock it down."
- If policy is already
allowlist→ confirm this is the locked state. If they need to add someone: "They'll need to DM the linked number, or you can briefly flip to pairing:/whatsapp-channel:access policy pairing→ they DM → you pair → flip back."
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 119 lines · 46 tokens per session scan D 501ca35cc318
configure is a skill published in the GitHub repository Rich627/whatsapp-claude-plugin (87 stars, last pushed 7d ago), licensed Apache-2.0. It adds 46 tokens to every session and 1,287 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it D with 2 findings (asks for root, recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
remix
Build and review Remix 3 applications using the remix npm package and subpath imports. Use when working on Remix app structure, routes, controllers, middleware, validation, data access, auth, sessions, file uploads, server setup, UI components, hydration, HMR, navigation, or tests.
ai-mcp
Host-side Model Context Protocol (MCP) client for TanStack AI: connect to external MCP servers, discover and run their tools inside any adapter's chat() loop, read resources and prompts, generate TypeScript types (typed tool names/pool keys) with the bundled CLI, and manage lifecycle with close()/await using.
ai-core/chat-experience
End-to-end chat implementation: server endpoint with chat() and toServerSentEventsResponse(), client-side useChat hook with fetchServerSentEvents(), message rendering with UIMessage parts, multimodal content, thinking/reasoning display. Covers streaming states, connection adapters, and message format conversions. NOT…
ai-persistence/build-drizzle-adapter
Use when an app already runs Drizzle ORM and needs TanStack AI chat persistence — writes a chat-persistence.ts into the app against its existing db handle, schema file, and drizzle-kit journal. Covers the four tables (SQLite/Postgres/MySQL), the onConflict idempotency rules, JSON columns, and per-request bindings like…
ai-persistence/build-prisma-adapter
Use when an app already runs Prisma and needs TanStack AI chat persistence — writes a chat-persistence.ts into the app against its existing PrismaClient and schema.prisma. Covers the four models, BigInt timestamps, JSON-as-string columns, upsert-with-empty-update idempotency, and model renaming.
ai-persistence/stores
Implement the MessageStore, RunStore, InterruptStore, MetadataStore contracts for @tanstack/ai-persistence against any database. defineAIPersistence, composePersistence overrides, critical invariants (full-replace saveThread, insert-if-absent createOrResume and interrupt create), authorize thread access…