git pull по расписанию с префлайт-скриптом. Дополнительный контекст — в списке блога, на главной MacPull и при оформлении аренды узла.
Три узких места цепочки навыков и MCP
- Дрейф среды: разные версии Node и глобальных пакетов на раннерах ломают вызовы MCP-серверов и путей к бинарникам; без фиксации версии команда получает «работает у меня».
- Сеть и поверхность атаки: привязка HTTP-шлюза ко всем интерфейсам и отсутствие токена превращают узел в публичную точку входа; на общем CI-Mac это недопустимо даже во внутренней сети.
- Порядок шагов: если агент запускается до обновления репозитория или до проверки зависимостей, навыки цепочки ссылаются на устаревшие файлы и дают ложные сбои, которые трудно отличить от реальных дефектов сборки.
Матрица: глобальный npm против официального install-скрипта
Для одной статьи зафиксируйте один основной путь установки на узле CI, чтобы не смешивать префиксы и менеджеры. Здесь основной путь — глобальный npm; скрипт — краткая альтернатива для «чистой» машины без ручной настройки Node.
| Критерий | npm install -g openclaw@latest |
curl …/install.sh | bash (официальный) |
|---|---|---|
| Контроль версий | Явный [email protected] в runbook |
Зависит от скрипта и канала поставки |
| Предусловия | Нужны Node.js 22+ и npm 10+ (по публичным гайдам 2026; сверяйте с openclaw doctor) |
Часто подтягивает или проверяет среду автоматически |
| Аудит на предприятии | Прозрачный кеш npm и политика зеркала | Требуется ревью скрипта и хеша/подписи |
| Рекомендация | Удобно, если Node уже стандартизован на Mac CI | Удобно для быстрого развёртывания выделенного раннера |
Альтернативу со скриптом не комбинируйте с глобальной установкой в одном runbook без отката: задублируются бинарники и PATH. См. также ClawHub и предзагрузка CI.
Чеклист развёртывания на удалённом Mac (шесть шагов)
node -v и npm -v. На Apple Silicon убедитесь, что архитектура процесса совпадает с установленными нативными модулями MCP.npm install -g openclaw@latest, затем openclaw --version и openclaw doctor. При отказе из-за прав настроьте префикс глобальных пакетов пользователя CI, а не sudo на общий /usr/local.npx, переменные для API и таймауты). Цепочку навыков оформите как последовательность вызовов в openclaw.json или в обёртке shell, чтобы CI мог повторить тот же порядок без интерактива.127.0.0.1, не используйте 0.0.0.0 без reverse-proxy с TLS и ACL. Секрет передавайте через переменную окружения или Keychain/macOS secrets; не коммитьте токен в репозиторий. Внешний доступ — через SSH-туннель или корпоративный VPN, а не «голый» порт в интернет.launchd plist с RunAtLoad, WorkingDirectory, StandardOutPath и StandardErrorPath в каталог logs/. Если ваша сборка OpenClaw поддерживает openclaw onboard --install-daemon, сверьте сгенерированный plist с политикой безопасности и пользователем раннера.Таблица: симптом — причина — действие
| Симптом или сообщение | Вероятная причина | Действие |
|---|---|---|
EADDRINUSE |
Порт шлюза занят другим процессом или прошлым демоном | Найти PID, освободить порт или сменить порт в конфиге; перезапустить launchd job |
401 / Unauthorized |
Неверный или пустой токен, рассинхрон секретов CI | Проверить переменные окружения раннера, ротацию секретов, кавычки в plist |
openclaw: command not found |
Глобальный bin не в PATH неинтерактивной оболочки | Добавить $(npm prefix -g)/bin в скрипт CI или использовать полный путь |
| Ошибка движка Node при старте MCP | Node ниже требуемой ветки или смешение версий nvm | Зафиксировать 22 LTS в runbook; в CI вызывать nvm use до шагов OpenClaw |
| Таймаут к MCP | Сеть, firewall или зависание дочернего процесса | Увеличить таймаут, логировать stderr сервера, см. FAQ по сети |
Минимальный воспроизводимый workspace
Держите конфигурацию, скрипты и логи рядом с репозиторием приложения или в отдельном каталоге, который монтируется на раннере постоянно.
Пример дерева каталогов
~/ci-openclaw-workspace/
├── repo/ # git clone приложения
├── openclaw.json # навыки, MCP, параметры шлюза (без секретов в явном виде)
├── skills/ # локальные навыки или оверлеи
├── scripts/
│ └── preflight.sh # проверки перед цепочкой
└── logs/
├── openclaw.out
└── openclaw.err
Пример: периодический pull и префлайт перед задачами
На выделенном Mac можно обновлять зеркало кода по cron, а полноценный пайплайн запускать после успешного префлайта. Так свежий main не конфликтует с кешированными навыками.
Фрагмент crontab (иллюстрация)
12 * * * * cd ~/ci-openclaw-workspace/repo && git pull --ff-only && ../scripts/preflight.sh || logger "preflight failed"
Внутри preflight.sh проверьте openclaw doctor, доступность 127.0.0.1:<port> и наличие обязательных переменных. Связка с полноценным CI остаётся за вашим оркестратором; узел MacPull даёт стабильную площадку под такой цикл.
Три пункта для внутренней wiki
- Версии: зафиксировать Node 22+, npm 10+ и точную версию пакета
openclawв runbook узла. - Безопасность: шлюз только на loopback, токен вне репозитория, никакого публичного
0.0.0.0без компенсирующих контролей. - Порядок: git update → preflight → цепочка навыков → сборка; логи stdout/stderr писать в
logs/для разбора инцидентов.
Итог и CTA
Цепочка навыков OpenClaw с MCP на удалённом Mac CI остаётся воспроизводимой, если версии Node зафиксированы, установка выбрана одна, шлюз слушает только localhost с секретом, а префлайт отсекает «грязное» состояние до дорогих шагов. Автозапуск через launchd закрепляет поведение после перезагрузки раннера.
Выделенный Mac Mini под CI снижает коллизии между джобами и упрощает сетевую политику для MCP. Оформите аренду узла, откройте тарифы и при вопросах по доступу — центр помощи. Вернуться к обзору платформы можно с главной; другие гайды — в блоге, например материал про Docker и OpenClaw.
Mac CI для OpenClaw, MCP и префлайта
Арендуйте Mac Mini M4: стабильный узел под launchd, SSH и цепочки навыков. Тарифы и оформление — без входа. Документация — в центре помощи; продолжайте читать технический блог.