Reminders
The Reminders feature lets you set timed reminders that fire as toast notifications in your browser. Schedule a reminder and the platform will notify you when the time arrives.
Creating a Reminder
Use the /remind command in any chat:
/remind 30m check the build status
The platform parses the time and message, schedules the reminder, and confirms it in the chat as a system message:
Reminder set for 30m: check the build status
A toast notification also appears confirming the reminder was created.
Command Syntax
/remind [time] [message]
The words "me" and "in" are optional filler words and are stripped during parsing:
/remind me in 30 minutes to check the build
/remind 2h review the PR
/remind 1d deploy to production
/remind me 5m take a break
The word "to" before the message text is also optional and ignored:
/remind 1h to check the deployment
/remind 30s to save my work
Time Formats
| Format | Unit | Example |
|---|---|---|
30s, 30sec, 30secs, 30seconds | Seconds | /remind 30s check the timer |
5m, 5min, 5mins, 5minutes | Minutes | /remind 5m take a break |
2h, 2hrs, 2hours | Hours | /remind 2h review PR |
1d, 1day, 1days | Days | /remind 1d follow up on email |
The time value must be a positive integer followed by a unit suffix. The parser matches the first character of the unit to determine the multiplier:
| Unit char | Multiplier |
|---|---|
s | 1,000 ms (1 second) |
m | 60,000 ms (1 minute) |
h | 3,600,000 ms (1 hour) |
d | 86,400,000 ms (1 day) |
Only relative times are supported ("in X minutes/hours"). There is no support for absolute times like "at 3pm" or "tomorrow at 9am."
Invalid Syntax
If the command cannot be parsed (missing time, missing message, or unrecognized unit), a toast notification shows the expected format:
Format: /remind 30m check the build
How Reminders Work Internally
- Parsing: The
/remindprefix is stripped, then optional "me" and "in" filler words are removed. A regex matches{number}{unit} {message}. - Storage: The reminder is saved to IndexedDB under the
ais-reminderskey as an array of objects. Each reminder has:
| Field | Description |
|---|---|
id | Unique identifier (timestamp in base-36) |
message | The reminder text |
dueAt | Absolute timestamp when the reminder should fire (ms since epoch) |
botId | The bot session where the reminder was created |
- Scheduling: A JavaScript
setTimeoutis set fordueAt - Date.now()milliseconds. The delay is capped at2,147,483,647ms (~24.8 days), which is the maximum value forsetTimeout. - Firing: When the timer fires, a toast notification appears with "Reminder:
message". The reminder is then removed from the stored array and IndexedDB is updated.
Page Visibility Check
Reminders also check for overdue items whenever your browser tab becomes visible (using the Page Visibility API's visibilitychange event). This handles the case where:
- Your computer was asleep when the reminder was due
- The browser tab was in the background
- The browser was closed and reopened
When the tab becomes visible, all reminders with dueAt <= Date.now() are fired immediately.
Reminders require the browser tab to be open. They are not server-side push notifications. If you close the tab or the browser, reminders will fire the next time you open the app (if they are past due), but they will not wake your device.
Persistence Across Reloads
Reminders survive page reloads. When the app initializes (AIS.Reminders.init()):
- All saved reminders are loaded from IndexedDB (
ais-reminderskey) - Each reminder's timeout is re-scheduled based on its stored
dueAttime - If a reminder is already past due (the page was closed when it should have fired), it fires immediately
- The
visibilitychangelistener is registered for ongoing due-date checking
Confirmation in Chat
When a reminder is created, the platform:
- Shows a toast notification with the reminder details and time label
- Adds an assistant message to the current chat: "Reminder set for
label:message" - Re-renders the chat to show the confirmation
The time label is displayed in a human-friendly format: minutes for durations under 1 hour (e.g., 30m), hours with one decimal for longer durations (e.g., 1.5h).
Limitations
| Limitation | Detail |
|---|---|
| Browser tab required | Reminders are client-side only -- they need the tab open or to be re-opened |
| Relative time only | No "at 3pm" or "tomorrow at 9am" -- only "in X seconds/minutes/hours/days" |
| No recurring reminders | Each reminder fires once and is automatically removed |
| Single device | Reminders are stored in the browser and do not sync across devices |
| Maximum timeout | setTimeout max is ~24.8 days (2^31 ms). Reminders beyond this duration may not fire accurately |
| No cancel command | There is currently no /cancel command to remove a pending reminder |
| No reminder list UI | Active reminders can be seen in the chat confirmation messages but there is no dedicated management panel yet |
Reminders are associated with a specific bot via the botId field. The reminder text and due time are stored alongside the bot's session ID, linking it to the conversation where you created it.
Example Workflows
| Scenario | Command |
|---|---|
| Check a CI build in 5 minutes | /remind 5m check CI build status |
| Review a pull request after lunch | /remind 2h review PR #42 |
| Follow up on an email tomorrow | /remind 1d follow up with client about contract |
| Quick timer while debugging | /remind 30s check if the process finished |
| End-of-day task | /remind 4h push today's changes and update ticket |