iMessage
WednesdayAI connects to iMessage on macOS in two ways. BlueBubbles is the recommended path for new setups — it has a richer REST API and easier setup. The legacyimsg CLI integration still works but may be removed in a future release.
BlueBubbles (recommended)
macOS REST server with reactions, edits, effects, and group management.
imsg (legacy)
JSON-RPC over stdio against the local Messages database.
BlueBubbles (recommended)
BlueBubbles is a bundled plugin that talks to the BlueBubbles macOS server over HTTP. Incoming messages arrive via webhooks; replies, typing indicators, read receipts, and tapbacks are REST calls.Tested on macOS Sequoia (15). macOS Tahoe (26) works, but message edit is currently broken and group-icon updates may report success without syncing.
Setup
Install and configure the BlueBubbles server
Install the server on your Mac from bluebubbles.app/install. In its settings, enable the web API and set a password.
Configure WednesdayAI
Run Or via CLI:
openclaw onboard and select BlueBubbles, or configure manually:openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --password <password>Point BlueBubbles webhooks at the gateway
Set the webhook target to your gateway, e.g.
https://your-gateway-host:3000/bluebubbles-webhook?password=<password>.Access control
chat_id:*, chat_guid:*). Mention gating uses agents.list[].groupChat.mentionPatterns (or messages.groupChat.mentionPatterns); authorised senders bypass it for control commands.
Advanced actions
BlueBubbles supports tapback reactions, edit, unsend, reply threading, message effects, and group management — each toggled underchannels.bluebubbles.actions:
asVoice: true with MP3 or CAF audio (BlueBubbles converts MP3 to CAF).
Media and delivery
- Inbound attachments are downloaded into the media cache; cap with
channels.bluebubbles.mediaMaxMb(default 8 MB). - Outbound text chunks at
channels.bluebubbles.textChunkLimit(default 4000 chars). - Outbound local file sends are denied unless you allowlist directories in
channels.bluebubbles.mediaLocalRoots. - Prefer
chat_guid:iMessage;-;+15555550123for stable routing. Direct handles also work; sending to a handle with no existing DM creates one (requires the BlueBubbles Private API). - Streaming replies require
channels.bluebubbles.blockStreaming: true(off by default).
Keeping Messages.app alive on headless Macs
On always-on VMs, Messages.app can go idle and stop delivering events. A LaunchAgent that runs an AppleScript every 5 minutes to touch the scripting interface keeps it responsive. The first run triggers macOS Automation prompts — approve them in the same user session that runs the LaunchAgent.Legacy: imsg CLI
The gateway spawnsimsg rpc and talks to it over JSON-RPC on stdio — no separate daemon or port.
imsg: Full Disk Access (Messages DB) and Automation (to send). For headless setups, run an interactive command once in the same context to trigger the prompts:
Remote Mac over SSH
imsg only needs a stdio-compatible cliPath, so point it at a wrapper that SSHes to a remote Mac:
remoteHost must be host or user@host (no spaces or SSH options). SCP uses strict host-key checking, so populate ~/.ssh/known_hosts on the gateway host first. Attachment paths are validated against attachmentRoots / remoteAttachmentRoots (default /Users/*/Library/Messages/Attachments).
iMessage has no native mention metadata, so group mention gating relies entirely on mentionPatterns; with none configured, mention gating cannot be enforced.
Troubleshooting
DMs are ignored
DMs are ignored
Check
dmPolicy, allowFrom, and pending pairings (openclaw pairing list <bluebubbles|imessage>).Group messages are ignored
Group messages are ignored
Check
groupPolicy, groupAllowFrom, the groups allowlist, and mention pattern configuration.BlueBubbles: typing/read events stopped
BlueBubbles: typing/read events stopped
Verify the webhook path matches
channels.bluebubbles.webhookPath and check the BlueBubbles webhook logs.imsg not found or RPC unsupported
imsg not found or RPC unsupported
Run
imsg rpc --help and openclaw channels status --probe. If probe reports RPC unsupported, update imsg.Remote attachments fail
Remote attachments fail
Check
remoteHost, remoteAttachmentRoots, SSH/SCP key auth from the gateway host, and that the relay host key is in ~/.ssh/known_hosts.