Локальный OpenClaw на Apple Silicon выглядит как «ещё один демон Node», пока не вступает в игру TCC, каталог State и синхронизация iCloud Drive. Ниже — практичный маршрут от установки к постоянной работе: какие разрешения реально нужны шлюзу, куда класть состояние, как согласовать Node 24 с путями из .app, как завести автозапуск через launchd и сверить вывод doctor, а тяжёлый Xcode — вынести на высокопроизводительный удалённый Mac без смешения симптомов. Для публичного края и подписи вебхуков полезно держать отдельный runbook в духе
2026 OpenClaw: вебхук шлюза и интеграция с GitHub — публичный callback, проверка подписи и метки времени, воспроизводимая диагностика 401 и таймаутов.
1. TCC и «полный доступ к диску»: что именно просит шлюз
На macOS долгоживущий агент, читающий произвольные каталоги, упирается в TCC. Для инструментов вне песочницы Xcode часто нужен полный доступ к диску (Full Disk Access) и, при Apple Events, отдельные разрешения на автоматизацию. Ошибка выглядит как «файл есть в Finder, а процесс его не видит» без stack trace. В runbook укажите какой бинарник в списке: путь внутри .app/Contents/MacOS/… и node из Homebrew — разные записи TCC. После обновления .app проверьте путь, иначе разрешения останутся у старого файла.
doctor в тикет — так проще отличить TCC от бага конфигурации.2. Каталог State и ловушки iCloud Drive
Каталог State — это журналы, кэш, временные манифесты и всё, что не должно жить в Git. Если домашний каталог синхронизируется с iCloud Drive, вы получите гонки записи, «полупрочитанные» файлы и неожиданные паузы, когда клиент синхронизации блокирует потоки. Перенесите State на локальный том вне облака: отдельный каталог в ~/Library/Application Support или выделенный NVMe-путь, который не отмечен зелёной иконкой облака в Finder. Проверьте, что симлинки и переменные окружения, которые читает launchd, указывают на один и тот же физический путь до и после перезагрузки. Для команд с несколькими self-hosted runner на одной машине пересечение State и общих кэшей быстро превращается в тему диска и блокировок — см. соседний материал
2026: несколько самохостинговых Mac runner и параллельный CI — как настроить GitHub Actions Cache и локальный постоянный диск? Гонки блокировок, заполненный диск и очистка артефактов: FAQ корпоративного пула.
3. Расположение .app, Rosetta и Node 24
На Apple Silicon различайте arm64 и устаревшие x86-сборки. Если OpenClaw или MCP-серверы установлены как универсальный пакет, убедитесь, что подписанный бинарник действительно запускается нативно, а не через Rosetta — иначе вы удвоите набор зависимостей и удивитесь разнице в путях к нативным модулям. Node 24 стоит держать в одном канале поставки: либо pinned через менеджер версий, либо отдельный префикс, который вы экспортируете в EnvironmentVariables plist. В plist для launchd явно задайте PATH и NODE_OPTIONS; не рассчитывайте на интерактивную оболочку zsh. Путь к node внутри GUI-сессии и в агенте часто расходятся, что проявляется как «работает из Terminal и падает как сервис».
4. Автозапуск шлюза через launchd и журналы
Для пользовательского демона используйте LaunchAgent в ~/Library/LaunchAgents с уникальным Label, RunAtLoad и KeepAlive только если действительно нужен вечный супервизор — иначе бесконечные рестарты замаскируют корневую ошибку. Пропишите StandardOutPath и StandardErrorPath в каталог, который не ротируется внешним инструментом без сигнала SIGUSR1, иначе вы потеряете первую строку падения. После правок всегда launchctl bootout / bootstrap пары, а не дублируйте plist с тем же Label. Параллельный второй агент с тем же портом даст «случайные» 502 и гонки блокировок State.
5. Воспроизводимая сверка с doctor
Снимок doctor — это контрольная сумма здоровья установки. Запускайте его из того же контекста, что и боевая служба: тот же пользователь, тот же PATH, те же переменные для каталога State. Сравните вывод до и после обновления macOS или Xcode: предупреждения о сертификатах, часах и версиях инструментов лучше трактовать как блокирующие, если шлюз зависит от TLS или подписи артефактов. Сохраняйте вывод вместе с версией Node и хэшем конфигурации; приложите ссылку на тикет с портами и расписанием рестартов. Так саппорт видит, что изменилось, а не угадывает по скриншотам.
6. Тяжёлый Xcode и компиляция на удалённом Mac
Локальный MacBook отлично подходит для редактирования и лёгких MCP-инструментов, но сборка, архивирование и параллельные тесты симуляторов лучше вынести на машину с большим объёмом ОЗУ и быстрым SSD. Практический контур: фиксированный DerivedData на удалённой ноде, синхронизация исходников через git или rsync, запуск xcodebuild по SSH и возврат артефактов как отдельного шага. Локальный OpenClaw остаётся «тонким» шлюзом, а удалённый Mac принимает пиковую нагрузку компилятора и кэшей SwiftPM. Так вы не смешиваете джиттер MCP с дисковым штормом CoreSimulator и проще читаете doctor на обеих сторонах.
7. Короткий чеклист перед продом
- TCC: в списке именно тот бинарник, который запускает шлюз; после обновления .app пути перепроверены.
- State лежит вне iCloud; симлинки и переменные согласованы с plist
launchd. - Node 24 и нативность arm64 зафиксированы;
PATHв агенте совпадает с интерактивной отладкой. - Один Label на шлюз, отдельные логи stdout/stderr, нет дублирующих plist.
- Эталонный вывод
doctorсохранён вместе с версиями ОС, Xcode и Node. - Тяжёлые сборки перенесены на удалённый Mac; локальный шлюз измеряется отдельными метриками.
Почему для такого разделения удобен именно Mac mini на macOS
Когда шлюз остаётся дома, а сборки улетают в дата-центр, важны две вещи: стабильный локальный контур без сюрпризов TCC и предсказуемый удалённый воркер с широкой памятью под Xcode. macOS даёт единую модель разрешений, подписи кода и журналов launchd, а Apple Silicon в Mac mini сочетает низкое холостое потребление порядка нескольких ватт с запасом по CPU для stdio-серверов MCP. Gatekeeper, SIP и FileVault остаются понятным барьером для вредоносного ПО на сервисной учётке, что проще объяснить безопасности, чем самосборный Linux-образ на пустой коробке.
Если вы хотите закрепить локальный «тонкий» шлюз и при этом иметь рядом мощную облачную ноду под тяжёлые job без закупки стойки, Mac mini M4 остаётся сильной стартовой точкой: компактный корпус, тишина и нативный стек инструментов Apple. Оформите выделенный Mac в нужном регионе на главной странице Macstripe, чтобы выровнять задержку к удалённому Xcode и не смешивать пики компиляции с домашним шлюзом OpenClaw.