Latest release: v2026.5.7Download zip
Compatibility
Security Scan
OpenClaw
Benign
high confidencePurpose & Capability
The package purpose, manifest, README, and code align around a BlueBubbles channel plugin. It can send, edit, unsend, react, attach media, and manage group chats, which is high-impact but expected for an iMessage bridge.
Instruction Scope
Capabilities are visible in the schema and runtime code, including webhooks, catchup replay, sender policies, local media roots, and optional Contacts enrichment. The top-level README is brief, so users should review configuration defaults.
Install Mechanism
The npm package contains bundled plugin files and no install-time lifecycle scripts or hidden installer behavior.
Credentials
The plugin requires a BlueBubbles server URL and password and may contact private-network hosts when configured. This is proportionate for a local BlueBubbles integration and is guarded by explicit configuration.
Persistence & Privilege
It registers authenticated webhook routes and writes bounded dedupe/catchup cursor state under the OpenClaw state directory. This persistence supports message delivery and replay rather than unrelated background behavior.
Scan Findings in Context
[suspicious.dangerous_exec] expected: The cited scanner evidence was a regex .exec call, not shell execution. The artifact does import execFile, but it is used to call sqlite3 with fixed arguments for optional macOS Contacts name enrichment, which is purpose-aligned and not arbitrary command execution.
[suspicious.exposed_secret_literal] expected: The cited password occurrences are schema and runtime handling for the configured BlueBubbles password; no hardcoded secret or credential leak was found.
Assessment
Install this only if you want OpenClaw to access and act through your BlueBubbles/iMessage account. Store the BlueBubbles password as a secret, restrict allowed senders and group policies, disable message or group actions you do not need, and review catchup, private-network, local media, and Contacts enrichment settings before enabling it.Verification
Tags
BlueBubbles extension (developer reference)
This package contains the BlueBubbles external channel plugin for OpenClaw.
If you’re looking for how to use BlueBubbles as an agent/tool user, see:
skills/bluebubbles/SKILL.md
Layout
- Package entry:
index.ts. - Channel implementation:
src/channel.ts. - Webhook handling:
src/monitor.ts(register per-account route viaregisterPluginHttpRoute). - REST helpers:
src/send.ts+src/probe.ts. - Runtime bridge:
src/runtime.ts(set viaapi.runtime). - Catalog entry for setup selection:
src/channels/plugins/catalog.ts.
Internal helpers (use these, not raw API calls)
probeBlueBubblesinsrc/probe.tsfor health checks.sendMessageBlueBubblesinsrc/send.tsfor text delivery.resolveChatGuidForTargetinsrc/send.tsfor chat lookup.sendBlueBubblesReactioninsrc/reactions.tsfor tapbacks.sendBlueBubblesTyping+markBlueBubblesChatReadinsrc/chat.ts.downloadBlueBubblesAttachmentinsrc/attachments.tsfor inbound media.buildBlueBubblesApiUrl+blueBubblesFetchWithTimeoutinsrc/types.tsfor shared REST plumbing.
Webhooks
- BlueBubbles posts JSON to the gateway HTTP server.
- Normalize sender/chat IDs defensively (payloads vary by version).
- Skip messages marked as from self.
- Route into core reply pipeline via the plugin runtime (
api.runtime) andopenclaw/plugin-sdkhelpers. - For attachments/stickers, use
<media:...>placeholders when text is empty and attach media paths viaMediaUrl(s)in the inbound context.
Config (core)
channels.bluebubbles.serverUrl(base URL),channels.bluebubbles.password,channels.bluebubbles.webhookPath.- Action gating:
channels.bluebubbles.actions.reactions(default true).
Message tool notes
- Reactions: the
reactaction requires atarget(phone number or chat identifier) in addition tomessageId. Example:action=react target=+15551234567 messageId=ABC123 emoji=❤️
