macOS companion app
Удалённое управление
Этот сценарий позволяет приложению macOS выступать в роли полноценного пульта дистанционного управления для Gateway OpenClaw, работающего на другом хосте (настольном компьютере или сервере). Приложение подключается напрямую к доверенным URL-адресам Gateway в локальной сети или Tailnet либо управляет SSH-туннелем, если удалённый Gateway доступен только через loopback-интерфейс. Проверки работоспособности, перенаправление Voice Wake и Web Chat используют ту же удалённую конфигурацию из раздела Settings -> General.
Режимы
- Локальный (этот Mac): всё работает на ноутбуке; SSH не используется.
- Удалённый через SSH (по умолчанию): команды OpenClaw выполняются на удалённом хосте. Приложение открывает SSH-соединение с помощью
-o BatchMode, выбранных вами идентификационных данных или ключа и локального перенаправления порта. - Прямое удалённое подключение (ws/wss): без SSH-туннеля; приложение подключается непосредственно к URL-адресу Gateway (через локальную сеть, Tailscale, Tailscale Serve или общедоступный обратный прокси-сервер HTTPS).
Удалённые способы подключения
- SSH-туннель (по умолчанию): использует
ssh -N -L ...для перенаправления порта Gateway на localhost. Gateway видит IP-адрес Node как127.0.0.1, поскольку туннель использует loopback-интерфейс. - Прямое подключение (ws/wss): подключается непосредственно к URL-адресу Gateway. Gateway видит реальный IP-адрес клиента.
Приложение отключает мультиплексирование SSH-соединений и переход в фоновый режим после аутентификации для собственных процессов SSH, чтобы отслеживать и перезапускать конкретный процесс, даже если выбранный псевдоним включает ControlMaster или ForkAfterAuthentication.
По умолчанию проверка ключа SSH-хоста выполняется строго, поскольку через этот туннель передаются учётные данные Gateway. Чтобы использовать собственные правила доверия управляемого SSH-псевдонима, задайте --ssh-host-key-policy openssh с помощью openclaw-mac configure-remote или напрямую задайте для gateway.remote.sshHostKeyPolicy значение "openssh". Прежде чем включать этот режим, проверьте псевдоним и все соответствующие параметры Host * или системную конфигурацию. При изменении цели SSH (в приложении или через configure-remote) политика снова устанавливается в strict, если вы явно не включите этот режим повторно для новой цели.
В режиме SSH-туннеля обнаруженные имена хостов локальной сети или Tailnet сохраняются как gateway.remote.sshTarget. Приложение оставляет gateway.remote.url на локальной конечной точке туннеля (например, ws://127.0.0.1:18789), чтобы CLI, Web Chat и локальная служба хоста Node использовали одно и то же подключение через loopback-интерфейс. Если при обнаружении возвращаются и необработанные IP-адреса Tailnet, и стабильные имена хостов, приложение отдаёт предпочтение именам Tailscale MagicDNS или локальной сети, чтобы подключения лучше сохранялись при изменении адресов. Если локальный порт туннеля отличается от удалённого порта Gateway, задайте для gateway.remote.remotePort порт удалённого хоста.
В удалённом режиме за автоматизацию браузера отвечает хост Node CLI, а не Node нативного приложения macOS. Приложение по возможности запускает установленную службу хоста Node; чтобы включить управление браузером с этого Mac, установите или запустите её с помощью openclaw node install ... и openclaw node start (либо запустите openclaw node run ... на переднем плане), затем выберите целевой Node с поддержкой браузера.
Требования к удалённому хосту
- Установите Node и pnpm, затем соберите или установите CLI OpenClaw (
pnpm install && pnpm build && pnpm link --global). - Убедитесь, что
openclawдоступен в PATH для неинтерактивных оболочек (при необходимости создайте символическую ссылку в/usr/local/binили/opt/homebrew/bin). - Для подключения через SSH настройте аутентификацию SSH по ключу. Для стабильной доступности за пределами локальной сети рекомендуется использовать IP-адреса Tailscale.
Настройка приложения macOS
Чтобы предварительно настроить приложение через SSH без экрана приветствия:
openclaw-mac configure-remote \ --ssh-target user@gateway-host \ --local-port 18789 \ --remote-port 18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"Если Gateway уже доступен в доверенной локальной сети или Tailnet, можно полностью отказаться от SSH:
openclaw-mac configure-remote \ --direct-url ws://192.168.0.202:18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"Оба варианта записывают ~/.openclaw/openclaw.json, отмечают первоначальную настройку как завершённую и позволяют приложению управлять выбранным способом подключения при следующем запуске. Для --local-port/--remote-port по умолчанию используется 18789. Другие флаги: --password, --identity <path>, --ssh-host-key-policy <strict|openssh>, --project-root <path>, --cli-path <path>, --json. Выполните openclaw-mac configure-remote --help, чтобы просмотреть полную справку.
Чтобы вместо этого выполнить настройку через пользовательский интерфейс:
- Откройте Settings -> General.
- В разделе OpenClaw runs выберите Remote и задайте:
- Transport: SSH tunnel или Direct (ws/wss).
- SSH target:
user@host(необязательно —:port). Если Gateway находится в той же локальной сети и объявляет себя через Bonjour, выберите его в списке обнаруженных устройств, чтобы автоматически заполнить это поле. - Gateway URL (только для Direct):
wss://gateway.example.ts.net(илиws://...для локального подключения или подключения по локальной сети). - Identity file (расширенная настройка): путь к вашему ключу.
- Project root (расширенная настройка): путь к удалённой рабочей копии, используемой для выполнения команд.
- CLI path (расширенная настройка): необязательный путь к исполняемой точке входа или двоичному файлу
openclaw(заполняется автоматически, если объявлен).
- Нажмите Test remote. Успешный результат означает, что удалённая команда
openclaw status --jsonвыполнена правильно. Ошибки обычно указывают на проблемы с PATH или CLI; код завершения 127 означает, что CLI не найден на удалённом хосте. - Проверки работоспособности и Web Chat теперь автоматически выполняются через выбранный способ подключения.
Web Chat
- SSH-туннель: подключается к Gateway через перенаправленный управляющий порт WebSocket (по умолчанию 18789).
- Прямое подключение (ws/wss): подключается непосредственно к настроенному URL-адресу Gateway.
- Отдельного HTTP-сервера Web Chat нет.
Разрешения
- Удалённому хосту требуются те же разрешения TCC, что и локальному (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications). Один раз выполните первоначальную настройку на этом компьютере, чтобы предоставить их.
- Node передают сведения о состоянии своих разрешений через
node.list/node.describe, чтобы агенты знали, какие возможности доступны.
Примечания по безопасности
- На удалённом хосте предпочтительно привязывать службы к loopback-интерфейсу и подключаться через SSH, Tailscale Serve либо доверенный прямой URL-адрес Tailnet или локальной сети.
- Для SSH-туннелирования по умолчанию требуется уже доверенный ключ хоста. Сначала добавьте ключ хоста в настроенный файл известных хостов либо явно задайте
gateway.remote.sshHostKeyPolicy: "openssh"для управляемого псевдонима, правила доверия OpenSSH которого вы принимаете. - Если Gateway привязан к интерфейсу, отличному от loopback, требуйте действительную аутентификацию Gateway: токен, пароль или обратный прокси-сервер с учётом идентификации и параметром
gateway.auth.mode: "trusted-proxy". - См. разделы Безопасность и Tailscale.
Процесс входа в WhatsApp (удалённый режим)
- Выполните
openclaw channels login --channel whatsapp --verboseна удалённом хосте. Отсканируйте QR-код с помощью WhatsApp на телефоне. - Если срок действия аутентификации истёк, повторно выполните вход на этом хосте. Проверка работоспособности сообщает о проблемах с подключением.
Устранение неполадок
| Симптом | Причина / решение |
|---|---|
exit 127 / не найдено |
openclaw отсутствует в PATH для оболочек без входа в систему. Добавьте его в /etc/paths, файл конфигурации вашей оболочки или создайте символическую ссылку в /usr/local/bin//opt/homebrew/bin. |
| Проверка работоспособности завершилась с ошибкой | Проверьте доступность по SSH, PATH и наличие активного входа Baileys (WhatsApp) (openclaw status --json). |
| Веб-чат не отвечает | Убедитесь, что Gateway запущен на удалённом хосте, а перенаправленный порт соответствует порту WebSocket Gateway; для пользовательского интерфейса требуется работоспособное WebSocket-соединение. |
В качестве IP-адреса Node отображается 127.0.0.1 |
Это ожидаемо при использовании SSH-туннеля. Переключите Транспорт на Прямое подключение (ws/wss), если хотите, чтобы Gateway видел реальный IP-адрес клиента. |
| Панель управления работает, но возможности Mac недоступны | Соединение оператора/управления исправно, но соединение со вспомогательным Node не установлено либо в нём отсутствует набор команд. Откройте раздел устройств в строке меню и проверьте, находится ли Mac в состоянии paired · disconnected. Для конечных точек Tailscale Serve wss://*.ts.net приложение обнаруживает устаревшие закреплённые отпечатки конечных TLS-сертификатов после ротации сертификата, удаляет устаревший отпечаток, когда macOS начинает доверять новому сертификату, и автоматически повторяет попытку. Если сертификат не является доверенным на системном уровне или хост не имеет имени Tailscale Serve, задайте для gateway.remote.tlsFingerprint ожидаемый отпечаток сертификата, проверьте сертификат или переключитесь на Удалённое подключение по SSH. |
| Активация голосом | В удалённом режиме фразы активации перенаправляются автоматически; отдельный перенаправитель не требуется. |
Звуки уведомлений
Выбирайте звук для каждого уведомления из скриптов с помощью openclaw nodes notify, например:
openclaw nodes notify --node <id> --title "Проверка связи" --body "Удалённый Gateway готов" --sound GlassВ приложении нет глобального переключателя звука по умолчанию; вызывающая сторона выбирает звук (или его отсутствие) для каждого запроса.