| 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)"}]}} |
| category | comms |
| maturity | stable |
| tags | ["imessage","sms","macos","messages-app","cli"] |
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 (Clawdbot 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
imsg chats --limit 10 --json
View History
imsg history --chat-id 1 --limit 20 --json
imsg history --chat-id 1 --limit 20 --attachments --json
Watch for New Messages
imsg watch --chat-id 1 --attachments
Send Messages
imsg send --to "+14155551212" --text "Hello!"
imsg send --to "+14155551212" --text "Check this out" --file /path/to/image.jpg
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
- Always confirm recipient and message content before sending
- Never send to unknown numbers without explicit user approval
- Be careful with attachments ā confirm file path exists
- Rate limit yourself ā don't spam
Example Workflow
User: "Text mom that I'll be late"
imsg chats --limit 20 --json | jq '.[] | select(.displayName | contains("Mom"))'
imsg send --to "+1555123456" --text "I'll be late"