---
name: Add Reactions
slug: add-reactions
category: Automation
description: "Add Reactions adds emoji reaction support to ClaudeClaw's WhatsApp channel. Use it to receive, send, store, and query reaction history from SQLite."
github: "https://github.com/sbusso/claudeclaw/tree/main/skills/add-reactions"
language: TypeScript
stars: 193
forks: 60
install: "npx degit https://github.com/sbusso/claudeclaw/tree/main/skills/add-reactions ~/.claude/skills/add-reactions"
installs_to: ~/.claude/skills/add-reactions
source_path: skills/add-reactions/SKILL.md
collection_size: 25
category_size: 2032
collection_url: "https://dirskills.com/collections/sbusso/claudeclaw"
added: 2026-09-06T05:19:00.998Z
last_synced: 2026-09-06T05:19:00.998Z
canonical_url: "https://dirskills.com/skills/add-reactions"
---

# Add Reactions

Add Reactions adds emoji reaction support to ClaudeClaw's WhatsApp channel. Use it to receive, send, store, and query reaction history from SQLite.

**Install:**

```bash
npx degit https://github.com/sbusso/claudeclaw/tree/main/skills/add-reactions ~/.claude/skills/add-reactions
```

## README

# 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:

```bash
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

```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 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

```bash
npx tsx scripts/migrate-reactions.ts
```

### Validate code changes

```bash
npm test
npm run build
```

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

## Phase 3: 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.

Linux:
```bash
systemctl --user restart claudeclaw
```

macOS:
```bash
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:

```bash
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
