OpenClaw BlueBubbles Channel
Connect OpenClaw to iMessage through the BlueBubbles REST API. This integration turns your Mac into an iMessage gateway — install the BlueBubbles server app, enable the web API, and your AI assistant can send and receive iMessages, tapback reactions, and media attachments. BlueBubbles is the recommended iMessage channel, replacing the legacy imsg CLI approach.
BlueBubbles Supported Features
Text Messages
Supported
Media & Files
Supported
Reactions
Supported
Threads
Not Supported
Voice Messages
Not Supported
Group Chat
Supported
BlueBubbles Prerequisites
- A Mac running macOS High Sierra (10.13) or later (Ventura 13+ recommended for full feature set; Tahoe 26 supported with limitations)
- BlueBubbles server app installed from bluebubbles.app
- Web API enabled with a password set in BlueBubbles configuration
- OpenClaw Gateway running and configured
BlueBubbles Quick Setup
Install BlueBubbles server on your Mac
Download and install the BlueBubbles server application from bluebubbles.app/install. Launch the app, sign in with your Apple ID, and complete the initial setup. Make sure iMessage is active and working on the Mac.
Enable the Web API
In BlueBubbles server settings, enable the Web/REST API and set a strong password. Note the server URL (e.g., http://localhost:1234) — you'll need this for the OpenClaw config.
Add BlueBubbles channel config
Run 'openclaw onboard' and select BlueBubbles, or manually add the channel configuration to ~/.openclaw/openclaw.json with your serverUrl and password. Configure the webhookPath if needed.
Configure webhook and test
Point BlueBubbles webhooks to your Gateway: https://your-gateway-host:3000/bluebubbles-webhook?password=<password>. Start the Gateway and send a test iMessage to verify the connection. If using pairing policy, approve the sender via 'openclaw pairing approve bluebubbles <code>'.
BlueBubbles Configuration Example
{
"channels": {
"bluebubbles": {
"enabled": true,
"serverUrl": "http://localhost:1234",
"password": "YOUR_BLUEBUBBLES_PASSWORD",
"webhookPath": "/bluebubbles-webhook",
"dmPolicy": "pairing"
}
}
}BlueBubbles Deep Dive
Architecture Overview
BlueBubbles Server Setup
# Webhook URL format for your Gateway
https://your-gateway-host:3000/bluebubbles-webhook?password=YOUR_PASSWORDDM Policies
{
"channels": {
"bluebubbles": {
"dmPolicy": "allowlist",
"allowFrom": ["+15551234567", "user@example.com"]
}
}
}Group Chat Management
{
"channels": {
"bluebubbles": {
"groupPolicy": "allowlist",
"groupAllowFrom": ["+15551234567"],
"groups": {
"iMessage;+;chat123456": {
"requireMention": false
}
}
}
}
}iMessage Actions & Effects
{
"channels": {
"bluebubbles": {
"actions": {
"reactions": true,
"edit": true,
"unsend": true,
"reply": true,
"sendWithEffect": true,
"sendAttachment": true
}
}
}
}Message Delivery & Chunking
{
"channels": {
"bluebubbles": {
"textChunkLimit": 4000,
"chunkMode": "newline",
"blockStreaming": false,
"sendReadReceipts": true
}
}
}Media & Attachments
Message ID Handling
Addressing & Routing
Security & Webhook Authentication
Messages.app Keepalive (Headless/VM)
BlueBubbles Configuration Reference
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | false | Enable or disable the BlueBubbles channel |
| serverUrl | string | "" | BlueBubbles REST API base URL (e.g., http://localhost:1234) |
| password | string | "" | BlueBubbles API password for authentication |
| webhookPath | string | "/bluebubbles-webhook" | Webhook endpoint path for receiving incoming messages |
| dmPolicy | string | "pairing" | Controls who can DM the bot. Options: pairing, allowlist, open, disabled |
| allowFrom | string[] | [] | Phone numbers and emails allowed to message the bot (E.164 format for phones) |
| groupPolicy | string | "allowlist" | Group chat policy. Options: open, allowlist, disabled |
| groupAllowFrom | string[] | [] | Authorized sender addresses for triggering the bot in group chats |
| sendReadReceipts | boolean | true | Send read receipt confirmation when processing messages |
| blockStreaming | boolean | false | Enable block-based response streaming instead of waiting for complete response |
| textChunkLimit | number | 4000 | Maximum characters per outbound text message chunk |
| chunkMode | string | "length" | Text splitting mode. Options: length (size-based), newline (paragraph-based) |
| mediaMaxMb | number | 8 | Maximum inbound attachment file size in megabytes |
| historyLimit | number | - | Maximum group messages included as AI context (0 disables) |
| dmHistoryLimit | number | - | DM conversation history limit for AI context |
| actions.reactions | boolean | true | Enable tapback reactions (requires Private API) |
| actions.edit | boolean | true | Enable message editing (requires macOS 13+; broken on Tahoe) |
| actions.unsend | boolean | true | Enable message unsending (requires macOS 13+) |
| actions.reply | boolean | true | Enable message threading by GUID |
| actions.sendWithEffect | boolean | true | Enable iMessage bubble effects (slam, loud, gentle, etc.) |
| actions.sendAttachment | boolean | true | Enable media and voice memo delivery |
Enable or disable the BlueBubbles channel
BlueBubbles REST API base URL (e.g., http://localhost:1234)
BlueBubbles API password for authentication
Webhook endpoint path for receiving incoming messages
Controls who can DM the bot. Options: pairing, allowlist, open, disabled
Phone numbers and emails allowed to message the bot (E.164 format for phones)
Group chat policy. Options: open, allowlist, disabled
Authorized sender addresses for triggering the bot in group chats
Send read receipt confirmation when processing messages
Enable block-based response streaming instead of waiting for complete response
Maximum characters per outbound text message chunk
Text splitting mode. Options: length (size-based), newline (paragraph-based)
Maximum inbound attachment file size in megabytes
Maximum group messages included as AI context (0 disables)
DM conversation history limit for AI context
Enable tapback reactions (requires Private API)
Enable message editing (requires macOS 13+; broken on Tahoe)
Enable message unsending (requires macOS 13+)
Enable message threading by GUID
Enable iMessage bubble effects (slam, loud, gentle, etc.)
Enable media and voice memo delivery
BlueBubbles Frequently Asked Questions
BlueBubbles Troubleshooting
The webhook URL in BlueBubbles doesn't match the Gateway endpoint, or the password parameter is incorrect.
The BlueBubbles Private API is not enabled, or the server version doesn't support the required API endpoints.
Messages.app goes idle on headless/VM setups and stops processing the scripting interface.
The recipient's phone number or email is not registered with iMessage, or the Apple ID on the Mac has iMessage disabled.
Known issue — macOS Tahoe (26) broke the Private API endpoint for message editing.