Claudeclaw add-reactions

Add WhatsApp emoji reaction support — receive, send, store, and search reactions.

install
source · Clone the upstream repo
git clone https://github.com/sbusso/claudeclaw
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sbusso/claudeclaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/add-reactions" ~/.claude/skills/sbusso-claudeclaw-add-reactions && rm -rf "$T"
manifest: skills/add-reactions/SKILL.md
source content

Add Reactions

This skill adds emoji reaction support to ClaudeClaw's WhatsApp channel: receive and store reactions, send reactions from the container agent via MCP tool, and query reaction history from SQLite.

Phase 1: Pre-flight

Check if already applied

Check if

src/status-tracker.ts
exists:

test -f src/status-tracker.ts && echo "Already applied" || echo "Not applied"

If already applied, skip to Phase 3 (Verify).

Phase 2: Apply Code Changes

Ensure WhatsApp fork remote

git remote -v

If

whatsapp
is missing, add it:

git remote add whatsapp https://github.com/qwibitai/claudeclaw-whatsapp.git

Merge the skill branch

git fetch whatsapp skill/reactions
git merge whatsapp/skill/reactions || {
  git checkout --theirs package-lock.json
  git add package-lock.json
  git merge --continue
}

This adds:

  • scripts/migrate-reactions.ts
    (database migration for
    reactions
    table with composite PK and indexes)
  • src/status-tracker.ts
    (forward-only emoji state machine for message lifecycle signaling, with persistence and retry)
  • src/status-tracker.test.ts
    (unit tests for StatusTracker)
  • agent/skills/reactions/SKILL.md
    (agent-facing documentation for the
    react_to_message
    MCP tool)
  • Reaction support in
    src/orchestrator/db.ts
    ,
    src/channels/whatsapp.ts
    ,
    src/orchestrator/types.ts
    ,
    src/orchestrator/ipc.ts
    ,
    src/index.ts
    ,
    src/group-queue.ts
    , and
    agent/runner/src/ipc-mcp-stdio.ts

Run database migration

npx tsx scripts/migrate-reactions.ts

Validate code changes

npm test
npm run build

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

Phase 3: Verify

Build and restart

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.

Linux:

systemctl --user restart claudeclaw

macOS:

launchctl kickstart -k gui/$(id -u)/com.claudeclaw

Test receiving reactions

  1. Send a message from your phone
  2. React to it with an emoji on WhatsApp
  3. Check the database:
sqlite3 store/messages.db "SELECT * FROM reactions ORDER BY timestamp DESC LIMIT 5;"

Test sending reactions

Ask the agent to react to a message via the

react_to_message
MCP tool. Check your phone — the reaction should appear on the message.

Troubleshooting

Reactions not appearing in database

  • Check ClaudeClaw logs for
    Failed to process reaction
    errors
  • Verify the chat is registered
  • Confirm the service is running

Migration fails

  • Ensure
    store/messages.db
    exists and is accessible
  • If "table reactions already exists", the migration already ran — skip it

Agent can't send reactions

  • Check IPC logs for
    Unauthorized IPC reaction attempt blocked
    — the agent can only react in its own group's chat
  • Verify WhatsApp is connected: check logs for connection status