imessage — Claude Code skill: what it does, how to install
A skill that lets your coding agent read Messages.app chats and send iMessage or SMS from the terminal on macOS. Handy when the conversation stays local.
npx skills add NousResearch/hermes-agent --skill imessage -a claude-codeWhat imessage does
The skill points your agent at imsg, a command-line tool that reads and sends iMessage and SMS through Messages.app on macOS. Ask it to text someone or to check what you missed and it runs the CLI itself. Chat list, history, attachments, and a watch mode for incoming messages.
Everything sits in one SKILL.md with the commands spelled out. imsg chats --limit 10 --json lists conversations, imsg history --chat-id 1 --limit 20 --json pulls the transcript, and --attachments brings attachment details along. Sending is imsg send --to with --text and an optional --file. The --service flag picks imessage, sms or auto, and auto leaves the choice to Messages.app. The file also carries rules for the agent: confirm the recipient and the wording first, never message an unknown number, check that the file path exists.
macOS only. You need Messages.app signed in, imsg installed (brew install steipete/tap/imsg), Full Disk Access for the terminal, and Automation permission for Messages.app. Miss either permission and reading history or sending will hit a system refusal that no amount of prompting gets around. Group chat membership is out of scope.
What it helps with
- text a number without picking up the phone
- read a thread and summarise what was missed
- attach an image or file to a message
- watch one chat for new messages
- force SMS when iMessage is the wrong channel
Example prompts for the agent
- List my last 10 Messages chats and find the one with Mom
- Send "Running late, be there in an hour" to +14155551212 over iMessage
- Read the last 20 messages in chat 1 and tell me what I missed
How to install imessage
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill imessage -a claude-code2Manually: put the files in place
~/.claude/skills/imessage/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/imessage/
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill imessage -a codex2Manually: put the files in place
.agents/skills/imessage/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill imessage -a cursor2Manually: put the files in place
.cursor/skills/imessage/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install NousResearch/hermes-agent imessage2Manually: put the files in place
.github/skills/imessage/SKILL.md1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill imessage -a gemini-cli2Platform CLI
gemini skills install https://github.com/NousResearch/hermes-agent --path skills/apple/imessageManually: put the files in place
.devin/skills/imessage/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill imessage -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set42
The whole set →Similar
Questions about imessage
How do I install imessage in Claude Code?
Run npx skills add NousResearch/hermes-agent --skill imessage -a claude-code. The skill file lands at ~/.claude/skills/imessage/SKILL.md.
What does imessage do?
It gives the agent access to Messages.app on macOS through the imsg CLI: chat list, history with attachments, sending via iMessage or SMS, and watching for new messages.
What do I need before it works?
macOS with Messages.app signed in and imsg installed (brew install steipete/tap/imsg). You also grant Full Disk Access to the terminal and Automation permission to Messages.app.
Source text
SKILL.md · MIT
---
name: imessage
description: Send and receive iMessages/SMS via the imsg CLI on macOS.
version: 1.0.0
author: Hermes Agent
license: MIT
platforms: [macos]
metadata:
hermes:
tags: [iMessage, SMS, messaging, macOS, Apple]
prerequisites:
commands: [imsg]
---
# 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 ID
imsg history --chat-id 1 --limit 20 --json
# With attachments info
imsg history --chat-id 1 --limit 20 --attachments --json
```
### 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
# Force iMessage or SMS
imsg send --to "+14155551212" --text "Hi" --service imessage
imsg 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 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"
```
© Hermes Agent · MIT · NousResearch/hermes-agent