RUGitHubInstall

Reminders

Ask Iva to remind you, and she will — at the right minute, in your timezone, in your chat. A reminder is not a note she might recall later: it is a row in data/, picked up by a dispatcher that wakes every minute. Restart the server, update Iva, roll the version back — the row is still there, and anything that came due while the machine was down fires on the first tick after it comes back.

How to ask

Plain words in the chat, the way you would tell a person:

Two kinds: a one-time reminder fires once and is done, a repeating one takes its next time from the calendar and waits for it. You never write the date arithmetic yourself and neither does she: you say when, Iva turns it into an exact moment and tells you back the time she stored.

You sayWhat it means
in 30m, in 1h 30m, in 2da delay from now
14:30today at that wall-clock time; if it has already passed — tomorrow
2026-09-14 09:00that date and time on your wall clock
an ISO instant with an offset or Zexactly that moment, wherever you are
a five-field schedule expression, e.g. 0 9 * * 1-5repeating: 09:00 on weekdays, in your timezone

Everything is read in your timezone — the one Iva is configured with, not the server’s. A date that does not exist on your clock (the hour skipped by a daylight-saving change, 31 February) is refused with that reason instead of being rounded to something nearby. So is a time in the past, and anything more than a year out.

What happens at the time

Your reminder text is an instruction Iva gives her future self. At the due minute she wakes in a fresh session that knows nothing about the conversation you asked in, does what the text says — with her tools, so «find the news and send it» really goes and finds them — and the code sends the final text of that turn back to the chat and topic where you asked. One turn, one message.

That is why the text is written to stand on its own: «remind me about the standup» and «collect yesterday’s tasks and list what is still open» both work, but «do that thing we discussed» will not — by then the discussion is gone.

If the turn cannot run at all (the model provider is down, the agent breaks, the answer comes back empty), the code sends your text back to you exactly as you dictated it, and the row says what broke. So a reminder always arrives, with or without the model.

Nothing repeats. A row fires once: the moment it fires it is marked, and a repeating row moves on to its next time. There is no retry ladder, no window that removes a reminder hours later, and no warning per failure — the fact of the firing stays with the row: fired_at, delivered and the reason in error.

Where to see the list

/menu → ⏰ shows the nearest reminders, what failed to go out, and one line about the dispatcher: when it last ticked (its pulse is the file data/reminders.tick, touched every minute). A fresh pulse means the machinery is alive; a stale one, or none at all, is your signal that reminders are stored but nothing will fire until Iva is running again.

You can also just ask in the chat: she lists the same rows with their ids, the next time, and the last firing with the delivery fact. Rows stay in the list for a day after they fire — that is where you see whether the text went out. Ask her to cancel one and she removes it by id.

When something breaks

Scheduling and delivery

Use the remind tool for schedules. Delivery goes through the turn response; use iva post for an external chat.

Limits

View original Markdown ↗