Agent skill

Add Whatsapp

by sbusso in sbusso/claudeclaw

Add WhatsApp as a channel. An agent skill from sbusso/claudeclaw.

MITAuto-check: notesBackend & APIs

Install Add Whatsapp

skills CLI
$ npx skills add sbusso/claudeclaw --skill add-whatsapp -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install sbusso/claudeclaw add-whatsapp --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/sbusso/claudeclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/add-whatsapp .claude/skills/add-whatsapp && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
add-whatsapp
GitHub stars
194
Token cost
~2.9k tokens
SKILL.md length
1,082 words
Files
1
Skills in repo
23
Repo updated
First seen
Licence
MIT

At a glance

Add WhatsApp as a channel. An agent skill from sbusso/claudeclaw.

  • Works in 5 steps: Pre-flight → Apply Code Changes → Authentication → …
  • Tasks that involve Authentication
  • SKILL.md covers Phase 1: Pre-flight, Phase 2: Apply Code Changes, Phase 3: Authentication and Phase 4: Registration, plus 4 more sections
  • Calls npx, npm and git; reaches github.com

What it does

Add Whatsapp is an agent skill from sbusso/claudeclaw. Add WhatsApp as a channel. Can replace other channels entirely or run alongside them. Uses QR code or pairing code for authentication.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Authentication. It works with WhatsApp. The repository describes itself as: Use Claude to orchestrate agents like OpenClaw. The licence is MIT.

When your agent uses it

  • Tasks that involve Authentication

Example prompts

  • “/add-whatsapp”

Requirements

  • Node.js

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Pre-flight
  2. Apply Code Changes
  3. Authentication
  4. Registration
  5. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 1395af4. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx
    • npm
    • git
    • node
    • sqlite3
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Whatsapp loads about 2.9k tokens when it runs. Until then it costs about 37 tokens; SKILL.md has 1,082 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~37
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:176
    mkdir -p data/env && cp .env data/env/env
  • NoteMentions a .env fileSKILL.md:373
    3. Sync env: `mkdir -p data/env && cp .env data/env/env`

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from sbusso/claudeclaw at commit 1395af4, republished under its MIT licence (© sbusso). 1,082 words, ~2,851 tokens.

Download SKILL.mdSave it as .claude/skills/add-whatsapp/SKILL.md (or your agent's skills folder).
name
add-whatsapp
description
Add WhatsApp as a channel. Can replace other channels entirely or run alongside them. Uses QR code or pairing code for authentication.

Add WhatsApp Channel

This skill adds WhatsApp support to ClaudeClaw. It installs the WhatsApp channel code, dependencies, and guides through authentication, registration, and configuration.

Phase 1: Pre-flight

Check current state

Check if WhatsApp is already configured. If store/auth/ exists with credential files, skip to Phase 4 (Registration) or Phase 5 (Verify).

bash
ls store/auth/creds.json 2>/dev/null && echo "WhatsApp auth exists" || echo "No WhatsApp auth"
Detect environment

Check whether the environment is headless (no display server):

bash
[[ -z "$DISPLAY" && -z "$WAYLAND_DISPLAY" && "$OSTYPE" != darwin* ]] && echo "IS_HEADLESS=true" || echo "IS_HEADLESS=false"
Ask the user

Use AskUserQuestion to collect configuration. Adapt auth options based on environment:

If IS_HEADLESS=true AND not WSL → AskUserQuestion: How do you want to authenticate WhatsApp?

  • Pairing code (Recommended) - Enter a numeric code on your phone (no camera needed, requires phone number)
  • QR code in terminal - Displays QR code in the terminal (can be too small on some displays)

Otherwise (macOS, desktop Linux, or WSL) → AskUserQuestion: How do you want to authenticate WhatsApp?

  • QR code in browser (Recommended) - Opens a browser window with a large, scannable QR code
  • Pairing code - Enter a numeric code on your phone (no camera needed, requires phone number)
  • QR code in terminal - Displays QR code in the terminal (can be too small on some displays)

If they chose pairing code:

AskUserQuestion: What is your phone number? (Include country code without +, e.g., 1234567890)

Phase 2: Apply Code Changes

Check if src/channels/whatsapp.ts already exists. If it does, skip to Phase 3 (Authentication).

Ensure channel remote
bash
git remote -v

If whatsapp is missing, add it:

bash
git remote add whatsapp https://github.com/qwibitai/claudeclaw-whatsapp.git
Merge the skill branch
bash
git fetch whatsapp main
git merge whatsapp/main || {
  git checkout --theirs package-lock.json
  git add package-lock.json
  git merge --continue
}

This merges in:

  • src/channels/whatsapp.ts (WhatsAppChannel class with self-registration via registerChannel)
  • src/channels/whatsapp.test.ts (41 unit tests)
  • src/channels/whatsapp-auth.ts (standalone WhatsApp authentication script)
  • setup/whatsapp-auth.ts (WhatsApp auth setup step)
  • import './whatsapp.js' appended to the channel barrel file src/channels/index.ts
  • 'whatsapp-auth' step added to setup/index.ts
  • @whiskeysockets/baileys, qrcode, qrcode-terminal npm dependencies in package.json
  • ASSISTANT_HAS_OWN_NUMBER in .env.example

If the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.

Validate code changes
bash
npm install
npm run build
npx vitest run src/channels/whatsapp.test.ts

All tests must pass and build must be clean before proceeding.

Phase 3: Authentication

Clean previous auth state (if re-authenticating)
bash
rm -rf store/auth/
Run WhatsApp authentication

For QR code in browser (recommended):

bash
npx tsx setup/index.ts --step whatsapp-auth -- --method qr-browser

(Bash timeout: 150000ms)

Tell the user:

A browser window will open with a QR code.

  1. Open WhatsApp > Settings > Linked Devices > Link a Device
  2. Scan the QR code in the browser
  3. The page will show "Authenticated!" when done

For QR code in terminal:

bash
npx tsx setup/index.ts --step whatsapp-auth -- --method qr-terminal

Tell the user to run npm run auth in another terminal, then:

  1. Open WhatsApp > Settings > Linked Devices > Link a Device
  2. Scan the QR code displayed in the terminal

For pairing code:

Tell the user to have WhatsApp open on Settings > Linked Devices > Link a Device, ready to tap "Link with phone number instead" — the code expires in ~60 seconds and must be entered immediately.

Run the auth process in the background and poll store/pairing-code.txt for the code:

bash
rm -f store/pairing-code.txt && npx tsx setup/index.ts --step whatsapp-auth -- --method pairing-code --phone <their-phone-number> > /tmp/wa-auth.log 2>&1 &

Then immediately poll for the code (do NOT wait for the background command to finish):

bash
for i in $(seq 1 20); do [ -f store/pairing-code.txt ] && cat store/pairing-code.txt && break; sleep 1; done

Display the code to the user the moment it appears. Tell them:

Enter this code now — it expires in ~60 seconds.

  1. Open WhatsApp > Settings > Linked Devices > Link a Device
  2. Tap Link with phone number instead
  3. Enter the code immediately

After the user enters the code, poll for authentication to complete:

bash
for i in $(seq 1 60); do grep -q 'AUTH_STATUS: authenticated' /tmp/wa-auth.log 2>/dev/null && echo "authenticated" && break; grep -q 'AUTH_STATUS: failed' /tmp/wa-auth.log 2>/dev/null && echo "failed" && break; sleep 2; done

If failed: qr_timeout → re-run. logged_out → delete store/auth/ and re-run. 515 → re-run. timeout → ask user, offer retry.

Verify authentication succeeded
bash
test -f store/auth/creds.json && echo "Authentication successful" || echo "Authentication failed"
Configure environment

Channels auto-enable when their credentials are present — WhatsApp activates when store/auth/creds.json exists.

Sync to container environment:

bash
mkdir -p data/env && cp .env data/env/env

Phase 4: Registration

Configure trigger and channel type

Get the bot's WhatsApp number: node -e "const c=require('./store/auth/creds.json');console.log(c.me.id.split(':')[0].split('@')[0])"

AskUserQuestion: Is this a shared phone number (personal WhatsApp) or a dedicated number (separate device)?

  • Shared number - Your personal WhatsApp number (recommended: use self-chat or a solo group)
  • Dedicated number - A separate phone/SIM for the assistant

AskUserQuestion: What trigger word should activate the assistant?

  • @Andy - Default trigger
  • @Claw - Short and easy
  • @Claude - Match the AI name

AskUserQuestion: What should the assistant call itself?

  • Andy - Default name
  • Claw - Short and easy
  • Claude - Match the AI name

AskUserQuestion: Where do you want to chat with the assistant?

Shared number options:

  • Self-chat (Recommended) - Chat in your own "Message Yourself" conversation
  • Solo group - A group with just you and the linked device
  • Existing group - An existing WhatsApp group

Dedicated number options:

  • DM with bot (Recommended) - Direct message the bot's number
  • Solo group - A group with just you and the bot
  • Existing group - An existing WhatsApp group
Show full SKILL.md (364 more words)Show less
Get the JID

Self-chat: JID = your phone number with @s.whatsapp.net. Extract from auth credentials:

bash
node -e "const c=JSON.parse(require('fs').readFileSync('store/auth/creds.json','utf-8'));console.log(c.me?.id?.split(':')[0]+'@s.whatsapp.net')"

DM with bot: Ask for the bot's phone number. JID = NUMBER@s.whatsapp.net

Group (solo, existing): Run group sync and list available groups:

bash
npx tsx setup/index.ts --step groups
npx tsx setup/index.ts --step groups --list

The output shows JID|GroupName pairs. Present candidates as AskUserQuestion (names only, not JIDs).

Register the chat
bash
npx tsx setup/index.ts --step register \
  --jid "<jid>" \
  --name "<chat-name>" \
  --trigger "@<trigger>" \
  --folder "whatsapp_main" \
  --channel whatsapp \
  --assistant-name "<name>" \
  --is-main \
  --no-trigger-required  # Only for main/self-chat

For additional groups (trigger-required):

bash
npx tsx setup/index.ts --step register \
  --jid "<group-jid>" \
  --name "<group-name>" \
  --trigger "@<trigger>" \
  --folder "whatsapp_<group-name>" \
  --channel whatsapp

Phase 5: Verify

Build and restart
bash
npm run build

Service name: Derived from the directory name: com.claudeclaw.<dirname> (macOS) / claudeclaw-<dirname> (Linux). For example, if cwd is my-assistant, the service is com.claudeclaw.my-assistant. Determine the correct service name before running service commands below.

Restart the service:

bash
# macOS (launchd)
launchctl kickstart -k gui/$(id -u)/com.claudeclaw

# Linux (systemd)
systemctl --user restart claudeclaw

# Linux (nohup fallback)
bash start-claudeclaw.sh
Test the connection

Tell the user:

Send a message to your registered WhatsApp chat:

  • For self-chat / main: Any message works
  • For groups: Use the trigger word (e.g., "@Andy hello")

The assistant should respond within a few seconds.

Check logs if needed
bash
tail -f logs/claudeclaw.log

Troubleshooting

QR code expired

QR codes expire after ~60 seconds. Re-run the auth command:

bash
rm -rf store/auth/ && npx tsx src/channels/whatsapp-auth.ts
Pairing code not working

Codes expire in ~60 seconds. To retry:

bash
rm -rf store/auth/ && npx tsx src/channels/whatsapp-auth.ts --pairing-code --phone <phone>

Enter the code immediately when it appears. Also ensure:

  1. Phone number includes country code without + (e.g., 1234567890)
  2. Phone has internet access
  3. WhatsApp is updated to the latest version

If pairing code keeps failing, switch to QR-browser auth instead:

bash
rm -rf store/auth/ && npx tsx setup/index.ts --step whatsapp-auth -- --method qr-browser
"conflict" disconnection

This happens when two instances connect with the same credentials. Ensure only one ClaudeClaw process is running:

bash
pkill -f "node dist/service.js"
# Then restart
Bot not responding

Check:

  1. Auth credentials exist: ls store/auth/creds.json
  2. Chat is registered: sqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE '%whatsapp%' OR jid LIKE '%@g.us' OR jid LIKE '%@s.whatsapp.net'"
  3. Service is running: launchctl list | grep claudeclaw (macOS) or systemctl --user status claudeclaw (Linux)
  4. Logs: tail -50 logs/claudeclaw.log
Group names not showing

Run group metadata sync:

bash
npx tsx setup/index.ts --step groups

This fetches all group names from WhatsApp. Runs automatically every 24 hours.

After Setup

If running npm run dev while the service is active:

bash
# macOS:
launchctl unload ~/Library/LaunchAgents/com.claudeclaw.plist
npm run dev
# When done testing:
launchctl load ~/Library/LaunchAgents/com.claudeclaw.plist

# Linux:
# systemctl --user stop claudeclaw
# npm run dev
# systemctl --user start claudeclaw

Removal

To remove WhatsApp integration:

  1. Delete auth credentials: rm -rf store/auth/
  2. Remove WhatsApp registrations: sqlite3 store/messages.db "DELETE FROM registered_groups WHERE jid LIKE '%@g.us' OR jid LIKE '%@s.whatsapp.net'"
  3. Sync env: mkdir -p data/env && cp .env data/env/env
  4. Rebuild and restart: npm run build && launchctl kickstart -k gui/$(id -u)/com.claudeclaw (macOS) or npm run build && systemctl --user restart claudeclaw (Linux)

© sbusso, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/add-whatsapp of sbusso/claudeclaw.

Open the folder on GitHubat commit 1395af4

Compare with similar skills

Add Whatsapp next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Add Whatsapp compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Whatsapp this skillsbusso/claudeclaw194—~2.9kAutomated safety check: NotesMIT
Moltflow AdminLeoYeAI/openclaw-master-skills2.2k—~2.5kAutomated safety check: PassMIT
Fortify Developmentcoollabsio/coolify63k4 repos~1.9kAutomated safety check: PassMIT
Supabase Development and Debuggingsupabase/agent-skills2.7k3 repos~3.6kAutomated safety check: PassMIT
Better Auth Best Practiceslatitude-dev/latitude-llm4.7k7 repos~1.6kAutomated safety check: PassMIT
Gitnexus Exploringaws-samples/sample-kolya-br-proxy10612 repos~749Automated safety check: PassMIT-0

Similar skills

  • Moltflow Admin

    LeoYeAI/openclaw-master-skills

    Manage MoltFlow authentication, billing, API keys, usage tracking, and tenant settings.

    2.2k GitHub stars~2.5k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Fortify Development

    coollabsio/coolify

    ACTIVATE when the user works on authentication in Laravel. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 4 repos~1.9k tokens
    Backend & APIsAuto-check passed
  • Official

    General Supabase skill for database, auth, Edge Functions, Realtime and storage work, plus client libraries, migrations, security audits, debugging and reading logs.

    2.7k GitHub starsUsed in 3 repos~3.6k tokens
    Backend & APIsAuto-check passed
  • Better Auth Best Practices

    latitude-dev/latitude-llm

    Configure Better Auth server and client, set up database adapters, manage sessions, add plugins, and handle environment variables.

    4.7k GitHub starsUsed in 7 repos~1.6k tokens
    Backend & APIsAuto-check passed
  • Gitnexus Exploring

    aws-samples/sample-kolya-br-proxy

    Official

    A skill your agent uses when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of the codebase.

    106 GitHub starsUsed in 12 repos~749 tokens
    Backend & APIsAuto-check passed
  • Supabase

    curvenote/curvenote

    A skill your agent uses when doing ANY task involving Supabase.

    170 GitHub starsUsed in 5 repos~2.2k tokens
    Backend & APIsAuto-check passed

More from sbusso/claudeclaw

All 23 skills in this repo
  • Debug

    sbusso/claudeclaw

    Debug container agent issues. An agent skill from sbusso/claudeclaw.

    194 GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check: notes
  • X Integration

    sbusso/claudeclaw

    X (Twitter) integration for ClaudeClaw. An agent skill from sbusso/claudeclaw.

    194 GitHub stars~3k tokensUpdated 1 mo ago
    Auto-check: notes
  • Add Gmail

    sbusso/claudeclaw

    Add Gmail integration to ClaudeClaw. An agent skill from sbusso/claudeclaw.

    194 GitHub stars~1.9k tokensUpdated 1 mo ago
    Auto-check passed
  • Add Qmd

    sbusso/claudeclaw

    Add QMD (Query Markup Documents) as an advanced memory search backend.

    194 GitHub stars~629 tokensUpdated 1 mo ago
    Auto-check passed
  • Add Telegram

    sbusso/claudeclaw

    Add Telegram as a channel. An agent skill from sbusso/claudeclaw.

    194 GitHub stars~1.7k tokensUpdated 1 mo ago
    Auto-check: notes
  • Add Telegram Swarm

    sbusso/claudeclaw

    Add Agent Swarm (Teams) support to Telegram. An agent skill from sbusso/claudeclaw.

    194 GitHub stars~3.7k tokensUpdated 1 mo ago
    Auto-check: notes

Works with

Categories

Questions about Add Whatsapp

What does Add Whatsapp do?

Add WhatsApp as a channel. An agent skill from sbusso/claudeclaw. Add Whatsapp is an agent skill from sbusso/claudeclaw. Add WhatsApp as a channel.

When should I use Add Whatsapp?

Add Whatsapp fits situations like: tasks that involve Authentication.

How do I install Add Whatsapp in Claude Code?

Run `npx skills add sbusso/claudeclaw --skill add-whatsapp -a claude-code`. Or copy the skill folder (skills/add-whatsapp in sbusso/claudeclaw) into .claude/skills/add-whatsapp in your project. Claude Code loads it when a task matches its description.

How do I install Add Whatsapp in Codex?

Run `npx skills add sbusso/claudeclaw --skill add-whatsapp -a codex`. Or copy the skill folder (skills/add-whatsapp in sbusso/claudeclaw) into .agents/skills/add-whatsapp in your project. Codex loads it when a task matches its description.

Can I use Add Whatsapp in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sbusso/claudeclaw --skill add-whatsapp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-whatsapp, .gemini/skills/add-whatsapp, .github/skills/add-whatsapp and .opencode/skills/add-whatsapp in your project.

What does Add Whatsapp need to run?

Going by SKILL.md and its folder, Add Whatsapp needs the command-line tools its instructions call (npx, npm, git, node, sqlite3 and bash). Our summary lists: Node.js.

Does Add Whatsapp access the network?

SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Add Whatsapp safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Add Whatsapp use?

Add Whatsapp is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Whatsapp use?

About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Whatsapp?

Skills that share tags, products or a category with Add Whatsapp: Moltflow Admin (LeoYeAI/openclaw-master-skills, 2.2k stars), Fortify Development (coollabsio/coolify, 63k stars), Supabase Development and Debugging (supabase/agent-skills, 2.7k stars) and Better Auth Best Practices (latitude-dev/latitude-llm, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Whatsapp?

sbusso (a GitHub user) maintains it in sbusso/claudeclaw, which has 194 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on August 12, 2026.

Source: sbusso/claudeclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.