Imessage

by nousresearch25a71a744cb9MIT252K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated today

Send and receive iMessages/SMS via the imsg CLI on macOS.

Instructions onlyCommunication
AI-generated overview

Sends and reads iMessage/SMS conversations on macOS through the imsg command-line tool.

What it does
This skill instructs an agent to use the imsg CLI on macOS to list chats, read conversation history, send text messages with optional file attachments, and watch for new incoming messages. It documents command syntax, service selection between iMessage and SMS, and safety rules such as confirming recipients before sending. It produces sent messages and retrieved chat or history output, typically as JSON.
When to use it
Use it when a user asks to send an iMessage or text message, read iMessage conversation history, or check recent Messages.app chats. It is not intended for other messaging platforms, group chat membership management, or bulk messaging.
Requirements
Requires macOS with Messages.app signed in, the imsg CLI installed (for example via Homebrew), Full Disk Access for the terminal, and Automation permission for Messages.app. It ships no scripts; it is instructions only.

iMessage

Use imsg to read and send iMessage/SMS via macOS Messages.app.

Prerequisites

  • macOS with Messages.app signed in
  • Install: brew install steipete/tap/imsg
  • Grant Full Disk Access for terminal (System Settings → Privacy → Full Disk Access)
  • Grant Automation permission for Messages.app when prompted

When to Use

  • User asks to send an iMessage or text message
  • Reading iMessage conversation history
  • Checking recent Messages.app chats
  • Sending to phone numbers or Apple IDs

When NOT to Use

  • Telegram/Discord/Slack/WhatsApp messages → use the appropriate gateway channel
  • Group chat management (adding/removing members) → not supported
  • Bulk/mass messaging → always confirm with user first

Quick Reference

List Chats

bash
imsg chats --limit 10 --json

View History

bash
# By chat IDimsg history --chat-id 1 --limit 20 --json
# With attachments infoimsg history --chat-id 1 --limit 20 --attachments --json

Send Messages

bash
# Text onlyimsg send --to "+14155551212" --text "Hello!"
# With attachmentimsg send --to "+14155551212" --text "Check this out" --file /path/to/image.jpg
# Force iMessage or SMSimsg send --to "+14155551212" --text "Hi" --service imessageimsg send --to "+14155551212" --text "Hi" --service sms

Watch for New Messages

bash
imsg watch --chat-id 1 --attachments

Service Options

  • --service imessage — Force iMessage (requires recipient has iMessage)
  • --service sms — Force SMS (green bubble)
  • --service auto — Let Messages.app decide (default)

Rules

  1. Always confirm recipient and message content before sending
  2. Never send to unknown numbers without explicit user approval
  3. Verify file paths exist before attaching
  4. Don't spam — rate-limit yourself

Example Workflow

User: "Text mom that I'll be late"

bash
# 1. Find mom's chatimsg 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 confirmationimsg send --to "+1555123456" --text "I'll be late"

Source and attribution

Source:nousresearch/hermes-agentinskills/apple/imessageat commit25a71a7

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal