iMessage は Sentō のチャンネルの中でも独特です。bot もトークンも API もありません。統合は macOS の Messages アプリのローカル SQLite データベース経由で読み書きします。つまり、エージェントは Mac で動かす必要があります。

前提条件

  • macOS インストールパス を使っている
  • Messages アプリで iMessage にログインしている
  • エージェントが Messages データベースを読むことに納得している — メッセージを受信するには読まざるを得ない

フルディスクアクセスを付与

macOS はデフォルトで Messages データベースへのアクセスをブロックします。手動で付与する必要あり。

  1. システム設定 → プライバシーとセキュリティ → フルディスクアクセス
  2. + をクリック、アプリケーション → ユーティリティ → ターミナル(または iTerm、Warp、Ghostty、使っているもの)に移動
  3. ON に切り替え
  4. ターミナルを再起動 して権限を有効に

これがないと、iMessage プラグインは最初のメッセージで SQLITE_CANTOPEN を投げます。

sento init を実行

npx sentoagent init

iMessage を選択。貼り付けるトークンはありません。インストーラは、エージェントが応答し、会話する iMessage アカウントに紐づいた電話番号または email を聞いてきます。

仕組み

  • 受信:バックグラウンドプロセスが数秒ごとに ~/Library/Messages/chat.db をポーリングして、設定したアイデンティティにマッチする新しいメッセージを探します。
  • 送信:AppleScript が Messages アプリに送信を指示します。メッセージは実際の iMessage アカウントを通るので、受信者はあなたの番号/email から見えます。

制限

  • Mac 専用。Apple は公式の iMessage API を提供していません。Messages データベースが唯一の入り口。
  • ベストエフォートの互換性。Apple はいつでも macOS アップデートで DB スキーマを変更できます。そうなると、Sentō にバージョンアップが必要かもしれません。
  • グループチャットは macOS バージョンに依存して部分的サポート
  • 既読レシートや「入力中」インジケータなし — AppleScript の送信 API はこれらを公開しません。

問題が起きたら

  • 最初のチェック:Messages.app が起動していてログインしているか?
  • 2 番目:Sentō を起動したターミナル(別のではなく)にフルディスクアクセスを付与したか?
  • 3 番目:sento logs -n 50SQLITE_* エラーを探す。

Apple が macOS バージョンを上げてスキーマが変わった場合、macOS バージョンと最近のログ出力を添えて GitHub issue を開いてください。