2026 OpenClaw на нативном macOS: официальное приложение + CLI, OPENCLAW_STATE_DIR, TCC, LaunchAgent и двойной Gateway — runbook

Около 16 мин чтения · MACCOME

Сниппет: материал описывает только инженерные факты на нативном macOS до контейнера: графический онбординг через официальное приложение или включение CLI openclaw в ваш стандарт пакетов. Критично положить OPENCLAW_STATE_DIR туда, где путь не попадает под синхронизацию каталогов «Рабочий стол и документы» в iCloud и прочие облачные клиенты. TCC (универсальный доступ, автоматизация / AppleEvents, запись экрана, при голосовых сценариях — микрофон) — часть релизных ворот. Нужно явно снять конфликт LaunchAgent (launchd) и ручного openclaw gateway start («два Gateway»), затем зафиксировать артефакты через openclaw doctor и openclaw gateway status. Статья не заменяет общий гайд установки на три ОС и не описывает сеть Docker — это зона продуктивного Docker Gateway runbook. После прочтения можно объяснить безопасности и эксплуатации разницу локального и удалённого Gateway и почему выделенные удалённые Mac в Сингапуре, Токио, Сеуле, Гонконге или Северной Америке часто лучше как круглосуточные точки входа. Проверки после установки и WSL2: doctor и диагностика Gateway; география аренды: мультирегиональный гид по стоимости узлов Mac mini.

Зачем отдельный чек-лист «нативный macOS», а не свалить всё в Docker или обзор трёх ОС

  1. Синхронизация тихо меняет временную семантику каталога состояния. Если включена синхронизация «Рабочий стол и документы» через iCloud или проекты лежат на смонтированном облачном томе, а OPENCLAW_STATE_DIR оказался под этим деревом, появляются гонки вроде «pairing то есть, то нет, после перезагрузки токены расходятся» — поведение, которое в Linux-контейнере почти не встречается.
  2. TCC привязан к конкретной исполняемой сущности. openclaw из терминала и helper из официального бандла для системы — разные лица; после смены пути или апгрейда старые разрешения не наследуются. Наверху это часто выглядит как «навыки без звука зависли», а не как HTTP 403.
  3. Универсальный доступ и автоматизация — разные треки приватности. Многие команды включают только доступность и забывают про AppleScript/OSA-мосты с автоматизацией (AppleEvents), из-за чего разбор уходит не туда.
  4. Запись экрана не эквивалентна доступности. Без пункта «Запись экрана» пайплайны с пикселями ждут первый кадр бесконечно; в логах это похоже на «медленную модель», хотя это засов приватности.
  5. launchd и интерактивный запуск дают два родительских процесса. Оба пишут один state или слушают один порт — типичная картина «health то зелёный, то красный», когда на самом деле процессов больше одного.
  6. Локальная vs удалённая авторитетность — эксплуатационный выбор. Ноутбук как точка входа принимает сон по крышке, конференц-Wi‑Fi и split VPN как случайные источники сбоев; арендованный Mac на постоянном питании даёт другую кривую доступности.

Установка на три ОС, каналы версий и кросс-платформенный выкат остаются в гайде Windows / macOS / Linux; проверка после установки, соседство WSL2 и поток doctor — в статье про doctor и Gateway. Если целевой образ — контейнеры и оркестрация, основной документ — Docker production runbook; этот текст закрывает щели на голом macOS. Узлы и сроки аренды читайте параллельно с мультирегиональным гидом по стоимости, чтобы меняли не только софт, но и географию.

На ревью строго разделяйте ошибку конфигурации и возможность платформы: первое должно сходиться к одной строке по таблице симптомов ниже за 15 минут; второе оправдывает запрос фичи или апгрейд. Прежде чем писать «не воспроизводится»: state на локальном APFS? Есть актуальные скриншоты TCC под эту версию? Label LaunchAgent уникален? Эти три вопроса отсекают ложную «магию».

OPENCLAW_STATE_DIR: как номер актива, а не «любая домашняя папка»

Задайте переменную в утверждённом shell-профиле или в словаре EnvironmentVariables LaunchAgent и занесите в CMDB «путь → бизнес-система → владелец». Примеры: /usr/local/var/openclaw, /opt/openclaw/state или несинхронизированное /Users/Shared/…; важно, чтобы точка монтирования из df -h не перехватывалась облачным агентом синхронизации.

Если принципиально пользовательское дерево, избегайте Mobile Documents, облачных заглушек и перенаправлений «Документы» через MDM. Сценарий «у коллеги A работает, у B нет» начинается не с переустановки, а со сверки OPENCLAW_STATE_DIR, узла устройства и активности inode.

Несколько учётных записей на одной тестовой машине не должны неформально делить один каталог состояния: блокировки SQLite, жизненный цикл .sock и ротация токенов там ломаются. Либо отдельные каталоги и сервисные личности, либо настоящий кластер с архитектурным решением.

Таблица симптомов на первые 15 минут (когда звонит телефон)

В каждой строке одна главная зона ответственности (клиент / платформа macOS / сервис Gateway / внешняя сеть), чтобы пять человек одновременно не правили одну plist по SSH.

Симптом Корень Шаг
Сопряжение отваливается время от времени, после перезагрузки иногда восстанавливается State под iCloud/облаком или два родителя пишут один каталог Перенести на локальный APFS; явно выбрать launchd или только ручной запуск
Зависают AppleScript / управление окнами Автоматизация или универсальный доступ не выданы реальному бинарнику Системные настройки → Конфиденциальность и безопасность построчно; после апгрейда повторить выдачу
Снимок/захват без вывода Нет пункта «Запись экрана» Разрешить нужный бинарник; перезапустить родительский процесс Gateway для согласованного TCC
Порт занят или WebSocket-рукопожатие нестабильно Два Gateway или старый процесс не завершился launchctl bootout для проверки plist или закрыть интерактивную сессию; одна схема оркестрации
Днём нормально, ночью задачи мертвы Сон ноутбука / энергосберегающая сеть Перенести авторитетный Gateway на постоянно включённый удалённый Mac; локально оставить лёгкий CLI-клиент
warning

Наслоение планировщиков — типичная человеческая ошибка: если в проде уже есть LaunchAgent, «быстро поднять шлюз руками» должно быть под запретом без документированного bootout или kickstart -k. Иначе дежурный под давлением запускает второй процесс и получает двойные слушатели, которые часто видны только в дампе трафика.

TCC: включить «Системные настройки» в цепочку релиза

Универсальный доступ закрывает сценарии «управлять другими приложениями как ассистивный пользователь»; автоматизация (AppleEvents) — может ли скрипт посылать события целевым приложениям; запись экрана открывает пиксельный канал. Без любого из трёх навыки часто «вечно ждут», а не бросают явную ошибку. Для голосовых сценариев микрофон включайте явно — не переносите допущения из Linux-контейнера.

После крупного апгрейда macOS или OpenClaw закладывайте 10 минут обхода приватности: ответственный, чек-лист, скриншоты в заявке на изменение. Устные «точно включил» в распределённой смене не работают.

В регулируемых отраслях те же скриншоты помогают внутреннему аудиту принципа минимальных привилегий: какой бинарник, когда и с каким тикетом — не только декларации политики.

LaunchAgent и ручной openclaw gateway start: только один «канон»

LaunchAgent нужен без присмотра: после перезагрузки, падения watchdog, кратких сетевых провалов конфигурация возвращается к целевому состоянию. Логично на арендованных Mac с сетевым питанием рядом с CI-runner или сайдкаром модели. Ручной запуск — стол разработчика: человек смотрит в терминал и понимает, что это отладка, а не прод.

Для отладки начинайте с launchctl print gui/$(id -u), чтобы увидеть метки и последние коды выхода. Если нужен ручной старт, аккуратно выгрузите или закомментируйте LaunchAgent, чтобы логи соответствовали PID перед глазами.

В командной документации держите два блока команд «режим разработки» и «режим машзала» и спрашивайте в шаблоне PR, в каком режиме проходила проверка — иначе возвращается ловушка «локально зелёно, в проде красно».

Локальный и удалённый Gateway: разделение зон отказа, не маркетинг

Локальный Gateway привязывает управление к машине человека: быстрые итерации, короткие пути диалогов, но наследует сон, VPN, переключение хот-спота и конференц-ПО, захватывающее аудио. Удалённый закрепляет авторитетные сессии и долгие соединения на фиксированном хосте и выходе — уместен как организационный вход или плоскость исполнения 7×24.

CLI может оставаться тем же; меняется какой диск держит основной state, какой интерфейс несёт маршрут по умолчанию и какая стойка даёт минимальную RTT к ASC / кластеру моделей. Зафиксируйте карту в каталоге сервисов, чтобы security review не смешивал «песочницу на ноутбуке» и «авторитет в стойке Сингапура».

Если оба режима живут параллельно, используйте разные префиксы имён хостов в мониторинге — иначе две серии в Grafana сольются в один ложный алерт «латентность gateway».

Семь шагов: от установки пакета до архивируемых доказательств

  1. Канал и pin версии: та же semver, что в CI; при выборе официального приложения или CLI зафиксируйте стандартный путь, чтобы не расползалась идентичность бинарника.
  2. Каталог и права: создать OPENCLAW_STATE_DIR, логи, опционально кэш; владелец — пользователь исполнения, без случайного смешения с root.
  3. TCC одним проходом: универсальный доступ, автоматизация, запись экрана (и микрофон по необходимости) по списку навыков; скриншоты до/после.
  4. Заявить топологию: эта машина авторитетна или только клиент? Адрес привязки и политика портов согласованы с security groups.
  5. Выбрать оркестрацию: LaunchAgent (машзал) или только ручной режим (разработка) — без долгой серой зоны.
  6. Дымовый тест минимального канала: наименьшая разрешённая поверхность интеграции; через список процессов убедиться, что слушает один родитель.
  7. Заморозить доказательства: выводы openclaw doctor и openclaw gateway status приложить к изменению до переключения прод-трафика.

Для перекрёстной проверки симптомов на разных ОС см. статью doctor / Gateway; для слоёв образов и single-source токенов — прежде всего Docker production runbook, чтобы не записывать проблему cgroup как TCC.

bash
#!/usr/bin/env bash
set -euo pipefail
# В основном read-only зонд — пути подставьте по корпоративному стандарту
export OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-$HOME/Library/Application Support/OpenClawState-local}"
umask 077
mkdir -p "$OPENCLAW_STATE_DIR"
echo "OPENCLAW_STATE_DIR=$OPENCLAW_STATE_DIR"
command -v openclaw >/dev/null && openclaw doctor || echo "doctor: нет CLI"
openclaw gateway status 2>/dev/null || echo "gateway: нет ответа (норма если не запущен)"
launchctl print "gui/$(id -u)" 2>/dev/null | grep -i openclaw || echo "launchd: метка openclaw не найдена (возможен чисто ручной режим)"

Три жёстких показателя для дашборда или ревью изменений

  • Секунды от холодного старта до первого здорового gateway status: при регрессии сначала порядок зависимостей plist и заблокированные диалоги TCC, а не рантайм языка.
  • Доказательство через df, что OPENCLAW_STATE_DIR на локальном APFS: FUSE- или sync-заглушка = несоответствие.
  • Число родительских процессов в устойчивом режиме: стабильно больше одного — немедленная эскалация; краткие перекрытия (окно апгрейда) фиксируйте временем в тикете.

Без сырого вывода команд не пишите строку RCA — иначе следующая смена услышит ту же историю заново.

Почему «ноутбук на 7×24» часто проигрывает стабильному облачному Mac

Ноутбуки заточены под мобильность: крышка закрыта — сон, энергопрофили режут пик, корпоративные VPN перенаправляют realtime-трафик. Привязка авторитета к этому означает привязку SLA автоматизации к личному расписанию и Wi‑Fi переговорок.

MACCOME облачный Mac mini (M4 / M4 Pro) даёт выделенный Apple Silicon, фиксированное питание и предсказуемую топологию диска: LaunchAgent, долгоживущие токены и пробы могут сидеть на одной машине, пока ноутбуки остаются лёгкими клиентами. Сверяйте RTT и длительность аренды с гидом по латентности и стоимости узлов, чтобы избежать «шлюз следует за человеком».

Итог: нативные тикеты ≠ Docker-тикеты

TCC, синхронизируемые пути и launchd остаются в этом runbook; cgroup, digest образа и bridge-сеть — в документе Compose. Если инцидент задевает оба мира, разделите хронологию на две параллельные RCA — иначе останется только перекладывание ответственности.

Перед закрытием окна изменений снова выполните openclaw doctor и приложите вывод с номером версии к базе знаний; если авторитет должен быть удалённым, явно укажите, что проверка не проходила в режиме авторитетного ноутбука — иначе коллеги скопируют неверную конфигурацию.

FAQ

В продакшене всё на Docker Gateway — зачем разбираться в LaunchAgent?

Потому что первое сопряжение и старт часто происходят на голом macOS или на ноутбуке оператора до фиксации Compose. Без ясной границы между launchd и ручным запуском при инциденте легко поднять второй Gateway и занять порты.

Где сравнить тарифы и получить поддержку для постоянного Mac-хоста Gateway?

Публичные тарифы на странице цены аренды Mac mini; вопросы доступа и топологии — через центр помощи по облачному Mac mini.