Документация

Хуки

Автоматизации на уровне организации, реагирующие на события платформы с помощью ваших инструкций.

Хук реагирует на событие в Coroid. Вы выбираете событие, пишете инструкции простым языком, и хук запускается при возникновении этого события.

Найдите их в разделе «Автоматизации» фабрики.

Создать задачу в разделе «Новая работа»: выберите вариант «Автоматизация», затем — «Когда что-то происходит». В разделе «Новая работа» доступны события GitHub и события Coroid. Подробнее Автоматизации.

События, на которые можно реагировать

Хук срабатывает только для события, отправленного каким-либо элементом. Большинство перечисленных ниже событий отправляет сам Coroid. Некоторые события генерируются вашими собственными системами. Любые другие события зарезервированы: редактор их не отображает, а создание хука для такого события невозможно. Если хук был сохранен для зарезервированного события, редактор и список помечают его как никогда не срабатывающий; он не удаляется.

События, отправляемые Coroid

КатегорияСобытия
ЗадачаСоздано, статус изменён, завершено, ошибка
АгентЗапущено, завершено, ошибка
РепозиторийКоммит отправлен, ветка создана, pull request открыт, обновлён или объединён, задача создана, комментарий, содержащий упоминание Coroid
СпринтСоздано, планирование начато, запущено, задача добавлена, задача удалена, проверка начата, завершено, отменено
ПланЭтап начат, завершено, ошибка
РасписаниеЗапуск начат, запуск завершён, запуск завершился ошибкой
ОтчётЗапущено, завершено, ошибка
КачествоПроверка начата, пройдена или завершилась ошибкой; автономное разрешение не удалось
ПродвижениеЗапрошено, одобрено, отклонено
РелизСоздано, изменён кандидат, изменены примечания, примечания одобрены, изменён объём работ, чек-лист завершён, шлюз оценён, шлюз переопределён, одобрено, опубликовано, откат
РазвертываниеВ очереди, выполняется, успешно, ошибка, отменено, ручная подтверждение, ручная подтверждение отката, проверка работоспособности пройдена, проверка работоспособности завершилась ошибкой
СинхронизацияВнешний источник обновлён
Slack и TelegramСообщение, соответствующее фильтру автоматизации

События, генерируемые вашими собственными системами

КатегорияСобытия
АнализОбнаружена зависимость, обнаружена проблема безопасности, анализ завершён
Внешнее развертываниеЗапущено, завершено, ошибка

Coroid эти события не отправляет. Конвейер CI, сканер или другая ваша система запускает хук по его идентификатору: он вызывает POST /api/v1/organizations/hooks/:id/dispatch с ключом учетная запись службы которая имеет hooks:dispatch область действия. Хук срабатывает для события, для которого он был сохранён. Редактор отображает эти события в разделе «Генерируются вашими собственными системами».

Зарезервированные события

Эти события ещё не отправлены и не сгенерированы, поэтому редактор их не предлагает:

КатегорияСобытия
ЗадачаЭтап изменён
АгентИтерация, вызов инструмента
ПланСоздано, этап завершён, начата финальная проверка, финальная проверка завершена, перед pull request плана
РасписаниеСоздано, активировано, приостановлено
СпринтПланирование завершено, задача завершена, объём работ изменён
РелизНа стадии подготовки, проверено
ПродвижениеПеред pull request продвижения
КачествоПроверка недоступна; ремонт начат или попытка ремонта предпринята; повторная валидация начата; консенсус достигнут

Когда начинается и заканчивается работа

Планы, расписания, отчёты, проверки качества, продвижения и релизы отправляют событие при начале и при завершении работы. Хук может реагировать на то, как завершилась работа, а ваша система может измерять её длительность.

РаботаНачинаетсяЗавершается
ПланЭтап начат: первое событие отправляется при старте выполнения планаЗавершено, ошибка
РасписаниеЗапуск начатЗапуск завершён, запуск завершился ошибкой
ОтчётЗапущеноЗавершено, ошибка
Проверка качестваПроверка начатаПройдена, ошибка, автономное разрешение не удалось
ПродвижениеЗапрошеноОдобрено, отклонено
РелизСозданоОпубликовано, откат

Каждое из этих событий регистрирует время его возникновения в occurredAt. Событие, указывающее на завершение работы, также регистрирует время её начала в startedAt, а её длительность — в durationMs. Это startedAt является occurredAt события начала — они всегда совпадают. Время простоя входит в общую продолжительность работы.

Каждое событие отправляется один раз при сохранении изменений. Отменённые изменения не генерируют событий, а повторная отправка не приводит к дублированию. Событие завершения отправляется только для начатой работы: a предварительный запуск расписания не генерирует событий, как и отчёт, отменённый до начала выполнения.

Что содержится в каждом событии, помимо временных меток:

СобытиеОтправляется когдаПоля
Начало этапа планированияНачинается выполнение плана (его первый этап), а затем — при старте первой задачи следующего этапаplanId, plan (id, title), phase (id, sequence, title), firstPhase, executionStartedAt
Планирование завершено или прерваноВыполнение плана завершается. Если план завершается ошибкой на этапе планирования, событие не отправляетсяplanId, plan, status, executionStartedAt
Запуск расписания начатЗапускается выполнение расписанияscheduleId, runId, schedule (id, name), run (причина триггера, родительский запуск)
Запуск расписания завершён или прерванЗапуск завершаетсяТе же поля, status, и tasksCreated или error
Начало формирования отчётаНачинается создание отчёта. Приостановка и возобновление сохраняют одну временную метку началаreportId, report (id, тип, title)
Формирование отчёта завершено или прерваноОтчёт сохранён, либо его создание завершилось ошибкой или было отмененоТе же поля, и tokensUsed, costUsd и hasActionableFindings, или error
Начало проверки качестваНачинается проверка качестваqualityRunId, check (объект, триггер, версия политики, коммит)
Проверка качества завершена успешно или с ошибкойПроверка выносит свой вердиктТе же поля, decision, redoCause, failedExpectationIds
Качество: проблема не решена автономноCoroid прекращает попытки исправить найденные проблемыqualityRunId, workItemType, workItemId, reason
Запрос на публикациюСоздаётся запрос на публикациюpromotionId, laneId, promotion (title, статус, ветки, pull request)
Публикация одобренаПубликация объединяется: одобрена в Coroid, принудительно объединена, объединена у провайдера или включена в релизТе же поля, approval, approvedBy, forceReason
Публикация отклоненаРецензент запрашивает внесение измененийТе же поля, reason, requestedBy, comment
Релиз опубликованПервое развёртывание релиза в продакшене завершается успешноreleaseId, version, commitSha
Релиз откатилсяОткат заменяет релиз в окруженииreleaseId, version, rolledBackToReleaseId

События о работе в проекте также содержат projectId, поэтому хук, привязанный к одному проекту, срабатывает только для него. Если работа была создана хуком, эти события учитываются при расчёте глубины цепочки этого хука.

Триггеры и назначения

У каждой автоматизации есть источник триггера — откуда поступают события — и назначение, определяющее действие при их срабатывании. Два из назначений превращают событие в задачу.

Источник триггераСобытия
Событие рабочего процессаСобытия в Coroid, как указано в таблице выше
GitHubОткрытие, обновление или объединение пул-реквеста; открытие задачи; комментарий, упоминающий Coroid
SlackСообщение, соответствующее фильтру автоматизации
TelegramСообщение, соответствующее фильтру автоматизации, например, начинающееся с /coroid
JiraНовая задача
НазначениеЧто происходит
ХукВыполняет ваши инструкции в режиме чтения, как описано на этой странице
Квалификация работыРегистрирует событие как запрос. После прохождения квалификации Coroid создаёт задачу
Coroid CheckУстарело. Рецензирование каждого pull request в Coroid настраивается в Quality Control; существующие автоматизации были приостановлены

GitHub-события требуют приложения GitHub. Комментарий, упоминающий Coroid, учитывается только если автор имеет права записи в репозитории. См. GitHub.

Задача из блока «Квалификация работы» запускается самостоятельно только если автор события является доверенным: автор GitHub pull request, задачи или комментария с правами записи в репозитории. Авторы из Slack, Telegram и Jira не считаются доверенными, поэтому их задачи ждут ручного запуска. См. Когда начинается работа.

Новые задачи в Jira попадают в Coroid только через вебхук Jira. Он принимает только те данные, подписанные секретом вебхука, настроенным для Coroid, только для новых задач и только если ключ проекта Jira совпадает с ключом проекта Coroid. На coroid.ai вебхук Jira пока не настроен, поэтому триггер Jira не получает событий; импортируйте задачи Jira вручную. Там, где вебхук настроен, новая задача поступает в автоматизации триггера Jira, например в источник запросов Jira в разделе Quality Control, который создает задачи нужных типов и приоритетов для этапа квалификации. Если на триггере нет автоматизации, новая задача ничего не создаст. Работа из Jira никогда не начинается сама по себе. См. Системы отслеживания задач.

По умолчанию доступ только для чтения

Хуки анализируют и формируют отчеты. Они могут создавать дополнительные задачи, но не изменяют ваш код напрямую.

Именно это свойство делает их безопасными для использования. Автоматизация, которая редактирует код в ответ на событие, действует в момент, когда за ней вряд ли кто-то следит. Хук, который открывает задачу приводит к тому же результату через стандартный процесс — спецификация, план, проверка, рецензирование, pull request.

  • РасписаниеВремя
  • Автоматизация событийПроисходит некое событие.

Обычная задача

Техническое задание, план, разработка, проверка, рецензирование. Использует слот агента; задайте ему более низкий приоритет.

P2P3

Запрос на объединение pull request

Оно не может самостоятельно объединить изменения или внести их в вашу базовую ветку.

Вы утверждаете

Автоматизация отличается лишь триггером. Она открывает обычную задачу по стандартному пути, используя реальные ресурсы и завершаясь созданием pull request, которую вы утверждаете.

Составление качественных инструкций

Инструкции для хуков обрабатываются моделью, поэтому они выглядят как указания коллеге, а не как код. Стандарты качества такие же, как для спецификация: укажите, на что обратить внимание, что важно и что делать.

Четко опишите случай «ничего не делать». Без этого хук будет находить, что сказать при каждом запуске, а хуки, которые срабатывают постоянно, перестают читать.

Ограничения

Существует три защитных механизма, потому что автоматизация, запускаемая по событиям, дает предсказуемые сбои:

Ограничения частоты. Настраиваются для каждого хука отдельно: по количеству событий в минуту, час и день. Хук на событие с высокой частотой может сработать сотни раз во время интенсивного слияния веток.

Глубина цепочки. Хуки могут запускать события, которые, в свою очередь, запускают другие хуки. Максимальная глубина цепочки предотвращает образование бесконечного цикла.

Разрешения на инструменты. Возможности хука контролируются: доступ только для чтения, вызовы MCP и создание задач регулируются отдельно.

Разрешения

Только владельцы и администраторы могут создавать, изменять, тестировать или удалять хуки; все участники могут видеть хуки и историю их выполнения. Поскольку хук работает на уровне организации, такая асимметрия является осознанной.

Отслеживание работы хуков

На странице каждого хука в системе указаны его запуски и результаты за последние 30 дней: количество запусков, ошибки и затраты. Каждая автоматизация также отображается в разделе Настройки → Активность с фильтром по категории «Автоматизация». Проверьте запуски после включения нового хука — режим ошибки означает не сбой, а постоянное срабатывание без полезных действий.

Хуки и расписания

МеханизмПричина запуска
ХукСобытие платформы
РасписаниеВремя

Оба типа относятся к автоматизации и перечислены вместе в системе. См. Автоматизации.