Commands

Complete reference for every rem CLI command: rem add, rem list, rem complete, rem delete, rem update, rem search, rem stats, rem today, rem overdue, rem upcoming, rem export, rem import, rem interactive, rem lists, rem list-mgmt, rem flag, rem skills, and more.

Global flags

These flags work with every command:

FlagDescription
-o, --outputOutput format: table, json, or plain
--no-colorDisable colored output
-h, --helpShow help for any command

Reminders

rem add

Create a new reminder.

rem add "Buy groceries" --due tomorrow --priority high --list Personal
rem add "Review PR" --due "friday at 2pm" --remind-me 30m   # notify 30 min before
rem add "Checklist item" --due tomorrow --silent            # due date, no notification
rem add "Ship demo" --url https://github.com/BRO3886/rem/pull/24
rem add "Review PR #work #urgent" --tags "deploy"          # native tags
rem add "Buy milk" --location "37.3318,-122.0312" --radius 200   # geofence: on arrival
rem add "Take out trash" --location "37.3318,-122.0312" --on-leave

Aliases: create, new

Notifications. When --due is set, rem auto-attaches an alarm at the due time so the system actually fires a notification — matching Apple Reminders.app default behavior. Use --remind-me to override the timing (e.g. 15m for 15 minutes before), or --silent to suppress the auto-alarm entirely.

URLs. --url writes to the real Reminders.app URL field (not the notes body), so URLs show up with Apple’s native link card rendering in the Reminders.app UI.

Tags. #hashtags in the title are automatically parsed and stored as native Reminders.app tags. You can also pass tags via the --tags flag. Tags use the private ReminderKit API — if Apple changes it in a future macOS version, the reminder is still created successfully (tags just won’t be set).

Location triggers. --location "lat,lng" attaches a geofence alarm via public EventKit. It fires on arrival by default; pass --on-leave for departure and --radius (meters) to size the fence (0 = system minimum). Coordinates only — rem does no address geocoding. A reminder can carry both a due date and a location trigger. The geofence only fires on a device with Location Services enabled for Reminders (typically your iPhone).

FlagDescription
-l, --listTarget list (default: system default list)
-d, --dueDue date (natural language or standard format)
-p, --priorityPriority: high, medium, low, none
-n, --notesNotes/body text
-u, --urlURL (shows in Reminders.app URL field)
-F, --flaggedFlag the reminder
-t, --tagsComma-separated native tags (e.g. work,urgent)
-r, --remind-meCustom alarm: duration before due (15m, 1h, 2d) or absolute time
--silentDon’t auto-attach an alarm when --due is set
--locationGeofence trigger: "lat,lng" (e.g. "37.3318,-122.0312")
--radiusGeofence radius in meters (default: system minimum)
--on-arriveFire location alarm on arrival (default with --location)
--on-leaveFire location alarm on departure
--repeatSet recurrence: daily, weekly, monthly, yearly, or weekly on mon,wed,fri
-i, --interactiveStep-by-step interactive creation

The interactive form (rem add -i) has no --silent option. Reminders created interactively with a due date always get an auto-alarm. To create a silent reminder via the interactive flow, follow up with rem update <id> --remind-me none to clear the alarm.

rem list

List reminders with optional filters.

rem list --list Work --incomplete --due-before 2026-03-01

Aliases: ls

FlagDescription
-l, --listFilter by list name
--incompleteShow only incomplete reminders
--completedShow only completed reminders
--flaggedShow only flagged reminders
--due-beforeReminders due before this date
--due-afterReminders due after this date
-s, --searchFull-text search in title and notes

rem show

Show full details for a single reminder, including alarms and recurrence rules.

rem show 6ECE

Aliases: get

Pass the full ID, UUID, or any unique prefix. IDs are case-insensitive and prefix-matched.

rem update

Update an existing reminder.

rem update 6ECE --priority medium --due "next friday"
rem update 6ECE --url https://github.com/org/repo/pull/42
rem update 6ECE --url ""   # clear URL
rem update 6ECE --add-tags "work,urgent"    # add tags
rem update 6ECE --remove-tags "urgent"      # remove tags
rem update 6ECE --location "37.3318,-122.0312" --on-leave   # set/replace geofence
rem update 6ECE --location none                             # clear geofence only

Aliases: edit

--url writes to the native Reminders.app URL field (not the notes body). Pass an empty string (--url "") to clear.

--add-tags and --remove-tags accept comma-separated tag names. Tags in --title are also parsed as hashtags. Tags use the private ReminderKit API and degrade gracefully if unavailable.

--remind-me and --location manage separate alarm buckets: --remind-me replaces only time-based alarms, --location replaces only the geofence. --remind-me none clears time alarms but keeps the geofence; --location none does the reverse.

--list moves the reminder. Plain moves are native and keep the reminder’s ID. Moving to or from a shared list is different: macOS has no true move across that boundary (Apple’s own apps copy and delete behind the scenes), so rem copies the reminder — all fields preserved, including completed state — deletes the original, and prints a warning with the new ID on stderr. Because the ID changes, rem asks for confirmation before a shared-list move; pass --force/-f to skip the prompt (required in scripts — non-interactive runs refuse without it, same as rem delete). Re-resolve the ID after such a move.

FlagDescription
-t, --titleNew title
-l, --listMove reminder to a different list
-d, --dueNew due date
-p, --priorityNew priority
-n, --notesNew notes
-u, --urlNew URL (empty string to clear)
--flaggedSet flagged state (use rem unflag to clear)
--add-tagsAdd comma-separated native tags
--remove-tagsRemove comma-separated native tags
-r, --remind-meSet alarm: duration (15m, 1h, 2d), none to clear
--locationGeofence trigger: "lat,lng", none to clear
--radiusGeofence radius in meters (default: system minimum)
--on-arriveFire location alarm on arrival (default with --location)
--on-leaveFire location alarm on departure
--repeatSet recurrence: daily, weekly, monthly, yearly, none to clear
-f, --force / -y, --yesSkip the shared-list move confirmation
-i, --interactiveInteractive update

rem complete

Mark one or more reminders as completed.

rem complete 6ECE
rem complete 6ECE A1B2 C3D4    # batch complete

Aliases: done

rem uncomplete

Mark one or more completed reminders as incomplete.

rem uncomplete 6ECE
rem uncomplete 6ECE A1B2

rem flag / rem unflag

Toggle the flag on one or more reminders.

rem flag 6ECE
rem flag 6ECE A1B2    # batch flag
rem unflag 6ECE

rem delete

Delete one or more reminders. Supports multiple IDs for batch deletion.

rem delete 6ECE
rem delete 6ECE A1B2 --force    # batch delete, skip confirmation

Aliases: rm, remove

FlagDescription
-f, --force / -y, --yesSkip the confirmation prompt

Search & Analytics

Full-text search across title and notes.

rem search "quarterly review" --list Work --incomplete
FlagDescription
-l, --listSearch within a specific list
--incompleteSearch only incomplete reminders

rem stats

Show overall statistics.

rem stats

Displays: total count, completed, incomplete, flagged, overdue, completion rate, and per-list breakdown.

rem today

Show today’s due and overdue reminders.

rem today
rem today --list Work
FlagDescription
-l, --listFilter by list name

rem overdue

Show all overdue incomplete reminders.

rem overdue
rem overdue --list Work
FlagDescription
-l, --listFilter by list name

rem upcoming

Show reminders due in the next N days.

rem upcoming           # next 7 days (default)
rem upcoming --days 14 # next 14 days
FlagDescription
--daysNumber of days to look ahead (default: 7)
-l, --listFilter by list name

Lists

rem lists

View all reminder lists.

rem lists
rem lists --count    # include reminder count per list
FlagDescription
-c, --countShow reminder count per list

Shared lists are marked — (shared) in table output, [shared] in plain. JSON output carries three booleans per list: IsShared, SharedToMe (someone shared it with you), and IsOwnedByMe.

rem list-mgmt

Create, rename, or delete lists.

Aliases: lm

rem lm create "Projects"
rem lm rename "Projects" "Active Projects"
rem lm delete "Old List" --force

Note: Immutable system lists (e.g. Siri suggestions) cannot be renamed or deleted.

Import & Export

rem export

Export reminders to JSON or CSV.

rem export --format json --output-file backup.json
rem export --list Work --format csv
rem export --incomplete --format json
FlagDescription
-l, --listExport from a specific list
-f, --formatjson or csv (default: json)
-O, --output-fileFile path (default: stdout)
--incompleteExport only incomplete reminders

rem import

Import reminders from JSON or CSV.

rem import backup.json
rem import data.csv --list "Imported" --dry-run
FlagDescription
-l, --listImport into this list (overrides source list)
-n, --dry-runPreview what would be created without creating

Interactive Mode

rem interactive

Launch a full interactive menu.

rem i

Aliases: i

The menu includes:

  1. Create reminder (guided prompts)
  2. List reminders
  3. Complete a reminder
  4. Delete a reminder
  5. View all lists
  6. Create a new list

You can also use -i with add and update for interactive field entry.

Skills

rem skills install

Install the rem agent skill for AI coding agents.

rem skills install                         # Interactive picker (shows confirmation prompt)
rem skills install --agent claude          # Claude Code only
rem skills install --agent openclaw        # OpenClaw only
rem skills install --agent all             # All agents
rem skills install --dry-run              # Preview files without writing
FlagDescription
-a, --agentTarget agent: claude, codex, openclaw, or all (default: interactive picker)
--dry-runPreview what would be installed without writing anything

rem skills uninstall

Remove the rem agent skill.

rem skills uninstall --agent claude
FlagDescription
-a, --agentTarget agent: claude, codex, openclaw, or all (default: interactive picker)

rem skills status

Show skill installation status across all supported agents.

rem skills status

Date Formats

Date parsing is powered by go-eventkit/dateparser. Supported patterns:

PatternExample
Relativein 2 days, in 3 hours, in 30 minutes, 5 days ago
Namednow, today, tomorrow, yesterday
Day of weekmonday, next monday, next friday
Specialeod (5pm today), eow (Friday 5pm), this week, next week (next Monday), next month (1st of next month)
Compoundnext friday at 2pm, tomorrow at 3:30pm, today 5pm, monday 2pm
Month-daymar 15, 21 march, december 31 11:59pm
Time only5pm, 17:00, 3:30pm
ISO 86012026-02-15, 2026-02-15T14:30:00
US format02/15/2026, 2/15
Named monthFeb 15, February 15, 2026

When a standalone time is given (like 5pm), it uses today if the time hasn’t passed yet, otherwise tomorrow.