Communityコーディング&開発github.com

imsg

OpenClawエージェントがmacOSのメッセージアプリ経由でiMessage/SMSの送受信、グループ管理、リアクション、投票などを実行するためのスキルです。

imsg とは?

imsgスキルは、OpenClawエージェントがmacOSのMessages.appを操作して、iMessageやSMSのやり取りを自動化するためのツールです。このスキルを使用すると、エージェントはユーザーに代わってメッセージの送信、ファイルの添付、既存のスレッドへの返信、リアクション(タップバック)、Apple純正の投票機能の作成や投票、さらにはグループの作成・編集・脱退・削除など、幅広い操作を実行できます。また、メッセージの履歴をJSON形式で読み取ったり、新しいメッセージを監視(watch)する機能も備えています。 このスキルの特長は、macOSの公開API(Automation)と非公開API(ブリッジ)を状況に応じて使い分ける点です。公開APIで十分な操作(テキスト送信、基本的なリアクションなど)はそちらを優先し、高度な機能(スレッド返信、書式設定、エフェクト、編集・取り消し、グループ管理など)にはブリッジを使用します。ブリッジを利用する前に`imsg status`でホストの対応状況を確認し、必要に応じて`imsg launch`でMessages.appにブリッジを注入します。Linuxでは読み取りのみ可能で、送信やリアクションはできません。 セーフティルールとして、送信前に受信者と内容を必ず確認すること、曖昧な名前から勝手に相手を推測しないこと、グループの変更は明示的な承認を得てから行うことなどが定められています。これらのルールにより、意図しないメッセージ送信やグループ操作を防止します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/skills/imsg

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

imsg は何をしますか?

OpenClawエージェントがユーザーのローカルmacOS Messages.appアカウントを通じて動作する必要がある場合にimsgを使用します。iMessage/SMSの履歴を調べ、適切なDMまたはグループを選択し、メッセージやファイルを送信し、返信、リアクション、投票、またはプライベートAPIのiMessage機能を使用します。

Telegram、Signal、WhatsApp、Discord、Slack、または設定済みのチャンネルがすでに返信をルーティングしている現在のOpenClaw会話内で返信する場合は、このスキルを使用しないでください。

エージェントフロー

  1. 最初に会話を解決します。
  2. DM、既存のグループ、または新しいグループを選択します。
  3. 要求されたアクションを実行できる最も低い能力のコマンドを選択します。
  4. ユーザーが正確な受信者、内容、アクションをすでに指定していない限り、送信または表示状態の変更を確認します。
  5. 安定した識別子を使用して実行します。通常の送信/監視/履歴には--chat-idを、ブリッジアクションには--chatチャットGUIDを優先します。

複数のチャットやハンドルが一致する可能性がある場合、カジュアルな名前だけで受信者を推測しないでください。送信前に、一致した表示名、ハンドル、グループ参加者、メッセージテキスト/アクションを表示します。

ホスト要件

  • macOS 14以上でMessages.appがログインしていること(送信/リアクション/ブリッジアクション用)。
  • imsgまたはOpenClawを実行するプロセスコンテキストにフルディスクアクセス権限が必要です。Messages DBにアクセスできないと読み取りに失敗します。
  • パブリックsendを使用する場合、Messages.appのオートメーション権限が必要です。
  • パブリックimsg reactを実行するプロセスコンテキストにアクセシビリティ権限が必要です。System Events UIオートメーションを使用します。ブリッジtapbackは代わりにプライベートAPIを使用します。
  • オプションで、連絡先名の解決に連絡先権限が必要です。
  • SMS送信には、ユーザーのiPhoneからこのMacへのテキストメッセージ転送が必要です。
  • Linuxはコピーされたchat.dbのみ読み取り可能です。送信、リアクション、Messages.appの起動、既読マーク、タイピングはできません。

ターゲットの解決

--json読み取りを使用します。出力は改行区切りのJSONです。jqが利用可能な場合はjq -sを使用するか、各行を1つのオブジェクトとして直接消費します。

imsg chats --limit 25 --json | jq -s
imsg search --query "dinner" --match contains --json | jq -s
imsg history --chat-id 42 --limit 20 --attachments --json | jq -s
imsg group --chat-id 42 --json

ターゲットルール:

  • 電話番号/メールアドレスへのDM: ユーザーが正確なハンドルを指定した場合、または単一の明確なチャットが一致した後は、imsg send --toを使用します。
  • 既存のDMスレッド: imsg send --chat-id <id>は、名前を再解決するよりも安全です。
  • 既存のグループ: imsg group --chat-id <id> --jsonで検査し、--chat-idで送信し、groupからのチャットGUIDでブリッジします。
  • 新しいグループ: ユーザーが明示的にグループ作成を依頼した場合、または既存のグループが一致しない場合にのみchat-createを使用します。
  • あいまいなグループ名: 表示名だけでなく、参加者を確認します。
  • SMS: 要求された場合、またはiMessageフォールバックが望ましくない場合にのみ--service smsを使用します。SMSリレーにはテキストメッセージ転送が必要です。

このスキルではjqを必須の前提条件にしないでください。例で便利なフォーマッタとしてのみ使用されます。

機能の選択

十分な場合はパブリックMessagesオートメーションを使用します:

  • 読み取り/リスト/検索/監視: chats、group、history、search、watch
  • 基本的なテキスト/ファイル送信: send
  • チャット内の最新の受信メッセージへの標準タップバック: react

パブリックオートメーションでできない機能には、プライベートAPIブリッジのみを使用します:

  • リッチ返信、テキスト書式設定、エフェクト、件名、マルチパート送信
  • ネイティブApple Messagesの投票と投票
  • メッセージGUIDによるタップバックまたはタップバック削除
  • 編集、送信取消し、削除、とにかく通知
  • 既読レシート、タイピングインジケーター、ブリッジイベント監視
  • グループ作成/名前/写真/メンバー/退会/削除/マークアクション
  • アカウント、whois、ニックネームチェック

ブリッジアクションの前に、以下を確認します:

imsg status --json

ホストがブリッジアクションをサポートしているが、Messagesがまだ注入されていない場合は、imsg launchを実行する前に確認を求めます。これはMessages.appを強制終了して再起動しブリッジを注入するため、表示状態の変更として扱います:

imsg launch
imsg status --json

SIP、ライブラリ検証、プライベートエンタイトルメントチェック、または欠落しているセレクターがまだ機能をブロックしている場合、ユーザーにカジュアルにSIPを無効にするよう依頼しないでください。要求されたプライベートAPIアクションがこのホストでは利用できないことを説明し、存在する場合は最も近い非ブリッジアクションを提供します。

DMシナリオ

正確なハンドル、基本送信:

imsg send --to "+14155551212" --text "On my way" --service auto

既知のDMスレッド:

imsg send --chat-id 42 --text "On my way"
imsg send --chat-id 42 --file /path/to/photo.jpg

ユーザーが要求した場合のみチャンネルを強制:

imsg send --to "+14155551212" --text "green bubble" --service sms
imsg send --to "+14155551212" --text "iMessage only" --service imessage --no-sms-fallback

スレッド返信、書式設定、エフェクト、または添付ファイル返信:

imsg send-rich --chat 'iMessage;-;+15551234567' \
  --reply-to <message-guid> --text "reply text"
imsg send-rich --chat 'iMessage;-;+15551234567' --text 'hello world' \
  --format '[{"start":0,"length":5,"styles":["bold"]}]'
imsg send-rich --chat 'iMessage;-;+15551234567' --text "boom" --effect impact
imsg send-attachment --chat 'iMessage;-;+15551234567' \
  --reply-to <message-guid> --file /path/to/file.jpg

書式設定の範囲はUTF-16位置です。サポートされるスタイルにはbold、italic、underline、strikethroughがあります。生成されたJSONには--format-fileを使用します。

グループシナリオ

アクションの前に検査:

imsg group --chat-id 42 --json
imsg history --chat-id 42 --limit 20 --json | jq -s

既存のグループに送信:

imsg send --chat-id 42 --text "Works for me"

既存のグループでのブリッジ返信または投票:

imsg send-rich --chat 'iMessage;+;chat0000' \
  --reply-to <message-guid> --text "replying in thread"
imsg poll send --chat 'iMessage;+;chat0000' \
  --question "Dinner?" --option "Pizza" --option "Sushi"

明示的な要求がある場合のみグループを作成または変更:

imsg chat-create --addresses '+15551111111,+15552222222' --name 'Crew' --text 'gm'
imsg chat-name --chat 'iMessage;+;chat0000' --name 'Renamed'
imsg chat-photo --chat 'iMessage;+;chat0000' --file /path/to/group.jpg
imsg chat-add-member --chat 'iMessage;+;chat0000' --address +15553333333
imsg chat-remove-member --chat 'iMessage;+;chat0000' --address +15553333333
imsg chat-leave --chat 'iMessage;+;chat0000'
imsg chat-delete --chat 'iMessage;+;chat0000'
imsg chat-mark --chat 'iMessage;+;chat0000' --read

グループの変更は非常に目立ちます。メンバーシップ、名前、写真、既読状態の変更、退会、または削除の前に、正確なグループと参加者リストを確認します。

リアクションと返信

パブリックreactは制限されています。チャット内の最新の受信メッセージにのみ反応します。

imsg react --chat-id 42 --reaction like
imsg react --chat-id 42 --reaction love
imsg react --chat-id 42 --reaction dislike
imsg react --chat-id 42 --reaction laugh
imsg react --chat-id 42 --reaction emphasis
imsg react --chat-id 42 --reaction question

特定のメッセージGUIDまたは削除の場合は、ブリッジtapbackを使用します:

imsg tapback --chat 'iMessage;-;+15551234567' --message <message-guid> --kind love
imsg tapback --chat 'iMessage;-;+15551234567' --message <message-guid> --kind love --remove

スレッド返信にはsend-rich --reply-to <message-guid>を使用します。ユーザーが「それ」や「前のもの」と言った場合は、参照されているメッセージを確認します。

投票

ネイティブApple Messagesの投票にはブリッジが必要です。作成には少なくとも2つの--option値が必要です。投票には--option-id、--option-index、または--optionのいずれかが必要です。

メッセージは投票バルーンにオプションのみを表示します。--questionタイトルは受信者に表示されません。--question(必須)と少なくとも2つの--option値を設定します。

imsg poll send --chat 'iMessage;-;+15551234567' \
  --question "Dinner?" --option "Pizza" --option "Sushi"
imsg poll send --chat 'iMessage;+;chat0000' --reply-to <message-guid> \
  --question "Approve?" --option "Yes" --option "No"
imsg poll vote --chat 'iMessage;+;chat0000' \
  --poll <poll-message-guid> --option-id <option-id>

投票IDとオプションは以下で確認します:

imsg history --chat-id 42 --limit 20 --json | jq -s '.[] | select(.poll != null) | {guid, poll}'

投票行はpollイベントであり、タップバックではありません。それらを表示するためにwatch --reactionsは必要ありません。

監視と長時間実行エージェント

短い1回限りの待機にはwatchを使用します:

imsg watch --chat-id 42 --since-rowid 9000 --json
imsg watch --chat-id 42 --attachments --convert-attachments --json
imsg watch --chat-id 42 --reactions --json
imsg watch --chat-id 42 --bb-events --json

--since-rowidは排他的です。指定しない場合、watchは最新の行から開始します。watchはファイルシステムイベントと低頻度のポーリングフォールバックを使用するため、見逃したSQLiteサイドカーイベントを追いつくことができます。ポーリングオブジェクトは--reactionsなしで表示されます。

デーモンまたはマルチチャット統合にはimsg rpcを使用します。これはstdin/stdoutでJSON-RPC 2.0を話します。新しいブリッジまたはポーリングメソッドを使用する前に、imsg status --jsonでrpc_methodsを確認します。

安全ルール

  • ユーザーのリクエストにすでに正確な値が含まれている場合を除き、すべての送信前に受信者、チャット、および内容を確認します。
  • 表示状態の変更を確認します: 既読レシート、タイピングインジケーター、編集、送信取消し、削除、投票、タップバック、グループメンバーシップ、グループ名/写真、チャットの退会/削除。
  • 不明な番号やあいまいな連絡先名の一致に承認なしで送信しないでください。
  • 添付ファイルが存在し、意図されたファイルであることを確認します。
  • E.164電話番号を優先します。ローカル形式が必要な場合にのみ--region USなどのリージョンを使用します。
  • 利用可能だからといってブリッジアクションを使用しないでください。要求された動作に必要な場合にのみ使用します。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills when explicitly requested; install, verify, update, uninstall, publish, or sync skills.

関連スキル