Milady bluebubbles
Handles sending and managing iMessages through BlueBubbles, the recommended iMessage integration. Triggers when the user wants to send a text message, send an iMessage, send a text, text someone, message a contact, react with a tapback, reply to a message thread, send an attachment via iMessage, edit or unsend a sent message, or manage group chat participants. All calls go through the generic message tool with channel="bluebubbles".
install
source · Clone the upstream repo
git clone https://github.com/milady-ai/milady
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/milady-ai/milady "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/.defaults/bluebubbles" ~/.claude/skills/milady-ai-milady-bluebubbles && rm -rf "$T"
manifest:
skills/.defaults/bluebubbles/SKILL.mdsource content
BlueBubbles Actions
Overview
BlueBubbles is Otto’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
(prefertarget
; alsochat_guid:...
in E.164 or+15551234567
)user@example.com
text for send/edit/replymessage
for react/edit/unsend/replymessageId- Attachment
for local files, orpath
+buffer
for base64filename
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 Otto" }
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": "sendAttachment", "channel": "bluebubbles", "target": "+15551234567", "path": "/tmp/photo.jpg", "caption": "here you go" }
Send with an iMessage effect
{ "action": "sendWithEffect", "channel": "bluebubbles", "target": "+15551234567", "message": "big news", "effect": "balloons" }
Notes
- Requires gateway config
(serverUrl/password/webhookPath).channels.bluebubbles - Prefer
targets when you have them (especially for group chats).chat_guid - 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
.extensions/bluebubbles/README.md
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 a short caption.