iMessage は Sentō のチャンネルの中でも独特です。bot もトークンも API もありません。統合は macOS の Messages アプリのローカル SQLite データベース経由で読み書きします。つまり、エージェントは Mac で動かす必要があります。
前提条件
- macOS インストールパス を使っている
- Messages アプリで iMessage にログインしている
- エージェントが Messages データベースを読むことに納得している — メッセージを受信するには読まざるを得ない
フルディスクアクセスを付与
macOS はデフォルトで Messages データベースへのアクセスをブロックします。手動で付与する必要あり。
- システム設定 → プライバシーとセキュリティ → フルディスクアクセス
+をクリック、アプリケーション → ユーティリティ → ターミナル(または iTerm、Warp、Ghostty、使っているもの)に移動- ON に切り替え
- ターミナルを再起動 して権限を有効に
これがないと、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 50でSQLITE_*エラーを探す。
Apple が macOS バージョンを上げてスキーマが変わった場合、macOS バージョンと最近のログ出力を添えて GitHub issue を開いてください。