BlueBubbles Actions

SkillCommunication

This skill lets an AI agent send and manage iMessages through a BlueBubbles server. Calls go through the generic message tool with channel="bluebubbles", so the agent can send texts and attachments, react with tapbacks, edit or unsend messages, reply in threads, and manage group participants, names, and icons. It requires gateway configuration for the bluebubbles channel, and some actions such as editing depend on the macOS version.

Then ask your AI: use the BlueBubbles Actions skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Have a running BlueBubbles server that the agent can reach.

What your AI can do with it

  • Send iMessage texts to a phone number, email, or chat guid
  • Send local file attachments by path or base64 buffer with filename
  • React to a message with a tapback and remove that reaction
  • Edit or unsend a previously sent message by message id
  • Reply to a specific message in a thread
  • Send a message with an iMessage effect such as balloons

Getting started

  1. Have a running BlueBubbles server that the agent can reach.
  2. Add the bluebubbles channel to the gateway configuration with serverUrl, password, and webhookPath.
  3. Collect the target as a chat_guid when possible, or a phone number in E.164 format or an email address.
  4. Call the message tool with channel set to bluebubbles and the action you want, such as send, react, edit, unsend, or reply.
  5. For reactions, edits, unsends, and replies, include the messageId of the message you are acting on.

What this skill tells your AI

The instructions your AI receives, as published by spinabot/brigade in skills/bluebubbles/SKILL.md and read by Ahel’s review.

Overview

BlueBubbles is Brigade’s recommended iMessage integration. Use the message tool with channel: "bluebubbles" to send messages and manage iMessage conversations: send texts and attachments, react (tapbacks), edit/unsend, reply in threads, and manage group participants/names/icons.

Inputs to collect

  • target (prefer chat_guid:...; also +15551234567 in E.164 or user@example.com)
  • message text for send/edit/reply
  • messageId for react/edit/unsend/reply
  • Attachment path for local files, or buffer + filename for base64

If the user is vague ("text my mom"), ask for the recipient handle or chat guid and the exact message content.

Actions

Send a message

{
  "action": "send",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "message": "hello from Brigade"
}

React (tapback)

{
  "action": "react",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "messageId": "<message-guid>",
  "emoji": "❤️"
}

Remove a reaction

{
  "action": "react",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "messageId": "<message-guid>",
  "emoji": "❤️",
  "remove": true
}

Edit a previously sent message

{
  "action": "edit",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "messageId": "<message-guid>",
  "message": "updated text"
}

Unsend a message

{
  "action": "unsend",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "messageId": "<message-guid>"
}

Reply to a specific message

{
  "action": "reply",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "replyTo": "<message-guid>",
  "message": "replying to that"
}

Send an attachment

{
  "action": "send",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "path": "/tmp/photo.jpg",
  "message": "here you go"
}

Use message for the user-facing text. Do not rely on caption as a distinct BlueBubbles/iMessage feature.

Send with an iMessage effect

{
  "action": "sendWithEffect",
  "channel": "bluebubbles",
  "target": "+15551234567",
  "message": "big news",
  "effect": "balloons"
}

Notes

  • Requires gateway config channels.bluebubbles (serverUrl/password/webhookPath).
  • Prefer chat_guid targets when you have them (especially for group chats).
  • For media + text, treat message as canonical. Brigade can accept caption as an alias, but BlueBubbles/iMessage does not offer a reliable native attachment-caption concept.
  • In practice, media with text may arrive as the attachment plus a separate text message rather than one captioned bubble. Do not promise exact attachment-caption rendering.
  • If you must use the channel-specific file action, the canonical action name is upload-file; sendAttachment is a legacy alias.
  • BlueBubbles supports rich actions, but some are macOS-version dependent (for example, edit may be broken on macOS 26 Tahoe).
  • The gateway may expose both short and full message ids; full ids are more durable across restarts.
  • Developer reference for the underlying plugin lives in the BlueBubbles plugin package README.

Ideas to try

  • React with a tapback to acknowledge a request.
  • Reply in-thread when a user references a specific message.
  • Send a file attachment with short message text, expecting BlueBubbles to treat the text as best-effort companion text rather than a guaranteed native caption.

Signals

GitHub stars
11k
Forks
70
Last commit
Oct 2026

Questions

How do I send an iMessage with this skill?
Call the message tool with action "send", channel "bluebubbles", a target such as +15551234567 or a chat_guid, and the message text. Add a path for a local attachment, or a buffer and filename for base64.
What target formats are supported?
Prefer chat_guid targets, especially for group chats. A phone number in E.164 format like +15551234567 or an email address like user@example.com also works.
Advanced
Item type
skill
Key
bluebubbles-spinabot
Source
github.com/spinabot/brigade