メインコンテンツへスキップ

iMessage(legacy: imsg)

新しいiMessageデプロイでは、BlueBubblesを使用してください。imsg統合はレガシーであり、将来のリリースで削除される可能性があります。
ステータス: レガシーな外部CLI統合。Gatewayはimsg rpcを起動し、stdio上のJSON-RPCで通信します(別個のデーモンやポートはありません)。

BlueBubbles (recommended)

新しいセットアップ向けの推奨iMessage経路です。

Pairing

iMessageのDMはデフォルトでpairingモードです。

Configuration reference

iMessageフィールドの完全なリファレンスです。

クイックセットアップ

1

Install and verify imsg

brew install steipete/tap/imsg
imsg rpc --help
2

Configure OpenClaw

{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/<you>/Library/Messages/chat.db",
    },
  },
}
3

Start gateway

openclaw gateway
4

Approve first DM pairing (default dmPolicy)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Pairingリクエストは1時間後に期限切れになります。

要件と権限(macOS)

  • imsgを実行するMacでMessagesにサインインしている必要があります。
  • OpenClaw/imsgを実行するプロセスコンテキストにはフルディスクアクセスが必要です(Messages DBアクセス)。
  • Messages.app経由でメッセージを送信するにはAutomation権限が必要です。
権限はプロセスコンテキストごとに付与されます。gatewayがヘッドレスで実行される場合(LaunchAgent/SSH)、同じコンテキストで一度だけ対話型コマンドを実行してプロンプトを表示させてください。
imsg chats --limit 1
# または
imsg send <handle> "test"

アクセス制御とルーティング

channels.imessage.dmPolicyはダイレクトメッセージを制御します。
  • pairing(デフォルト)
  • allowlist
  • openallowFrom"*"を含める必要があります)
  • disabled
allowlistフィールド: channels.imessage.allowFromallowlistエントリーには、ハンドルまたはチャットターゲット(chat_id:*chat_guid:*chat_identifier:*)を使用できます。

ACP会話バインディング

レガシーiMessageチャットはACPセッションにもバインドできます。 高速なオペレーターフロー:
  • DMまたは許可されたグループチャット内で/acp spawn codex --bind hereを実行します。
  • 以後、同じiMessage会話内のメッセージは、生成されたACPセッションにルーティングされます。
  • /newおよび/resetは、同じバインド済みACPセッションをその場でリセットします。
  • /acp closeはACPセッションを閉じ、バインディングを削除します。
設定済みの永続的バインディングは、トップレベルのbindings[]エントリーでtype: "acp"およびmatch.channel: "imessage"を使ってサポートされます。 match.peer.idには次を使用できます。
  • +15555550123user@example.comのような正規化済みDMハンドル
  • chat_id:<id>(安定したグループバインディングに推奨)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
例:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: { agent: "codex", backend: "acpx", mode: "persistent" },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "imessage",
        accountId: "default",
        peer: { kind: "group", id: "chat_id:123" },
      },
      acp: { label: "codex-group" },
    },
  ],
}
共有ACPバインディング動作についてはACP Agentsを参照してください。

デプロイパターン

専用のApple IDとmacOSユーザーを使い、botトラフィックを個人のMessagesプロフィールから分離します。一般的なフロー:
  1. 専用のmacOSユーザーを作成してサインインします。
  2. そのユーザーでbot用Apple IDを使ってMessagesにサインインします。
  3. そのユーザーにimsgをインストールします。
  4. OpenClawがそのユーザーコンテキストでimsgを実行できるようにSSHラッパーを作成します。
  5. channels.imessage.accounts.<id>.cliPath.dbPathをそのユーザープロファイルに向けます。
初回実行では、そのbotユーザーセッションでGUI承認(Automation + フルディスクアクセス)が必要になる場合があります。
一般的なトポロジー:
  • gatewayはLinux/VMで実行
  • iMessage + imsgはtailnet内のMacで実行
  • cliPathラッパーはSSHを使用してimsgを実行
  • remoteHostはSCP添付ファイル取得を有効化
例:
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
      includeAttachments: true,
      dbPath: "/Users/bot/Library/Messages/chat.db",
    },
  },
}
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
SSHキーを使用して、SSHとSCPの両方を非対話型にしてください。 まずホストキーが信頼されていることを確認してください(例: ssh bot@mac-mini.tailnet-1234.ts.net)。これによりknown_hostsが設定されます。
iMessageはchannels.imessage.accounts配下のアカウント単位configをサポートします。各アカウントは、cliPathdbPathallowFromgroupPolicymediaMaxMb、履歴設定、添付ファイルルートallowlistなどのフィールドを上書きできます。

メディア、チャンク化、配信ターゲット

  • 受信添付ファイルの取り込みは任意です: channels.imessage.includeAttachments
  • remoteHostが設定されている場合、リモート添付ファイルパスはSCP経由で取得できます
  • 添付ファイルパスは許可されたルートに一致する必要があります:
    • channels.imessage.attachmentRoots(ローカル)
    • channels.imessage.remoteAttachmentRoots(リモートSCPモード)
    • デフォルトのルートパターン: /Users/*/Library/Messages/Attachments
  • SCPは厳格なホストキー検証を使用します(StrictHostKeyChecking=yes
  • 送信メディアサイズにはchannels.imessage.mediaMaxMb(デフォルト16 MB)を使用します
  • テキストチャンク上限: channels.imessage.textChunkLimit(デフォルト4000)
  • チャンクモード: channels.imessage.chunkMode
    • length(デフォルト)
    • newline(段落優先分割)
推奨される明示的ターゲット:
  • chat_id:123(安定したルーティングに推奨)
  • chat_guid:...
  • chat_identifier:...
ハンドルターゲットもサポートされます:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

config書き込み

iMessageでは、デフォルトでチャンネル起点のconfig書き込みが許可されています(commands.config: trueのときの/config set|unset用)。 無効化する場合:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

トラブルシューティング

バイナリとRPCサポートを検証します。
imsg rpc --help
openclaw channels status --probe
probeでRPC未対応と表示された場合は、imsgを更新してください。
次を確認してください。
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • pairing承認(openclaw pairing list imessage
次を確認してください。
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • channels.imessage.groupsのallowlist動作
  • mentionパターン設定(agents.list[].groupChat.mentionPatterns
次を確認してください。
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • gatewayホストからのSSH/SCPキー認証
  • gatewayホスト上の~/.ssh/known_hostsにホストキーが存在すること
  • Messagesを実行しているMac上でのリモートパスの可読性
同じユーザー/セッションコンテキストの対話型GUIターミナルで再実行し、プロンプトを承認してください。
imsg chats --limit 1
imsg send <handle> "test"
OpenClaw/imsgを実行するプロセスコンテキストに、フルディスクアクセスとAutomationが付与されていることを確認してください。

設定リファレンスへのポインター

関連

  • Channels Overview — サポートされているすべてのチャンネル
  • Pairing — DM認証とpairingフロー
  • Groups — グループチャットの動作とmentionゲーティング
  • Channel Routing — メッセージのセッションルーティング
  • Security — アクセスモデルとハードニング