Задача поиска: закрепить openclaw@2026.5.x на сервисном удалённом Mac, пройти порог Node 24 в соответствии с актуальной документацией ветки релиза, выбрать ровно один канал установки (curl install.sh из официального зеркала или npm install -g), поднять onboard и демон, затем связать openclaw gateway status, openclaw doctor и openclaw config validate с понятным чтением JSON и tarball-чекпоинтом перед рискованными правками. Связанные материалы: ворота validate в CI, status JSON и doctor, неинтерактивный onboard, чеклист установки шлюза, prefetch и шлюз.

Три боли на загруженном раннере:

  1. Расхождение рантайма. Интерактивный SSH показывает Node 24 из менеджера версий, а LaunchAgent поднимает другой node; шлюз 2026.5.x падает на старте или ведёт себя нестабильно.
  2. Двойная установка. Смешение curl … install.sh и глобального npm без явного удаления даёт два бинарника openclaw в PATH и недетерминированные артефакты CI.
  3. Каскад без снимка. Частые git pull и предзагрузка зависимостей ускоряют доставку, но один неверный блок в openclaw.json множит отказы по job; без архива конфигурации откат превращается в ручной квест.

Матрица: curl install.sh против npm -g

Канал Когда выбирать Риски и контроль
curl … | bash по шагам из upstream Нужен повтор документации quickstart один в один, минимум локальной npm-политики Зафиксируйте URL и хеш скрипта в runbook; запретите «плавающий» редирект без ревью
npm install -g openclaw@^2026.5.0 с последующим пином минора Корпоративное зеркало npm, централизованные апрувы semver, единый кеш артефактов Включите openclaw --version в начало каждого job; не смешивайте с curl-путём на том же хосте

На MacPull, где команды параллелят высокочастотные pull и заранее прогревают кеши CocoaPods, npm или контейнерных слоёв, стабильный шлюз снижает число «ложных» падений пайплайна: пока doctor зелёный и validate даёт нулевой код, агенты и prefetch-скрипты не упираются в полуподнятый сервис.

Минимально воспроизводимые шаги

Шаг 1. Порог Node 24. В документации 2026.5.x закреплён ориентир на Node 24 как на поддерживаемый контур для шлюза; выровняйте golden-образ и учётку раннера заранее. Печатайте node -v из shell, который совпадает с тем, что попадёт в plist через абсолютный путь к бинарнику, без надежды только на .zshrc.

Шаг 2. Установка одним каналом. Либо официальный curl install.sh с проверенного источника, либо npm install -g с диапазоном, ограниченным 2026.5.x; задокументируйте выбор в README сервиса.

Шаг 3. Каталоги и чекпоинт. Экспортируйте OPENCLAW_HOME и OPENCLAW_CONFIG_HOME, выставьте права chmod 700, затем создайте архив до правок:

ts="$(date -u +%Y%m%dT%H%M%SZ)"
tar czf "${OPENCLAW_CONFIG_HOME}/../openclaw-config-${ts}.tgz" \
  -C "${OPENCLAW_CONFIG_HOME}" .
shasum -a 256 "${OPENCLAW_CONFIG_HOME}/../openclaw-config-${ts}.tgz" | tee "${OPENCLAW_CONFIG_HOME}/../openclaw-config-${ts}.sha256"

Шаг 4. Onboard и демон. Выполните openclaw onboard для сервисного пользователя, затем openclaw onboard --install-daemon, чтобы перезагрузки macOS не гасили шлюз; сверьте переменные окружения в LaunchAgent с SSH-сессией.

Шаг 5. status и doctor. Снимите openclaw gateway status в машиночитаемом виде и openclaw doctor; объедините вывод в один лог CI по образцу ворот из соседней статьи про status JSON.

Шаг 6. validate. Запустите openclaw config validate с явным путём к JSON при необходимости; интерпретацию см. ниже.

Шаг 7. Откат. Остановите демон, распакуйте tarball обратно в OPENCLAW_CONFIG_HOME, при смене semver переустановите прежний диапазон npm, перезагрузите launchd и повторите цепочку приёмки из шагов 5–6.

К сверке перед merge: (1) один и тот же node в SSH и plist; (2) один канал установки openclaw; (3) артефакт CI содержит openclaw --version, фрагмент status, вывод doctor и JSON validate с нулевым кодом; (4) checksum tarball лежит рядом с архивом.

Как читать JSON-вывод config validate

Машиночитаемый ответ обычно разделяет корректные пути и список issues. Каждая запись issues несёт указатель на поле — JSON Pointer вроде /agents/0/providers или точечную нотацию, совпадающую с ветвью в openclaw.json. Трактуйте это как адрес правки: откройте файл ровно по этому пути, исправьте тип, обязательный ключ или ссылку на секрет, затем перезапустите validate. Не полагайтесь только на человекочитаемый хвост stderr, если в CI включён парсер JSON — он должен стать единственным источником истины для ворот merge. Подробнее про автоматизацию ворот см. отдельный материал.

FAQ

Можно ли оставить Node 22 «на время»?

Для ранних миноров это иногда проходило, но линия 2026.5.x в документации опирается на Node 24; смешение 22 и 24 между job на одном Mac даёт трудноуловимые регрессии движка и разъезжающиеся логи поддержки.

Почему нельзя заменить doctor только status?

gateway status отвечает на вопрос «что шлюз декларирует», а doctor проверяет среду исполнения: PATH, права на каталоги, несостыковки переменных, которые статус может не показать.

Как связать стабильность шлюза с prefetch зависимостей?

Когда шлюз стабильно поднят, сценарии предзагрузки индексов и пакетов из материала про RAG и prefetch не упираются в рестарт посреди ночного прогона; при частых pull это экономит wall-clock очереди на общем удалённом Mac.

Публичные шаги MacPull без входа

Выберите выделенный удалённый Mac под CI, зафиксируйте образ с Node 24 и повторяемой цепочкой приёмки шлюза. Публичные страницы без обязательного входа: главная, цены, аренда и покупка, центр помощи, каталог блога.

Удалённый Mac под OpenClaw и CI

Стабильный шлюз и предсказуемая сеть снижают флаки при частых pull. Ниже только открытые страницы сайта.