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