Claude-skill-registry bluebubbles-setup
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/bluebubbles-setup" ~/.claude/skills/majiayu000-claude-skill-registry-bluebubbles-setup && rm -rf "$T"
skills/data/bluebubbles-setup/SKILL.mdBlueBubbles Setup
Configure BlueBubbles for iMessage integration with OpenClaw on macOS.
Prerequisites
| Requirement | Details |
|---|---|
| macOS | 15+ (Sequoia) recommended |
| BlueBubbles Server | Download from bluebubbles.app/downloads/server |
| OpenClaw | Running with gateway enabled |
| Full Disk Access | Required for BlueBubbles to read Messages database |
Step 1: Install BlueBubbles Server
- Download from bluebubbles.app/downloads/server
- Move to Applications folder
- Right-click and select "Open" to bypass Gatekeeper
- Grant Full Disk Access when prompted
Granting Full Disk Access
If BlueBubbles shuts down requesting Full Disk Access:
- Open System Settings
- Go to Privacy & Security
- Click Full Disk Access
- Click the + button
- Add BlueBubbles from Applications
- Toggle it ON
- Reopen BlueBubbles
Step 2: Configure BlueBubbles Server
Required Settings
| Setting | Value |
|---|---|
| Auto Start Method | Launch Agent |
| Prevent Sleep | ON |
| Auto Check Updates | ON |
Server Settings
In BlueBubbles Settings, find:
| Setting | Location |
|---|---|
| Server URL | Connection Settings (Cloudflare recommended) |
| Server Password | Connection Settings |
| Local Port | Usually 1234 |
Note the Server URL and Password. You need these for OpenClaw.
Step 3: Configure OpenClaw
Add BlueBubbles channel to OpenClaw config:
{ "channels": { "bluebubbles": { "enabled": true, "serverUrl": "https://your-cloudflare-url.trycloudflare.com", "password": "your-server-password", "webhookPath": "/bluebubbles-webhook", "dmPolicy": "allowlist", "allowFrom": ["+15551234567"], "groupPolicy": "disabled", "sendReadReceipts": true } } }
Policy Options
| Policy | Value | Requires |
|---|---|---|
| dmPolicy: "allowlist" | Only respond to listed contacts | array |
| dmPolicy: "pairing" | Require pairing code | Nothing extra |
| dmPolicy: "open" | Respond to everyone | |
| groupPolicy: "disabled" | Ignore group messages | Nothing extra |
| groupPolicy: "open" | Respond in groups | |
Critical Config Rule
Open policies require wildcards:
requiresdmPolicy: "open"allowFrom: ["*"]
requiresgroupPolicy: "open"groupAllowFrom: ["*"]
Forgetting the wildcard crashes the gateway.
Fix with:
openclaw doctor --fix
Step 4: Set Up Webhook
In BlueBubbles API & Webhooks section:
- Click to add a new webhook
- Set URL to:
http://localhost:18789/bluebubbles-webhook?password=YOUR_PASSWORD - Enable All Events
- Save the webhook
The webhook connects BlueBubbles to OpenClaw.
Step 5: Verify Connection
openclaw status --deep
Should show:
Channels ┌─────────────┬─────────┬────────┬─────────────┐ │ Channel │ Enabled │ State │ Detail │ ├─────────────┼─────────┼────────┼─────────────┤ │ BlueBubbles │ ON │ OK │ configured │ └─────────────┴─────────┴────────┴─────────────┘
Troubleshooting
Gateway Crashes on Startup
Symptom: Gateway exits immediately after config change.
Cause: Open policy without wildcard.
Fix:
openclaw doctor --fix openclaw gateway restart
Messages Not Received
Symptom: Send a message but OpenClaw does not respond.
Check:
- Is the sender in
?allowFrom - Is the webhook URL correct?
- Is BlueBubbles webhook showing in the list?
Debug:
tail -f /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log | grep -i bubble
Private API Not Enabled
Symptom: Error about "Private API not enabled."
Impact: Read receipts and typing indicators will not work.
Resolution: This is optional. Messaging still works without it.
Pairing Codes
When using
dmPolicy: "pairing":
- New contacts receive a pairing code
- Approve with:
openclaw pairing approve bluebubbles CODE - List pending:
openclaw pairing list bluebubbles
Security Notes
- Keep the server password secret
- Use allowlists in production
- Avoid
unless neededdmPolicy: "open" - Consider
to prevent unintended group responsesgroupPolicy: "disabled"
Skill Chaining
| Chain To | When |
|---|---|
| imessage-tone | After setup, for message formatting |
| doc-maintenance | After completing setup |
| Chains From | Condition |
|---|---|
| project-init | When iMessage integration requested |