Alerts

September 7, 2026 · View on GitHub

Summary

An OVOS skill that manages alarms, timers, reminders, events, and todos, with optional sync to a CalDAV service.

Description

The skill creates alarms, timers, reminders, and todo lists. You can remove them by name, time, or type, and ask what is active. If you turn on sync with a DAV server, you can also reach your reminders and todo lists from other devices.

Alarms and reminders can recur daily or weekly. You can snooze an active alert for a set amount of time while it plays. Any alert you do not acknowledge goes on a list of missed alerts, which you can read and clear on request.

If you were away, or your device was off or napping, ask for a summary of what you missed. The number of missed notifications shows in the upper left corner of the home screen.

Distinction between reminder, event, and todo

Events Appointments, gigs, and other items that may (but do not have to) have a start and end time. The skill warns you if an event collides with another one. You can add a prenotification in advance.

Reminders Less formal dates with only a start time. (You can still set a repeating reminder with an endpoint, for example "remind me to take out the trash every day at 7pm until next saturday".)

Todos Items not tied to a time, for short-term memory of things to do. You can organize todos into lists, for example a shopping list.

Alert is the general term that covers all of the types above.


Intents

The skill matches utterances with file-based intents (padatious/padacioso), not Adapt keyword intents. Each .intent file under locale/<lang>/intent/ is a set of phrase templates, optionally referencing a .entity file for a {slot} value list or a .voc file for an inline <keyword> alternation.

  • CreateAlarm / CreateAlarmAlt — set an alarm, optionally recurring on given weekdays, or (with a media word) playing media through OCP when it fires.
  • CreateTimer — start a countdown timer.
  • CreateReminder / create_reminder_recurring — set a reminder, optionally recurring.
  • CreateEvent — schedule an event, with collision and prenotification handling.
  • RescheduleAlert — move an existing alert earlier or later.
  • ChangePriority — change an alert's priority.
  • ChangeRepeat — change an alert's recurrence.
  • ChangeUntil — change an alert's recurrence end date.
  • ChangeMediaProperties — change the media/sound an alert plays.
  • ListAlerts — list active alerts, optionally within a timeframe.
  • TimerStatus — report the status of active timers.
  • missed_alerts — report and clear missed alerts.
  • CancelAlert — cancel one or more alerts.
  • CreateList — create a todo list.
  • AddListSubitems — add items to a todo list.
  • QueryListNames — list the names of existing todo lists.
  • QueryTodoEntries / QueryListEntries — list the entries of a todo/reminder list.
  • DeleteListEntries — remove specific entries from a todo list.
  • DeleteList — delete a todo list and its entries.
  • DeleteTodoEntries — delete one or more todo entries.
  • CalendarList — list the CalDAV calendars available for sync.
  • DAVSync — sync with a configured CalDAV server.

Scenarios

Keywords are underlined, alert names are italic. If you do not name an alert (like bread timer, tennis event), the name defaults to the time it is set for (for example 8 AM alarm, 2 minute timer).

Alarms, Timers, Reminders, Events

One time alarms, timers, reminders, or events:

  • "Set an alarm for 8 AM."
  • "Set a bread timer for 30 minutes."
  • "Schedule a tennis event for 2 PM on friday spanning 2 hours." ... (you can add a prenotification in advance for events)

HINT: A timer started without a time acts as a stop timer, counting up from now. To stop it and hear the elapsed time, say "Timer stop".

Recurring alarms, reminders, or events:

  • "Set a daily alarm for 8 AM."
  • "Set an alarm for 8 AM on saturdays."
  • "remind me to take out the trash every Thursday and Sunday at 7 PM."

OCP Alarm: (An alarm that triggers the media player; depends on the OCP capabilities of your device or serving instance)

  • "wake me up at 8 AM with music." (in general: "... with {media type}") -> the skill asks which media title to play, then looks it up in the media library
  • "wake me with music." (sets media on an already created alarm; the skill picks the next alarm)

Reschedule an existing alarm, timer, reminder, or event: (by duration or fixed time)

  • "Reschedule my 8 AM alarm at 9 AM."
  • "Push the tennis event by one hour."
  • "Move my next event one hour earlier."
  • "Extend the bread timer by 2 minutes." (or: Extend the bread timer until 10 am)
  • "Change the 8 AM alarm recurring only mondays and tuesdays."
  • "Change tennis event length to 3 hours."

HINT: If you reschedule the time of a recurring alarm, the skill asks whether the change applies to all occurrences or just the next one.

Query:

  • "When is my next alarm?"
  • "Which reminders are scheduled today?"
  • "Are there any events between friday and sunday?" (also: "between friday 10am and 3 pm") running timer
  • "How much time is left on my bread timer?"

Cancel:

  • specific type/name: "Cancel my 8 AM alarm." (in general: "cancel my {name} {type}")
  • all / of a type: "Cancel all alerts." / "Cancel all alarms."
  • on a specific day: "Cancel alerts on saturday."
  • in a time period: "Cancel alerts between Friday 8 AM and 10 AM."
  • next: "Cancel my next alarm."

CAUTION: Double check before you "cancel all", especially with DAV active, because it drops all reminders and events.

Active alert (expired and currently speaking or playing):

  • dismiss: "Stop alert."
  • snooze: "Snooze." (default snooze is 15 minutes)
  • duration: "Snooze for 1 minute." / "Snooze until 8 AM."

HINT: You can also snooze an active reminder or timer with "remind me again at 10 AM." or "extend by 2 minutes". Do not name the alert in this case. The skill always treats active alerts as directly editable.

Missed alerts (expired and not acknowledged):

  • "Which alert did i miss?"
  • "Missed any alerts?"

Todo

  • walk the dog
  • shopping
    • milk
    • toast

(If you use Nextcloud as the DAV server, turn on the "Tasks" plugin application.)

Create:

  • "Remind me to walk the dog"
  • "create a shopping list" (you can populate the list afterward)

Sublist:

  • "add items to the shopping list" -> set the items one by one: for example milk pling toast pling ... (silence stops recording) (the skill shows or voices the list in advance)

Complete todos:

  • "scratch milk entry from the shopping list"
  • Optionally remove one or more items; the skill shows or voices the list: "remove item(s) from the shopping list"
  • Remove all items on the shopping list
  • Remove shopping list the same commands work for non-list todos:
  • "remove walk the dog note"
  • "remove todo entr(y/ies)"
  • "remove all memos"

(with DAV active, the server marks the item as complete)

Query:

  • list names : "which lists are stored?" ... "shopping"
  • list items : "which items are on the shopping list?" ... "milk and toast"
  • todo items : "Anything todo?" ... "i should remind you to walk the dog"

DAV

Calendar names:

  • which calendars are available?

Sync: (runs automatically every x minutes by default; you can also trigger it manually)

  • synchronize calendars

Settings

(this is the default)

{
    "speak_alarm": false,                              # if the alarm should be spoken
    "speak_timer": true,                               # if the timer should be spoken
    "sound_alarm": "<path/to/soundfile>",              # default constant_beep.mp3
    "sound_timer": "<path/to/soundfile>",              # default beep4.mp3
    "snooze_mins": 15,                                 # default snooze time if duration/time is not specified
    "timeout_min": 1,                                  # the duration the user is notified, after which the alert is considered missed
                                                       # (doesn't apply to media -radio/video/..- alarms)
    "play_volume": 90,                                 # volume of the alert sound
    "escalate_volume": true,                           # alarms only - raise volume over time (10% steps, dependent on timeout_min;
                                                       #                                       half the time on max volume = `play_volume`)
    "priority_cutoff": 8
    ...
}

See DAV settings below.

Setting up a DAV connection

(tested with NextCloud)

For now, you must edit the credential file by hand; this will change in the future. When the skill starts, it creates a template file at ~/.local/share/mycroft/filesystem/skills/<skillname>/dav_credentials.json.

{
    "<service>": {
        "url": "https://<ip:port>/remote.php/dav",
        "username": "...",
        "password": "...",
        "ssl_verify_cert": "..."                       # if SSL is set up, otherwise delete this line
    },
    "<another service>": ...
}

First set up the credentials, then fill in the matching parts of the skill settings file settings.json. The skill reloads its settings and starts the repeating sync event (every frequency seconds).

{
    ...,
    "services": "<service>,<another service>",         # comma separated string of services
    "frequency": 15,                                   # the number of minutes between syncronisation; default 15
    "sync_ask": false                                  # If it should be asked if a generated reminder/todo element should be synchronized
}

The skill fetches DAV calendar dates one year in advance. You can set up multiple calendars on the server; the skill asks which one to sync to. Connection errors are voiced; check the skill log for details.

Only events, reminders, and todos sync. Alarms and timers do not sync. Check the timezone on your server and events, because the skill sometimes reads the timezone wrong and schedules the alert incorrectly.

Known Bugs / Troubleshooting

This skill targets ovos-core >= 0.0.8 and its dependencies. On an older version, you might run into major problems; please update. The skill is tested mainly in German and, to a lesser extent, English, and might miss some individual speech patterns. Other languages are autotranslated and need review. During the alpha phase, contributions are welcome to build a well balanced experience across languages.

  • The skill does not understand or misreads what I am saying. Check the logs for the intent that fired and the utterance that was transcribed. STT might have gotten the words wrong. Try a different service (a known issue especially with non-English speakers using Whisper).
  • The notification system does not work properly. Missed alerts do not show. Notifications sometimes get mixed up; this is a known issue and work is in progress. Use the latest ovos-gui-plugin-shell-companion (#) and remove the old ovos-PHAL-plugin-notification-widgets.
  • When you populate a list, the last item is followed by an "unknown" utterance. This is a known issue that a future release will fix. It comes from how the skill handles input in a response context. It is not critical and you can ignore it; the list still populates correctly most of the time.

These are not hard requirements, since preferences vary, but recommended. GUI: skill-ovos-homescreen >= 0.0.3a6 (see also this pending PR)

Incompatible Skills

This skill has known intent collisions with, and replaces:

Remove these skills before you install this one.

Contributing Translations

Most of the skill is autotranslated, except for English and German, and needs review. Intent matching is file-based (padatious/padacioso), not Adapt: each .intent file under locale/<lang>/intent/ lists phrase templates, {slot} placeholders are optionally backed by a sibling .entity file, and a <keyword> reference inlines the matching alternation from a sibling .voc file.

A handful of .voc files (for example until.voc, priority.voc, repeat.voc, days.voc) are also read directly at runtime by the skill's own keyword-matching helpers, to recognize a concept anywhere in free text rather than through a fixed template slot. Dialogs are mostly straightforward and should include the correct mustache tags from the start. Keep these patterns in mind.

To contribute a translation, check the intent, entity, vocab, and dialog folders and add the files for your language, mirroring the structure of an existing locale (en-US or de-DE). For questions, contact @sgee_ in Matrix chat.

Contact Support

Use this link (Matrix Chat) or submit an issue on GitHub.

License

BSD-3-Clause

Credits

NeonGeckoCom NeonDaniel

Category

Productivity Daily

Tags

#OVOS #OpenVoiceOS #alert #alarm #timer #reminder #schedule