macOS companion app
Дистанційне керування
Цей потік дає змогу програмі macOS діяти як повноцінний пульт дистанційного керування для OpenClaw gateway, що працює на іншому хості (настільному комп’ютері/сервері). Це функція програми Віддалено через SSH (віддалений запуск). Усі функції — перевірки стану, пересилання Voice Wake і вебчат — повторно використовують ту саму віддалену конфігурацію SSH з Налаштування → Загальні.
Режими
- Локально (цей Mac): усе працює на ноутбуці. SSH не використовується.
- Віддалено через SSH (стандартно): команди OpenClaw виконуються на віддаленому хості. Програма Mac відкриває SSH-з’єднання з
-o BatchMode, вибраною ідентичністю/ключем і локальним перенаправленням порту. - Пряме віддалене підключення (ws/wss): без SSH-тунелю. Програма Mac підключається до URL Gateway напряму (наприклад, через Tailscale Serve або публічний зворотний проксі HTTPS).
Віддалені транспорти
Віддалений режим підтримує два транспорти:
- SSH-тунель (стандартно): використовує
ssh -N -L ..., щоб перенаправити порт Gateway на localhost. Gateway бачитиме IP Node як127.0.0.1, бо тунель є loopback. - Прямий (ws/wss): підключається безпосередньо до URL Gateway. Gateway бачить справжню IP-адресу клієнта.
У режимі SSH-тунелю виявлені імена хостів LAN/tailnet зберігаються як
gateway.remote.sshTarget. Програма тримає gateway.remote.url на локальній
кінцевій точці тунелю, наприклад ws://127.0.0.1:18789, щоб CLI, вебчат і
локальна служба хоста Node використовували той самий безпечний loopback-транспорт.
Автоматизацією браузера у віддаленому режимі володіє хост Node CLI, а не
нативний Node програми macOS. Програма запускає встановлену службу хоста Node,
коли це можливо; якщо вам потрібне керування браузером із цього Mac, установіть/запустіть її за допомогою
openclaw node install ... і openclaw node start (або запустіть
openclaw node run ... на передньому плані), а потім націльтеся на цей
Node із підтримкою браузера.
Передумови на віддаленому хості
- Установіть Node + pnpm і зберіть/установіть OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global). - Переконайтеся, що
openclawє в PATH для неінтерактивних оболонок (за потреби створіть символічне посилання в/usr/local/binабо/opt/homebrew/bin). - Відкрийте SSH з автентифікацією ключем. Ми рекомендуємо IP-адреси Tailscale для стабільної доступності поза LAN.
Налаштування програми macOS
- Відкрийте Налаштування → Загальні.
- У розділі OpenClaw запускається виберіть Віддалено через SSH і задайте:
- Транспорт: SSH-тунель або Прямий (ws/wss).
- Ціль SSH:
user@host(необов’язково:port).- Якщо Gateway у тій самій LAN і рекламує себе через Bonjour, виберіть його зі списку виявлених, щоб автоматично заповнити це поле.
- URL Gateway (лише пряме підключення):
wss://gateway.example.ts.net(абоws://...для локального/LAN). - Файл ідентичності (додатково): шлях до вашого ключа.
- Корінь проєкту (додатково): шлях до віддаленого checkout, який використовується для команд.
- Шлях CLI (додатково): необов’язковий шлях до виконуваної точки входу/бінарного файлу
openclaw(заповнюється автоматично, коли рекламується).
- Натисніть Перевірити віддалене підключення. Успіх означає, що віддалений
openclaw status --jsonвиконується коректно. Збої зазвичай означають проблеми з PATH/CLI; код виходу 127 означає, що CLI не знайдено віддалено. - Перевірки стану й вебчат тепер автоматично працюватимуть через цей SSH-тунель.
Вебчат
- SSH-тунель: вебчат підключається до Gateway через перенаправлений порт керування WebSocket (стандартно 18789).
- Прямий (ws/wss): вебчат підключається безпосередньо до налаштованого URL Gateway.
- Окремого HTTP-сервера WebChat більше немає.
Дозволи
- Віддаленому хосту потрібні ті самі схвалення TCC, що й локальному (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications). Запустіть онбординг на цій машині, щоб надати їх один раз.
- Node рекламують свій стан дозволів через
node.list/node.describe, щоб агенти знали, що доступно.
Примітки щодо безпеки
- Надавайте перевагу прив’язкам до loopback на віддаленому хості й підключайтеся через SSH або Tailscale.
- SSH-тунелювання використовує сувору перевірку ключа хоста; спочатку довірте ключу хоста, щоб він існував у
~/.ssh/known_hosts. - Якщо ви прив’язуєте Gateway до інтерфейсу, що не є loopback, вимагайте чинну автентифікацію Gateway: токен, пароль або зворотний проксі з урахуванням ідентичності з
gateway.auth.mode: "trusted-proxy". - Див. Безпека і Tailscale.
Потік входу WhatsApp (віддалено)
- Запустіть
openclaw channels login --verboseна віддаленому хості. Відскануйте QR за допомогою WhatsApp на телефоні. - Повторно запустіть вхід на цьому хості, якщо автентифікація спливе. Перевірка стану покаже проблеми зі зв’язком.
Усунення несправностей
- exit 127 / не знайдено:
openclawне в PATH для оболонок без входу. Додайте його до/etc/paths, rc-файлу вашої оболонки або створіть символічне посилання в/usr/local/bin//opt/homebrew/bin. - Зонд стану не вдався: перевірте доступність SSH, PATH і те, що Baileys увійшов у систему (
openclaw status --json). - Вебчат завис: підтвердьте, що Gateway працює на віддаленому хості, а перенаправлений порт збігається з портом WS Gateway; UI потребує справного WS-з’єднання.
- IP Node показує 127.0.0.1: очікувано з SSH-тунелем. Перемкніть Транспорт на Прямий (ws/wss), якщо хочете, щоб Gateway бачив справжню IP-адресу клієнта.
- Панель працює, але можливості Mac офлайн: це означає, що операторське/керівне з’єднання програми справне, але супутнє з’єднання Node не підключене або не має своєї командної поверхні. Відкрийте розділ пристрою в рядку меню й перевірте, чи Mac має стан
paired · disconnected. Для кінцевих точок Tailscale Servewss://*.ts.netпрограма виявляє застарілі успадковані TLS leaf pins після ротації сертифіката, очищає застарілий pin, коли macOS довіряє новому сертифікату, і повторює спробу автоматично. Якщо сертифікат не є довіреним на рівні системи або хост не є іменем Tailscale Serve, перегляньте сертифікат або перемкніться на Віддалено через SSH. - Voice Wake: тригерні фрази автоматично пересилаються у віддаленому режимі; окремий пересилач не потрібен.
Звуки сповіщень
Вибирайте звуки для кожного сповіщення зі сценаріїв за допомогою openclaw і node.invoke, наприклад:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
Глобального перемикача "стандартний звук" у програмі більше немає; викликачі вибирають звук (або жодного) для кожного запиту.