Модуль 2 · CI/CD · урок 9 из 14
Задачи по расписанию
Часть работы повторяется по календарю: утренняя сводка изменений, еженедельная проверка зависимостей, разбор ночных ошибок. Для этого у Codex есть scheduled tasks — задачи по расписанию (раньше функция называлась Automations). А там, где нужен сервер, а не ваш ноутбук, работает расписание пайплайнов GitLab с codex exec. Разберём оба варианта и правила, без которых фоновая задача превращается в фоновую проблему.
Где живут scheduled tasks
Создаются и управляются задачи только в двух местах: в десктопном приложении ChatGPT (в режиме Codex или ChatGPT Work) и на вебе. Codex CLI и расширение для IDE интерфейса управления расписанием не дают. Документация советует использовать их, чтобы подготовить и проверить промпт, навык или скрипт.
Десктопное приложение. Задача работает с локальным проектом: в каталоге проекта или в изолированном worktree. Компьютер должен быть включён, приложение запущено, проект — на месте на диске. Все задачи и их запуски собраны в разделе Scheduled в боковой панели. Это своего рода входящие: запуски с находками появляются там с отметкой о непрочитанном.
Веб. Задачи создаются из чата или ChatGPT Work и могут использовать загруженные файлы, подключённые инструменты, навыки и плагины. Работать в папке на вашем компьютере такие задачи не могут, и локального worktree между запусками у них нет.
Для администраторов рабочих пространств есть Team Tasks — общие задачи команды, которые работают в облаке через сервисный аккаунт команды. Ссылка на их настройку есть на странице о scheduled tasks.
Два вида задач
- Отдельная задача (standalone) — каждый запуск начинает новый чат с сохранённым промптом, а результат появляется в Scheduled. Подходит, когда запуски независимы или одна задача обходит несколько проектов.
- Задача внутри чата — возвращается в существующий чат с его контекстом. Подходит для наблюдения за долгой операцией, цикла ревью или продолжения разбора. Такие задачи могут идти с интервалом в минуты.
Для нестандартного расписания можно отредактировать правило повторения в формате RFC 5545 (RRULE), например RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=9;BYMINUTE=0.
Создавать задачи можно и словами: попросите в чате «каждый будний день в 9:30 делай сводку коммитов в main за сутки, отдельной задачей». Приложение составит промпт и выберет вид задачи.
Триггеры по событиям
На вебе и в мобильном приложении на подходящих планах задача может запускаться не по времени, а по событию: новое письмо в Gmail, сообщение в выбранном канале Slack, активность в pull request на GitHub. Триггер решает, когда запускать, а сохранённый промпт — что делать. Совмещать событийные триггеры с расписанием по времени в одной задаче нельзя. В десктопном приложении, CLI и IDE событийных триггеров нет. GitLab в списке источников событий на октябрь 2026 года не значится.
Права фоновой задачи
Это самое важное в уроке. Задачи по расписанию работают без присмотра и с вашими настройками песочницы по умолчанию. Если политика организации разрешает, используется approval_policy = "never": спрашивать некого. Что это значит на практике:
| Режим песочницы | Что произойдёт |
|---|---|
| read-only | Не сработают вызовы, которым нужна запись файлов, сеть или приложения на компьютере |
| workspace-write | Не сработает запись вне рабочего каталога, сеть и приложения; отдельные команды можно разрешить через rules |
| full access | Агент может менять файлы, запускать команды и ходить в сеть, ни о чём не спрашивая. Документация называет это повышенным риском |
Рекомендация документации: начинать с самых узких прав, при которых задача выполняется, и выдавать сеть или широкий доступ к файлам, только когда без них никак. Если администратор запретил approval_policy = "never" через requirements.toml, задачи вернутся к поведению выбранного режима прав.
Для задач в Git-репозиториях выбирайте worktree. Задача в локальном режиме работает прямо в вашей рабочей копии и может изменить файлы, которые вы сейчас правите. Обратная сторона: частое расписание плодит worktree. Архивируйте ненужные запуски и не закрепляйте их без необходимости.
Навык описывает метод, расписание — время
Сложную задачу не стоит описывать длинным промптом в расписании. Формула из гайда OpenAI по лучшим практикам: навык описывает метод, scheduled task — расписание. Поведение кладётся в навык, а задача только вызывает его:
Проверь мои коммиты за последние 24 часа и выполни $recent-code-bugfix.В десктопном приложении навык явно вызывается в промпте задачи через $имя-навыка. Так задачу проще поддерживать и передавать коллегам: навык лежит в репозитории или в личных навыках, правится и проверяется отдельно. Как написать навык — урок «Пишем свой навык».
Сначала руками, потом по расписанию
Один из антипаттернов из того же гайда — ставить на расписание задачу, которая ещё не работает надёжно вручную. Порядок такой:
- Прогоните промпт в обычном чате. Проверьте, что он понятен, модель и инструменты ведут себя как надо, а результат удобно читать.
- Поставьте задачу на расписание.
- Посмотрите первые несколько запусков и подправьте промпт, инструменты или частоту.
Для задачи внутри чата промпт должен быть «долгоживущим»: что делать при каждом запуске, как решить, есть ли что сообщать, когда остановиться или позвать вас.
И следите за моделями. 14 октября 2026 года GPT-5.5 вывели из Codex для входа через ChatGPT, и задачи, где она была выбрана явно, пришлось перенастраивать. Задача на устаревшей модели требует ручного обновления, поэтому раз в месяц просматривайте список.
Серверная альтернатива: расписание пайплайнов GitLab
Scheduled tasks в десктопе зависят от включённого компьютера, а веб-задачи не видят ваш GitLab. Для серверной регулярной работы в агентстве удобнее расписание пайплайнов: Build → Pipeline schedules и job, который запускается только по расписанию.
codex_weekly_deps:
image: $CI_REGISTRY_IMAGE/php-node:8.3
environment: { name: codex, action: prepare }
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TASK == "weekly-deps"'
script:
- set -euo pipefail
- npm install -g "@openai/codex@0.163.0"
- composer outdated --direct --format=json > outdated.json || true
- npm outdated --json > npm-outdated.json || true
- |
CODEX_API_KEY="$OPENAI_API_KEY" codex exec --ephemeral --sandbox read-only \
"В outdated.json и npm-outdated.json — устаревшие зависимости проекта.
Сгруппируй их: обновить срочно (известные проблемы безопасности,
мажорные версии без поддержки), обновить планово, можно не трогать.
Для каждой срочной укажи, какие места кода затронет обновление." \
> deps-report.md
artifacts:
paths: [deps-report.md]
expire_in: 30 daysПеременная SCHEDULE_TASK задаётся в настройках расписания и позволяет держать несколько регулярных задач в одном файле. Отчёт можно отправить дальше: в задачу трекера, в канал команды, в MR с обновлениями. Ключ и песочница настраиваются так же, как в уроке «Codex в GitLab CI».
Как выбрать: если задача про ваш личный рабочий день и локальные проекты — scheduled task в десктопе. Если про проект и команду, должна работать независимо от чьего-то ноутбука и видеть GitLab — расписание пайплайна.
Попробуйте сами
10–15 мин на рабочем месте- Придумайте регулярную задачу на одну неделю: например, сводку коммитов в main по рабочим дням. Прогоните её промпт в обычном чате и доведите результат до читаемого вида.
- Поставьте её на расписание в десктопном приложении с режимом worktree и правами workspace-write. Через пару дней посмотрите запуски в Scheduled.
- Для серверной задачи заведите в тестовом проекте GitLab расписание пайплайна с переменной
SCHEDULE_TASKи job из урока.
Коротко
- Scheduled tasks создаются в десктопном приложении ChatGPT и на вебе. CLI и IDE расписанием не управляют.
- Десктопные задачи работают с локальным проектом и требуют включённого компьютера. Веб-задачи не видят ваших папок.
- Фоновые задачи работают без одобрений и с вашей песочницей по умолчанию: начинайте с узких прав и worktree.
- Метод — в навыке, время — в расписании. Сначала задача должна надёжно работать вручную.
- Для серверной регулярной работы с GitLab — расписание пайплайнов и
codex exec.