imsg on the signed-in Messages Mac, configure the channel, and grant the macOS permissions it needs.
Install the plugin
Install the official iMessage plugin on the Gateway host, then restart the Gateway:Private API actions
Replies, tapbacks, effects, polls, attachments, and group management.
Pairing
iMessage DMs default to pairing mode.
Remote Mac
Use an SSH wrapper when the Gateway is not running on the Messages Mac.
Configuration reference
Full iMessage field reference.
Quick setup
- Local Mac (fast path)
- Remote Mac over SSH
1
Install and verify imsg
imsg command, it can prompt to install steipete/tap/imsg through Homebrew. If it detects a Homebrew-managed imsg, it can prompt to reinstall or update it. Custom cliPath wrappers are not modified.2
Configure OpenClaw
3
Start gateway
4
Approve first DM pairing (default dmPolicy)
Requirements and permissions (macOS)
- Messages must be signed in on the Mac running
imsg. - Full Disk Access is required for the process context running OpenClaw/
imsg(Messages DB access). - Automation permission is required to send messages through Messages.app.
- For advanced actions (react / edit / unsend / threaded reply / effects / polls / group ops), System Integrity Protection must be disabled — see Enabling the imsg private API. Basic text and media send/receive work without it.
SSH wrapper sends fail with AppleEvents -1743
SSH wrapper sends fail with AppleEvents -1743
A remote-SSH setup can read chats, pass Check the signed-in Mac user’s TCC database or System Settings > Privacy & Security > Automation. If the Automation entry is recorded for In that state, repeating
channels status --probe, and process inbound messages while outbound sends still fail with an AppleEvents authorization error:/usr/libexec/sshd-keygen-wrapper instead of the imsg or local shell process, macOS may not expose a usable Messages toggle for that SSH server-side client:tccutil reset AppleEvents or rerunning imsg send through the same SSH wrapper may keep failing because the process context that needs Messages Automation is the SSH wrapper, not an app the UI can grant.Use one of the supported imsg process contexts instead:- Run the Gateway, or at least the
imsgbridge, in the logged-in Messages user’s local session. - Start the Gateway with a LaunchAgent for that user after granting Full Disk Access and Automation from the same session.
- If you keep the two-user SSH topology, verify that a real outbound
imsg sendsucceeds through the exact wrapper before enabling the channel. If it cannot be granted Automation, reconfigure to a single-userimsgsetup instead of relying on the SSH wrapper for sends.