iMessage is unique among Sentō's channels. There's no bot, no token, no API. The integration reads and writes through the macOS Messages app's local SQLite database, which means the agent must run on a Mac.
Prerequisites
- You're on the macOS install path
- You're signed into iMessage in the Messages app
- You're comfortable with the agent reading your Messages database — it has to, to receive messages
Grant Full Disk Access
macOS blocks access to the Messages database by default. You have to grant it manually.
- System Settings → Privacy & Security → Full Disk Access
- Click
+, navigate to Applications → Utilities → Terminal (or iTerm, Warp, Ghostty, whichever terminal you use) - Toggle it ON
- Restart your terminal for the permission to take effect
Without this, the iMessage plugin will throw SQLITE_CANTOPEN on the first message.
Run sento init
npx sentoagent init
Pick iMessage. No token to paste. The installer asks for the phone number or email tied to the iMessage account you want the agent to respond from and talk to.
How it works
- Inbound: a background process polls
~/Library/Messages/chat.dbevery few seconds for new messages matching your configured identity. - Outbound: AppleScript tells the Messages app to send. Messages go through your actual iMessage account, so recipients see them from your number/email.
Limitations
- Mac-only. Apple doesn't offer a public iMessage API. The Messages database is the only way in.
- Best-effort compatibility. Apple can change the database schema in any macOS update. When that happens, Sentō may need a version bump.
- Group chats have partial support depending on macOS version.
- No read receipts / typing indicators — AppleScript's send API doesn't expose them.
If something breaks
- First check: is Messages.app running and logged in?
- Second: did you grant Full Disk Access to the terminal you launched Sentō from (not a different one)?
- Third:
sento logs -n 50and look forSQLITE_*errors.
If Apple bumps the macOS version and the schema changes, open a GitHub issue with your macOS version and recent log output.