Summary
td reminder add and td reminder update cannot set the is_urgent
flag on a reminder, and td reminder get / td reminder list drop
is_urgent from their output. Urgent reminders are the iOS 26 feature
where time-based reminders fire a full-screen alarm that breaks through
Silent and Do Not Disturb modes (help center).
The SDK already types the field (@doist/todoist-sdk 10.2.0, bumped in
v1.65.0), so this is purely a CLI surface gap.
Requested changes
Write path
td reminder add: add --urgent (and --no-urgent for symmetry)
that threads through to is_urgent on the reminder_add sync
command.
td reminder update: same flag.
Read path
td reminder get and td reminder list: include is_urgent in
plain output and as a key in --json output.
Current behaviour (tip of main, v1.65.0)
src/lib/api/reminders.ts defines local types that omit the field:
export interface Reminder {
id: string
itemId: string
type: 'absolute' | 'relative' | 'location'
due?: ReminderDue
minuteOffset?: number
isDeleted: boolean
}
export interface AddReminderArgs {
itemId: string
minuteOffset?: number
due?: ReminderDue
}
export interface UpdateReminderArgs {
minuteOffset?: number
due?: ReminderDue
}
toReminder() hand-picks fields from the SDK's Reminder, so
isUrgent is dropped on read. addReminder() / updateReminder()
build the sync commands without it, so the CLI never sends it on
writes. Help output for both commands lacks any urgent flag:
$ td reminder add --help
Options:
--task <ref> Task reference (name or id:xxx)
--before <duration> Time before due (e.g., 30m, 1h)
--at <datetime> Specific time (e.g., 2024-01-15 10:00)
--json Output the created reminder as JSON
--dry-run Preview what would happen without executing
$ td reminder update --help
Options:
--before <duration> Time before due (e.g., 30m, 1h)
--at <datetime> Specific time (e.g., 2024-01-15 10:00)
--dry-run Preview what would happen without executing
SDK + server side already accept it
The SDK types isUrgent: z.ZodOptional<z.ZodBoolean> on reminder
request and response schemas across:
dist/types/types/reminders/requests.d.ts (multiple request shapes)
dist/types/types/sync/resources/reminders.d.ts (resource shape)
dist/types/types/sync/response.d.ts (sync response)
dist/types/types/webhooks/reminders.d.ts (webhook events — here
it is isUrgent: z.ZodBoolean, non-optional)
I verified the sync API accepts it by direct POST to /api/v1/sync:
[{"type":"reminder_add","temp_id":"…","uuid":"…","args":{
"item_id":"<task id>",
"type":"absolute",
"due":{"date":"2026-05-19T10:52:35Z","timezone":null,
"is_recurring":false,
"string":"2026-05-19T10:52:35.000000Z","lang":"en"},
"is_urgent":true
}}]
Response: HTTP 200, sync_status: {"<uuid>": "ok"}. A subsequent
sync read returns the reminder with "is_urgent": true preserved.
Suggested patch shape
Roughly a dozen lines in src/lib/api/reminders.ts:
- Add
isUrgent?: boolean to Reminder, AddReminderArgs,
UpdateReminderArgs.
- Map
isUrgent: r.isUrgent in toReminder().
- Pass
isUrgent through pickDefined({...}) in both
addReminder() and updateReminder().
Plus --urgent / --no-urgent flag wiring in
src/commands/reminder/add.ts and update.ts, and an [urgent]
marker (or similar) in the plain-text formatters.
Notes / out of scope
- This issue is scoped to the CLI surface gap. Whether iOS currently
renders or fires urgent alarms in response to server-set
is_urgent: true is a separate concern at the iOS / sync layer.
- Per Todoist docs, urgent applies only to time-based reminders;
location reminders are excluded.
Environment
- todoist-cli: 1.62.2 (gap confirmed on
main @ v1.65.0)
- @doist/todoist-sdk: 10.2.0
- Plan: Pro (legacy personal)
Summary
td reminder addandtd reminder updatecannot set theis_urgentflag on a reminder, and
td reminder get/td reminder listdropis_urgentfrom their output. Urgent reminders are the iOS 26 featurewhere time-based reminders fire a full-screen alarm that breaks through
Silent and Do Not Disturb modes (help center).
The SDK already types the field (
@doist/todoist-sdk10.2.0, bumped inv1.65.0), so this is purely a CLI surface gap.
Requested changes
Write path
td reminder add: add--urgent(and--no-urgentfor symmetry)that threads through to
is_urgenton thereminder_addsynccommand.
td reminder update: same flag.Read path
td reminder getandtd reminder list: includeis_urgentinplain output and as a key in
--jsonoutput.Current behaviour (tip of
main, v1.65.0)src/lib/api/reminders.tsdefines local types that omit the field:toReminder()hand-picks fields from the SDK'sReminder, soisUrgentis dropped on read.addReminder()/updateReminder()build the sync commands without it, so the CLI never sends it on
writes. Help output for both commands lacks any urgent flag:
SDK + server side already accept it
The SDK types
isUrgent: z.ZodOptional<z.ZodBoolean>on reminderrequest and response schemas across:
dist/types/types/reminders/requests.d.ts(multiple request shapes)dist/types/types/sync/resources/reminders.d.ts(resource shape)dist/types/types/sync/response.d.ts(sync response)dist/types/types/webhooks/reminders.d.ts(webhook events — hereit is
isUrgent: z.ZodBoolean, non-optional)I verified the sync API accepts it by direct POST to
/api/v1/sync:[{"type":"reminder_add","temp_id":"…","uuid":"…","args":{ "item_id":"<task id>", "type":"absolute", "due":{"date":"2026-05-19T10:52:35Z","timezone":null, "is_recurring":false, "string":"2026-05-19T10:52:35.000000Z","lang":"en"}, "is_urgent":true }}]Response: HTTP 200,
sync_status: {"<uuid>": "ok"}. A subsequentsync read returns the reminder with
"is_urgent": truepreserved.Suggested patch shape
Roughly a dozen lines in
src/lib/api/reminders.ts:isUrgent?: booleantoReminder,AddReminderArgs,UpdateReminderArgs.isUrgent: r.isUrgentintoReminder().isUrgentthroughpickDefined({...})in bothaddReminder()andupdateReminder().Plus
--urgent/--no-urgentflag wiring insrc/commands/reminder/add.tsandupdate.ts, and an[urgent]marker (or similar) in the plain-text formatters.
Notes / out of scope
renders or fires urgent alarms in response to server-set
is_urgent: trueis a separate concern at the iOS / sync layer.location reminders are excluded.
Environment
main@ v1.65.0)