[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openclaw-openclaw-skills-bluebubbles":3},{"error":4,"detail":5,"metadata":23,"markdownContent":25,"rawMarkdown":20},false,{"repo_full_name":6,"owner":7,"repo_name":7,"repo_forks":8,"skill_path":9,"repo_stars":10,"name":11,"category_id":12,"description":13,"file_tree":14,"skill_md_content":20,"skill_id":21,"skill_key":22},"openclaw/openclaw","openclaw",64359,"skills/bluebubbles",330752,"bluebubbles",11,"Use when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel=\"bluebubbles\".",[15],{"name":16,"path":17,"size":18,"type":19},"SKILL.md","skills/bluebubbles/SKILL.md",3084,"file","---\nname: bluebubbles\ndescription: Use when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel=\"bluebubbles\".\nmetadata: { \"openclaw\": { \"emoji\": \"🫧\", \"requires\": { \"config\": [\"channels.bluebubbles\"] } } }\n---\n\n# BlueBubbles Actions\n\n## Overview\n\nBlueBubbles is OpenClaw’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.\n\n## Inputs to collect\n\n- `target` (prefer `chat_guid:...`; also `+15551234567` in E.164 or `user@example.com`)\n- `message` text for send/edit/reply\n- `messageId` for react/edit/unsend/reply\n- Attachment `path` for local files, or `buffer` + `filename` for base64\n\nIf the user is vague (\"text my mom\"), ask for the recipient handle or chat guid and the exact message content.\n\n## Actions\n\n### Send a message\n\n```json\n{\n  \"action\": \"send\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"message\": \"hello from OpenClaw\"\n}\n```\n\n### React (tapback)\n\n```json\n{\n  \"action\": \"react\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"messageId\": \"\u003Cmessage-guid>\",\n  \"emoji\": \"❤️\"\n}\n```\n\n### Remove a reaction\n\n```json\n{\n  \"action\": \"react\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"messageId\": \"\u003Cmessage-guid>\",\n  \"emoji\": \"❤️\",\n  \"remove\": true\n}\n```\n\n### Edit a previously sent message\n\n```json\n{\n  \"action\": \"edit\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"messageId\": \"\u003Cmessage-guid>\",\n  \"message\": \"updated text\"\n}\n```\n\n### Unsend a message\n\n```json\n{\n  \"action\": \"unsend\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"messageId\": \"\u003Cmessage-guid>\"\n}\n```\n\n### Reply to a specific message\n\n```json\n{\n  \"action\": \"reply\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"replyTo\": \"\u003Cmessage-guid>\",\n  \"message\": \"replying to that\"\n}\n```\n\n### Send an attachment\n\n```json\n{\n  \"action\": \"sendAttachment\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"path\": \"/tmp/photo.jpg\",\n  \"caption\": \"here you go\"\n}\n```\n\n### Send with an iMessage effect\n\n```json\n{\n  \"action\": \"sendWithEffect\",\n  \"channel\": \"bluebubbles\",\n  \"target\": \"+15551234567\",\n  \"message\": \"big news\",\n  \"effect\": \"balloons\"\n}\n```\n\n## Notes\n\n- Requires gateway config `channels.bluebubbles` (serverUrl/password/webhookPath).\n- Prefer `chat_guid` targets when you have them (especially for group chats).\n- BlueBubbles supports rich actions, but some are macOS-version dependent (for example, edit may be broken on macOS 26 Tahoe).\n- The gateway may expose both short and full message ids; full ids are more durable across restarts.\n- Developer reference for the underlying plugin lives in `extensions/bluebubbles/README.md`.\n\n## Ideas to try\n\n- React with a tapback to acknowledge a request.\n- Reply in-thread when a user references a specific message.\n- Send a file attachment with a short caption.\n","0b777712-c9db-5939-a8a1-ee6f54cbc768","openclaw-openclaw-skills-bluebubbles",{"name":11,"description":13,"metadata":24},"{ \"openclaw\": { \"emoji\": \"🫧\", \"requires\": { \"config\": [\"channels.bluebubbles\"] } } }","\u003Ch1>BlueBubbles Actions\u003C/h1>\n\u003Ch2>Overview\u003C/h2>\n\u003Cp>BlueBubbles is OpenClaw’s recommended iMessage integration. Use the \u003Ccode>message\u003C/code> tool with \u003Ccode>channel: &quot;bluebubbles&quot;\u003C/code> to send messages and manage iMessage conversations: send texts and attachments, react (tapbacks), edit/unsend, reply in threads, and manage group participants/names/icons.\u003C/p>\n\u003Ch2>Inputs to collect\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ccode>target\u003C/code> (prefer \u003Ccode>chat_guid:...\u003C/code>; also \u003Ccode>+15551234567\u003C/code> in E.164 or \u003Ccode>user@example.com\u003C/code>)\u003C/li>\n\u003Cli>\u003Ccode>message\u003C/code> text for send/edit/reply\u003C/li>\n\u003Cli>\u003Ccode>messageId\u003C/code> for react/edit/unsend/reply\u003C/li>\n\u003Cli>Attachment \u003Ccode>path\u003C/code> for local files, or \u003Ccode>buffer\u003C/code> + \u003Ccode>filename\u003C/code> for base64\u003C/li>\n\u003C/ul>\n\u003Cp>If the user is vague (&quot;text my mom&quot;), ask for the recipient handle or chat guid and the exact message content.\u003C/p>\n\u003Ch2>Actions\u003C/h2>\n\u003Ch3>Send a message\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;send&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;message&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;hello from OpenClaw&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>React (tapback)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;react&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;messageId&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&lt;message-guid&gt;&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;emoji&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;❤️&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Remove a reaction\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;react&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;messageId&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&lt;message-guid&gt;&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;emoji&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;❤️&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;remove&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-literal\">\u003Cspan class=\"hljs-keyword\">true\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Edit a previously sent message\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;edit&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;messageId&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&lt;message-guid&gt;&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;message&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;updated text&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Unsend a message\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;unsend&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;messageId&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&lt;message-guid&gt;&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Reply to a specific message\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;reply&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;replyTo&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&lt;message-guid&gt;&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;message&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;replying to that&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Send an attachment\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;sendAttachment&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;path&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;/tmp/photo.jpg&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;caption&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;here you go&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Send with an iMessage effect\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;sendWithEffect&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;channel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;bluebubbles&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;target&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;+15551234567&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;message&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;big news&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;effect&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;balloons&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch2>Notes\u003C/h2>\n\u003Cul>\n\u003Cli>Requires gateway config \u003Ccode>channels.bluebubbles\u003C/code> (serverUrl/password/webhookPath).\u003C/li>\n\u003Cli>Prefer \u003Ccode>chat_guid\u003C/code> targets when you have them (especially for group chats).\u003C/li>\n\u003Cli>BlueBubbles supports rich actions, but some are macOS-version dependent (for example, edit may be broken on macOS 26 Tahoe).\u003C/li>\n\u003Cli>The gateway may expose both short and full message ids; full ids are more durable across restarts.\u003C/li>\n\u003Cli>Developer reference for the underlying plugin lives in \u003Ccode>extensions/bluebubbles/README.md\u003C/code>.\u003C/li>\n\u003C/ul>\n\u003Ch2>Ideas to try\u003C/h2>\n\u003Cul>\n\u003Cli>React with a tapback to acknowledge a request.\u003C/li>\n\u003Cli>Reply in-thread when a user references a specific message.\u003C/li>\n\u003Cli>Send a file attachment with a short caption.\u003C/li>\n\u003C/ul>\n"]