About imsg
`imsg` is a macOS command-line tool for reading and sending iMessage and SMS through Messages.app, for users who handle messages from a terminal. It supports chat history, new-message watching, and attachments, but not group membership management.
Key features
- 01List chats and view history
- 02Watch for new messages
- 03Send iMessage or SMS
- 04Send file attachments
- 05Filter messages by date
Use cases
- 01Find a chat for a contact
- 02Review recent messages in a chat
- 03Watch a chat for incoming messages
- 04Send text or a file to a contact
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ letta-ai/ skills --skill imsgAfter installing, type/imsgin Claude Code to confirm it loaded.
Bundled filesassets/imsg-small.svgLICENSE
Details
From the project READMEimsg
Use imsg to read and send iMessage/SMS via macOS Messages.app.
Limitations
- Group chat management (adding/removing members) is not supported
- macOS only
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
# By chat ID
imsg history --chat-id 1 --limit 20 --json
# With attachments info
imsg history --chat-id 1 --limit 20 --attachments --json
# Filter by date
imsg history --chat-id 1 --start 2026-01-01T00:00:00Z --json
Watch for New Messages
imsg watch --chat-id 1 --attachments
imsg watch --chat-id 1 --debounce 250ms
Send Messages
# Send to phone number
imsg send --to "+14155551212" --text "Hello!"
# Send to existing chat by ID (useful for replies)
imsg send --chat-id 86 --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
- 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"
# 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"
Comments
Markdown supported