🇬🇧 English version — каноническая версия, она может быть новее.
Напоминания
Попросите Иву напомнить - и она напомнит: в нужную минуту, в вашей зоне, в вашем чате. Напоминание это не заметка, о которой она может вспомнить: это строка в data/, которую раз в минуту забирает диспетчер. Перезапустите сервер, обновите Иву, откатите версию - строка на месте, а всё, чей срок пришёлся на время простоя, сработает на первом же тике после возвращения.
Как попросить
Обычными словами в чате, как сказали бы человеку:
- «напомни через 30 минут позвонить в клинику»
- «в 14:30 напомни отправить счёт»
- «14 сентября в 09:00 - дедлайн по договору»
- «по будням в 9 утра напоминай про стендап»
- «какие у меня напоминания?» - она перечислит
- «сними напоминание про стендап» - найдёт и снимет
Вида два: разовое срабатывает один раз и на этом закончено, повторяющееся берёт следующий срок из расписания и ждёт его. Ни вы, ни она не считаете дату в уме: вы говорите когда, Ива превращает это в точный момент и называет время, которое записала. Если названное время не то, что вы имели в виду, скажите сразу - этот ответ и есть момент поймать недопонимание.
| Вы говорите | Что это значит |
|---|---|
in 30m, in 1h 30m, in 2d | задержка от текущего момента |
14:30 | сегодня в это время; если уже прошло - завтра |
2026-09-14 09:00 | эта дата и время на ваших часах |
ISO-момент со смещением или Z | ровно этот момент, где бы вы ни были |
выражение из пяти полей, например 0 9 * * 1-5 | повторяющееся: 09:00 по будням в вашей зоне |
Всё считается в вашей зоне - той, в которой настроена Ива, а не в зоне сервера. Дата, которой на ваших часах не существует (час, пропущенный переходом на летнее время, 31 февраля), отвергается с этой причиной, а не округляется до соседнего времени. Время в прошлом и всё, что дальше года вперёд, - тоже.
Что происходит в срок
Текст напоминания - это инструкция, которую Ива даёт себе будущей. В срок она просыпается свежей сессией, которая ничего не знает про разговор, где вы просили, делает то, что написано в тексте - своими инструментами, поэтому «найди новости и пришли» действительно идёт и ищет, - а код отправляет финальный текст этого хода в тот чат и ту тему, где вы просили. Один ход, одно сообщение.
Поэтому текст пишется так, чтобы стоял сам по себе: «напомни про стендап» и «собери вчерашние задачи и скажи, что осталось открытым» сработают, а «сделай то, что мы обсуждали» - нет: обсуждения к тому моменту рядом уже не будет.
Если ход не состоялся вовсе (провайдер модели недоступен, агент сломался, ответ пришёл пустым), код сам отправляет ваш текст дословно, а в строке остаётся причина. Напоминание приходит всегда - с моделью или без неё.
Повторов нет. Строка срабатывает один раз: в момент срабатывания она помечается, а повторяющаяся уезжает на следующий срок. Нет ни лестницы повторов, ни окна, которое снимает напоминание через часы, ни предупреждения на каждый провал - факт срабатывания остаётся в самой строке: fired_at, delivered и причина в error.
Где смотреть список
/menu → ⏰ показывает ближайшие напоминания, что не дошло, и одну строку про диспетчер: когда он тикал в последний раз (его пульс - файл data/reminders.tick, который обновляется каждую минуту). Свежий пульс значит, что машинерия жива; старый или отсутствующий - что напоминания записаны, но не сработают, пока Ива не запущена.
Можно просто спросить в чате: Ива перечислит те же строки с id, следующим сроком и последним срабатыванием с фактом доставки. Сработавшие строки видны сутки - там и видно, дошёл ли текст. Попросите снять - снимет по id.
Что делать при сбое
- Ничего не пришло. В строке
delivered: falseи причина вerror. Почините чат или токен и попросите заново: разовое напоминание уже сработало, поэтому ставьте новое. - Ход агента не состоялся. Ваш текст всё равно приходит дословно, причина - в
errorи в журнале (journalctl --user -u iva.service | grep reminders). - Диспетчер не тикает. Список предупредит, что напоминание записано, но не сработает, а
iva doctorскажет то же по файлу пульса. Он же перечислит напоминания, которые сработали за сутки и не доехали. no activity for 180000msпри проверке внешнего задания. Предел считает тишину в потоке событий Eve, включая блокирующий инструмент, который не выдаёт событий; это не трёхминутный предел всего хода. Проверка читает короткий снимок прогресса или статуса и возвращает его, даже если задание ещё работает. Ждать выхода процесса, запускатьtail -fили держать цикл опроса не нужно. Процедуру описывает скиллbackground-check. Код отправляет финальный статус; модель не должна отправлять отчёт отдельно и затем продолжать ждать. Поздняя проверка — новый запрос владельца, а не новое напоминание, созданное внутри сработавшего хода.
Чего Ива больше не делает
Расписание ставит инструмент remind. Отправка идёт ответом хода, во внешний чат — через iva post.
Пределы
- Туда, где попросили. Напоминание возвращается в тот чат и ту тему форума, где его поставили; другой человек как адресат не поддерживается. Напоминания, поставленные до 0.4.4, идут в чат владельца из настроек.
- Не чаще раза в десять минут. Более частое повторяющееся расписание отвергается: это уже мониторинг, а не напоминание.
- Ваша зона, одна из. Всё считается в зоне, в которой настроена Ива.
- Напоминание это один ход, а не проект. Оно срабатывает, Ива делает написанное в одном ходу и отвечает один раз (повторяющееся переходит к следующему сроку). Потолка по времени у хода нет: он идёт, сколько нужно работе, и кончают его только две вещи -
/stopиз того же чата или три минуты тишины от модели. Ход напоминания останавливается через/stopв исходном чате. Нативная ■ доступна в черновике личного чата, когда ход ведёт канал Telegram. Новых напоминаний в этом ходу она не ставит: список и снятие - можно, добавление - нет.