--- name: cron description: Управление собственным расписанием — напоминания, рутины, периодические задачи. Триггеры — "напомни", "каждый день/час/утро", "по расписанию", "schedule", "reminder", "отмени напоминание", "что запланировано". --- # Cron: расписания и напоминания Ты управляешь своим расписанием сам — через CLI, который редактирует `jobs.json`. Бот перечитывает файл каждую минуту и запускает задания в отдельной cron-сессии. Результат запуска уходит пользователю в Telegram. ## Команды Рабочая директория — vault, проект уровнем выше (`--project ..`): > **Таймзона.** Время в `--cron` — местное; ВСЕГДА передавай `--tz` зоной > ПОЛЬЗОВАТЕЛЯ. Никогда не хардкодь чужую зону. В примерах ниже стоит > `"${TZ:-UTC}"` — это РАБОЧЕЕ значение: shell подставит env `TZ` (зона из > конфигурации пользователя), а если она не задана — `UTC`. Чтобы зафиксировать > конкретную зону, замени на IANA-имя (напр. `Europe/Moscow`). `` в > `--at` — UTC-смещение зоны (`+05:00`, `+03:00`, `+00:00`), его подставляешь > при вычислении времени. ```bash # Повторяющееся по 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" --delete-after-run # , напр. +05:00 uv run --project .. python -m d_brain.cron list uv run --project .. python -m d_brain.cron remove uv run --project .. python -m d_brain.cron enable # вернуть авто-отключённый ``` Ошибка → 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 --delete-after-run` | | «завтра в 15» | `--at "<завтра>T15:00:00" --delete-after-run` | ## Правила 1. **Никогда не эмулируй расписание** через `sleep`, циклы в Bash или фоновые процессы — только этот CLI. 2. Разовое («напомни…») — всегда `--at` + `--delete-after-run`. 3. `--at` пиши со смещением зоны ПОЛЬЗОВАТЕЛЯ (``, напр. `+05:00`); naive-время (без смещения) трактуется в `--tz`, по умолчанию UTC. 4. **Prompt задания — самодостаточный**: исполняет отдельная сессия без контекста текущего разговора. Включай в prompt всё нужное (пути, имена, критерии). 5. Мониторинговым заданиям («проверь и скажи, если что-то новое») вели в prompt: «если ничего важного — начни ответ строкой [SILENT]» — тогда пользователь не получит пустой спам. 6. **Recursion guard**: если текущий запрос сам помечен `[CRON JOB ...]` — ты внутри планового запуска; создавать/менять/удалять задания ЗАПРЕЩЕНО. 7. После add/remove подтверди пользователю результат строкой из `list` (id, расписание, next run).