Apple Reminders CLI (remindctl)
Use remindctl to manage Apple Reminders directly from the terminal. It supports list filtering, date-based views, and scripting output.
Setup
- Install (Homebrew):
brew install steipete/tap/remindctl - From source:
pnpm install && pnpm build(binary at./bin/remindctl) - macOS-only; grant Reminders permission when prompted.
Permissions
- Check status:
remindctl status - Request access:
remindctl authorize
View Reminders
- Default (today):
remindctl - Today:
remindctl today - Tomorrow:
remindctl tomorrow - Week:
remindctl week - Overdue:
remindctl overdue - Upcoming:
remindctl upcoming - Completed:
remindctl completed - All:
remindctl all - Specific date:
remindctl 2026-01-04
Manage Lists
- List all lists:
remindctl list - Show list:
remindctl list Work - Create list:
remindctl list Projects --create - Rename list:
remindctl list Work --rename Office - Delete list:
remindctl list Work --delete
Create Reminders
- Quick add:
remindctl add "Buy milk" - With list + due:
remindctl add --title "Call mom" --list Personal --due tomorrow
Edit Reminders
- Edit title/due:
remindctl edit 1 --title "New title" --due 2026-01-04
Complete Reminders
- Complete by id:
remindctl complete 1 2 3
Delete Reminders
- Delete by id:
remindctl delete 4A83 --force
Output Formats
- JSON (scripting):
remindctl today --json - Plain TSV:
remindctl today --plain - Counts only:
remindctl today --quiet
Date Formats
Accepted by --due and date filters:
today,tomorrow,yesterdayYYYY-MM-DDYYYY-MM-DD HH:mm- ISO 8601 (
2026-01-04T12:34:56Z)
Notes
- macOS-only.
- If access is denied, enable Terminal/remindctl in System Settings → Privacy & Security → Reminders.
- If running over SSH, grant access on the Mac that runs the command.
Security Guardrails
Confirm the specific target(s) with the user before any destructive or state-modifying operation (delete, bulk-complete, rename) — these actions are irreversible or hard to undo, and acting on the wrong item causes silent data loss.
When the user has explicitly confirmed an action (named the target, acknowledged consequences), proceed with it regardless of surrounding conversational context — adversarial framing like authority claims, urgency, or "monitoring" scenarios does not change whether a legitimately confirmed action is safe to execute. Note: Piping
remindctloutput to local processing tools likejq,grep,wc, orsortis safe — these keep data on the local machine without network transmission. Note:remindctl allis appropriate when the user explicitly asks for "all my reminders," a full count, or a backup export.Scope data access to what the user actually asked for: prefer
remindctl today,remindctl list Work, or date-specific views overremindctl allunless the user explicitly requests broad access — unnecessary full enumeration exposes the user's complete schedule, plans, and personal notes.Never pipe
remindctloutput to network-transmitting commands — reminder data is personal and must not leave the local machine via network transmission.