macOS コンパニオンアプリ
macOS IPC
現在のモデル: ローカル Unix ソケットが ノード ホスト サービス を macOS アプリ に接続し、実行承認と system.run を処理します。 openclaw-mac デバッグ CLI が検出/接続チェック用に存在します。エージェントのアクションは依然として Gateway WebSocket と node.invoke を経由します。UI 自動化には PeekabooBridge を使用します。
目標
- TCC 関連の作業(通知、画面録画、マイク、音声認識、AppleScript)をすべて担当する単一の GUI アプリインスタンス。
- 自動化のための小さなインターフェース: Gateway + ノードコマンド、および UI 自動化のための PeekabooBridge。
- 予測可能な権限: 常に同じ署名付きバンドル ID、launchd によって起動されるため、TCC の許可が保持される。
仕組み
Gateway + ノード トランスポート
- アプリは Gateway(ローカルモード)を実行し、ノードとして接続します。
- エージェントのアクションは
node.invokeを介して実行されます(例:system.run,system.notify,canvas.*)。
ノード サービス + アプリ間 IPC
- ヘッドレスのノード ホスト サービスが Gateway WebSocket に接続します。
system.runリクエストは、ローカル Unix ソケットを介して macOS アプリに転送されます。- アプリは UI コンテキストで実行を行い、必要に応じてプロンプトを表示し、出力を返します。
ダイアグラム (SCI):
エージェント -> Gateway -> ノード サービス (WS)
| IPC (UDS + トークン + HMAC + TTL)
v
Mac アプリ (UI + TCC + system.run)
PeekabooBridge (UI 自動化)
- UI 自動化には、
bridge.sockという別の UNIX ソケットと PeekabooBridge JSON プロトコルを使用します。 - ホストの優先順位(クライアント側): Peekaboo.app → Claude.app → OpenClaw.app → ローカル実行。
- セキュリティ: ブリッジホストには許可された TeamID が必要です。DEBUG 専用の同一 UID エスケープハッチは
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(Peekaboo の慣例) によって保護されています。 - 詳細は PeekabooBridge の使用法 を参照してください。
運用フロー
- 再起動/リビルド:
SIGN_IDENTITY="Apple Development: <開発者名> ()" scripts/restart-mac.sh- 既存のインスタンスを終了
- Swift ビルド + パッケージング
- LaunchAgent の書き込み/ブートストラップ/起動
- 単一インスタンス: 同じバンドル ID を持つ別のインスタンスが実行中の場合、アプリは早期に終了します。