$ sudo teach IT

Есть класс задач, где нужно не «сделать один раз», а «проверять, пока не изменится». Идёт деплой — узнать, когда закончится. Открыт 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, идущие даже при выключенном компьютере.

На следующий урок