CLI for Apple Reminders via the private ReminderKit framework. Supports subtasks, sections, and tags — none of which are available through AppleScript or EventKit. JSON output.
brew install johnmatthewtennant/tap/reminderkit-cli
reminderkit install-skill/apple-reminders
reminderkit lists
reminderkit list (<name> | --name <name>)
reminderkit get (<title> | --title <title>) [--list <name>]
reminderkit add (<title> | --title <title>) [--list <name>] [--notes <value>]
reminderkit update (<title> | --title <title> | --id <id>) [--list <name>] [--notes <value>] [--parent-title <title>] [--to-list <name>]
reminderkit complete (<title> | --title <title> | --id <id>) [--list <name>]
reminderkit delete (<title> | --title <title> | --id <id>) [--list <name>]
reminderkit subtasks (<title> | --title <title>) [--list <name>]
reminderkit batch # JSON on stdin
reminderkit --help # full usage
By default, every command that emits a reminder/list JSON object produces a token-efficient shape:
- IDs are bare UUIDs (36 chars). The full
x-apple-reminderkit://...URL is also emitted under a parallelurikey. For the reminder's list reference it'slistId(UUID) +listUri(URL), and similarlyparentId/parentUrifor a subtask's parent. - Default-valued fields are omitted. Specifically:
allDay=false,completed=false,flagged=0,isOverdue=false,isRecurrent=false,priority=0, and emptyhashtagsare NOT emitted. Non-default values are always included.
Two flags shape the output further (accepted by any command that produces JSON):
--fields id,title,notes— emit ONLY the listed fields, in order. Precedence:--fieldswins if both--fieldsand--fullare passed.--full— emit all fields including defaults, and use the legacy emoji-wrappedidformat (for byte-for-byte compat with pre-ergonomic scripts), additionally adding a newuuidfield. Fieldsuri/listUriare suppressed in--fullmode.
--id accepts EITHER a bare UUID or any form containing one (legacy emoji
URL, naked x-apple-reminderkit:// URL, mixed case, etc.).
To restore the previous output exactly (minus a new, additive uuid key),
pass --full. See CONTRACT.md for the full contract.
Uses Apple's private ReminderKit.framework. Not endorsed by Apple. May break with macOS updates.