macOS コンパニオンアプリ
リモートコントロール
このフローにより、macOSアプリは別のホスト(デスクトップ/サーバー)で実行されているOpenClawゲートウェイの完全なリモートコントロールとして機能します。これはアプリの Remote over SSH(リモート実行)機能です。すべての機能(ヘルスチェック、Voice Wake転送、Web Chat)は、設定 → 一般 からの同じリモートSSH構成を再利用します。
モード
- ローカル(このMac): すべてがラップトップ上で実行されます。SSHは関与しません。
- Remote over SSH(デフォルト): OpenClawコマンドはリモートホスト上で実行されます。macアプリは
-o BatchModeと選択したID/キー、およびローカルポートフォワードを使用してSSH接続を開きます。 - Remote direct (ws/wss): SSHトンネルはありません。macアプリはゲートウェイURLに直接接続します(例:Tailscale Serveまたは公開HTTPSリバースプロキシ経由)。
リモートトランスポート
リモートモードは2つのトランスポートをサポートします:
- SSHトンネル(デフォルト):
ssh -N -L ...を使用してゲートウェイポートをlocalhostに転送します。トンネルがループバックであるため、ゲートウェイはノードのIPを127.0.0.1として認識します。 - ダイレクト (ws/wss): ゲートウェイURLに直接接続します。ゲートウェイは実際のクライアントIPを認識します。
リモートホストでの前提条件
- Node + pnpmをインストールし、OpenClaw CLIをビルド/インストールします(
pnpm install && pnpm build && pnpm link --global)。 - 非対話型シェルで
openclawがPATH上にあることを確認します(必要に応じて/usr/local/binまたは/opt/homebrew/binにシンボリックリンクを作成)。 - キー認証でSSHを開きます。LAN外での安定した到達性には Tailscale IPを推奨します。
macOSアプリのセットアップ
- 設定 → 一般 を開きます。
- OpenClaw runs の下で、Remote over SSH を選択し、以下を設定します:
- トランスポート: SSHトンネル または ダイレクト (ws/wss)。
- SSHターゲット:
user@host(オプションで:port)。- ゲートウェイが同じLAN上にありBonjourをアドバタイズしている場合、検出されたリストから選択してこのフィールドを自動入力できます。
- ゲートウェイURL(ダイレクトのみ):
wss://gateway.example.ts.net(ローカル/LANの場合はws://...)。 - IDファイル(詳細設定): キーへのパス。
- プロジェクトルート(詳細設定): コマンドに使用されるリモートチェックアウトパス。
- CLIパス(詳細設定): 実行可能な
openclawエントリーポイント/バイナリへのオプションパス(アドバタイズ時に自動入力)。
- Test remote を押します。成功は、リモートの
openclaw status --jsonが正しく実行されたことを示します。失敗は通常、PATH/CLIの問題を意味します;終了コード127は、リモートでCLIが見つからないことを意味します。 - ヘルスチェックとWeb Chatは、このSSHトンネルを介して自動的に実行されるようになります。
Web Chat
- SSHトンネル: Web Chatは、転送されたWebSocket制御ポート(デフォルト18789)を介してゲートウェイに接続します。
- ダイレクト (ws/wss): Web Chatは設定されたゲートウェイURLに直接接続します。
- 別個のWebChat HTTPサーバーはもうありません。
権限
- リモートホストには、ローカルと同じTCC承認(自動化、アクセシビリティ、画面収録、マイク、音声認識、通知)が必要です。そのマシンでオンボーディングを実行して一度付与します。
- ノードは、エージェントが利用可能なものを知るために、
node.list/node.describeを介して権限状態をアドバタイズします。
セキュリティに関する注意
- リモートホストではループバックバインドを優先し、SSHまたはTailscale経由で接続します。
- SSHトンネリングは厳格なホストキーチェックを使用します;ホストキーが
~/.ssh/known_hostsに存在するように最初に信頼します。 - ゲートウェイを非ループバックインターフェースにバインドする場合は、トークン/パスワード認証を要求してください。
- セキュリティ および Tailscale を参照してください。
WhatsAppログインフロー(リモート)
- リモートホスト上で
openclaw channels login --verboseを実行します。携帯電話のWhatsAppでQRコードをスキャンします。 - 認証が期限切れになった場合は、そのホスト上でログインを再実行します。ヘルスチェックはリンクの問題を表面化させます。
トラブルシューティング
- 終了コード127 / 見つかりません: 非ログインシェル用のPATHに
openclawがありません。/etc/paths、シェルのrcファイルに追加するか、/usr/local/bin//opt/homebrew/binにシンボリックリンクを作成してください。 - ヘルスプローブ失敗: SSHの到達性、PATH、およびBaileysがログインしているか(
openclaw status --json)を確認してください。 - Web Chatが固まる: ゲートウェイがリモートホスト上で実行されており、転送ポートがゲートウェイWSポートと一致していることを確認してください;UIは正常なWS接続を必要とします。
- ノードIPが127.0.0.1と表示される: SSHトンネルでは予期された動作です。ゲートウェイに実際のクライアントIPを認識させたい場合は、トランスポートを**ダイレクト (ws/wss)**に切り替えてください。
- Voice Wake: トリガーフレーズはリモートモードで自動的に転送されます;別個のフォワーダーは必要ありません。
通知サウンド
スクリプトから openclaw と node.invoke を使用して、通知ごとにサウンドを選択します。例:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
アプリにはもはやグローバルな「デフォルトサウンド」トグルはありません;呼び出し側はリクエストごとにサウンド(またはなし)を選択します。