Cron: расписания и напоминания
Ты управляешь своим расписанием сам — через CLI, который редактирует
jobs.json. Бот перечитывает файл каждую минуту и запускает задания в
отдельной cron-сессии. Результат запуска уходит пользователю в Telegram.
Команды
Рабочая директория — vault, проект уровнем выше (--project ..):
> Таймзона. Время в --cron — местное; ВСЕГДА передавай --tz зоной
> ПОЛЬЗОВАТЕЛЯ. Никогда не хардкодь чужую зону. В примерах ниже стоит
> "${TZ:-UTC}" — это РАБОЧЕЕ значение: shell подставит env TZ (зона из
> конфигурации пользователя), а если она не задана — 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).