screenhand 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +18 -2
  2. package/dist-app-maps/com.apple.Music.json +6587 -0
  3. package/dist-app-maps/com.apple.Notes.json +6098 -0
  4. package/dist-app-maps/com.apple.Photos.json +406 -0
  5. package/dist-app-maps/com.apple.Terminal.json +6457 -0
  6. package/dist-app-maps/com.apple.finder.json +420 -0
  7. package/dist-app-maps/com.apple.iCal.json +2375 -0
  8. package/dist-app-maps/com.apple.iWork.Keynote.json +2374 -0
  9. package/dist-app-maps/com.apple.iWork.Pages.json +7564 -0
  10. package/dist-app-maps/com.apple.mail.json +8353 -0
  11. package/dist-app-maps/com.apple.reminders.json +3322 -0
  12. package/dist-app-maps/net.whatsapp.WhatsApp.json +5151 -0
  13. package/dist-playbooks/calendar-create-event.json +20 -0
  14. package/dist-playbooks/calendar-list-events.json +20 -0
  15. package/dist-playbooks/calendar-navigate-views.json +47 -0
  16. package/dist-playbooks/calendar-open-settings.json +20 -0
  17. package/dist-playbooks/google-ads-transparency-competitor-research.json +89 -0
  18. package/dist-playbooks/google-search-competitor-research.json +76 -0
  19. package/dist-playbooks/keynote-add-slide.json +20 -0
  20. package/dist-playbooks/keynote-create-presentation.json +20 -0
  21. package/dist-playbooks/keynote-export-pdf.json +20 -0
  22. package/dist-playbooks/keynote-play-slideshow.json +20 -0
  23. package/dist-playbooks/meta-ad-library-competitor-research.json +100 -0
  24. package/dist-playbooks/notes-mastery-workflows.json +468 -0
  25. package/dist-playbooks/pages-export-pdf.json +20 -0
  26. package/dist-playbooks/pages-new-document.json +20 -0
  27. package/dist-playbooks/pages-open-document.json +20 -0
  28. package/dist-playbooks/reminders-complete.json +21 -0
  29. package/dist-playbooks/reminders-create.json +21 -0
  30. package/dist-playbooks/reminders-list.json +22 -0
  31. package/dist-playbooks/reminders-open.json +35 -0
  32. package/dist-playbooks/whatsapp-contact-info.json +32 -0
  33. package/dist-playbooks/whatsapp-navigate.json +71 -0
  34. package/dist-playbooks/whatsapp-new-call.json +32 -0
  35. package/dist-playbooks/whatsapp-new-group.json +32 -0
  36. package/dist-playbooks/whatsapp-search.json +28 -0
  37. package/dist-playbooks/whatsapp-settings.json +23 -0
  38. package/dist-playbooks/x_change_avatar.json +52 -0
  39. package/dist-references/apple-music.json +822 -0
  40. package/dist-references/calendar.json +1020 -0
  41. package/dist-references/google-search-competitor-research.json +73 -0
  42. package/dist-references/keynote.json +134 -0
  43. package/dist-references/mail.json +431 -0
  44. package/dist-references/pages.json +1203 -0
  45. package/dist-references/photos.json +642 -0
  46. package/dist-references/reminders.json +835 -0
  47. package/dist-references/terminal.json +640 -0
  48. package/dist-references/whatsapp.json +324 -0
  49. package/package.json +1 -1
@@ -0,0 +1,835 @@
1
+ {
2
+ "id": "reminders",
3
+ "name": "Apple Reminders",
4
+ "platform": "reminders",
5
+ "bundleId": "com.apple.reminders",
6
+ "version": "1.0.0",
7
+ "learnedAt": "2026-03-23",
8
+ "validatedAt": "2026-03-23",
9
+ "shortcuts": {
10
+ "Apple": {
11
+ "AXMenu > Force Quit…": "Option+Cmd+⎋",
12
+ "AXMenu > Force Quit Reminders": "Option+Shift+Cmd+⎋",
13
+ "AXMenu > Lock Screen": "Ctrl+Cmd+Q",
14
+ "AXMenu > Log Out": "Shift+Cmd+Q"
15
+ },
16
+ "Reminders": {
17
+ "AXMenu > Settings…": "Cmd+,",
18
+ "AXMenu > Hide Reminders": "Cmd+H",
19
+ "AXMenu > Hide Others": "Option+Cmd+H",
20
+ "AXMenu > Quit Reminders": "Cmd+Q",
21
+ "AXMenu > Quit and Keep Windows": "Option+Cmd+Q"
22
+ },
23
+ "File": {
24
+ "AXMenu > New Reminder": "Cmd+N",
25
+ "AXMenu > New List": "Shift+Cmd+N",
26
+ "AXMenu > New Group": "exists in menu (no shortcut shown)",
27
+ "AXMenu > New Section": "Option+Cmd+N",
28
+ "AXMenu > New Section with Selection": "Ctrl+Cmd+N",
29
+ "AXMenu > Pin List": "exists in File menu (context-sensitive — requires list selected)",
30
+ "AXMenu > Share List": "exists in File menu (context-sensitive — requires list selected)",
31
+ "AXMenu > Convert to Smart List": "exists in File menu",
32
+ "AXMenu > Create Smart List": "exists in File menu",
33
+ "AXMenu > View Templates": "exists in File menu (always enabled)",
34
+ "AXMenu > Save as Template…": "exists in File menu (context-sensitive — requires list selected)",
35
+ "AXMenu > Close": "Cmd+W",
36
+ "AXMenu > Close All": "Option+Cmd+W",
37
+ "AXMenu > Print…": "Cmd+P"
38
+ },
39
+ "Edit": {
40
+ "AXMenu > Undo": "Cmd+Z",
41
+ "AXMenu > Redo": "Shift+Cmd+Z",
42
+ "AXMenu > Cut": "Cmd+X",
43
+ "AXMenu > Copy": "Cmd+C",
44
+ "AXMenu > Paste": "Cmd+V",
45
+ "AXMenu > Delete": "Cmd+\\b",
46
+ "AXMenu > Select All": "Cmd+A",
47
+ "AXMenu > Mark Due Date As > Today": "Cmd+T",
48
+ "AXMenu > Mark Due Date As > Tomorrow": "Option+Cmd+T",
49
+ "AXMenu > Mark Due Date As > This Weekend": "Cmd+K",
50
+ "AXMenu > Mark Due Date As > Next Week": "Option+Cmd+K",
51
+ "AXMenu > Mark Due Date As > Mark All Overdue to Today": "Ctrl+Cmd+T",
52
+ "AXMenu > Mark as Completed": "Shift+Cmd+C",
53
+ "AXMenu > Indent Reminder": "Cmd+]",
54
+ "AXMenu > Outdent Reminder": "Cmd+[",
55
+ "AXMenu > Flag": "Shift+Cmd+F",
56
+ "AXMenu > Tags > Add Tag…": "Shift+Cmd+T",
57
+ "AXMenu > Find": "Cmd+F",
58
+ "AXMenu > Font > Bold": "Cmd+B",
59
+ "AXMenu > Font > Italic": "Cmd+I",
60
+ "AXMenu > Font > Underline": "Cmd+U",
61
+ "AXMenu > Bullets and Numbering > Bulleted List": "Shift+Cmd+7",
62
+ "AXMenu > Bullets and Numbering > Dashed List": "Shift+Cmd+8",
63
+ "AXMenu > Bullets and Numbering > Numbered List": "Shift+Cmd+9",
64
+ "AXMenu > Start Dictation…": "Cmd+🎤",
65
+ "AXMenu > Emoji & Symbols": "Cmd+🌐"
66
+ },
67
+ "View": {
68
+ "AXMenu > as List": "context-sensitive (enabled for regular lists only, not smart lists)",
69
+ "AXMenu > as Columns": "context-sensitive (enabled for regular lists only, not smart lists)",
70
+ "AXMenu > Go To > Today": "Cmd+1",
71
+ "AXMenu > Go To > Scheduled": "Cmd+2",
72
+ "AXMenu > Go To > All": "Cmd+3",
73
+ "AXMenu > Go To > Flagged": "Cmd+4",
74
+ "AXMenu > Go To > Completed": "Cmd+5",
75
+ "AXMenu > Show Smart List": "submenu: Today, Scheduled, All, Flagged, Assigned, Completed",
76
+ "AXMenu > Show Completed": "Shift+Cmd+H",
77
+ "AXMenu > Show All Subtasks": "Cmd+E",
78
+ "AXMenu > Hide All Subtasks": "Shift+Cmd+E",
79
+ "AXMenu > Show/Hide Sidebar": "Option+Cmd+S",
80
+ "AXMenu > Enter Full Screen": "Ctrl+Cmd+F"
81
+ },
82
+ "Window": {
83
+ "AXMenu > Minimize": "Cmd+M",
84
+ "AXMenu > Minimize All": "Option+Cmd+M",
85
+ "AXMenu > Fill": "Ctrl+Cmd+F",
86
+ "AXMenu > Center": "Ctrl+Cmd+C",
87
+ "AXMenu > Reminders": "Cmd+0"
88
+ }
89
+ },
90
+ "applescript": {
91
+ "status": "CONFIRMED — requires accessibility permission grant on first use",
92
+ "permission_note": "First run triggers 'X wants access to control Reminders' system dialog — click Allow",
93
+ "list_all_lists": {
94
+ "status": "CONFIRMED",
95
+ "script": "tell application \"Reminders\" to return name of lists",
96
+ "returns": "list of strings, e.g. {\"Reminders\"}"
97
+ },
98
+ "list_reminders_in_list": {
99
+ "status": "CONFIRMED",
100
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset output to {}\n\trepeat with r in reminders of targetList\n\t\tset end of output to name of r\n\tend repeat\n\treturn output\nend tell",
101
+ "returns": "list of reminder names"
102
+ },
103
+ "list_all_reminders_all_lists": {
104
+ "status": "CONFIRMED",
105
+ "script": "tell application \"Reminders\"\n\tset output to {}\n\trepeat with aList in lists\n\t\trepeat with r in reminders of aList\n\t\t\tset end of output to (name of aList) & \": \" & (name of r)\n\t\tend repeat\n\tend repeat\n\treturn output\nend tell"
106
+ },
107
+ "create_reminder": {
108
+ "status": "CONFIRMED",
109
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset tomorrow to (current date) + 1 * days\n\tset newReminder to make new reminder at end of reminders of targetList with properties {name:\"My Reminder\", due date:tomorrow}\n\treturn name of newReminder\nend tell",
110
+ "notes": "due date is optional. List name must exist."
111
+ },
112
+ "create_reminder_full_properties": {
113
+ "status": "CONFIRMED",
114
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to make new reminder at end of reminders of targetList with properties {name:\"My Reminder\", due date:(current date) + 1 * days, body:\"Notes here\", priority:1, flagged:true}\n\treturn name of r\nend tell",
115
+ "notes": "All writable properties: name, due date, body (notes), priority (0=none/1=high/5=medium/9=low), flagged (bool)"
116
+ },
117
+ "mark_complete": {
118
+ "status": "CONFIRMED",
119
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to reminder \"My Reminder\" of targetList\n\tset completed of r to true\nend tell"
120
+ },
121
+ "delete_reminder": {
122
+ "status": "CONFIRMED",
123
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tdelete reminder \"My Reminder\" of targetList\nend tell"
124
+ },
125
+ "create_list": {
126
+ "status": "CONFIRMED",
127
+ "script": "tell application \"Reminders\"\n\tset newList to make new list with properties {name:\"My New List\"}\n\treturn name of newList\nend tell"
128
+ },
129
+ "rename_list": {
130
+ "status": "CONFIRMED",
131
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"My New List\"\n\tset name of targetList to \"Renamed List\"\n\treturn name of targetList\nend tell"
132
+ },
133
+ "delete_list": {
134
+ "status": "CONFIRMED",
135
+ "script": "tell application \"Reminders\"\n\tdelete list \"My New List\"\nend tell"
136
+ },
137
+ "search_reminders_by_name": {
138
+ "status": "CONFIRMED",
139
+ "script": "tell application \"Reminders\"\n\tset output to {}\n\trepeat with aList in lists\n\t\trepeat with r in reminders of aList\n\t\t\tif name of r contains \"search term\" then\n\t\t\t\tset end of output to (name of aList) & \": \" & (name of r)\n\t\t\tend if\n\t\tend repeat\n\tend repeat\n\treturn output\nend tell"
140
+ },
141
+ "get_reminder_details": {
142
+ "status": "CONFIRMED",
143
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to reminder \"My Reminder\" of targetList\n\tset output to \"name:\" & name of r\n\tset output to output & \"|completed:\" & (completed of r as string)\n\tset output to output & \"|priority:\" & (priority of r as string)\n\tset output to output & \"|flagged:\" & (flagged of r as string)\n\tset output to output & \"|dueDate:\" & (due date of r as string)\n\tset output to output & \"|body:\" & body of r\n\treturn output\nend tell",
144
+ "notes": "body = notes field. due date may be 'missing value' if not set."
145
+ },
146
+ "set_notes_body": {
147
+ "status": "CONFIRMED",
148
+ "notes_property": "body",
149
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to reminder \"My Reminder\" of targetList\n\tset body of r to \"My notes here\"\nend tell"
150
+ },
151
+ "set_priority": {
152
+ "status": "CONFIRMED",
153
+ "priority_values": {
154
+ "0": "none",
155
+ "1": "high",
156
+ "5": "medium",
157
+ "9": "low"
158
+ },
159
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to reminder \"My Reminder\" of targetList\n\tset priority of r to 1\nend tell"
160
+ },
161
+ "set_flagged": {
162
+ "status": "CONFIRMED",
163
+ "script": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\tset r to reminder \"My Reminder\" of targetList\n\tset flagged of r to true\nend tell"
164
+ },
165
+ "url_property": {
166
+ "status": "NOT_SUPPORTED",
167
+ "notes": "url property does not exist on reminder objects in AppleScript. Tested and confirmed not available."
168
+ },
169
+ "location_trigger_via_applescript": {
170
+ "status": "NOT_SUPPORTED",
171
+ "notes": "alarms property is not accessible via AppleScript for Reminders. Tested live — error: Can't make alarms of reminder into type specifier. Location-based triggers must be set via the UI (Add Location button in reminder detail panel)."
172
+ },
173
+ "subtasks_via_applescript": {
174
+ "status": "NOT_SUPPORTED",
175
+ "notes": "Cannot create subtasks via AppleScript. 'make new reminder at end of reminders of reminder' fails with: Can't get every reminder of reminder id. Subtasks must be created via UI: Cmd+N then Cmd+] to indent while typing the reminder name."
176
+ },
177
+ "tags_via_applescript": {
178
+ "status": "NOT_SUPPORTED",
179
+ "notes": "tags property is not accessible via AppleScript. Error: Can't make tags of reminder into type specifier. Tags must be added via UI: Edit > Tags > Add Tag… (Shift+Cmd+T)."
180
+ },
181
+ "recurrence_via_applescript": {
182
+ "status": "NOT_SUPPORTED",
183
+ "notes": "recurrence property is not accessible via AppleScript even when due date is set. Error: Can't make recurrence of reminder into type specifier. Recurrence must be set via UI: click reminder > Add Date > Custom > Repeat options."
184
+ },
185
+ "known_properties": {
186
+ "confirmed": [
187
+ "name",
188
+ "due date",
189
+ "body",
190
+ "priority",
191
+ "flagged",
192
+ "completed",
193
+ "creation date",
194
+ "modification date",
195
+ "id"
196
+ ],
197
+ "not_supported": [
198
+ "url",
199
+ "alarms",
200
+ "tags",
201
+ "recurrence"
202
+ ],
203
+ "property_notes": {
204
+ "body": "This is the notes field (NOT 'notes'). Using 'notes of r' causes a type error.",
205
+ "priority": "Integer: 0=none, 1=high, 5=medium, 9=low",
206
+ "id": "Format: x-apple-reminder://UUID"
207
+ }
208
+ }
209
+ },
210
+ "selectors": {
211
+ "sidebar": {
212
+ "search_field": "AXTextField in AXLayoutArea (first child)",
213
+ "lists_scroll_area": "AXScrollArea in AXLayoutArea",
214
+ "add_list_button": "AXButton 'Add List'",
215
+ "lists_grid": "AXGrid in AXLayoutArea",
216
+ "sidebar_layout_area": "UI element 1 of splitter group 1 of window 'Reminders' — position (164, 202), size (280, 692)",
217
+ "sidebar_scroll_area": "scroll area 1 inside sidebar layout area — contains AXOutline with list rows",
218
+ "sidebar_outline": "outline 1 inside scroll area — rows are AXRow items, click with click_text to navigate to a list"
219
+ },
220
+ "main_area": {
221
+ "reminders_scroll": "AXScrollArea in second AXLayoutArea (UI element 3 of splitter group)",
222
+ "reminder_text_area": "AXTextArea in second AXLayoutArea (UI element 1 of main area)"
223
+ },
224
+ "toolbar": {
225
+ "toolbar": "AXToolbar in AXWindow 'Reminders'",
226
+ "add_button": "AXButton in AXToolbar (first)",
227
+ "share_button": "AXButton in AXToolbar (second)",
228
+ "view_toggle": "AXButton in AXToolbar (third)"
229
+ },
230
+ "reminder_detail_panel": {
231
+ "notes": "Click reminder to expand detail panel — shows Notes, Add Tags, Add Date, Add Location",
232
+ "add_tags": "Clickable 'Add Tags' row in detail panel OR Edit > Tags > Add Tag…",
233
+ "add_date": "Clickable 'Add Date' row — shows suggestions popover (Today/Tomorrow/Next Weekend/Custom...)",
234
+ "add_location": "Clickable 'Add Location' row — location-based triggers only via UI"
235
+ },
236
+ "new_list_sheet": {
237
+ "description": "Sheet shown when creating or editing a list — contains Name field, Color picker, Icon picker, List Type popup (Standard/Groceries/Smart List), Templates section",
238
+ "list_type_popup": "AXPopUpButton in group 2 of sheet 1 — options: Standard, Groceries, Smart List"
239
+ }
240
+ },
241
+ "flows": {
242
+ "create_reminder_ui": {
243
+ "steps": [
244
+ "focus bundleId: com.apple.reminders",
245
+ "key: Cmd+N (New Reminder)",
246
+ "type the reminder name",
247
+ "press Enter to confirm"
248
+ ]
249
+ },
250
+ "create_reminder_applescript": {
251
+ "steps": [
252
+ "applescript: make new reminder with properties {name, due date}"
253
+ ]
254
+ },
255
+ "navigate_smart_lists": {
256
+ "steps": [
257
+ "Cmd+1 → Today",
258
+ "Cmd+2 → Scheduled",
259
+ "Cmd+3 → All",
260
+ "Cmd+4 → Flagged",
261
+ "Cmd+5 → Completed",
262
+ "NOTE: These shortcuts only work when Reminders is frontmost — use View > Go To menu via System Events if another app keeps stealing focus"
263
+ ]
264
+ },
265
+ "mark_complete_ui": {
266
+ "steps": [
267
+ "Select a reminder",
268
+ "Shift+Cmd+C to mark complete"
269
+ ]
270
+ },
271
+ "flag_reminder": {
272
+ "steps": [
273
+ "Select a reminder",
274
+ "Shift+Cmd+F to toggle flag"
275
+ ]
276
+ },
277
+ "set_due_date_quick": {
278
+ "steps": [
279
+ "Select a reminder",
280
+ "Cmd+T → Today",
281
+ "Option+Cmd+T → Tomorrow",
282
+ "Cmd+K → This Weekend",
283
+ "Option+Cmd+K → Next Week"
284
+ ]
285
+ },
286
+ "create_subtask_ui": {
287
+ "steps": [
288
+ "Navigate to a list with at least one reminder",
289
+ "Press Cmd+N to create a new reminder",
290
+ "Type the subtask name",
291
+ "Press Cmd+] to indent (make it a subtask of the reminder above)",
292
+ "Press Enter to confirm",
293
+ "NOTE: Indent only works while actively creating/editing a reminder (not via clicking an existing row)"
294
+ ]
295
+ },
296
+ "add_tag_ui": {
297
+ "steps": [
298
+ "Click a reminder to expand its detail panel",
299
+ "Click 'Add Tags' in the detail panel OR press Shift+Cmd+T",
300
+ "Type the tag name (no # needed — app adds it automatically)",
301
+ "Press Enter to confirm",
302
+ "Tag appears as #TagName in detail panel and in sidebar Tags section"
303
+ ]
304
+ },
305
+ "pin_list_ui": {
306
+ "steps": [
307
+ "Navigate to the list to pin (click it in sidebar)",
308
+ "File > Pin List",
309
+ "List moves from My Lists to the smart lists grid area at top of sidebar"
310
+ ]
311
+ },
312
+ "share_list_ui": {
313
+ "steps": [
314
+ "Navigate to the list to share (click it in sidebar)",
315
+ "File > Share List",
316
+ "Collaboration popover appears — choose Mail, Messages, Notes, or Invite with Link",
317
+ "NOTE: 'People you invite can add others' — full collaboration enabled"
318
+ ]
319
+ },
320
+ "create_grocery_list_ui": {
321
+ "steps": [
322
+ "Click 'Add List' in sidebar OR File > New List",
323
+ "In the New List sheet, click the List Type popup (shows 'Standard')",
324
+ "Select 'Groceries' from the popup (options: Standard, Groceries, Smart List)",
325
+ "Name the list and click OK",
326
+ "Items added to a Groceries list are auto-categorized"
327
+ ]
328
+ },
329
+ "create_smart_list_ui": {
330
+ "steps": [
331
+ "Navigate to an existing list (click it in sidebar)",
332
+ "File > Create Smart List",
333
+ "OR: In the New List sheet, set List Type to 'Smart List'"
334
+ ]
335
+ },
336
+ "save_as_template_ui": {
337
+ "steps": [
338
+ "Navigate to the list to save as template (click it in sidebar)",
339
+ "File > Save as Template…",
340
+ "Dialog shows 'Save as Template?' with a Name field (pre-filled with list name)",
341
+ "Click Save to confirm",
342
+ "Retrieve later via File > View Templates"
343
+ ]
344
+ },
345
+ "switch_view_ui": {
346
+ "steps": [
347
+ "Navigate to a regular list (not a smart list)",
348
+ "View > as Columns (for column/Kanban-style view)",
349
+ "View > as List (to return to list view)",
350
+ "NOTE: as List / as Columns are DISABLED for smart lists (Today/Scheduled/All/Flagged/Completed)"
351
+ ]
352
+ },
353
+ "add_section_ui": {
354
+ "steps": [
355
+ "Navigate to a regular list (click it in sidebar)",
356
+ "File > New Section (Option+Cmd+N) — adds a section header above all current reminders",
357
+ "File > New Section with Selection (Ctrl+Cmd+N) — adds section at current selection",
358
+ "File > Edit Sections… — manage all sections in the list"
359
+ ]
360
+ }
361
+ },
362
+ "known_techniques": {
363
+ "get_reminder_count_per_list": "tell application \"Reminders\" to count reminders of list \"Reminders\"",
364
+ "get_overdue_reminders": "tell application \"Reminders\"\n\tset output to {}\n\tset now to current date\n\trepeat with aList in lists\n\t\trepeat with r in reminders of aList\n\t\t\tif (completed of r is false) and (due date of r is not missing value) and (due date of r < now) then\n\t\t\t\tset end of output to name of r\n\t\t\tend if\n\t\tend repeat\n\tend repeat\n\treturn output\nend tell",
365
+ "get_all_flagged": "tell application \"Reminders\"\n\tset output to {}\n\trepeat with aList in lists\n\t\trepeat with r in reminders of aList\n\t\t\tif flagged of r is true then\n\t\t\t\tset end of output to name of r\n\t\t\tend if\n\t\tend repeat\n\tend repeat\n\treturn output\nend tell",
366
+ "bulk_create_reminders": "tell application \"Reminders\"\n\tset targetList to list \"Reminders\"\n\trepeat with itemName in {\"Task 1\", \"Task 2\", \"Task 3\"}\n\t\tmake new reminder at end of reminders of targetList with properties {name:itemName}\n\tend repeat\nend tell",
367
+ "move_reminder_to_list": "tell application \"Reminders\"\n\tset r to reminder \"My Reminder\" of list \"Reminders\"\n\tmove r to list \"Another List\"\nend tell",
368
+ "count_all_incomplete": "tell application \"Reminders\"\n\tset total to 0\n\trepeat with aList in lists\n\t\trepeat with r in reminders of aList\n\t\t\tif completed of r is false then set total to total + 1\n\t\tend repeat\n\tend repeat\n\treturn total\nend tell",
369
+ "navigate_to_list_via_click_text": "Use mcp__screenhand__click_text with windowId for Reminders window (get from windows() tool) and text matching the list name in sidebar. Use prefer: 'leftmost' for sidebar items.",
370
+ "sidebar_list_click_note": "Clicking a list in the sidebar via click_text navigates to that list AND enables context-sensitive File menu items (Pin List, Share List, Save as Template, New Section, as List/as Columns view toggles). These are ALL DISABLED when a smart list (Today/Scheduled/All/Flagged/Completed) is selected."
371
+ },
372
+ "features_ladder": {
373
+ "beginner": [
374
+ {
375
+ "feature": "List all reminder lists",
376
+ "status": "CONFIRMED",
377
+ "method": "applescript",
378
+ "evidence": "Tested live — returns {\"Reminders\"}"
379
+ },
380
+ {
381
+ "feature": "List reminders in a list",
382
+ "status": "CONFIRMED",
383
+ "method": "applescript",
384
+ "evidence": "Tested live — returned 10 reminders from Reminders list"
385
+ },
386
+ {
387
+ "feature": "Create a reminder",
388
+ "status": "CONFIRMED",
389
+ "method": "applescript",
390
+ "evidence": "Tested live — make new reminder with properties {name, due date, body, priority, flagged}"
391
+ },
392
+ {
393
+ "feature": "Mark reminder complete",
394
+ "status": "CONFIRMED",
395
+ "method": "applescript",
396
+ "evidence": "Tested live — set completed of r to true"
397
+ },
398
+ {
399
+ "feature": "Delete a reminder",
400
+ "status": "CONFIRMED",
401
+ "method": "applescript",
402
+ "evidence": "Tested live — delete reminder of list"
403
+ },
404
+ {
405
+ "feature": "Create a new list",
406
+ "status": "CONFIRMED",
407
+ "method": "applescript",
408
+ "evidence": "Tested live — make new list with properties {name}"
409
+ },
410
+ {
411
+ "feature": "Delete a list",
412
+ "status": "CONFIRMED",
413
+ "method": "applescript",
414
+ "evidence": "Tested live — delete list"
415
+ },
416
+ {
417
+ "feature": "Open Reminders app",
418
+ "status": "CONFIRMED",
419
+ "method": "focus/launch",
420
+ "evidence": "Tested — focus bundleId: com.apple.reminders works"
421
+ },
422
+ {
423
+ "feature": "Navigate smart lists (Today/All/Scheduled/Flagged/Completed)",
424
+ "status": "CONFIRMED",
425
+ "method": "keyboard shortcuts + System Events menu",
426
+ "evidence": "Tested live — Today smart list shows Morning/Afternoon/Tonight groupings. Flagged shows flagged reminders. Completed shows completed reminders with timestamp. All shows all with 1 Completed shown separately. Cmd+1-5 shortcuts work when Reminders is frontmost; use View > Go To menu via System Events when focus interference exists."
427
+ },
428
+ {
429
+ "feature": "New reminder keyboard shortcut",
430
+ "status": "CONFIRMED",
431
+ "method": "Cmd+N",
432
+ "evidence": "Tested live — creates new reminder inline in current list"
433
+ },
434
+ {
435
+ "feature": "New list keyboard shortcut",
436
+ "status": "CONFIRMED",
437
+ "method": "Shift+Cmd+N",
438
+ "evidence": "Confirmed via menu scan — opens New List sheet with Name/Color/Icon/List Type fields"
439
+ }
440
+ ],
441
+ "pro": [
442
+ {
443
+ "feature": "Add notes/body to reminder",
444
+ "status": "CONFIRMED",
445
+ "method": "applescript — use 'body' not 'notes'",
446
+ "evidence": "Tested live — set body of r to 'text' works; 'notes of r' causes type error"
447
+ },
448
+ {
449
+ "feature": "Set priority (high/medium/low/none)",
450
+ "status": "CONFIRMED",
451
+ "method": "applescript — values 1/5/9/0",
452
+ "evidence": "Tested live"
453
+ },
454
+ {
455
+ "feature": "Set flagged",
456
+ "status": "CONFIRMED",
457
+ "method": "applescript",
458
+ "evidence": "Tested live — set flagged of r to true"
459
+ },
460
+ {
461
+ "feature": "Set due date",
462
+ "status": "CONFIRMED",
463
+ "method": "applescript",
464
+ "evidence": "Tested live — set due date of r to (current date) + 1 * days"
465
+ },
466
+ {
467
+ "feature": "Search reminders by name across all lists",
468
+ "status": "CONFIRMED",
469
+ "method": "applescript — iterate all lists",
470
+ "evidence": "Tested live — name of r contains 'term' works"
471
+ },
472
+ {
473
+ "feature": "Rename a list",
474
+ "status": "CONFIRMED",
475
+ "method": "applescript",
476
+ "evidence": "Tested live — set name of list to 'new name'"
477
+ },
478
+ {
479
+ "feature": "Set quick due date (Today/Tomorrow/Weekend/Next Week)",
480
+ "status": "CONFIRMED",
481
+ "method": "keyboard shortcuts",
482
+ "evidence": "Confirmed via menu scan — Cmd+T, Option+Cmd+T, Cmd+K, Option+Cmd+K all present"
483
+ },
484
+ {
485
+ "feature": "Indent/outdent reminders (subtasks via keyboard)",
486
+ "status": "CONFIRMED",
487
+ "method": "Cmd+] and Cmd+[ while creating/editing reminder",
488
+ "evidence": "Tested live — Cmd+N then Cmd+] while typing reminder name enables Outdent. Subtask nesting confirmed. NOTE: Does NOT work on existing reminders by clicking them; must use during active creation (Cmd+N flow)."
489
+ },
490
+ {
491
+ "feature": "Add tags",
492
+ "status": "CONFIRMED",
493
+ "method": "UI — Edit > Tags > Add Tag… or click 'Add Tags' in reminder detail panel",
494
+ "evidence": "Tested live — typed tag name after clicking Add Tags, tag appeared as #Testtag in reminder detail and created a 'Tags' section in sidebar with 'All Tags' and the specific tag. Shift+Cmd+T shortcut available."
495
+ },
496
+ {
497
+ "feature": "Mark all overdue to today",
498
+ "status": "CONFIRMED",
499
+ "method": "Ctrl+Cmd+T",
500
+ "evidence": "Confirmed via menu scan — menu item exists"
501
+ },
502
+ {
503
+ "feature": "Move reminder to another list",
504
+ "status": "CONFIRMED",
505
+ "method": "applescript",
506
+ "evidence": "Tested live — move r to list 'Another List' works"
507
+ },
508
+ {
509
+ "feature": "Get overdue reminders",
510
+ "status": "CONFIRMED",
511
+ "method": "applescript — compare due date < current date",
512
+ "evidence": "Tested live — technique confirmed working"
513
+ },
514
+ {
515
+ "feature": "Bulk create reminders from a list",
516
+ "status": "CONFIRMED",
517
+ "method": "applescript loop",
518
+ "evidence": "Tested live — repeat loop with make new reminder works"
519
+ },
520
+ {
521
+ "feature": "Count incomplete reminders across all lists",
522
+ "status": "CONFIRMED",
523
+ "method": "applescript",
524
+ "evidence": "Tested live — returned 10"
525
+ }
526
+ ],
527
+ "expert": [
528
+ {
529
+ "feature": "Create grocery list with auto-categorization",
530
+ "status": "CONFIRMED",
531
+ "method": "UI — New List sheet > List Type popup > Groceries",
532
+ "evidence": "Tested live — clicked List Type popup in New List sheet, confirmed options: Standard, Groceries, Smart List. Groceries type exists and is selectable."
533
+ },
534
+ {
535
+ "feature": "Smart Lists (filter by tag/date/priority/flag)",
536
+ "status": "CONFIRMED",
537
+ "method": "UI — File > Create Smart List or New List sheet > List Type > Smart List",
538
+ "evidence": "Tested live — File > Create Smart List is enabled when a list is selected. List Type popup in New List sheet also shows 'Smart List' option. View > Show Smart List submenu shows: Today, Scheduled, All, Flagged, Assigned, Completed."
539
+ },
540
+ {
541
+ "feature": "Sections within a list",
542
+ "status": "CONFIRMED",
543
+ "method": "UI — File > New Section (Option+Cmd+N)",
544
+ "evidence": "Tested live — clicked File > New Section while __test_list_validation__ was selected. Section header 'New Section' appeared in the list above the reminders. File menu also has: New Section with Selection, Edit Sections…, Move to Section."
545
+ },
546
+ {
547
+ "feature": "Share list with others (collaboration)",
548
+ "status": "CONFIRMED",
549
+ "method": "UI — navigate to list, then File > Share List",
550
+ "evidence": "Tested live — Share List popover appeared showing 'Collaboration - People you invite can add others.' with share options: Mail, Messages, Notes, Invite with Link, Freeform, Simulator (and Edit Extensions…). Full multi-user collaboration confirmed."
551
+ },
552
+ {
553
+ "feature": "Print reminders list",
554
+ "status": "CONFIRMED",
555
+ "method": "Cmd+P",
556
+ "evidence": "Confirmed via menu scan — File > Print… with Cmd+P shortcut present"
557
+ },
558
+ {
559
+ "feature": "Templates (View Templates / Save as Template)",
560
+ "status": "CONFIRMED",
561
+ "method": "UI — File > View Templates or File > Save as Template…",
562
+ "evidence": "Tested live: (1) View Templates opened a panel showing 'No Templates' with Cancel/Create List buttons and instructions. (2) Save as Template… opened a dialog showing 'Save as Template?' with Name field pre-filled with list name and Cancel/Save buttons."
563
+ },
564
+ {
565
+ "feature": "Pin a list",
566
+ "status": "CONFIRMED",
567
+ "method": "UI — navigate to list, then File > Pin List",
568
+ "evidence": "Tested live — after clicking Pin List on __test_list_validation__, the list moved from My Lists section to the smart lists grid at the top of the sidebar (alongside Today/Scheduled/All/Flagged/Completed)."
569
+ },
570
+ {
571
+ "feature": "List view vs columns view",
572
+ "status": "CONFIRMED",
573
+ "method": "UI — View > as List or View > as Columns (requires regular list selected, not smart list)",
574
+ "evidence": "Tested live — both View > as List and View > as Columns became enabled after navigating to __test_list_validation__ (a regular list). Switching to as Columns showed the list in column layout. IMPORTANT: these menu items are DISABLED when a smart list (Today/All/etc.) is selected."
575
+ },
576
+ {
577
+ "feature": "Group by Time",
578
+ "status": "CONFIRMED",
579
+ "method": "Always active on Today/Scheduled smart lists — shows Morning/Afternoon/Tonight sections",
580
+ "evidence": "Tested live — Today smart list visually shows reminders grouped under Morning, Afternoon, Tonight section headers. The View > Group by Time menu item is disabled because it is always-on for smart lists, not a toggle."
581
+ },
582
+ {
583
+ "feature": "Reminders in Calendar app",
584
+ "status": "NOT_CONFIRMED",
585
+ "method": "Calendar app integration — automatic when both apps are open and iCloud sync is enabled",
586
+ "evidence": "Calendar app is running (9 windows open) but not tested live. The feature exists (Apple support confirms it) but was not directly validated."
587
+ }
588
+ ],
589
+ "grandmaster": [
590
+ {
591
+ "feature": "Location-based reminder triggers",
592
+ "status": "CONFIRMED_UI_ONLY",
593
+ "method": "UI — click reminder > Add Location in detail panel",
594
+ "evidence": "Tested live — reminder detail panel shows 'Add Location' button. Tapping it requests location permission ('Reminders would like to use your current location'). NOT accessible via AppleScript (alarms property fails). Location-based reminders are fully supported via UI."
595
+ },
596
+ {
597
+ "feature": "Recurrence/Repeat on reminders",
598
+ "status": "CONFIRMED_UI_ONLY",
599
+ "method": "UI — click reminder > Add Date > Custom… > Repeat options",
600
+ "evidence": "Tested live — clicking Add Date in reminder detail shows: Today/Tomorrow/Next Weekend/Custom… Clicking Custom shows a calendar date picker (separate floating window). Scroll down in that picker reveals Repeat options. NOT accessible via AppleScript (recurrence property fails)."
601
+ },
602
+ {
603
+ "feature": "Person-based reminder (when messaging someone)",
604
+ "status": "NOT_SUPPORTED_VIA_APPLESCRIPT",
605
+ "notes": "UI only — requires contacts integration"
606
+ },
607
+ {
608
+ "feature": "Siri/voice reminder creation",
609
+ "status": "NOT_CONFIRMED",
610
+ "method": "Siri only — 'Hey Siri, remind me to...'",
611
+ "evidence": "Not tested — Siri-only feature, cannot validate via automation"
612
+ },
613
+ {
614
+ "feature": "iCloud sync / shared lists",
615
+ "status": "NOT_CONFIRMED",
616
+ "method": "iCloud — automatic when signed in to iCloud with Reminders enabled",
617
+ "evidence": "Not tested live. The Share List feature is confirmed working (collaboration popover appeared), which implies iCloud sync is working. Direct iCloud sync validation not performed."
618
+ },
619
+ {
620
+ "feature": "Shortcuts app automation",
621
+ "status": "NOT_CONFIRMED",
622
+ "method": "Apple Shortcuts app has Reminders actions",
623
+ "evidence": "Not tested live — would require Shortcuts app interaction"
624
+ },
625
+ {
626
+ "feature": "Monitor for new/changed reminders continuously",
627
+ "status": "CONFIRMED",
628
+ "method": "AppleScript polling loop — count or enumerate reminders on interval",
629
+ "evidence": "Tested live — polling via AppleScript works. Can count reminders (returned 12 total across all lists) and compare across time intervals to detect changes."
630
+ },
631
+ {
632
+ "feature": "Assigned smart list (collaboration-assigned reminders)",
633
+ "status": "CONFIRMED",
634
+ "method": "View > Show Smart List > Assigned",
635
+ "evidence": "Tested live — View menu > Show Smart List submenu lists: Today, Scheduled, All, Flagged, Assigned, Completed. 'Assigned' is a smart list for reminders assigned to you in shared/collaborative lists."
636
+ }
637
+ ]
638
+ },
639
+ "value_add_automations": [
640
+ {
641
+ "name": "Daily briefing",
642
+ "description": "Every morning, get all reminders due today across all lists",
643
+ "method": "AppleScript: filter by due date = today and completed = false",
644
+ "difficulty": "pro"
645
+ },
646
+ {
647
+ "name": "Overdue digest",
648
+ "description": "Find all overdue incomplete reminders and list them",
649
+ "method": "AppleScript: compare due date < current date and completed = false",
650
+ "difficulty": "pro"
651
+ },
652
+ {
653
+ "name": "Bulk import from CSV/list",
654
+ "description": "Create multiple reminders at once from an array",
655
+ "method": "AppleScript loop with make new reminder",
656
+ "difficulty": "pro"
657
+ },
658
+ {
659
+ "name": "Reminder count dashboard",
660
+ "description": "Count incomplete, flagged, overdue reminders per list",
661
+ "method": "AppleScript — iterate lists and reminders",
662
+ "difficulty": "pro"
663
+ },
664
+ {
665
+ "name": "Cross-list search",
666
+ "description": "Find any reminder by partial name match across all lists",
667
+ "method": "AppleScript: name contains 'query'",
668
+ "difficulty": "beginner"
669
+ },
670
+ {
671
+ "name": "Migrate reminders between lists",
672
+ "description": "Move all reminders matching criteria to another list",
673
+ "method": "AppleScript: move reminder to list",
674
+ "difficulty": "expert"
675
+ },
676
+ {
677
+ "name": "Priority escalation",
678
+ "description": "Find overdue reminders and automatically set priority to high",
679
+ "method": "AppleScript: filter overdue + set priority to 1",
680
+ "difficulty": "pro"
681
+ },
682
+ {
683
+ "name": "Export reminders to text",
684
+ "description": "Dump all reminders with details to a text file for review",
685
+ "method": "AppleScript + write to file",
686
+ "difficulty": "expert"
687
+ }
688
+ ],
689
+ "errors": [
690
+ {
691
+ "error": "Can't make notes of reminder into type specifier (-1700)",
692
+ "cause": "Using 'notes of r' — wrong property name",
693
+ "fix": "Use 'body of r' instead — that is the correct property for reminder notes"
694
+ },
695
+ {
696
+ "error": "spawnSync /bin/sh ETIMEDOUT on first applescript call",
697
+ "cause": "macOS shows permission dialog for the first automation attempt. The bridge times out waiting.",
698
+ "fix": "Click Allow on the system dialog, then retry. Subsequent calls will work immediately."
699
+ },
700
+ {
701
+ "error": "url property not found on reminder object",
702
+ "cause": "Reminders AppleScript dictionary does not expose a url property",
703
+ "fix": "url is NOT available via AppleScript. It exists in the data model but not exposed."
704
+ },
705
+ {
706
+ "error": "Can't make alarms of reminder into type specifier",
707
+ "cause": "alarms property is not exposed via AppleScript",
708
+ "fix": "Location and time-based alarms must be set via UI (Add Date / Add Location in reminder detail panel)"
709
+ },
710
+ {
711
+ "error": "Can't make tags of reminder into type specifier",
712
+ "cause": "tags property is not exposed via AppleScript",
713
+ "fix": "Add tags via UI: click reminder > Add Tags, or Edit > Tags > Add Tag… (Shift+Cmd+T)"
714
+ },
715
+ {
716
+ "error": "Can't make recurrence of reminder into type specifier",
717
+ "cause": "recurrence property is not exposed via AppleScript even when due date is set",
718
+ "fix": "Set recurrence via UI: click reminder > Add Date > Custom… > Repeat options"
719
+ },
720
+ {
721
+ "error": "Can't get every reminder of reminder id",
722
+ "cause": "Attempting to create subtasks via AppleScript: 'make new reminder at end of reminders of reminder'",
723
+ "fix": "Subtasks cannot be created via AppleScript. Use UI: Cmd+N to create reminder, then Cmd+] to indent while typing the name."
724
+ },
725
+ {
726
+ "error": "File menu items (Pin List, Share List, Save as Template, New Section, as List, as Columns) all appear disabled",
727
+ "cause": "These are context-sensitive items that only enable when a regular list is selected in the sidebar. They are disabled when a smart list (Today/Scheduled/All/Flagged/Completed) is active.",
728
+ "fix": "Navigate to a regular list by clicking its name in the sidebar (use click_text with the Reminders window ID)"
729
+ }
730
+ ],
731
+ "websiteFeatures": [
732
+ {
733
+ "id": "get_started_with_reminders",
734
+ "name": "Get started with Reminders",
735
+ "description": "Quickly get started using Reminders to track and organize your to-dos.",
736
+ "level": "beginner"
737
+ },
738
+ {
739
+ "id": "schedule_in_calendar",
740
+ "name": "Your to-dos and schedule — all in one place",
741
+ "description": "Create, manage, and complete scheduled reminders right in the Calendar app on Mac.",
742
+ "level": "pro"
743
+ },
744
+ {
745
+ "id": "grocery_list",
746
+ "name": "Organize your grocery list",
747
+ "description": "Create a grocery list with items automatically placed in categories.",
748
+ "level": "pro"
749
+ },
750
+ {
751
+ "id": "change_the_view",
752
+ "name": "Change the view",
753
+ "description": "Choose a view — lists or columns, smart lists, and pinned lists.",
754
+ "level": "beginner"
755
+ },
756
+ {
757
+ "id": "subtasks",
758
+ "name": "Go deeper with subtasks",
759
+ "description": "Use subtasks (Cmd+] to indent) when you want to add more details to a reminder.",
760
+ "level": "beginner"
761
+ },
762
+ {
763
+ "id": "your_to_dos_and_schedule_all_in_one_place",
764
+ "name": "Your to-dos and schedule—all in one place",
765
+ "description": "Create, manage, and complete your scheduled reminders right in the Calendar app on Mac.",
766
+ "sourceHeading": "Your to-dos and schedule—all in one place",
767
+ "level": "pro"
768
+ },
769
+ {
770
+ "id": "organize_your_grocery_list",
771
+ "name": "Organize your grocery list",
772
+ "description": "Create a grocery list with items automatically placed in categories to make shopping easier.",
773
+ "sourceHeading": "Organize your grocery list",
774
+ "level": "pro"
775
+ },
776
+ {
777
+ "id": "go_deeper_with_subtasks",
778
+ "name": "Go deeper with subtasks",
779
+ "description": "Use subtasks when you want to add more details to a reminder.",
780
+ "sourceHeading": "Go deeper with subtasks",
781
+ "level": "beginner"
782
+ },
783
+ {
784
+ "id": "reminders_user_guide",
785
+ "name": "Reminders User Guide",
786
+ "description": "Reminders User Guide",
787
+ "sourceHeading": "Reminders User Guide",
788
+ "level": "beginner"
789
+ },
790
+ {
791
+ "id": "apple_footer",
792
+ "name": "Apple Footer",
793
+ "description": "Apple Footer",
794
+ "sourceHeading": "Apple Footer",
795
+ "level": "beginner"
796
+ },
797
+ {
798
+ "id": "welcome",
799
+ "name": "Welcome",
800
+ "description": "Welcome",
801
+ "sourceHeading": "Welcome",
802
+ "level": "beginner"
803
+ }
804
+ ],
805
+ "valueAddFeatures": [
806
+ {
807
+ "id": "summarize_all",
808
+ "name": "Summarize all reminders",
809
+ "description": "Read and summarize all Reminders content across lists",
810
+ "category": "intelligence",
811
+ "level": "pro"
812
+ },
813
+ {
814
+ "id": "change_monitor",
815
+ "name": "Change Monitor",
816
+ "description": "Poll Reminders for new/changed/completed items and notify",
817
+ "category": "monitoring",
818
+ "level": "expert"
819
+ },
820
+ {
821
+ "id": "daily_digest",
822
+ "name": "Daily Reminder Digest",
823
+ "description": "Generate a daily briefing of all due-today and overdue reminders",
824
+ "category": "automation",
825
+ "level": "pro"
826
+ },
827
+ {
828
+ "id": "bulk_import",
829
+ "name": "Bulk Import",
830
+ "description": "Create many reminders at once from a structured input (array, CSV, clipboard)",
831
+ "category": "bulk",
832
+ "level": "pro"
833
+ }
834
+ ]
835
+ }