Skip to main content

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

FormatUnitExample
30s, 30sec, 30secs, 30secondsSeconds/remind 30s check the timer
5m, 5min, 5mins, 5minutesMinutes/remind 5m take a break
2h, 2hrs, 2hoursHours/remind 2h review PR
1d, 1day, 1daysDays/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 charMultiplier
s1,000 ms (1 second)
m60,000 ms (1 minute)
h3,600,000 ms (1 hour)
d86,400,000 ms (1 day)
tip

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

  1. Parsing: The /remind prefix is stripped, then optional "me" and "in" filler words are removed. A regex matches {number}{unit} {message}.
  2. Storage: The reminder is saved to IndexedDB under the ais-reminders key as an array of objects. Each reminder has:
FieldDescription
idUnique identifier (timestamp in base-36)
messageThe reminder text
dueAtAbsolute timestamp when the reminder should fire (ms since epoch)
botIdThe bot session where the reminder was created
  1. Scheduling: A JavaScript setTimeout is set for dueAt - Date.now() milliseconds. The delay is capped at 2,147,483,647 ms (~24.8 days), which is the maximum value for setTimeout.
  2. 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.

warning

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()):

  1. All saved reminders are loaded from IndexedDB (ais-reminders key)
  2. Each reminder's timeout is re-scheduled based on its stored dueAt time
  3. If a reminder is already past due (the page was closed when it should have fired), it fires immediately
  4. The visibilitychange listener is registered for ongoing due-date checking

Confirmation in Chat

When a reminder is created, the platform:

  1. Shows a toast notification with the reminder details and time label
  2. Adds an assistant message to the current chat: "Reminder set for label: message"
  3. 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

LimitationDetail
Browser tab requiredReminders are client-side only -- they need the tab open or to be re-opened
Relative time onlyNo "at 3pm" or "tomorrow at 9am" -- only "in X seconds/minutes/hours/days"
No recurring remindersEach reminder fires once and is automatically removed
Single deviceReminders are stored in the browser and do not sync across devices
Maximum timeoutsetTimeout max is ~24.8 days (2^31 ms). Reminders beyond this duration may not fire accurately
No cancel commandThere is currently no /cancel command to remove a pending reminder
No reminder list UIActive reminders can be seen in the chat confirmation messages but there is no dedicated management panel yet
info

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

ScenarioCommand
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