本页内容

本页内容

主流消息传递

启用 imsg 专用 API

私有 API 模式解锁本机 iMessage 操作。它需要关闭 SIP、放松库验证以及成功的帮助程序注入。

启用 imsg 私有 API

imsg 有两种运行模式。对于 OpenClaw,推荐使用私有 API 模式,因为它能为该通道提供用户期望的原生 iMessage 操作。基础模式仍然适用于低风险安装、初始验证,或无法禁用 SIP 的主机。

  • 基本模式(默认,无需SIP更改):通过send出站文本和媒体,入站watch/history,聊天列表。这是您从新的 brew install steipete/tap/imsg 加上标准 macOS 权限 中获得的开箱即用的内容。
  • 私有 API 模式:imsg 会向 Messages.app 注入一个 helper dylib,以调用内部 IMCore 函数。这将解锁 react、edit、unsend、reply(线程式)、sendWithEffect、poll 和 poll-vote(原生 Messages 投票)、renameGroup、setGroupIcon、addParticipant、removeParticipant、leaveGroup,以及输入指示和已读回执。

本页推荐的操作面需要私有 API 模式。imsg README 对此要求写得很明确:

诸如 read、typing、launch、基于桥接的富发送、消息变更和聊天管理等高级功能都是可选的。它们需要禁用 SIP,并将一个 helper dylib 注入到 Messages.app 中。启用 SIP 时,imsg launch 会拒绝注入。

辅助注入技术使用 imsg 自己的 dylib 来访问消息私有 API。 OpenClaw iMessage 路径中没有第三方服务器或 BlueBubbles 运行时。

设置

  1. 在运行 Messages.app 的 Mac 上安装(或升级)imsg:

    bash
    brew install steipete/tap/imsgbrew update && brew upgrade imsgimsg --versionimsg status --json

    imsg status --json 的输出会报告 bridge_version、rpc_methods 以及每个方法的 selectors,这样你就能在开始之前看到当前构建支持哪些能力。

  2. 禁用系统完整性保护和(在现代 macOS 上)库验证。 将非 Apple 帮助程序 dylib 注入 Apple-signed Messages.app 需要SIP 关闭 和 库验证放松。恢复模式 SIP 步骤是 macOS- 版本特定的:

    • macOS 10.13-10.15(Sierra-Catalina): 通过 Terminal 禁用 Library Validation,重启进入恢复模式,运行 csrutil disable,然后重启。
    • macOS 11+(Big Sur 及更高版本),Intel: 进入恢复模式(或 Internet Recovery),运行 csrutil disable,然后重启。
    • macOS 11+,Apple Silicon: 使用电源键启动流程进入恢复模式;在较新的 macOS 版本上,点击 Continue 时按住 Left Shift 键,然后运行 csrutil disable。虚拟机环境遵循单独流程,因此请先拍摄 VM 快照。

    在 macOS 11 及更高版本上,单独执行 csrutil disable 通常还不够。 Apple 仍然会将 Messages.app 作为平台二进制文件执行 library validation,因此即使关闭 SIP,adhoc 签名的 helper 也会被拒绝(Library Validation failed: ... platform binary, but mapped file is not)。在禁用 SIP 之后,还要禁用 library validation 并重启:

    bash
    sudo defaults write /Library/Preferences/com.apple.security.libraryvalidation.plist DisableLibraryValidation -bool true

    macOS 26 (Tahoe),在 26.5.1: SIP off plus 上验证,上面的 DisableLibraryValidation 命令足以注入助手26.0 到 26.5.x. 不需要启动参数。 plist 是决定性因素,也是 Tahoe 上注入失败时最常见的缺失步骤:

    • 有 plist: imsg launch 会完成注入,并且 imsg status 会报告 advanced_features: true。
    • 没有 plist(即使 SIP 已关闭): imsg launch 会失败,并报出 Failed to launch: Timeout waiting for Messages.app to initialize。AMFI 在加载时拒绝了 adhoc helper,因此 bridge 永远无法就绪,启动最终超时。这个超时是大多数人在 Tahoe 上遇到的症状;修复方法就是上面的 plist,而不是采取更激进的手段。

    如果在 macOS 升级后,imsg launch 注入失败,或者某些特定 selectors 开始返回 false,通常就是这个门槛导致的。在假设 SIP 步骤本身失败之前,请先检查你的 SIP 和 library-validation 状态。如果这些设置都正确,但 bridge 仍然无法注入,请收集 imsg status --json 和 imsg launch 的输出并反馈给 imsg 项目,而不是进一步削弱系统级安全控制。

  3. 注入 helper。 在禁用 SIP 且已登录 Messages.app 的情况下:

    bash
    imsg launch

    当 SIP 仍然启用时,imsg launch 会拒绝注入,因此这也可作为第 2 步是否生效的确认。

  4. 从 OpenClaw 验证桥接:

    bash
    openclaw channels status --probe

    iMessage 条目应报告 works,imsg status --json | jq '{rpc_methods, selectors}' 应显示 macOS 构建公开的功能。创建民意调查需要 selectors.pollPayloadMessage;投票需要 selectors.pollVoteMessage 和 poll.vote RPC 方法。 OpenClaw 插件仅通告缓存检查支持的操作,而空缓存则保持乐观状态并在首次调度时进行检查。

如果 openclaw channels status --probe 将通道报告为 works 但特定操作在调度时抛出“iMessage <action> 需要 imsg 私有 API 桥”,请再次运行 imsg launch — 帮助程序可能会退出(Messages.app 重新启动, OS 更新等)和缓存的 available: true 状态将保持广告操作,直到下一次检查刷新。

当 SIP 保持启用时

如果根据你的威胁模型不能关闭 SIP:

  • imsg 会回退到基本模式——仅支持文本+媒体+接收。
  • OpenClaw插件仍然通告text/media发送和入站监控;它隐藏了操作界面中的 react、edit、unsend、reply、sendWithEffect 和组操作(根据每个方法的功能门)。
  • 您可以在关闭 SIP 的情况下运行单独的非 Apple-Silicon Mac(或专用机器人 Mac)来处理 iMessage 工作负载,同时在主要设备上保持启用 SIP。请参阅 专用机器人 macOS 用户(单独的 iMessage 身份)。
本页有帮助吗?