# Cron

> Управление собственным расписанием — напоминания, рутины, периодические задачи. Триггеры — "напомни", "каждый день/час/утро", "по расписанию", "schedule", "reminder", "отмени напоминание", "что запланировано".

- Skill: `smixs/cron` (Agent Skill)
- Install (CLI): `npx skillmds@latest add smixs/cron`
- Raw SKILL.md: https://api.skillmd.com/api/skills/smixs/cron/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: smixs (https://skillmd.com/u/smixs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/smixs/cron

---


# 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`), его подставляешь
> при вычислении времени.

```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<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` |

## Правила

1. **Никогда не эмулируй расписание** через `sleep`, циклы в Bash или
   фоновые процессы — только этот CLI.
2. Разовое («напомни…») — всегда `--at` + `--delete-after-run`.
3. `--at` пиши со смещением зоны ПОЛЬЗОВАТЕЛЯ (`<offset>`, напр. `+05:00`);
   naive-время (без смещения) трактуется в `--tz`, по умолчанию UTC.
4. **Prompt задания — самодостаточный**: исполняет отдельная сессия без
   контекста текущего разговора. Включай в prompt всё нужное (пути, имена,
   критерии).
5. Мониторинговым заданиям («проверь и скажи, если что-то новое») вели в
   prompt: «если ничего важного — начни ответ строкой [SILENT]» — тогда
   пользователь не получит пустой спам.
6. **Recursion guard**: если текущий запрос сам помечен `[CRON JOB ...]` —
   ты внутри планового запуска; создавать/менять/удалять задания ЗАПРЕЩЕНО.
7. После add/remove подтверди пользователю результат строкой из `list`
   (id, расписание, next run).

