Add an apple-reminders skill that documents the current remindctl command surface for agentic tools. Refined before merge to match the 0.2.0 release: macOS/Homebrew requirements, JSON aliases, open filter, metadata fields, recurrence, alarms, location trigger constraints, permissions, and EventKit limitations. Co-authored-by: Allen Yi <yiwenyou_allen@outlook.com>
6.4 KiB
| name | description | homepage |
|---|---|---|
| apple-reminders | Use remindctl to inspect and manage Apple Reminders on macOS 14+, including show/list/add/edit/complete/delete/status/authorize workflows, due dates, alarms, recurrence, and location triggers. | https://github.com/steipete/remindctl |
Apple Reminders
Use remindctl for Apple Reminders on macOS. It uses Apple's public EventKit APIs, so changes sync through the normal Reminders/iCloud path.
Prerequisites
- macOS 14+ with Reminders.app
remindctlinstalled and available onPATH- Install with
brew install steipete/tap/remindctl - Reminders access for the terminal app that runs
remindctl - Use
remindctl statusto check permission state before mutating data
Use This Skill When
- The user wants to manage Apple Reminders from the terminal
- The user asks for reminders, reminder lists, due dates, completion, deletion, or permission status
- The user wants reminders that appear on iPhone, iPad, or Mac via Apple Reminders
Do Not Use This Skill When
- The user wants a non-Reminders agent alert, cron job, or timed chatbot reminder
- The user wants calendar events instead of reminders
- The user needs native Reminders sections, tags, smart lists, attachments, or Apple's private "Urgent" toggle
Current Command Model
remindctldefaults toshow todayshowaccepts filters:today,tomorrow,week,overdue,upcoming,open,completed,all, or a date stringshow --list <name>limits a view to one listlistshows all lists with no arguments, or reminders in one or more named listsaddcreates a remindereditupdates a reminder by index or ID prefixcompletemarks reminders completedeleteremoves remindersstatusreports Reminders authorization without promptingauthorizerequests permission when possible
Helpful Aliases
listsandlsmap tolistrmmaps todeletedonemaps tocomplete
Output And Flags
--json,-j,--json-output, and--jsonOutputemit JSON--plainemits stable tab-separated output--quietemits minimal output--no-colordisables colored output--no-inputdisables interactive prompts
Prefer --json when another step needs machine-readable data. JSON can include EventKit metadata such as creationDate, lastModifiedDate, url, alarmDate, locationTrigger, and recurrenceRule.
Reading Reminder Data
- Use
remindctl today --jsonorremindctl show --jsonto inspect reminders - Use
remindctl open --jsonfor all incomplete reminders, including reminders without due dates - Use
remindctl list --jsonto inspect lists - Use
remindctl list Work Errands --jsonto inspect multiple lists together - Use
remindctl status --jsonto inspect authorization state - Reminder IDs and display indexes come from
showoutput;complete,delete, andeditaccept either an index or an ID prefix
Creating Reminders
add accepts the title as a positional argument or via --title, but not both.
Important options:
--list <name>choose the target list--due <date>set the due date--alarm <date>set the alarm date--notes <text>add notes--repeat <rule>set simple recurrence--priority <none|low|medium|high>set priority--location <address>create a location trigger--radius <meters>adjust geofence radius--leavingtrigger on leaving instead of arriving
If no list is provided, remindctl uses the Reminders app's default list. Do not assume the default is a specific list name. If the system has no default reminder list, specify --list.
Use --location whenever using --radius or --leaving; those flags are invalid on their own.
Editing Reminders
edit can update:
--title--list--dueor--clear-due--alarmor--clear-alarm--notes--repeator--no-repeat--priority--completeor--incomplete
Reject conflicting combinations such as --due with --clear-due, --alarm with --clear-alarm, --repeat with --no-repeat, or --complete with --incomplete.
Use remindctl edit <id> --list <new-list> to move a reminder between lists. Do not tell the user to delete and recreate the reminder for a move; the command already supports moving it directly.
Dates
Accepted date inputs:
today,tomorrow,yesterdayYYYY-MM-DDYYYY-MM-DD HH:mm- ISO 8601 with timezone, such as
2026-01-03T12:34:56Z - Local ISO 8601 without timezone, such as
2026-01-03T12:34:56
Rules:
- Date-only inputs create all-day reminders
- Date-time inputs create timed reminders
- Timed due reminders get a notification alarm at the due time unless
--alarmoverrides it
If the user provides only a calendar date, prefer a date-only value instead of inventing a time.
Supported repeat values:
daily,weekly,biweekly,monthly,yearlyevery N days/weeks/months/years
Lists
remindctl listprints all lists with reminder and overdue countsremindctl list <name...>prints reminders in one or more listsremindctl list <name> --createcreates the list if missingremindctl list <name> --deletedeletes the listremindctl list <name> --rename <new-name>renames the listremindctl list <name> --forceskips confirmation for destructive list deletion- Create, delete, and rename accept one list name only
Completion And Deletion
completeanddeleterequire one or more IDs or indexesdeleteprompts for confirmation unless--forceor--no-inputsuppresses itcompletesupports--dry-rundeletesupports--dry-run
Permissions
Use remindctl status first when permission state matters.
statusnever promptsauthorizetriggers the system prompt when the state isnotDetermined- If access is denied, direct the user to
System Settings > Privacy & Security > Reminders - If the prompt does not appear, the current workaround is to run:
osascript -e 'tell application "Reminders" to get name of reminders'
When running over SSH, grant access on the Mac that actually runs remindctl.
Response Discipline
- Confirm the reminder title, list, and due date before creating it if any of them are ambiguous
- Use the exact command syntax shown by the current implementation
- Do not reuse stale guidance about deleting and recreating reminders to move them between lists
- Do not assume a fixed default list name
- Do not promise unsupported private Reminders.app features;
remindctlintentionally stays on public EventKit APIs