iMessage
imsg(stdio 上の JSON-RPC)で iMessage を接続:導入、設定、chat_id ルーティング。
ステータス:外部 CLI 統合。Gateway は imsg rpc(stdio 上の JSON-RPC)を起動します。
クイックセットアップ
1. この Mac の Messages にログインしていることを確認します。
2. imsg をインストールします:
- brew install steipete/tap/imsg
3. OpenClaw で channels.imessage.cliPath と channels.imessage.dbPath を設定します。
4. gateway を起動し、macOS のプロンプト(Automation + Full Disk Access)を承認します。
Minimal configuration:
{
channels: {
imessage: {
enabled: true,
cliPath: "/usr/local/bin/imsg",
dbPath: "/Users/<you>/Library/Messages/chat.db",
},
},
}What It Is
- macOS 上の imsg を介して iMessage チャンネル機能を提供します。
- 決定論的ルーティング:返信は常に iMessage に戻ります。
- DM はエージェントのメインセッションに折りたたまれます;グループは ''agent:'' として分離されます。
- 複数参加者のスレッドが is_group=false の形式で表示される場合でも、channels.imessage.groups を介して channels.imessage.groups でグループスレッドとして扱うことができます(以下の「グループのようなスレッド」を参照)。
設定の書き込み(Config writes)
デフォルトでは、/config set|unset によってトリガーされた更新を設定ファイルに書き戻すことを iMessage に許可します(commands.config: true が必要)。
Disable:
{
channels: { imessage: { configWrites: false } },
}Dependencies
- macOS で Messages にログインしていること。
- OpenClaw と imsg に Full Disk Access を付与する(Messages DB を読み取るため)。
- メッセージ送信時に Automation 権限のプロンプトが必要です。
- channels.imessage.cliPath は任意の「stdin/stdout プロキシコマンド」を指すことができます(例:wrapper スクリプト:別の Mac で SSH を介して imsg rpc を実行)。
セットアップ(高速パス)
1. Messages にログインしていることを確認します。
2. iMessage を設定し、gateway を起動します。
#
別の bot macOS ユーザーを使用する(アイデンティティの分離)
bot が 別の iMessage アイデンティティ で送信したい場合(個人用の Messages をクリーンに保つため)、別の Apple ID + 別の macOS ユーザーを使用できます:
1. 別の Apple ID を作成します(例:[email protected])。
- Apple は検証/2FA のために電話番号を要求する場合があります。
2. macOS ユーザーを作成します(例:openclawhome)し、そのユーザーとしてログインします。
3. そのユーザーで Messages を開き、bot Apple ID で iMessage にログインします。
4. Remote Login を有効にします(System Settings → General → Sharing → Remote Login)。
5. imsg をインストールします:
- brew install steipete/tap/imsg
6. ''ssh '' がパスワードなしで成功するように SSH を設定します。
7. channels.imessage.accounts.bot.cliPath を SSH wrapper に向け、bot ユーザー ID で imsg を実行します。
初回実行のヒント:送信/受信には bot ユーザー で GUI 権限(Automation + Full Disk Access)を承認する必要がある場合があります。imsg rpc がスタックしているかすぐに終了する場合、そのユーザーに切り替え(画面共有を使用できます)、imsg chats --limit 1 / imsg send ... を一度実行し、プロンプトを承認してから再試してください。
wrapper の例(''chmod +x'' を忘れずに、'''' をユーザー名に置き換えてください):
#!/usr/bin/env bash set -euo pipefail exec /usr/bin/ssh -o BatchMode=yes -o ConnectTimeout=5 -T '<bot-macos-user>'@localhost \ "/usr/local/bin/imsg" "$@"
設定の例:
{
channels: {
imessage: {
enabled: true,
accounts: {
bot: {
name: "Bot",
enabled: true,
cliPath: "/path/to/imsg-bot",
dbPath: "/Users/<bot-macos-user>/Library/Messages/chat.db",
},
},
},
},
}単一アカウントシナリオではフラット化されたフィールド(channels.imessage.cliPath、channels.imessage.dbPath)を使用でき、accounts を書く必要はありません。
#
リモート/SSH ソリューション(オプション)
iMessage を別の Mac に配置したい場合、channels.imessage.cliPath を SSH を介してリモートで imsg を実行する wrapper に向けます。OpenClaw は stdio のみが必要です。
wrapper の例:
#!/usr/bin/env bash exec ssh -T gateway-host imsg "$@"
リモート添付ファイル: cliPath がリモートホストを指す場合、Messages データベース内の添付ファイルパスはリモートマシン上のローカルパスです。channels.imessage.remoteHost を設定すると、OpenClaw が SCP を介して添付ファイルを自動的に取得できます:
{
channels: {
imessage: {
cliPath: "~/imsg-ssh",
remoteHost: "user@gateway-host",
includeAttachments: true,
},
},
}remoteHost を設定しない場合、OpenClaw は wrapper スクリプト内の SSH コマンドから推測を試みますが、信頼性のために明示的な設定が推奨されます。
##
Tailscale でリモート Mac に接続する(例)
gateway が Linux ホスト/VM で実行されているが、iMessage は Mac で実行する必要がある場合、Tailscale が最も単純なブリッジです:gateway は tailnet を介して Mac に接続し、SSH を介して imsg を実行し、SCP を介して添付ファイルを取得します。
アーキテクチャ:
┌──────────────────────────────┐ SSH (imsg rpc) ┌──────────────────────────┐
│ Gateway host (Linux/VM) │──────────────────────────────────▶│ Mac with Messages + imsg │
│ - openclaw gateway │ SCP (attachments) │ - Messages signed in │
│ - channels.imessage.cliPath │◀──────────────────────────────────│ - Remote Login enabled │
└──────────────────────────────┘ └──────────────────────────┘
▲
│ Tailscale tailnet (hostname or 100.x.y.z)
▼
user@gateway-host設定の例(Tailscale hostname を使用):
{
channels: {
imessage: {
enabled: true,
cliPath: "~/.openclaw/scripts/imsg-ssh",
remoteHost: "[email protected]",
includeAttachments: true,
dbPath: "/Users/bot/Library/Messages/chat.db",
},
},
}wrapper の例(~/.openclaw/scripts/imsg-ssh):
#!/usr/bin/env bash exec ssh -T [email protected] imsg "$@"
Notes:
- Mac が Messages にログインしており、Remote Login が有効になっていることを確認してください。
- SSH キーを使用して ssh [email protected] がプロンプトなしで動作することを確認してください。
- remoteHost は SCP で添付ファイルを取得するための SSH ターゲットと一致している必要があります。
複数アカウント:''channels.imessage.accounts'' を使用してアカウントごとに設定します(オプションの ''name'')。共有構造については ''/gateway/configuration'' を参照してください。''~/.openclaw/openclaw.json'' をコミットしないでください(通常、トークンが含まれています)。
アクセス制御(DM + グループ)
DM:
- デフォルト:channels.imessage.dmPolicy = "pairing"。
- 不明な送信者はペアリングコードを受け取ります;承認前はメッセージが処理されません(1時間の有効期限)。
- Approve:
- openclaw pairing list imessage
- ''openclaw pairing approve imessage ''''
- ペアリングは iMessage DM のデフォルトのトークン交換です。''Pairing'' を参照してください。
グループ:
- channels.imessage.groupPolicy = open | allowlist | disabled。
- allowlist の場合、channels.imessage.groupAllowFrom がどの送信者がトリガーできるかを制御します。
- iMessage にはネイティブの mention メタデータがないため、mention ゲートは agents.list[].groupChat.mentionPatterns(または messages.groupChat.mentionPatterns)に依存します。
- 複数のエージェントの場合、agents.list[].groupChat.mentionPatterns でエージェントごとのオーバーライドが可能です。
How It Works (Behavior)
- imsg はメッセージイベントをストリーミングします;gateway はそれらを共通のチャンネルエンベロープに正規化します。
- 返信は常に同じ chat ID またはハンドルに戻ります。
グループのようなスレッド(`is_group=false`)
一部の iMessage スレッドには複数の参加者がいる場合でも、is_group=false の形式で表示される場合があります(Messages がチャット識別子を保存する方法に依存)。
channels.imessage.groups で特定の channels.imessage.groups を明示的に設定すると、OpenClaw はそのスレッドを「グループ」として扱います(セッション分離とグループポリシーが適用されます)。