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.
Нумерованный чеклист
- Сначала отправьте тестовый
curlс фиктивным JSON на handler и убедитесь в ответе 2xx и записях в логе. - Включите webhook, отметьте только нужные события; в коде отбрасывайте
canceledи нецелевые ветки. - После успешной подписи извлеките
revision,pipeline id/workflow idи сохраните идемпотентный ключ, чтобы повторные доставки не дублировали работу. - Синхронная часть 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, узлы и покупка, главная — без обязательной авторизации.