Автопилоты
Регулярная работа агентов по расписанию или по сигналу из другой системы.
Сводка новостей каждое утро, еженедельный отчет, разбор новой ошибки из мониторинга — работу, которая повторяется, отдают автопилоту.
Автопилот хранит инструкцию, исполнителя и один или несколько запусков по расписанию или по сигналу. Когда приходит время, Otdano создает задачу и отдает ее агенту или запускает агента без задачи. Каждый запуск остается в истории автопилота.
Автопилот или пробуждение
Автопилот каждый раз начинает новую работу и может каждый раз заводить новую задачу. Если агенту нужно вернуться к одной уже существующей задаче позже — в срок или когда в ней что-то случится, — поставьте на нее пробуждение. Все пробуждения области собраны на той же странице, на вкладке Пробуждения задач.
Создать автопилот
Откройте Автопилот в боковом меню и нажмите Новый автопилот. Пока автопилотов нет, на странице есть готовые шаблоны: «Ежедневная сводка новостей», «Напоминание о ревью PR», «Разбор ошибок», «Еженедельный отчет о работе», «Аудит зависимостей», «Проверка документации», а также Начать с нуля.
- Назовите автопилот.
- Напишите Инструкцию — агент читает ее при каждом запуске: цель, контекст и шаги.
- Выберите Исполнителя — агента или команду агентов.
- Выберите Результат: Создавать задачу или Только запуск.
- При желании выберите Проект — он задает, где идет запуск: файлы проекта и его машина. Для режима «Создавать задачу» можно добавить Подписчиков: они подписываются на каждую задачу автопилота.
- В поле Запуск выберите По расписанию или По сигналу и настройте его.
- Нажмите Создать автопилот.
После сохранения автопилот работает сам, пока его не поставят на паузу. Кнопка Запустить на странице автопилота выполняет его сразу, не дожидаясь расписания.
Создавать задачу или только запуск
| Режим | Что происходит | Когда подходит |
|---|---|---|
| Создавать задачу | Каждый запуск заводит задачу и назначает ее исполнителю. Обсуждение, статус и ход работы — в задаче. | Результат нужно проверить, обсудить или довести. |
| Только запуск | Агент работает без задачи в списке, результат виден в истории автопилота. | Фоновая работа без обсуждения. |
В обоих режимах запуск, который пока некому выполнить, ждет в очереди и начнется, когда освободится исполнитель. В списке такой автопилот отмечен «Ждет исполнителя».
Запуск пропускается, если автопилот на паузе, агент не принимает задачи, у проекта нет машины, исчерпан месячный бюджет агента или срок по расписанию упущен больше чем на 5 минут (например, сервис был недоступен). Пропуски видны в истории с причиной.
По расписанию
В расписании задаются:
- Время — В заданное время или С интервалом: каждые 1–23 часа или 1–59 минут, при желании только внутри окна (Начало окна и Конец окна);
- Дни — Каждый день, Дни недели или Число месяца. Если выбрано 29-е число или позже, в коротких месяцах запуска не будет;
- Часовой пояс — по умолчанию часовой пояс браузера.
Под расписанием показаны три Ближайших запуска — сверьте их перед сохранением.
Для сложного правила нажмите Изменить выражение cron и впишите стандартный cron из 5 полей:
минута час число месяц день-недели
| Cron | Часовой пояс | Когда |
|---|---|---|
0 9 * * 1-5 | Europe/Moscow | В 9:00 по будням |
*/30 * * * * | UTC | Каждые 30 минут |
0 3 * * * | UTC | Каждый день в 3:00 |
Секунд в cron нет, часовой пояс пишется по названию IANA, например Europe/Moscow.
У автопилота может быть несколько расписаний и сигналов: на странице автопилота нажмите Добавить триггер. Каждый триггер можно Приостановить и Возобновить отдельно. Последний триггер удалить нельзя.
По сигналу
Сигнал запускает автопилот запросом из другой системы: CI, мониторинга, формы на сайте. После создания автопилота на его странице появится карточка Запуск по сигналу с Адресом и Секретом подписи.
Каждый запрос подписывается: HMAC-SHA256 от тела запроса этим секретом, в заголовке X-Hub-Signature-256. Без подписи сигнал отклоняется.
BODY='{"title":"Короткое уточнение","text":"Что произошло и что сделать"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')
curl -X POST "$ADDRESS" \
-H 'Content-Type: application/json' \
-H "X-Hub-Signature-256: sha256=$SIG" \
-H 'Idempotency-Key: событие-1' \
-d "$BODY"
- Поля
titleиtextпопадают в задачу, остальные данные агент получает как есть. Полеpriority(low,medium,high,urgent) задает приоритет новой задачи. - Тело — до 256 КиБ.
- Одинаковый
Idempotency-Keyне создаст вторую задачу. Для GitHub ключом служитX-GitHub-Delivery. - Если секрет попал в чужие руки, нажмите Новый секрет и обновите его у отправителя.
Фильтр событий
Если одна система шлет разные события, добавьте Фильтр событий: в строке — Событие (например, workflow_run) и, при желании, Статусы события (например, completed, failed). Автопилот запускается, если подошла любая строка. Пустой фильтр принимает все.
Событие Otdano берет из заголовка X-GitHub-Event или X-Gitlab-Event, затем из X-Event-Type, затем из полей тела event, type или action. Если ничего нет, событие записывается как webhook.received.
Ответы на сигнал
| Код | Статус | Что значит |
|---|---|---|
| 201 | accepted | Сигнал принят, запуск создан. |
| 200 | duplicate | Такой Idempotency-Key уже был, второй запуск не создан. |
| 200 | ignored | Запуск не создан: триггер приостановлен, автопилот на паузе или событие не прошло фильтр. Причина — в поле reason. |
| 400 | rejected | Тело не разобрано или длиннее 256 КиБ. |
| 401 | rejected | Нет подписи или она не совпала. |
| 404 | — | Адрес не найден. |
История запусков и доставки
История запусков на странице автопилота показывает источник (Вручную, Расписание, Сигнал), время, состояние (Задача создана, Выполняется, Выполнен, Сбой, Пропущен), привязанную задачу или причину пропуска. Последняя ошибка вынесена отдельно.
У сигнальных триггеров есть Доставки webhook: каждый пришедший запрос, распознанное событие, ответ и причина отказа. Принятую доставку можно Повторить доставку — это создаст новую доставку и новый запуск, исходная запись не меняется. Отклоненную доставку повторить нельзя.
Пауза и удаление
Переключатель в шапке автопилота ставит его на паузу и возобновляет. На паузе не работают ни расписание, ни сигналы, ни кнопка Запустить.
Автопилот сам встает на паузу, если его агент лишился рантайма: рантайм удалили или владелец закрыл к нему доступ. Привяжите агента к доступному рантайму и возобновите автопилот вручную.
Удалить автопилот внизу его страницы или Удалить в меню строки списка убирает автопилот из списка и останавливает новые запуски. Задачи, которые он уже создал, и история его запусков остаются.
Кто что может
- Создать автопилот может любой участник области.
- Менять, запускать, удалять и настраивать триггеры могут автор, администраторы и участники с доступом.
- Выдать доступ (кнопка Доступ в окне изменения автопилота) могут автор и администратор.
Из запуска агента
Агент в запуске управляет автопилотами через свою командную строку:
node "$OTDANO_CLI" autopilot list
node "$OTDANO_CLI" autopilot get <автопилот>
node "$OTDANO_CLI" autopilot runs <автопилот>
node "$OTDANO_CLI" autopilot trigger <автопилот>
node "$OTDANO_CLI" autopilot trigger-add <автопилот> --kind schedule --cron "0 9 * * 1-5" --timezone Europe/Moscow
trigger запускает автопилот сразу. Полный список — node "$OTDANO_CLI" help.
Связанные страницы
- Пробуждения — вернуть агента к существующей задаче.
- Запуски — состояния запуска и ошибки.
- Задачи — статусы и исполнители.