[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698TX2R2KN09C03BNCHSMDJ":3,"skill-same:01M698TX2R2KN09C03BNCHSMDJ":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":55,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M698TX2R2KN09C03BNCHSMDJ","imsg",null,"Use the imsg CLI from OpenClaw agents for iMessage\u002FSMS DMs, groups, replies, reactions, polls, watching, and private-API actions.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394352,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Fimessage\u002Fskills\u002Fimsg\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,9,27,28,29,30,31,32],"install","groups","darwin","for","replies","sms","reactions","tap","use","brew","api","actions","https","imessage","cli","2026-11-10 10:12:30",false,"---\nname: imsg\ndescription: \"Use the imsg CLI from OpenClaw agents for iMessage\u002FSMS DMs, groups, replies, reactions, polls, watching, and private-API actions.\"\nhomepage: https:\u002F\u002Fimsg.to\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"?\",\n        \"os\": [\"darwin\"],\n        \"requires\": { \"bins\": [\"imsg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew\",\n              \"kind\": \"brew\",\n              \"formula\": \"steipete\u002Ftap\u002Fimsg\",\n              \"bins\": [\"imsg\"],\n              \"label\": \"Install imsg (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# imsg\n\nUse the generic `message` tool first for actions that its current iMessage schema exposes. Use `imsg` when the task needs local Messages.app history, target discovery, watching, or an administrative\u002Fprivate-API capability that is not exposed by `message`.\n\nDo not use this skill for Telegram, Signal, WhatsApp, Discord, Slack, or for replying inside the current OpenClaw conversation when the configured channel already routes the reply.\n\n## Agent Flow\n\n1. Resolve the conversation first.\n2. Choose DM, existing group, or new group.\n3. Prefer an available `message` action; otherwise pick the lowest-capability `imsg` command that preserves the requested semantics.\n4. Confirm any send or visible state change unless the user already gave exact recipient, content, and action.\n5. Execute with stable identifiers: prefer `--chat-id` for normal sends\u002Fwatch\u002Fhistory and `--chat` chat GUID for bridge actions.\n\nNever infer a recipient from a casual name alone when several chats or handles could match. Show the matched display name, handle(s), group participants, and message text\u002Faction before sending.\n\n## Host Requirements\n\n- macOS 14+ with Messages.app signed in for send\u002Freact\u002Fbridge actions.\n- Private API mode is strongly encouraged for OpenClaw iMessage. It unlocks replies, precise tapbacks, effects, polls, attachment replies, read\u002Ftyping actions, and group management. Basic mode is a fallback for reads plus plain text\u002Ffile send.\n- Full Disk Access for the process context that runs `imsg` or OpenClaw; reads fail without Messages DB access.\n- Automation permission for Messages.app when using public `send`.\n- Accessibility permission for the process context that runs public `imsg react`; it uses System Events UI automation. Bridge `tapback` uses private API instead.\n- Optional Contacts permission for contact-name resolution.\n- SMS sends require Text Message Forwarding from the user's iPhone to this Mac.\n- Linux reads a copied `chat.db` only; it cannot send, react, launch Messages.app, mark read, or type.\n\n## Resolve Targets\n\nUse `--json` reads. Output is newline-delimited JSON; use `jq -s` when `jq` is available, or consume one object per line directly.\n\n```bash\nimsg chats --limit 25 --json | jq -s\nimsg search --query \"dinner\" --match contains --json | jq -s\nimsg history --chat-id 42 --limit 20 --attachments --json | jq -s\nimsg group --chat-id 42 --json\n```\n\nTarget rules:\n\n- DM to a phone\u002Femail: use `imsg send --to` when the user gave an exact handle, or after a single unambiguous chat match.\n- Existing DM thread: `imsg send --chat-id \u003Cid>` is safer than re-resolving a name.\n- Existing group: inspect with `imsg group --chat-id \u003Cid> --json`; send with `--chat-id`, bridge with the chat GUID from `group`.\n- New group: use `chat-create` only when the user explicitly asked to create a group or no existing group matches.\n- Ambiguous group names: confirm participants, not just display name.\n- SMS: use `--service sms` only when requested or when iMessage fallback is not desired. SMS relay requires Text Message Forwarding.\n\nDo not make `jq` a hard prerequisite for the skill; it is only a convenient formatter for examples.\n\n## Capability Choice\n\nUse `imsg` standard commands when the current `message` schema does not cover the operation or when local history is needed:\n\n- Read\u002Flist\u002Fsearch\u002Fwatch: `chats`, `group`, `history`, `search`, `watch`\n- Basic text\u002Ffile send: `send`\n- Standard tapback to most recent incoming message in a chat: `react`\n\nUse the private API bridge for the native iMessage actions OpenClaw users normally expect:\n\n- Rich replies, text formatting, effects, subjects, multipart sends\n- Native Apple Messages polls and poll votes\n- Tapback by message GUID or tapback removal\n- Edit, unsend, delete, notify anyways\n- Read receipts, typing indicators, bridge event watch\n- Group create\u002Fname\u002Fphoto\u002Fmember\u002Fleave\u002Fdelete\u002Fmark actions\n- Account, whois, nickname checks\n\nFor OpenClaw channel setup, check bridge availability early:\n\n```bash\nimsg status --json\n```\n\nIf the host supports bridge actions but Messages is not injected yet, ask before running `imsg launch`. It kills and relaunches Messages.app to inject the bridge, so treat it as a visible state change:\n\n```bash\nimsg launch\nimsg status --json\n```\n\nIf SIP, library validation, private entitlement checks, or missing selectors still block the capability, explain that the requested private-API action is unavailable on this host and offer the closest non-bridge action, if one exists. Do not silently downgrade a threaded reply, effect, subject, poll, or GUID-targeted tapback into a plain send\u002Freact.\n\n## DM Scenarios\n\nExact handle, basic send:\n\n```bash\nimsg send --to \"+14155551212\" --text \"On my way\" --service auto\n```\n\nKnown DM thread:\n\n```bash\nimsg send --chat-id 42 --text \"On my way\"\nimsg send --chat-id 42 --file \u002Fpath\u002Fto\u002Fphoto.jpg\n```\n\nForce channel only when the user asks:\n\n```bash\nimsg send --to \"+14155551212\" --text \"green bubble\" --service sms\nimsg send --to \"+14155551212\" --text \"iMessage only\" --service imessage --no-sms-fallback\n```\n\nThreaded reply, formatting, effects, or attachment reply:\n\n```bash\nimsg send-rich --chat 'iMessage;-;+15551234567' \\\n  --reply-to \u003Cmessage-guid> --text \"reply text\"\nimsg send-rich --chat 'iMessage;-;+15551234567' --text 'hello world' \\\n  --format '[{\"start\":0,\"length\":5,\"styles\":[\"bold\"]}]'\nimsg send-rich --chat 'iMessage;-;+15551234567' --text \"boom\" --effect impact\nimsg send-attachment --chat 'iMessage;-;+15551234567' \\\n  --reply-to \u003Cmessage-guid> --file \u002Fpath\u002Fto\u002Ffile.jpg\n```\n\nFormatting ranges are UTF-16 positions. Supported styles include `bold`, `italic`, `underline`, and `strikethrough`; use `--format-file` for generated JSON.\n\n## Group Scenarios\n\nInspect before acting:\n\n```bash\nimsg group --chat-id 42 --json\nimsg history --chat-id 42 --limit 20 --json | jq -s\n```\n\nSend to an existing group:\n\n```bash\nimsg send --chat-id 42 --text \"Works for me\"\n```\n\nBridge reply or poll in an existing group:\n\n```bash\nimsg send-rich --chat 'iMessage;+;chat0000' \\\n  --reply-to \u003Cmessage-guid> --text \"replying in thread\"\nimsg poll send --chat 'iMessage;+;chat0000' \\\n  --question \"Dinner?\" --option \"Pizza\" --option \"Sushi\"\n```\n\nCreate or mutate groups only on explicit request:\n\n```bash\nimsg chat-create --addresses '+15551111111,+15552222222' --name 'Crew' --text 'gm'\nimsg chat-name --chat 'iMessage;+;chat0000' --name 'Renamed'\nimsg chat-photo --chat 'iMessage;+;chat0000' --file \u002Fpath\u002Fto\u002Fgroup.jpg\nimsg chat-add-member --chat 'iMessage;+;chat0000' --address +15553333333\nimsg chat-remove-member --chat 'iMessage;+;chat0000' --address +15553333333\nimsg chat-leave --chat 'iMessage;+;chat0000'\nimsg chat-delete --chat 'iMessage;+;chat0000'\nimsg chat-mark --chat 'iMessage;+;chat0000' --read\n```\n\nGroup mutations are highly visible. Confirm the exact group and participant list before changing membership, name, photo, read state, leaving, or deleting.\n\n## Reactions and Replies\n\nPublic `react` is limited: it reacts to the most recent incoming message in the chat.\n\n```bash\nimsg react --chat-id 42 --reaction like\nimsg react --chat-id 42 --reaction love\nimsg react --chat-id 42 --reaction dislike\nimsg react --chat-id 42 --reaction laugh\nimsg react --chat-id 42 --reaction emphasis\nimsg react --chat-id 42 --reaction question\n```\n\nFor a specific message GUID or removal, use bridge `tapback`:\n\n```bash\nimsg tapback --chat 'iMessage;-;+15551234567' --message \u003Cmessage-guid> --kind love\nimsg tapback --chat 'iMessage;-;+15551234567' --message \u003Cmessage-guid> --kind love --remove\n```\n\nUse `send-rich --reply-to \u003Cmessage-guid>` for threaded replies. Confirm the referenced message if the user says \"that\" or \"the previous one\".\n\n## Polls\n\nNative Apple Messages polls require the bridge. Creation needs at least two `--option` values. Voting requires one of `--option-id`, `--option-index`, or `--option`.\n\nMessages renders only the options on a poll balloon, so current `imsg poll send` echoes `--question` as a best-effort plain caption after the poll. Use `--comment` to override that caption. Do not retry automatically when only the caption fails: the poll may already be delivered.\n\n```bash\nimsg poll send --chat 'iMessage;-;+15551234567' \\\n  --question \"Dinner?\" --option \"Pizza\" --option \"Sushi\" --comment \"Vote by 5pm\"\nimsg poll send --chat 'iMessage;+;chat0000' --reply-to \u003Cmessage-guid> \\\n  --question \"Approve?\" --option \"Yes\" --option \"No\"\nimsg poll vote --chat 'iMessage;+;chat0000' \\\n  --poll \u003Cpoll-message-guid> --option-id \u003Coption-id>\n```\n\nFind poll IDs and options with:\n\n```bash\nimsg history --chat-id 42 --limit 20 --json | jq -s '.[] | select(.poll != null) | {guid, poll}'\n```\n\n`history` and `watch` backfill a title-less inbound native poll's `poll.question` from its clean caption row. Poll vote rows are `poll` events, not tapbacks; `watch --reactions` is not required to see them.\n\n## Watch and Long-Running Agents\n\nFor a short one-off wait, use `watch`:\n\n```bash\nimsg watch --chat-id 42 --since-rowid 9000 --json\nimsg watch --chat-id 42 --attachments --convert-attachments --json\nimsg watch --chat-id 42 --reactions --json\nimsg watch --chat-id 42 --bb-events --json\n```\n\n`--since-rowid` is exclusive. Without it, `watch` starts at the newest row. `watch` uses filesystem events plus a low-frequency polling fallback, so it can catch up after missed SQLite sidecar events. Poll objects appear without `--reactions`.\n\nFor a daemon or multi-chat integration, use `imsg rpc`. It speaks JSON-RPC 2.0 over stdin\u002Fstdout. Inspect `imsg status --json` for `rpc_methods` before using newer bridge or poll methods.\n\n## Safety Rules\n\n- Confirm recipient, chat, and content before every send unless the user's request already contains exact values.\n- Confirm visible state changes: read receipts, typing indicators, edits, unsends, deletes, poll votes, tapbacks, group membership, group name\u002Fphoto, leaving\u002Fdeleting chats.\n- Never send to unknown numbers or ambiguous contact-name matches without approval.\n- Confirm attachments exist and are the intended files.\n- Prefer E.164 phone numbers; use `--region US` or another region only when needed for local formats.\n- Use bridge actions for bridge-only semantics, but confirm visible state changes and destructive actions first.\n","# imsg\n\nUse the generic `message` tool first for actions that its current iMessage schema exposes. Use `imsg` when the task needs local Messages.app history, target discovery, watching, or an administrative\u002Fprivate-API capability that is not exposed by `message`.\n\nDo not use this skill for Telegram, Signal, WhatsApp, Discord, Slack, or for replying inside the current OpenClaw conversation when the configured channel already routes the reply.\n\n## Agent Flow\n\n1. Resolve the conversation first.\n2. Choose DM, existing group, or new group.\n3. Prefer an available `message` action; otherwise pick the lowest-capability `imsg` command that preserves the requested semantics.\n4. Confirm any send or visible state change unless the user already gave exact recipient, content, and action.\n5. Execute with stable identifiers: prefer `--chat-id` for normal sends\u002Fwatch\u002Fhistory and `--chat` chat GUID for bridge actions.\n\nNever infer a recipient from a casual name alone when several chats or handles could match. Show the matched display name, handle(s), group participants, and message text\u002Faction before sending.\n\n## Host Requirements\n\n- macOS 14+ with Messages.app signed in for send\u002Freact\u002Fbridge actions.\n- Private API mode is strongly encouraged for OpenClaw iMessage. It unlocks replies, precise tapbacks, effects, polls, attachment replies, read\u002Ftyping actions, and group management. Basic mode is a fallback for reads plus plain text\u002Ffile send.\n- Full Disk Access for the process context that runs `imsg` or OpenClaw; reads fail without Messages DB access.\n- Automation permission for Messages.app when using public `send`.\n- Accessibility permission for the process context that runs public `imsg react`; it uses System Events UI automation. Bridge `tapback` uses private API instead.\n- Optional Contacts permission for contact-name resolution.\n- SMS sends require Text Message Forwarding from the user's iPhone to this Mac.\n- Linux reads a copied `chat.db` only; it cannot send, react, launch Messages.app, mark read, or type.\n\n## Resolve Targets\n\nUse `--json` reads. Output is newline-delimited JSON; use `jq -s` when `jq` is available, or consume one object per line directly.\n\n```bash\nimsg chats --limit 25 --json | jq -s\nimsg search --query \"dinner\" --match contains --json | jq -s\nimsg history --chat-id 42 --limit 20 --attachments --json | jq -s\nimsg group --chat-id 42 --json\n```\n\nTarget rules:\n\n- DM to a phone\u002Femail: use `imsg send --to` when the user gave an exact handle, or after a single unambiguous chat match.\n- Existing DM thread: `imsg send --chat-id \u003Cid>` is safer than re-resolving a name.\n- Existing group: inspect with `imsg group --chat-id \u003Cid> --json`; send with `--chat-id`, bridge with the chat GUID from `group`.\n- New group: use `chat-create` only when the user explicitly asked to create a group or no existing group matches.\n- Ambiguous group names: confirm participants, not just display name.\n- SMS: use `--service sms` only when requested or when iMessage fallback is not desired. SMS relay requires Text Message Forwarding.\n\nDo not make `jq` a hard prerequisite for the skill; it is only a convenient formatter for examples.\n\n## Capability Choice\n\nUse `imsg` standard commands when the current `message` schema does not cover the operation or when local history is needed:\n\n- Read\u002Flist\u002Fsearch\u002Fwatch: `chats`, `group`, `history`, `search`, `watch`\n- Basic text\u002Ffile send: `send`\n- Standard tapback to most recent incoming message in a chat: `react`\n\nUse the private API bridge for the native iMessage actions OpenClaw users normally expect:\n\n- Rich replies, text formatting, effects, subjects, multipart sends\n- Native Apple Messages polls and poll votes\n- Tapback by message GUID or tapback removal\n- Edit, unsend, delete, notify anyways\n- Read receipts, typing indicators, bridge event watch\n- Group create\u002Fname\u002Fphoto\u002Fmember\u002Fleave\u002Fdelete\u002Fmark actions\n- Account, whois, nickname checks\n\nFor OpenClaw channel setup, check bridge availability early:\n\n```bash\nimsg status --json\n```\n\nIf the host supports bridge actions but Messages is not injected yet, ask before running `imsg launch`. It kills and relaunches Messages.app to inject the bridge, so treat it as a visible state change:\n\n```bash\nimsg launch\nimsg status --json\n```\n\nIf SIP, library validation, private entitlement checks, or missing selectors still block the capability, explain that the requested private-API action is unavailable on this host and offer the closest non-bridge action, if one exists. Do not silently downgrade a threaded reply, effect, subject, poll, or GUID-targeted tapback into a plain send\u002Freact.\n\n## DM Scenarios\n\nExact handle, basic send:\n\n```bash\nimsg send --to \"+14155551212\" --text \"On my way\" --service auto\n```\n\nKnown DM thread:\n\n```bash\nimsg send --chat-id 42 --text \"On my way\"\nimsg send --chat-id 42 --file \u002Fpath\u002Fto\u002Fphoto.jpg\n```\n\nForce channel only when the user asks:\n\n```bash\nimsg send --to \"+14155551212\" --text \"green bubble\" --service sms\nimsg send --to \"+14155551212\" --text \"iMessage only\" --service imessage --no-sms-fallback\n```\n\nThreaded reply, formatting, effects, or attachment reply:\n\n```bash\nimsg send-rich --chat 'iMessage;-;+15551234567' \\\n  --reply-to \u003Cmessage-guid> --text \"reply text\"\nimsg send-rich --chat 'iMessage;-;+15551234567' --text 'hello world' \\\n  --format '[{\"start\":0,\"length\":5,\"styles\":[\"bold\"]}]'\nimsg send-rich --chat 'iMessage;-;+15551234567' --text \"boom\" --effect impact\nimsg send-attachment --chat 'iMessage;-;+15551234567' \\\n  --reply-to \u003Cmessage-guid> --file \u002Fpath\u002Fto\u002Ffile.jpg\n```\n\nFormatting ranges are UTF-16 positions. Supported styles include `bold`, `italic`, `underline`, and `strikethrough`; use `--format-file` for generated JSON.\n\n## Group Scenarios\n\nInspect before acting:\n\n```bash\nimsg group --chat-id 42 --json\nimsg history --chat-id 42 --limit 20 --json | jq -s\n```\n\nSend to an existing group:\n\n```bash\nimsg send --chat-id 42 --text \"Works for me\"\n```\n\nBridge reply or poll in an existing group:\n\n```bash\nimsg send-rich --chat 'iMessage;+;chat0000' \\\n  --reply-to \u003Cmessage-guid> --text \"replying in thread\"\nimsg poll send --chat 'iMessage;+;chat0000' \\\n  --question \"Dinner?\" --option \"Pizza\" --option \"Sushi\"\n```\n\nCreate or mutate groups only on explicit request:\n\n```bash\nimsg chat-create --addresses '+15551111111,+15552222222' --name 'Crew' --text 'gm'\nimsg chat-name --chat 'iMessage;+;chat0000' --name 'Renamed'\nimsg chat-photo --chat 'iMessage;+;chat0000' --file \u002Fpath\u002Fto\u002Fgroup.jpg\nimsg chat-add-member --chat 'iMessage;+;chat0000' --address +15553333333\nimsg chat-remove-member --chat 'iMessage;+;chat0000' --address +15553333333\nimsg chat-leave --chat 'iMessage;+;chat0000'\nimsg chat-delete --chat 'iMessage;+;chat0000'\nimsg chat-mark --chat 'iMessage;+;chat0000' --read\n```\n\nGroup mutations are highly visible. Confirm the exact group and participant list before changing membership, name, photo, read state, leaving, or deleting.\n\n## Reactions and Replies\n\nPublic `react` is limited: it reacts to the most recent incoming message in the chat.\n\n```bash\nimsg react --chat-id 42 --reaction like\nimsg react --chat-id 42 --reaction love\nimsg react --chat-id 42 --reaction dislike\nimsg react --chat-id 42 --reaction laugh\nimsg react --chat-id 42 --reaction emphasis\nimsg react --chat-id 42 --reaction question\n```\n\nFor a specific message GUID or removal, use bridge `tapback`:\n\n```bash\nimsg tapback --chat 'iMessage;-;+15551234567' --message \u003Cmessage-guid> --kind love\nimsg tapback --chat 'iMessage;-;+15551234567' --message \u003Cmessage-guid> --kind love --remove\n```\n\nUse `send-rich --reply-to \u003Cmessage-guid>` for threaded replies. Confirm the referenced message if the user says \"that\" or \"the previous one\".\n\n## Polls\n\nNative Apple Messages polls require the bridge. Creation needs at least two `--option` values. Voting requires one of `--option-id`, `--option-index`, or `--option`.\n\nMessages renders only the options on a poll balloon, so current `imsg poll send` echoes `--question` as a best-effort plain caption after the poll. Use `--comment` to override that caption. Do not retry automatically when only the caption fails: the poll may already be delivered.\n\n```bash\nimsg poll send --chat 'iMessage;-;+15551234567' \\\n  --question \"Dinner?\" --option \"Pizza\" --option \"Sushi\" --comment \"Vote by 5pm\"\nimsg poll send --chat 'iMessage;+;chat0000' --reply-to \u003Cmessage-guid> \\\n  --question \"Approve?\" --option \"Yes\" --option \"No\"\nimsg poll vote --chat 'iMessage;+;chat0000' \\\n  --poll \u003Cpoll-message-guid> --option-id \u003Coption-id>\n```\n\nFind poll IDs and options with:\n\n```bash\nimsg history --chat-id 42 --limit 20 --json | jq -s '.[] | select(.poll != null) | {guid, poll}'\n```\n\n`history` and `watch` backfill a title-less inbound native poll's `poll.question` from its clean caption row. Poll vote rows are `poll` events, not tapbacks; `watch --reactions` is not required to see them.\n\n## Watch and Long-Running Agents\n\nFor a short one-off wait, use `watch`:\n\n```bash\nimsg watch --chat-id 42 --since-rowid 9000 --json\nimsg watch --chat-id 42 --attachments --convert-attachments --json\nimsg watch --chat-id 42 --reactions --json\nimsg watch --chat-id 42 --bb-events --json\n```\n\n`--since-rowid` is exclusive. Without it, `watch` starts at the newest row. `watch` uses filesystem events plus a low-frequency polling fallback, so it can catch up after missed SQLite sidecar events. Poll objects appear without `--reactions`.\n\nFor a daemon or multi-chat integration, use `imsg rpc`. It speaks JSON-RPC 2.0 over stdin\u002Fstdout. Inspect `imsg status --json` for `rpc_methods` before using newer bridge or poll methods.\n\n## Safety Rules\n\n- Confirm recipient, chat, and content before every send unless the user's request already contains exact values.\n- Confirm visible state changes: read receipts, typing indicators, edits, unsends, deletes, poll votes, tapbacks, group membership, group name\u002Fphoto, leaving\u002Fdeleting chats.\n- Never send to unknown numbers or ambiguous contact-name matches without approval.\n- Confirm attachments exist and are the intended files.\n- Prefer E.164 phone numbers; use `--region US` or another region only when needed for local formats.\n- Use bridge actions for bridge-only semantics, but confirm visible state changes and destructive actions first.\n",{"name":5,"homepage":38,"metadata":39,"description":7},"https:\u002F\u002Fimsg.to",{"openclaw":40},{"os":41,"emoji":42,"install":43,"requires":48},[20],"?",[44],{"id":27,"bins":45,"kind":27,"label":46,"formula":47},[5],"Install imsg (brew)","steipete\u002Ftap\u002Fimsg",{"bins":49},[5],"main","f1c93577085244aa96aa87b53a2df9b59d293bd7","extensions\u002Fimessage\u002Fskills\u002Fimsg",82861,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-12 03:01:25",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add openclaw\u002Fopenclaw --skill imsg",{"tool":65,"command":66},"bunx","bunx skills add openclaw\u002Fopenclaw --skill imsg",{"tool":68,"command":69},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill imsg","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Fimessage\u002Fskills\u002Fimsg\u002FSKILL.md",true,[],[74,80,96,113,135,159],{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":33},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[76],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":33},"01M698YY8QGQ7S8TJNKJG6VTPH","xurl","xurl CLI for authenticated X posts, replies, reads\u002Fsearch, DMs, media upload, followers, auth status, or raw v2 API calls.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[],[82,21,28,87,22,88,89,25,18,27,90,91,92,93,94,95,32],"calls","posts","upload","node","Media","search","npm","status","auth",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":33},"01M698YWT1CJ0WK88WB909R9RT","weather","Current weather and forecasts with web_fetch, falling back to wttr.in curl for locations, rain, temperature, travel planning.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[98,103,104,18,105,27,106,30,107,108,109,110,21,111,112],"travel planning","travel","fetch","curl","help","planning","web","back","temperature","with",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":124,"publishedAt":33},"01M698YV2Q0R0JJKAWGFS21K0N","visualize","Create inline visuals for code and explanations, or author persistent OpenClaw dashboard widgets with show_widget.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fvisualize\u002FSKILL.md",[119],{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[115,125,126,127,128,21,112,129,130,131,132,133,9,134],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":149,"publishedAt":33},"01M698YS2TRJH9ENG28HD9CD87","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[141,146],{"categoryNo":142,"categoryName":143,"taxonomyType":144,"taxonomyTypeDesc":145},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":147,"categoryName":148,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000030","开发工程师",[137,30,150,151,152,153,154,155,18,27,156,106,28,157,158],"cloud","manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":33},"01M698YQ9Q3M4W78EWV2KSCSVW","tmux","Control tmux sessions\u002Fpanes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftmux\u002FSKILL.md",[],[161,18,166,20,21,167,168,169,170,171,172,173,27,174,175,176,177,178,179],"send","keys","paste","output","control","prompts","interactive","list","capture","panes","text","monitor","sessions","linux"]