Шлюз OpenClaw на удалённом Mac — единая точка входа для автоматизации: принимает outbound webhook CircleCI после workflow/job, проверяет подпись, в изолированном каталоге оценивает дрейф lockfile и отправляет сводку (Slack, Discord, внутренний API или статус в VCS). Так вы не выставляете панель управления и секреты в открытый интернет: HTTP слушает 127.0.0.1, снаружи — только TLS и узкий путь. Документация: docs.openclaw.ai. Рядом по смыслу: сканирование lockfile через GitHub Checks, Jenkins Webhook и префлайт.

Предварительные условия: Node, openclaw CLI, токены и минимальные права

1. Установите Node 22.16+ или 24 LTS и глобально openclaw; выполните openclaw doctor до «чистого» состояния. В launchd plist укажите тот же PATH и при необходимости NODE_BINARY, что и при ручном SSH — иначе скиллы и зависимости расходятся с интерактивной сессией.

2. Токен Dashboard OpenClaw и секрет webhook CircleCI храните вне Git (Keychain, файл 600, переменные окружения сервиса). Для вызовов API CircleCI используйте Project API Token с минимальным набором прав или роли OIDC — не кладите личный полный токен в скрипты раннера.

3. Отдельный пользователь ОС и корень WORK_ROOT для клонов; не смешивайте каталог webhook-скана с working_directory основного job на том же хосте.

Ценность шлюза в том, что политика доверия к внешним системам (CircleCI, чат-боты, внутренние API) сосредоточена в одном месте: единый формат логов, ротация секретов, ограничение маршрутов и повторное использование скиллов между командами — без дублирования «сырых» webhook-обработчиков в каждом репозитории.

Аспект Рекомендуется Избегать
Приём webhook 127.0.0.1 + reverse proxy / SSH -R Dashboard и handler на 0.0.0.0 без разграничения
События CircleCI Только workflow-completed или job-completed Все типы событий при матричных пайплайнах
Рабочая копия Один каталог на id доставки или git worktree Общий клон и остаточный node_modules

CircleCI Webhook и настройка проверки подписи

В настройках проекта CircleCI создайте Outbound Webhook: URL должен указывать на ваш публичный HTTPS (или туннель), сохраните секрет. Подпись проверяйте по официальной схеме: заголовок circleci-signature, версия v1, HMAC-SHA256 по неизменённым байтам тела запроса до разбора JSON.

Нумерованный чеклист

  1. Сначала отправьте тестовый curl с фиктивным JSON на handler и убедитесь в ответе 2xx и записях в логе.
  2. Включите webhook, отметьте только нужные события; в коде отбрасывайте canceled и нецелевые ветки.
  3. После успешной подписи извлеките revision, pipeline id / workflow id и сохраните идемпотентный ключ, чтобы повторные доставки не дублировали работу.
  4. Синхронная часть handler: валидация + постановка задачи; ответ 200 с коротким JSON — в первые секунды, чтобы избежать лавины повторов от CircleCI.

Скилл / шаблон скрипта OpenClaw: разбор lockfile и сводка

Скилл передаёт проверенный JSON в Node или shell: парсинг ревизии → git fetch --depth=1 → сравнение package-lock.json, pnpm-lock.yaml, yarn.lock, Gemfile.lock через git diff с базовой веткой или сухой прогон npm ci / pnpm install --frozen-lockfile. Итог — компактный Markdown или JSON с ссылкой на пайплайн в CircleCI и полем lockfile_changed: true|false.

# Пример: ревизия из stdin JSON → shallow checkout → diff lock
REV=$(jq -r '.pipeline.vcs.revision // .revision // empty' </dev/stdin)
git fetch --depth=1 origin "$REV" && git checkout -q FETCH_HEAD
git diff --exit-code -- package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null \
  || echo '{"lockfile_changed":true}'

Исходящая сводка: curl с --connect-timeout, --max-time и до трёх попыток с паузами 2/4/8 с при 5xx или обрыве сети.

Частые ошибки: подпись, таймаут, права — краткий FAQ

Подпись никогда не совпадает

Сверьте секрет; убедитесь, что прокси не переписывает тело; не вызывайте JSON.parse до вычисления HMAC по сырому буферу; тестовые инструменты без «pretty-print».

Таймауты и череда 5xx

Укоротите путь ответа; тяжёлый git clone и установки вынесите в воркер; используйте зеркало и shallow clone; смотрите историю доставок в UI CircleCI.

403 / недостаточно прав

Проверьте роль в организации для редактирования webhooks; scope токена API; политики организации для сторонних токенов.

Связка с сценариями CI и трансграничного pull

На одном удалённом Mac часто совмещают шлюз webhook и self-hosted runner: выгодно использовать общие настройки зеркал и прокси для Git/npm, но разделяйте корни кеша и рабочие каталоги. Практическая матрица зеркал и таймаутов — в материале трансграничная оптимизация Git/npm в CI; при высоком параллелизме дополнительно планируйте диск и конкуренцию за I/O (см. раздел FAQ пула сборок в блоге).

Мини-чеклист стыковки: P99 ответа handler webhook < 3 с; клон для скана и working_directory job не пересекаются; токен для CircleCI API и URL исходящей сводки хранятся раздельно.

Итог: шлюз даёт управляемую точку в конвейере автоматизации — проверенные события CircleCI, предсказуемый lockfile-gate и обратная связь без лишней экспозиции. Нужен постоянный Apple Silicon под шлюз и раннер: страницы покупка и выбор узла, цены и центр помощи с руководством по SSH открыты без входа в аккаунт; больше гайдов — в блоге.

Шлюз OpenClaw + CircleCI на удалённом Mac

Помощь и SSH, узлы и покупка, главная — без обязательной авторизации.