Запланированные задачи в Claude Code: /loop и cron

Как заставить Claude Code автоматически проверять деплой, следить за PR или напомнить о задаче — без выхода из терминала.

Запланированные задачи в Claude Code: /loop и cron
TL;DR: В Claude Code появились запланированные задачи — команда /loop и cron-инструменты. Можно автоматически проверять деплой, следить за PR или поставить себе напоминание. Всё работает внутри текущей сессии, без отдельных скриптов.

Как работает /loop

Команда /loop запускает повторяющуюся задачу в пару слов:

/loop 5m проверь, закончился ли деплой, и расскажи что произошло

Claude разбирает интервал, превращает его в cron-выражение и запускает фоновую задачу.

Интервал можно указывать по-разному:

Формат Пример Результат
В начале /loop 30m проверь билд Каждые 30 минут
С every в конце /loop проверь билд every 2 hours Каждые 2 часа
Без интервала /loop проверь билд По умолчанию каждые 10 минут

Поддерживаются единицы: s (секунды), m (минуты), h (часы), d (дни). Секунды округляются до ближайшей минуты — cron не поддерживает субминутную точность. Если интервал не делится ровно (например, 7m или 90m), Claude округлит до ближайшего «чистого» значения и скажет, что выбрал.

Запуск команд по расписанию

Промпт в /loop может быть другой командой или скиллом. Это удобно, если у тебя уже есть готовый workflow:

/loop 20m /review-pr 1234

Каждый раз, когда срабатывает задача, Claude выполняет /review-pr 1234, как если бы ты набрал это руками. Я использую это для мониторинга CI — удобно, когда не хочется вручную дёргать gh run view.

Одноразовые напоминания

Для разовых напоминалок /loop не нужен — достаточно написать на обычном языке:

напомни мне в 15:00 запушить релизную ветку
через 45 минут проверь, прошли ли интеграционные тесты

Claude привязывает время срабатывания к конкретной минуте через cron-выражение и подтверждает, когда сработает. После срабатывания задача удаляется сама.

Управление задачами

Управлять расписанием можно на естественном языке:

какие у меня запланированные задачи?
отмени проверку деплоя

Под капотом это три инструмента:

Инструмент Назначение
CronCreate Создать задачу. Принимает 5-значное cron-выражение, промпт и тип (повторяющаяся или разовая)
CronList Список всех задач с ID, расписанием и промптами
CronDelete Удалить задачу по 8-символьному ID

Лимит — 50 задач на сессию. Честно, не представляю сценарий, где нужно столько или даже больше.

Как это работает внутри

Планировщик проверяет задачи каждую секунду и ставит их в очередь с низким приоритетом. Промпт выполняется между твоими запросами, а не пока Claude отвечает на текущий. Если Claude занят, задача подождёт, пока он освободится.

Все времена интерпретируются в твоей локальной таймзоне. Выражение 0 9 * * * означает 9 утра в твоём часовом поясе, а не UTC.

Jitter

Чтобы тысячи сессий не стучались в API одновременно, планировщик слегка сдвигает время срабатывания:

  • Повторяющиеся задачи могут сработать с задержкой до 10% от их периода, но не более 15 минут. Часовая задача может сработать в любое время от :00 до :06
  • Разовые задачи, привязанные к началу или середине часа, могут сработать до 90 секунд раньше

Смещение зависит от ID задачи и всегда одинаковое для одной и той же задачи. Если точное время критично — ставь минуту, отличную от :00 или :30 (например, 3 9 * * * вместо 0 9 * * *).

Автоудаление через 3 дня

Повторяющиеся задачи автоматически удаляются через 3 дня. Логично — никто не хочет обнаружить, что забытый /loop тихо сжигает токены уже вторую неделю. Если нужно дольше, пересоздай задачу до истечения.

Cron-выражения

CronCreate принимает стандартные 5-значные cron-выражения: минуты часы день-месяца месяц день-недели.

Выражение Значение
*/5 * * * * Каждые 5 минут
0 * * * * Каждый час ровно
7 * * * * Каждый час в 7 минут
0 9 * * * Каждый день в 9:00
0 9 * * 1-5 По будням в 9:00
30 14 15 3 * 15 марта в 14:30

День недели: 0 или 7 — воскресенье, 6 — суббота. Расширенный синтаксис вроде L, W, ? и текстовых алиасов (MON, JAN) не поддерживается.

Ограничения

Задачи привязаны к сессии, и это накладывает ограничения:

  • Задачи работают только пока Claude Code запущен и свободен. Закроешь терминал — всё отменится
  • Нет «догоняющего» выполнения. Если Claude был занят, когда задача должна была сработать — она выполнится один раз после освобождения, без повторов за пропущенные интервалы
  • Нет сохранения между перезапусками. Перезапуск Claude Code очищает все задачи

Как отключить планировщик

Если запланированные задачи мешают или не нужны:

export CLAUDE_CODE_DISABLE_CRON=1

После этого cron-инструменты и /loop станут недоступны, а все запланированные задачи перестанут срабатывать.

Что ещё почитать