Супутній застосунок OpenClaw для macOS (рядок меню + брокер gateway)
Застосунок macOS — це супутній застосунок у рядку меню для OpenClaw. Він керує дозволами, керує Gateway локально або підключається до нього (launchd або вручну), а також надає можливості macOS агенту як вузол.Що він робить
- Показує нативні сповіщення та стан у рядку меню.
- Керує запитами TCC (сповіщення, Accessibility, Screen Recording, Microphone, Speech Recognition, Automation/AppleScript).
- Запускає Gateway або підключається до нього (локального чи віддаленого).
- Надає інструменти лише для macOS (Canvas, Camera, Screen Recording,
system.run). - Запускає локальний сервіс хоста вузла в режимі remote (launchd) і зупиняє його в режимі local.
- За потреби розміщує PeekabooBridge для UI-автоматизації.
- Встановлює глобальний CLI (
openclaw) на запит через npm, pnpm або bun (застосунок надає перевагу npm, потім pnpm, потім bun; Node залишається рекомендованим середовищем виконання для Gateway).
Режим local і remote
- Local (типово): застосунок підключається до запущеного локального Gateway, якщо він є;
інакше вмикає сервіс launchd через
openclaw gateway install. - Remote: застосунок підключається до Gateway через SSH/Tailscale і ніколи не запускає локальний процес. Застосунок запускає локальний сервіс хоста вузла, щоб віддалений Gateway міг звертатися до цього Mac. Застосунок не запускає Gateway як дочірній процес. Виявлення Gateway тепер надає перевагу іменам Tailscale MagicDNS замість сирих IP tailnet, тому застосунок Mac надійніше відновлюється, коли IP tailnet змінюються.
Керування Launchd
Застосунок керує LaunchAgent для кожного користувача з міткоюai.openclaw.gateway
(або ai.openclaw.<profile> при використанні --profile/OPENCLAW_PROFILE; застарілі com.openclaw.* також вивантажуються).
ai.openclaw.<profile>, якщо використовуєте іменований профіль.
Якщо LaunchAgent не встановлено, увімкніть його із застосунку або виконайте
openclaw gateway install.
Можливості вузла (mac)
Застосунок macOS представляє себе як вузол. Типові команди:- Canvas:
canvas.present,canvas.navigate,canvas.eval,canvas.snapshot,canvas.a2ui.* - Camera:
camera.snap,camera.clip - Screen:
screen.record - System:
system.run,system.notify
permissions, щоб агенти могли визначати, що дозволено.
Сервіс вузла + IPC застосунку:
- Коли працює безголовий сервіс хоста вузла (режим remote), він підключається до Gateway WS як вузол.
system.runвиконується в застосунку macOS (контекст UI/TCC) через локальний Unix socket; запити підтвердження та вивід залишаються в застосунку.
Підтвердження виконання (system.run)
system.run контролюється через Exec approvals у застосунку macOS (Settings → Exec approvals).
Security + ask + allowlist зберігаються локально на Mac у:
- Записи
allowlist— це glob-шаблони для визначених шляхів до двійкових файлів. - Необроблений текст команди оболонки, що містить синтаксис керування оболонкою або розгортання (
&&,||,;,|,`,$,<,>,(,)), вважається промахомallowlistі потребує явного підтвердження (або додавання двійкового файла оболонки до allowlist). - Вибір “Always Allow” у запиті додає цю команду до allowlist.
- Перевизначення середовища
system.runфільтруються (відкидаютьсяPATH,DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4), а потім об’єднуються із середовищем застосунку. - Для оболонкових обгорток (
bash|sh|zsh ... -c/-lc) перевизначення середовища в межах запиту зводяться до невеликого явного allowlist (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Для рішень allow-always у режимі allowlist відомі обгортки диспетчеризації (
env,nice,nohup,stdbuf,timeout) зберігають внутрішні шляхи виконуваних файлів замість шляхів обгорток. Якщо безпечне розгортання неможливе, запис до allowlist автоматично не зберігається.
Глибокі посилання
Застосунок реєструє схему URLopenclaw:// для локальних дій.
openclaw://agent
Запускає запит agent до Gateway.
OC_I18N_900004
Параметри запиту:
message(обов’язковий)sessionKey(необов’язковий)thinking(необов’язковий)deliver/to/channel(необов’язкові)timeoutSeconds(необов’язковий)key(необов’язковий ключ режиму без нагляду)
- Без
keyзастосунок запитує підтвердження. - Без
keyзастосунок застосовує коротке обмеження на довжину повідомлення для запиту підтвердження та ігноруєdeliver/to/channel. - Із чинним
keyвиконання відбувається без нагляду (призначено для персональних автоматизацій).
Потік початкового налаштування (типовий)
- Встановіть і запустіть OpenClaw.app.
- Завершіть контрольний список дозволів (запити TCC).
- Переконайтеся, що активний режим Local і Gateway працює.
- Встановіть CLI, якщо вам потрібен доступ із термінала.
Розміщення каталогу стану (macOS)
Уникайте розміщення каталогу стану OpenClaw в iCloud або інших папках із хмарною синхронізацією. Шляхи з синхронізацією можуть додавати затримку і час від часу спричиняти конфлікти блокування файлів або синхронізації для сеансів і облікових даних. Надавайте перевагу локальному шляху стану без синхронізації, наприклад: OC_I18N_900005 Якщоopenclaw doctor виявить стан у:
~/Library/Mobile Documents/com~apple~CloudDocs/...~/Library/CloudStorage/...
Збірка та процес розробки (native)
cd apps/macos && swift buildswift run OpenClaw(або Xcode)- Пакування застосунку:
scripts/package-mac-app.sh
Налагодження підключення до gateway (CLI macOS)
Використовуйте CLI для налагодження, щоб перевірити той самий handshake WebSocket Gateway і логіку виявлення, які використовує застосунок macOS, без запуску самого застосунку. OC_I18N_900006 Параметри connect:--url <ws://host:port>: перевизначити конфігурацію--mode <local|remote>: визначити з конфігурації (типово: конфігурація або local)--probe: примусово виконати нову перевірку стану--timeout <ms>: час очікування запиту (типово:15000)--json: структурований вивід для порівняння
--include-local: включити gateway, які було б відфільтровано як “local”--timeout <ms>: загальне вікно виявлення (типово:2000)--json: структурований вивід для порівняння
openclaw gateway discover --json, щоб побачити, чи
конвеєр виявлення застосунку macOS (local. плюс налаштований wide-area домен, з
резервними варіантами wide-area і Tailscale Serve) відрізняється від
виявлення на основі dns-sd у Node CLI.
Внутрішня логіка віддаленого підключення (SSH-тунелі)
Коли застосунок macOS працює в режимі Remote, він відкриває SSH-тунель, щоб локальні UI-компоненти могли звертатися до віддаленого Gateway так, ніби він працює на localhost.Керувальний тунель (порт WebSocket Gateway)
- Призначення: перевірки стану, status, Web Chat, конфігурація та інші виклики площини керування.
- Локальний порт: порт Gateway (типово
18789), завжди стабільний. - Віддалений порт: той самий порт Gateway на віддаленому хості.
- Поведінка: без випадкового локального порту; застосунок повторно використовує наявний справний тунель або перезапускає його за потреби.
- Форма SSH:
ssh -N -L <local>:127.0.0.1:<remote>з параметрами BatchMode + ExitOnForwardFailure + keepalive. - Звітність IP: SSH-тунель використовує loopback, тому gateway бачитиме IP вузла
як
127.0.0.1. Якщо ви хочете, щоб відображалась справжня IP-адреса клієнта, використовуйте транспорт Direct (ws/wss) (див. віддалений доступ macOS).