Есть класс задач, где нужно не «сделать один раз», а «проверять, пока не изменится». Идёт деплой — узнать, когда закончится. Открыт pull request — реагировать на комментарии и красный CI. Вручную это превращается в навязчивое «ну что там?» каждые пять минут.
Команда /loop перекладывает опрос на Claude: вы описываете, что проверять и с какой периодичностью, дальше проверки идут сами. Ключевая особенность: /loop живёт внутри сессии. Закрыли терминал — задачи перестали срабатывать. Для расписания, переживающего закрытие ноутбука, есть другие механизмы, и мы разберём их на следующем уроке.
Что уже умеем / что добавим
Мы автоматизировали разовые запуски через claude -p. Теперь автоматизируем повторение внутри живой сессии: /loop в трёх формах, файл loop.md для своего промпта по умолчанию, разовые напоминания, управление списком задач и ограничения.
Что вы узнаете в рамках статьи
- Три формы
/loopи чем они отличаются - Как задавать интервал и что происходит с «некруглыми» значениями
- Что делает
/loopбез промпта и как заменить встроенный промпт своим - Как ставить разовые напоминания и управлять списком задач
- Какие ограничения есть у задач, привязанных к сессии
Ключевые термины
/loop— встроенный скилл, повторяющий промпт, пока сессия открыта.- Самостоятельный темп — режим, в котором Claude сам выбирает задержку до следующей итерации.
loop.md— файл, заменяющий встроенный обслуживающий промпт для/loopбез аргументов.- Джиттер — детерминированный сдвиг времени срабатывания, распределяющий нагрузку.
- Срок в семь дней — период, после которого повторяющаяся задача сама себя удаляет.
Три формы одной команды
И интервал, и промпт необязательны, и от указанного зависит поведение:
| Что указали | Пример | Что происходит |
|---|---|---|
| Интервал и промпт | /loop 5m проверь деплой |
Промпт выполняется по фиксированному расписанию |
| Только промпт | /loop проверь деплой |
Интервал Claude выбирает сам на каждой итерации |
| Только интервал или ничего | /loop |
Выполняется встроенный обслуживающий промпт или ваш loop.md |
Начнём с первой:
/loop 5m проверь, завершился ли деплой, и расскажи, что произошло
Claude превратит интервал в cron-выражение, поставит задачу и подтвердит периодичность и идентификатор. Интервал пишется и в начале как токен 30m, и в конце как оборот «каждые 2 часа». Единицы: s, m, h, d.
Секунды округляются вверх до минуты — у cron гранулярность в минуту. Интервалы вроде 7m или 90m, не ложащиеся на ровный cron-шаг, округляются до ближайшего подходящего, и Claude сообщает, что выбрал.
Вместо текста можно передать скилл — он выполнится на каждой итерации:
/loop 20m /review-pr 1234
Ограничение: по расписанию выполняются только скиллы, которые Claude имеет право вызывать сам. Как обычный текст, без выполнения, дойдут встроенные команды вроде /permissions или /clear, скиллы с disable-model-invocation: true (включая встроенный /verify), скиллы, скрытые настройкой skillOverrides или deny-правилом на Skill, и MCP-промпты.
Когда интервал выбирает Claude
Опустите интервал — Claude будет выбирать задержку сам:
/loop проверь, прошёл ли CI, и разбери комментарии ревью
После каждой итерации он выбирает паузу от минуты до часа: коротко ждёт, пока сборка добегает или в pull request идёт активность, дольше — когда ничего не происходит. Задержку и причину печатает в конце итерации.
Такой цикл виден в общем списке задач и отменяется как любой другой. Джиттер к нему не применяется, срок в семь дней — применяется.
Есть и альтернатива опросу. Если в сессии доступен инструмент Monitor, Claude может использовать его: Monitor запускает фоновый скрипт и передаёт каждую строку вывода по мере появления — экономнее по токенам и отзывчивее.
Остановить самостоятельный цикл во время ожидания можно клавишей Esc. Claude и сам может завершить его, когда задача выполнена. Задачи, поставленные обычным запросом, клавишей Esc не отменяются — их нужно удалять явно.
Голый /loop и свой промпт по умолчанию
Команда без аргументов запускает встроенный обслуживающий промпт:
/loop
На каждой итерации Claude продолжает незавершённую работу из разговора, занимается pull request текущей ветки (комментарии ревью, упавший CI, конфликты слияния), а когда ничего не ждёт — ищет баги или упрощает код.
Границы жёсткие: новых инициатив за пределами перечисленного Claude не начинает, а необратимые действия вроде пуша выполняет, только если они продолжают уже разрешённое в разговоре. Голый /loop работает в самостоятельном темпе; нужно расписание — добавьте интервал: /loop 15m.
Встроенный промпт заменяется вашим через файл loop.md. Claude ищет его в двух местах и берёт первый найденный:
| Путь | Область |
|---|---|
.claude/loop.md |
Проект. Имеет приоритет, если есть оба файла |
~/.claude/loop.md |
Пользователь. Применяется в проектах без своего файла |
Формат — обычный markdown без обязательной структуры:
Проверь PR ветки `release/next`. Если CI красный, возьми лог упавшей
джобы, разберись и запушь минимальный фикс. Если пришли новые
комментарии ревью, разбери каждый и закрой тред. Если всё зелено
и тихо, скажи об этом одной строкой.
Правки подхватываются на следующей итерации, так что инструкции дорабатываются на ходу. Файл длиннее 25 000 байт обрезается. И помните: loop.md задаёт один промпт по умолчанию для голого /loop, а не список задач.
Разовые напоминания и управление задачами
Для одноразовых дел /loop не нужен — хватит обычной фразы:
напомни в 15:00 запушить релизную ветку
через 45 минут проверь, прошли ли интеграционные тесты
Claude привяжет срабатывание к конкретной минуте и часу через cron-выражение и подтвердит время. После срабатывания задача удаляет себя сама. Списком тоже управляют обычными словами:
какие у меня есть запланированные задачи?
отмени задачу проверки деплоя
Под капотом три инструмента: CronCreate создаёт задачу, CronList показывает список, CronDelete отменяет по идентификатору. Идентификатор восьмисимвольный, в одной сессии задач может быть до 50.
Все выражения трактуются в вашем локальном часовом поясе: 0 9 * * * — это 9 утра там, где запущен Claude Code, а не UTC.
Есть ещё джиттер — детерминированный сдвиг, чтобы все сессии не били по API в одну секунду. Повторяющиеся задачи срабатывают до 30 минут позже назначенного (или до половины интервала, если задача чаще часа). Разовые, назначенные на начало или середину часа, — до 90 секунд раньше. Нужна точность — выберите минуту, отличную от :00 и :30, например 3 9 * * *.
Границы: что задачи сессии не умеют
Ограничения стоит знать до того, как вы на что-то положитесь.
Задачи срабатывают, только пока Claude Code запущен и простаивает. Но если увести сессию в фон, задачи /loop переезжают туда и продолжают работать без терминала.
Пропущенные срабатывания не догоняются. Если время наступило, пока Claude был занят длинным запросом, задача сработает один раз, когда он освободится, а не за каждый пропущенный интервал.
Новый разговор стирает все задачи сессии. claude --resume или --continue восстанавливает неистёкшие повторяющиеся задачи и разовые, время которых ещё не наступило.
Повторяющиеся задачи истекают через семь дней: это защита от забытого цикла. Нужно дольше — пересоздайте задачу или возьмите механизм из следующего урока.
Отключить планировщик целиком можно через CLAUDE_CODE_DISABLE_CRON=1.
Частые ошибки
- Рассчитывать, что задачи работают после закрытия терминала. Они срабатывают, только пока Claude Code запущен и простаивает. Нужно оставить сессию работать — уведите её в фон, задачи
/loopпереедут туда. - Ждать точного срабатывания в
:00. Джиттер сдвигает повторяющиеся задачи до 30 минут вперёд. Когда время критично, берите минуту, отличную от:00и:30. - Ставить в
/loopскилл, который Claude не может вызвать сам. Встроенные команды и скиллы сdisable-model-invocation: trueдойдут как текст и не выполнятся. - Забыть про семидневный срок. Повторяющаяся задача сработает последний раз и удалится. Для долгого расписания нужен другой механизм.
Наиболее частые вопросы
- Что будет, если написать
/loop 7m? — Интервал округлится до ближайшего cron-шага, и Claude сообщит, что выбрал. - В каком часовом поясе трактуется расписание? — В вашем локальном.
0 9 * * *— это 9 утра там, где запущен Claude Code. - Сколько задач можно держать в одной сессии? — До 50 одновременно, у каждой восьмисимвольный идентификатор для отмены.
- Как остановить самостоятельный цикл? — Нажмите
Esc, пока он ждёт итерации. Задачи, поставленные обычным запросом, так не отменяются. - Переживут ли задачи перезапуск? — Частично:
-resumeили-continueвернёт неистёкшие задачи. Новый разговор стирает все.
Итоги
Хорошая работа: вы освоили самый лёгкий уровень автоматизации — повторение внутри живой сессии. Вы знаете три формы /loop, умеете задавать интервал, заменяете встроенный обслуживающий промпт своим через loop.md, ставите разовые напоминания обычной фразой и управляете списком задач.
И главное — знаете границы: сессия открыта, семь дней максимум, пропуски не догоняются. Это ровно тот инструмент, который нужен для «последить, пока я работаю», и ровно не тот, который нужен для ночного отчёта.
Как раз про второе — следующий урок. Разберём два уровня выше: локальные задачи по расписанию, работающие без открытой сессии, и облачные routines, идущие даже при выключенном компьютере.