iMessage
SkillCommunicationiMessage/SMS CLI for listing chats, reading message history, watching for new messages, and sending messages. Triggers on: check messages, read imessage, send text, imsg, message history, sms, who texted me.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the iMessage skill
What this skill tells your AI
The instructions your AI receives, as published by joelhooks/joelclaw in skills/imsg/SKILL.md and read by ahel’s review.
Read and send iMessages and SMS from the terminal via the imsg CLI.
Setup (Panda)
- Messages.app signed in as: the agent Apple ID (see USER.md)
- Joel's iMessage address: see USER.md →
imessage - Full Disk Access must be granted to the terminal for read operations (
chats,history,watch) - Automation permission for Messages.app required for send
imsg sendreturns"sent"optimistically — this means AppleScript fired, not delivery confirmed
Commands
List chats
imsg chats --limit 10 --json
Read history
imsg history --chat-id <id> --limit 20 --attachments --json
Watch for new messages
imsg watch --chat-id <id> --attachments
Send
# By email (iMessage)
imsg send --to "user@example.com" --text "hello"
# By phone number (iMessage or SMS)
imsg send --to "+18005551234" --text "hello"
# With file attachment
imsg send --to "user@example.com" --text "see attached" --file /path/to/file.jpg
Delivery Notes
"sent"from CLI = AppleScript successfully handed off to Messages.app- "Not delivered" in Messages.app = actual delivery failure (auth issue, recipient offline, etc.)
- Full Disk Access missing = read commands fail with
permissionDenied; send still works via AppleScript - Messages appear as coming from the agent Apple ID, not from Joel
Sending to Joel
Joel's iMessage address is in USER.md (imessage field). Use it to notify him directly:
imsg send --to "<joel-imessage>" --text "your message"
Safety
- Read-only by default — use
chatsandhistorybefore sending - Always confirm recipient and message text before
imsg send --jsonflag preferred for all read operations (deterministic parsing)
Install
brew install steipete/tap/imsg
Credit
CLI by steipete. Adopted per ADR-0067.
Flagg: imsg via Executor
On Flagg, do not call imsg from a terminal for reads. Use Executor's saved connection, which runs a signed service that holds the Full Disk Access grant.
- Address:
tools.imsg.org.flaggImsg.<tool>. Discover withtools.search({ namespace: "imsg", query: "" }). - Tools:
imsg_status,imsg_chats,imsg_group,imsg_history,imsg_send. Callimsg_statusfirst. - Service: LaunchAgent
com.joel.imsg-mcpon127.0.0.1:4793, code inpackages/imsg-mcp, bundle/Applications/imsg-mcp.app. imsg_sendneeds Joel's explicit approval for recipient and text. An orgrequire_approvalpolicy on it is expected in Executor; check the Tools tab. Attachments only from~/.joelclaw/imsg-outboxor/tmp. A killed send returns "outcome unknown", so check Messages.app before retrying.- Health:
curl -s http://127.0.0.1:4793/healthzandlaunchctl print gui/501/com.joel.imsg-mcp. Restart withlaunchctl kickstart -k gui/501/com.joel.imsg-mcp. - Bearer:
imsg_mcp_bearer_tokenin agent-secrets. Never print it. - Joel-only grants: Full Disk Access for
/Applications/imsg-mcp.app(re-toggle after any re-sign) and the Automation prompt for Messages.app on first send.
Full receipts: ~/Code/joelhooks/dark-wizard/.brain/projects/imsg-mcp-executor-2026-09.svx.
Signals
- GitHub stars
- 64
- Forks
- 2
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
imsg-joelhooks- Source
- github.com/joelhooks/joelclaw