Skip to main content

BlueBubbles (iMessage)

Connect VibeOS to Apple iMessage via BlueBubbles — a free, open-source macOS server that bridges iMessage to any device.

Prerequisites​

  • A Mac (always on) running BlueBubbles Server
  • Apple ID signed into Messages.app on that Mac
  • BlueBubbles Server v1.0.0+ (webhooks require this version)
  • Network connectivity between VibeOS and the BlueBubbles server

Setup​

1. Install BlueBubbles Server​

Download and install from bluebubbles.app. Complete the setup wizard — sign in with your Apple ID and configure a connection method (local network, Ngrok, Cloudflare, or Dynamic DNS).

2. Get your Server URL and Password​

In BlueBubbles Server → Settings → API, note:

  • Server URL (e.g., http://192.168.1.10:1234)
  • Server Password

3. Configure VibeOS​

Run the setup wizard:

vibeos gateway setup

Select BlueBubbles (iMessage) and enter your server URL and password.

Or set environment variables directly in ~/.vibeos/.env:

BLUEBUBBLES_SERVER_URL=http://192.168.1.10:1234
BLUEBUBBLES_PASSWORD=your-server-password

Optional: Require mentions in group chats​

By default, VibeOS responds to every authorized BlueBubbles/iMessage DM or group message. To make group chats opt-in, enable mention gating:

platforms:
bluebubbles:
enabled: true
extra:
require_mention: true

With require_mention: true, DMs still work normally, but group-chat messages are ignored unless they match a mention pattern. If you do not configure custom patterns, VibeOS uses conservative defaults for VibeOS and @VibeOS agent variants.

For a custom agent name, set regex patterns:

platforms:
bluebubbles:
extra:
require_mention: true
mention_patterns:
- '(?<![\w@])@?amos\b[,:\-]?'

4. Authorize Users​

Choose one approach:

DM Pairing (recommended): When someone messages your iMessage, VibeOS automatically sends them a pairing code. Approve it with:

vibeos pairing approve bluebubbles <CODE>

Use vibeos pairing list to see pending codes and approved users.

Pre-authorize specific users (in ~/.vibeos/.env):

BLUEBUBBLES_ALLOWED_USERS=user@icloud.com,+15551234567

Open access (in ~/.vibeos/.env):

BLUEBUBBLES_ALLOW_ALL_USERS=true

5. Start the Gateway​

vibeos gateway run

VibeOS will connect to your BlueBubbles server, register a webhook, and start listening for iMessage messages.

How It Works​

iMessage → Messages.app → BlueBubbles Server → Webhook → VibeOS
VibeOS → BlueBubbles REST API → Messages.app → iMessage
  • Inbound: BlueBubbles sends webhook events to a local listener when new messages arrive. No polling — instant delivery.
  • Outbound: VibeOS sends messages via the BlueBubbles REST API.
  • Media: Images, voice messages, videos, and documents are supported in both directions. Inbound attachments are downloaded and cached locally for the agent to process.

Environment Variables​

VariableRequiredDefaultDescription
BLUEBUBBLES_SERVER_URLYes—BlueBubbles server URL
BLUEBUBBLES_PASSWORDYes—Server password
BLUEBUBBLES_WEBHOOK_HOSTNo127.0.0.1Webhook listener bind address
BLUEBUBBLES_WEBHOOK_PORTNo8645Webhook listener port
BLUEBUBBLES_WEBHOOK_PATHNo/bluebubbles-webhookWebhook URL path
BLUEBUBBLES_HOME_CHANNELNo—Phone/email for cron delivery
BLUEBUBBLES_ALLOWED_USERSNo—Comma-separated authorized users
BLUEBUBBLES_ALLOW_ALL_USERSNofalseAllow all users
BLUEBUBBLES_REQUIRE_MENTIONNofalseRequire a mention pattern before responding in group chats
BLUEBUBBLES_MENTION_PATTERNSNoVibeOS wake wordsJSON array, newline-separated, or comma-separated regex patterns for group mention matching

Auto-marking messages as read is controlled by the send_read_receipts key under platforms.bluebubbles.extra in ~/.vibeos/config.yaml (default: true). There is no corresponding environment variable.

Features​

Text Messaging​

Send and receive iMessages. Markdown is automatically stripped for clean plain-text delivery.

Rich Media​

  • Images: Photos appear natively in the iMessage conversation
  • Voice messages: Audio files sent as iMessage voice messages
  • Videos: Video attachments
  • Documents: Files sent as iMessage attachments

Tapback Reactions​

Love, like, dislike, laugh, emphasize, and question reactions. Requires the BlueBubbles Private API helper.

Typing Indicators​

Shows "typing..." in the iMessage conversation while the agent is processing. Requires Private API.

Read Receipts​

Automatically marks messages as read after processing. Requires Private API.

Chat Addressing​

You can address chats by email or phone number — VibeOS resolves them to BlueBubbles chat GUIDs automatically. No need to use raw GUID format.

Private API​

Some features require the BlueBubbles Private API helper:

  • Tapback reactions
  • Typing indicators
  • Read receipts
  • Creating new chats by address

Without the Private API, basic text messaging and media still work.

Troubleshooting​

"Cannot reach server"​

  • Verify the server URL is correct and the Mac is on
  • Check that BlueBubbles Server is running
  • Ensure network connectivity (firewall, port forwarding)

Messages not arriving​

  • Check that the webhook is registered in BlueBubbles Server → Settings → API → Webhooks
  • Verify the webhook URL is reachable from the Mac
  • Check vibeos logs gateway for webhook errors (or vibeos logs -f to follow in real-time)

"Private API helper not connected"​

  • Install the Private API helper: docs.bluebubbles.app
  • Basic messaging works without it — only reactions, typing, and read receipts require it