Skills › Productivity & Integrations › Communication
imsg
iMessage/SMS CLI for listing chats, history, and sending messages via Messages.app.
The full skill
—
name: imsg
description: iMessage/SMS CLI for listing chats, history, and sending messages via Messages.app.
homepage: https://imsg.to
metadata:
{
"openclaw":
{
"emoji": "📨",
"os": ["darwin"],
"requires": { "bins": ["imsg"] },
"install":
[
{
"id": "brew",
"kind": "brew",
"formula": "steipete/tap/imsg",
"bins": ["imsg"],
"label": "Install imsg (brew)",
},
],
},
}
—
# imsg
Use `imsg` to read and send iMessage/SMS via macOS Messages.app.
## When to Use
✅ **USE this skill when:**
– User explicitly asks to send iMessage or SMS
– Reading iMessage conversation history
– Checking recent Messages.app chats
– Sending to phone numbers or Apple IDs
## When NOT to Use
❌ **DON'T use this skill when:**
– Telegram messages → use `message` tool with `channel:telegram`
– Signal messages → use Signal channel if configured
– WhatsApp messages → use WhatsApp channel if configured
– Discord messages → use `message` tool with `channel:discord`
– Slack messages → use `slack` skill
– Group chat management (adding/removing members) → not supported
– Bulk/mass messaging → always confirm with user first
– Replying in current conversation → just reply normally (OpenClaw routes automatically)
## Requirements
– macOS with Messages.app signed in
– Full Disk Access for terminal
– Automation permission for Messages.app (for sending)
## Common Commands
### List Chats
“`bash
imsg chats –limit 10 –json
“`
### View History
“`bash
# By chat ID
imsg history –chat-id 1 –limit 20 –json
# With attachments info
imsg history –chat-id 1 –limit 20 –attachments –json
“`
### Watch for New Messages
“`bash
imsg watch –chat-id 1 –attachments
“`
### Send Messages
“`bash
# Text only
imsg send –to "+14155551212" –text "Hello!"
# With attachment
imsg send –to "+14155551212" –text "Check this out" –file /path/to/image.jpg
# Specify service
imsg send –to "+14155551212" –text "Hi" –service imessage
imsg send –to "+14155551212" –text "Hi" –service sms
“`
## Service Options
– `–service imessage` — Force iMessage (requires recipient has iMessage)
– `–service sms` — Force SMS (green bubble)
– `–service auto` — Let Messages.app decide (default)
## Safety Rules
1. **Always confirm recipient and message content** before sending
2. **Never send to unknown numbers** without explicit user approval
3. **Be careful with attachments** — confirm file path exists
4. **Rate limit yourself** — don't spam
## Example Workflow
User: "Text mom that I'll be late"
“`bash
# 1. Find mom's chat
imsg chats –limit 20 –json | jq '.[] | select(.displayName | contains("Mom"))'
# 2. Confirm with user
# "Found Mom at +1555123456. Send 'I'll be late' via iMessage?"
# 3. Send after confirmation
imsg send –to "+1555123456" –text "I'll be late"
“`