docs/usage/channels/imessage.mdx
LobeHub connects to iMessage through BlueBubbles running on a Mac signed into Messages. The LobeHub Desktop app runs a local bridge on that same Mac: it receives BlueBubbles webhooks on 127.0.0.1, forwards them to LobeHub Cloud, and relays the agent's replies back to the local BlueBubbles REST API. BlueBubbles never needs to be exposed to the public internet.
iMessage user -> macOS Messages -> BlueBubbles -> LobeHub Desktop bridge -> LobeHub Cloud
LobeHub agent -> Device Gateway -> LobeHub Desktop bridge -> BlueBubbles -> iMessage user
Labs feature: iMessage is gated behind a Labs toggle. The channel stays a "Coming Soon" placeholder until you enable it in Settings → Advanced → Labs.
Private API note: BlueBubbles sends basic text and attachments through AppleScript out of the box. Advanced features such as typing indicators require the BlueBubbles Private API, which needs SIP disabled / a jailbroken Mac. LobeHub only depends on basic text and attachment send/receive — typing-indicator failures are logged and ignored.
Install BlueBubbles Server on the Mac that hosts the iMessage account. Keep the Mac awake and on the network.
In BlueBubbles Server, set a strong password. The LobeHub Desktop bridge uses it locally to call the BlueBubbles REST API.
A local address such as http://127.0.0.1:1234 (or a private LAN address) is all you need — no public HTTPS URL required.
</Steps>
In LobeHub, go to Settings → Advanced and find the Labs section.
Toggle it on. The iMessage entry in your agent's channel list switches from a "Coming Soon" placeholder to a configurable channel. </Steps>
Go to your agent's settings → Channels → iMessage.
home-mac-mini.http://127.0.0.1:1234.The Desktop Device ID and webhook secret are filled in and generated automatically — you don't need to manage them.
Click Test BlueBubbles to verify the URL and password reach your local BlueBubbles server.
Click Save Configuration. A single save persists the cloud channel and the local Desktop bridge: it starts the loopback listener, registers the BlueBubbles new-message webhook, and connects the bot.
</Steps>
Have another person or a second Apple ID send an iMessage to the Apple ID / phone number signed into the BlueBubbles Mac. BlueBubbles fires a local new-message webhook, the Desktop bridge forwards it to LobeHub, and the agent replies in the same conversation.
Why a different sender? Messages the hosted account sends itself are ignored by the
isFromMeloop guard (so the bot never replies to its own messages). Testing from your own number won't trigger a reply — use a different sender.
chatGuid in events; use the chatGuid as the allowed-channel ID when scoping group access.DEVICE_NOT_FOUND. LobeHub Desktop isn't reachable through the Device Gateway. Make sure Desktop is open, signed in, and the gateway shows as connected, then save again.new-message webhook points at 127.0.0.1 and that the sender is not the hosted account itself.