Регулярні задачі Claude Code: cron, /loop, /schedule — коли який

Для cron-варіанту — Linux-хост, на якому встановлено CLI claude, виконано claude /login в інтерактивній сесії (токен зберігся у ~/.claude/), активна підписка Pro/Max або API-ключ. Для решти — звичайна робоча сесія CC.
Чотири механізми — карта
| Механізм | Де живе | Інтервал | Коли вибирати |
|---|---|---|---|
cron + claude -p | Linux-сервер | хв-години-дні-тижні | Незалежна від твоєї сесії регулярна задача (нічний звіт, дайджест, моніторинг) |
/loop | У поточній сесії | сек-хвилини | «Поллай поки X», «перевіряй білд», інтерактивний моніторинг |
/schedule | Cloud routine | cron-вираз | Регулярний агент без потреби тримати локальну сесію |
ScheduleWakeup | Внутрішній | сек-хвилини | Self-pacing у /loop dynamic mode (модель сама вибирає інтервал) |
Якщо коротко: cron — найунiверсальніший і найдешевший спосіб; /loop — для активного моніторингу у вікні сесії; /schedule — для віддалених routine, які не хочеш тримати на своєму ноутбуці; ScheduleWakeup — внутрішнє API, рідко зустрічається явно.
Системний cron + claude -p — патерн з офісу
Це найкорисніший варіант для regular-задач, які мають крутитися незалежно від твого ноутбука. У моїй конфігурації — на офісному сервері 192.168.12.21 (Ubuntu, Hestia CP). Сервер у LAN, має доступ до MySQL, локальних файлів, інших серверів — те, чого хмарна пісочниця не дає.
Структура задачі на сервері
~/claude-tasks/<task-name>/ CLAUDE.md # Контекст задачі (коротко) .claude/commands/<cmd>.md # Інструкція агента (slash-команда) .env # chmod 600, креденшли <helper_script>.php|.py|.sh # Допоміжні скрипти (якщо потрібно) <task>.log # Лог запусків
Логіка: для кожної регулярної задачі — окрема директорія з власним CLAUDE.md і скілом у .claude/commands/<cmd>.md. CC при старті бачить ці файли і знає, що робити.
Cron-запис
# Сервер у UTC. Київ = UTC+3 (літо) / +2 (зима). # Понеділок 09:00 Київ (літо) = 06:00 UTC 0 6 * * 1 cd /home/petrikol/claude-tasks/weekly-digest && /usr/local/bin/claude --dangerously-skip-permissions -p "/weekly-digest" >> digest.log 2>&1
Розбір флагів:
cdу директорію задачі — CC підтягнеCLAUDE.mdі скіл з.claude/commands/./usr/local/bin/claude— повний шлях обов'язковий: PATH у cron не успадковується.--dangerously-skip-permissions— автодозвіл усіх tools. Без нього cron-задача зависне на першому permission-запиті. Назва прапора лякаюча, але це єдиний спосіб для unattended-режиму. Ризик мінімізовується тим, що задача працює у виділеній директорії з обмеженими credentials.-p "— non-interactive: CC виводить відповідь і виходить. Тут передаємо ім'я скіла як slash-команду." >> digest.log 2>&1— лог у файл задачі.
Що добре працює
- Збір з зовнішніх джерел (WebSearch, scraping) → обробка → публікація.
- Моніторинг LAN-сервісів (Zabbix, Grafana, MikroTik API).
- Звіти з MySQL/PostgreSQL.
- Файлові операції (backup-перевірки, ротація).
- Розсилки через API (Telegram, email).
Поточні задачі
weekly-digest— щопонеділка 06:00 UTC, бухгалтерський дайджест BAS оновлень → phpBB-форум.forum-traffic-report— щонеділі 04:00 UTC, метрики phpBB → Telegram.weekly-digest-bas-updates— щопонеділка 05:00 UTC, окремий дайджест для BAS-каналу.
Розбір самих скілів — у спиці «Власні скіли».
/loop — інтерактивний моніторинг
Slash-команда, яка повторює промт всередині поточної сесії з заданим інтервалом. Корисна, коли тобі треба «дочекатись» якоїсь події, або періодично перевіряти стан, не виходячи з сесії.
/loop 5m /babysit-prs
Це запустить скіл /babysit-prs кожні 5 хвилин. Зупиняється коли ти прерваш сесію або введеш будь-який інший промт.
Dynamic mode — якщо викликати /loop без інтервалу, модель сама вирішує, коли запустити наступну ітерацію через внутрішній механізм ScheduleWakeup. Працює коли інтервал залежить від ситуації (10 сек якщо щось рухається, 5 хв якщо тихо).
Коли /loop кращий за cron:
- Тимчасова задача (поки сидиш за машиною).
- Потрібна реакція в твоєму поточному репо (не у виділеному
claude-tasks/). - Інтервал короткий (секунди-хвилини), де cron надмірний.
/schedule — cloud-routine
Створює віддалену агент-задачу, яка крутиться у хмарі за cron-розкладом. Корисна для:
- Однократного відкладеного запуску («о 15:00 нагадай перевірити X»).
- Регулярного routine, який не хочеш тримати на власному сервері.
Запускається через slash, налаштовується через web-консоль Anthropic. Працює без твого участі, але:
- Не має доступу до твоєї LAN (тільки інтернет + API).
- Окрема статтю тарифу.
- Мінімальний інтервал обмежений (детальніше — в офіційній документації).
Кейси
1. Щотижневий дайджест BAS-оновлень
cron на .21, 06:00 UTC щопонеділка. CC:
- Читає
CLAUDE.mdі скіл/weekly-digest. - Робить WebSearch по тематичних форумах і Telegram-каналах.
- Перевіряє свій
publish_log.json— чи був дайджест на цьому тижні. - Якщо ні — пише пост на 600-900 слів, формат bbcode.
- Викликає
publish_forum.php(helper-скрипт у тій же папці), який робить прямий INSERT у MySQL phpBB.
Лог пишеться у digest.log. Якщо щось упало — наступного ранку у пошті повідомлення від cron.
2. /loop для babysit довгого білда
/loop 270 /check-build
Запустив білд, який триває ~25 хв. Замість сидіти й оновлювати — створив скіл /check-build (виконує npm run status, парсить вивід, повідомляє STILL_RUNNING / FAILED / SUCCESS). /loop 270 викликає його кожні 4.5 хв (~5 хв, але всередині 5-хвилинного TTL prompt-кешу).
Коли білд закінчиться — CC автоматично виведе результат у вікно. Я тим часом займаюсь іншим.
3. One-time scheduled через /schedule
/schedule о 15:00 завтра нагадай мені перевірити status reverse-proxy на .12.21 і чи довантажились алерти Zabbix після перезавантаження
Створює cloud-routine, який о вказаному часі стартує сесію, виконує перевірку (Zabbix API) і повідомляє результат. Корисно для «нагадай мені» без локального cron.
Підводні камені
claude у cron потребує оточення. PATH, HOME, токени — нічого з цього cron не успадковує автоматично. Завжди використовуй повний шлях /usr/local/bin/claude і виконуй cd у директорію задачі. Якщо токен зберігається у ~/.claude/, переконайся, що cron-користувач — той самий, який зробив claude /login.
--dangerously-skip-permissions — мусиш йому довіряти. У cron немає кому натиснути «allow». Прапор єдиний спосіб запустити CC без блокування. Безпека забезпечується тим, що:
- Директорія задачі окрема, з обмеженим набором скриптів.
.envз credentials —chmod 600.- CLAUDE.md містить чіткі обмеження «що можна, що ні».
- Скіли (slash-команди) у
.claude/commands/точно описують алгоритм.
MAX ліміт ділиться з інтерактивними сесіями. Якщо в офіс-час ти активно працюєш, а вночі cron робить дайджест — це той самий ліміт. Великі дайджести (з WebSearch на 20 джерел) можуть з'їсти 30-40% денного бюджету. Планувати інтервали з запасом.
Часовий пояс сервера. Перевір timedatectl — більшість Linux-серверів у UTC. Для розкладу за київським часом — додавай +3/+2 годин.
/loop з інтервалом 5 хв (300 сек) — антипатерн. Anthropic кеш промту має TTL ~5 хв; інтервал рівно 300 сек пропускає cache. Краще або 270 сек (вкладеш у TTL), або 1200+ сек (одна cache-miss → довгий період).
/schedule рутіни на cloud — тарифікуються окремо. Не лити туди задачі, які можуть крутитись на власному сервері — це дешевше і має менше обмежень.
Cross-refs
- Скіли, які запускає cron — «Власні скіли».
- Sub-агенти для довгих задач — «Sub-агенти Claude Code».
- Stop-hook для повідомлення про завершення cron-сесії — «Hooks у Claude Code».
- Permissions, якщо
--dangerously-skip-permissionsздається занадто вільним — «Permissions і settings.json».
- Cron-рядок використовує абсолютні шляхи (
/usr/local/bin/claude,/home/user/...). - Перед
claude -pєcdу директорію задачі. - Вивід зливається у локальний
.logфайл. - У директорії задачі є
CLAUDE.md,.claude/commands/<cmd>.md,.env(chmod 600). - Скіл (у
.claude/commands/) має ідемпотентний алгоритм: перевіряє «чи це вже зроблено» перед діями. - На сервері — окремий cron-користувач з обмеженим набором прав. Не root.
- Лог регулярно ротуйеться (logrotate або вручну).
Прапори і шляхи CLI claude станом на травень 2026. Назва --dangerously-skip-permissions може зміниться у наступних релізах. Свіже — claude --help на твоєму сервері.