Cron: расписания и напоминания
Ты управляешь своим расписанием сам — через CLI, который редактирует
jobs.json. Бот перечитывает файл каждую минуту и запускает задания в
отдельной cron-сессии. Результат запуска уходит пользователю в Telegram.
Команды
Рабочая директория — vault, проект уровнем выше (--project ..):
Таймзона. Время в
--cron— местное; ВСЕГДА передавай--tzзоной ПОЛЬЗОВАТЕЛЯ. Никогда не хардкодь чужую зону. В примерах ниже стоит"${TZ:-UTC}"— это РАБОЧЕЕ значение: shell подставит envTZ(зона из конфигурации пользователя), а если она не задана —UTC. Чтобы зафиксировать конкретную зону, замени на IANA-имя (напр.Europe/Moscow).<offset>в--at— UTC-смещение зоны (+05:00,+03:00,+00:00), его подставляешь при вычислении времени.
# Повторяющееся по cron-выражению (время местное — указывай --tz)
uv run --project .. python -m d_brain.cron add \
--prompt "Собери утреннюю сводку: вчерашний daily, goals недели" \
--cron "0 9 * * *" --tz "${TZ:-UTC}" --id morning-brief
# Интервал в секундах
uv run --project .. python -m d_brain.cron add \
--prompt "Проверь inbox в vault, новое разложи по карточкам. Если пусто — начни ответ с [SILENT]" \
--every 3600
# Разовое напоминание: ВСЕГДА --at + --delete-after-run
uv run --project .. python -m d_brain.cron add \
--prompt "Напомни про звонок с подрядчиком" \
--at "2026-06-12T18:00:00<offset>" --delete-after-run # <offset>, напр. +05:00
uv run --project .. python -m d_brain.cron list
uv run --project .. python -m d_brain.cron remove <id>
uv run --project .. python -m d_brain.cron enable <id> # вернуть авто-отключённый
Ошибка → exit 2 и текст в stderr: прочитай и исправь аргументы.
Перевод естественного языка в расписание
| Просьба | Аргументы |
|---|---|
| «каждый день в 9» | --cron "0 9 * * *" --tz "${TZ:-UTC}" |
| «по будням в 18:30» | --cron "30 18 * * 1-5" --tz "${TZ:-UTC}" |
| «каждое воскресенье» | --cron "0 10 * * 0" --tz "${TZ:-UTC}" |
| «каждый час» | --every 3600 |
| «каждые 15 минут» | --every 900 |
| «через 20 минут» | вычисли ISO-время: now+20m → --at <ISO> --delete-after-run |
| «завтра в 15» | --at "<завтра>T15:00:00<offset>" --delete-after-run |
Правила
- Никогда не эмулируй расписание через
sleep, циклы в Bash или фоновые процессы — только этот CLI. - Разовое («напомни…») — всегда
--at+--delete-after-run. --atпиши со смещением зоны ПОЛЬЗОВАТЕЛЯ (<offset>, напр.+05:00); naive-время (без смещения) трактуется в--tz, по умолчанию UTC.- Prompt задания — самодостаточный: исполняет отдельная сессия без контекста текущего разговора. Включай в prompt всё нужное (пути, имена, критерии).
- Мониторинговым заданиям («проверь и скажи, если что-то новое») вели в prompt: «если ничего важного — начни ответ строкой [SILENT]» — тогда пользователь не получит пустой спам.
- Recursion guard: если текущий запрос сам помечен
[CRON JOB ...]— ты внутри планового запуска; создавать/менять/удалять задания ЗАПРЕЩЕНО. - После add/remove подтверди пользователю результат строкой из
list(id, расписание, next run).