iMessage 在 Sentō 的所有频道里是独特的。没有 bot,没有 token,没有 API。集成通过读写 macOS Messages app 的本地 SQLite 数据库工作,这意味着智能体必须跑在 Mac 上。

前提条件

  • 你走的是 macOS 安装路径
  • 你在 Messages app 里登录了 iMessage
  • 你能接受智能体读你的 Messages 数据库 —— 它必须读,才能收消息

授予"完全磁盘访问"权限

macOS 默认屏蔽对 Messages 数据库的访问。你得手动授予。

  1. 系统设置 → 隐私与安全性 → 完全磁盘访问
  2. +,导航到 应用程序 → 实用工具 → 终端(或 iTerm、Warp、Ghostty,你用的那个)
  3. 打开它
  4. 重启你的终端 让权限生效

没这个,iMessage 插件会在第一条消息时抛 SQLITE_CANTOPEN

运行 sento init

npx sentoagent init

选 iMessage。没有 token 要粘贴。安装器会问你希望智能体从哪个 iMessage 账户回复和对话的电话号或邮箱。

工作原理

  • 入站:一个后台进程每几秒钟轮询 ~/Library/Messages/chat.db,找匹配你配置的身份的新消息。
  • 出站:AppleScript 让 Messages app 发送。消息通过你真实的 iMessage 账户走,所以收件人看到的是你的号码/邮箱。

限制

  • 仅限 Mac。Apple 没有公开的 iMessage API。Messages 数据库是唯一的方式。
  • 尽力而为的兼容性。Apple 可能在任何 macOS 更新里改数据库 schema。这种时候 Sentō 可能需要 version bump。
  • 群聊根据 macOS 版本有部分支持
  • 没有已读回执 / "正在输入"指示符 —— AppleScript 的 send API 不暴露这些。

如果出了问题

  • 第一步检查:Messages.app 在运行吗?登录了吗?
  • 第二步:你启动 Sentō 的那个终端(不是别的)拿到"完全磁盘访问"权限了吗?
  • 第三步:sento logs -n 50,找 SQLITE_* 错误。

如果 Apple 升了 macOS 版本、schema 变了,在 GitHub 开个 issue,带上你的 macOS 版本和最近的日志。