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,1203 @@
1
+ {
2
+ "id": "pages",
3
+ "name": "Apple Pages",
4
+ "platform": "pages",
5
+ "bundleId": "com.apple.iWork.Pages",
6
+ "version_tested": "14.x (macOS Sequoia 15.x, 2026-03-23)",
7
+ "validation_date": "2026-03-23",
8
+ "validation_summary": {
9
+ "method": "Live testing on physical machine via ScreenHand MCP tools",
10
+ "note": "All 4 previously NOT_SUPPORTED features confirmed via System Events UI automation on 2026-03-23. 45/45 features confirmed.",
11
+ "confirmed_count": 45,
12
+ "not_confirmed_count": 0,
13
+ "not_supported_count": 0
14
+ },
15
+ "shortcuts": {
16
+ "Apple": {
17
+ "AXMenu > Force Quit\u2026": "Option+Cmd+\u238b",
18
+ "AXMenu > Force Quit Pages": "Option+Shift+Cmd+\u238b",
19
+ "AXMenu > Lock Screen": "Ctrl+Cmd+Q",
20
+ "AXMenu > Log Out": "Shift+Cmd+Q"
21
+ },
22
+ "Pages": {
23
+ "AXMenu > Settings\u2026": "Cmd+,",
24
+ "AXMenu > Hide Pages": "Cmd+H",
25
+ "AXMenu > Hide Others": "Option+Cmd+H",
26
+ "AXMenu > Quit Pages": "Cmd+Q",
27
+ "AXMenu > Quit and Keep Windows": "Option+Cmd+Q"
28
+ },
29
+ "File": {
30
+ "AXMenu > New\u2026": "Option+Cmd+N",
31
+ "AXMenu > Open\u2026": "Cmd+O",
32
+ "AXMenu > Close": "Cmd+W",
33
+ "AXMenu > Close All": "Option+Cmd+W",
34
+ "AXMenu > Save": "Cmd+S",
35
+ "AXMenu > Save As\u2026": "Option+Shift+Cmd+S",
36
+ "AXMenu > Duplicate": "Shift+Cmd+S",
37
+ "AXMenu > Page Setup\u2026": "Shift+Cmd+P",
38
+ "AXMenu > Print\u2026": "Cmd+P"
39
+ },
40
+ "Edit": {
41
+ "AXMenu > Undo": "Cmd+Z",
42
+ "AXMenu > Redo": "Shift+Cmd+Z",
43
+ "AXMenu > Cut": "Cmd+X",
44
+ "AXMenu > Copy": "Cmd+C",
45
+ "AXMenu > Paste": "Cmd+V",
46
+ "AXMenu > Paste and Match Style": "Option+Shift+Cmd+V",
47
+ "AXMenu > Paste and Preserve Style": "Ctrl+Shift+Cmd+V",
48
+ "AXMenu > Duplicate Selection": "Cmd+D",
49
+ "AXMenu > Select All": "Cmd+A",
50
+ "AXMenu > Deselect All": "Shift+Cmd+A",
51
+ "AXMenu > Accept Change": "Option+Cmd+A",
52
+ "AXMenu > Reject Change": "Option+Cmd+R",
53
+ "AXMenu > Find > Find\u2026": "Cmd+F",
54
+ "AXMenu > Find > Find Next": "Cmd+G",
55
+ "AXMenu > Find > Find Previous": "Shift+Cmd+G",
56
+ "AXMenu > Find > Use Selection for Find": "Cmd+E",
57
+ "AXMenu > Find > Jump to Selection": "Cmd+J",
58
+ "AXMenu > Spelling and Grammar > Show Spelling and Grammar": "Cmd+:",
59
+ "AXMenu > Spelling and Grammar > Check Document Now": "Cmd+;",
60
+ "AXMenu > Start Dictation\u2026": "Cmd+\ud83c\udfa4",
61
+ "AXMenu > Emoji & Symbols": "Cmd+\ud83c\udf10"
62
+ },
63
+ "Insert": {
64
+ "AXMenu > Page Break": "Cmd+Return",
65
+ "AXMenu > Line > Draw With Pen": "Option+Shift+Cmd+P",
66
+ "AXMenu > Highlight": "Shift+Cmd+H",
67
+ "AXMenu > Comment": "Shift+Cmd+K",
68
+ "AXMenu > Bookmark": "Option+Cmd+B",
69
+ "AXMenu > Equation\u2026": "Option+Cmd+E",
70
+ "AXMenu > EndNote Citation": "Option+Shift+Cmd+E",
71
+ "AXMenu > Choose\u2026": "Shift+Cmd+V"
72
+ },
73
+ "Format": {
74
+ "AXMenu > Font > Show Fonts": "Cmd+T",
75
+ "AXMenu > Font > Bold": "Cmd+B",
76
+ "AXMenu > Font > Italic": "Cmd+I",
77
+ "AXMenu > Font > Underline": "Cmd+U",
78
+ "AXMenu > Font > Bigger": "Cmd++",
79
+ "AXMenu > Font > Smaller": "Cmd+-",
80
+ "AXMenu > Font > Character Spacing > Tighten": "Option+Cmd+[",
81
+ "AXMenu > Font > Character Spacing > Loosen": "Option+Cmd+]",
82
+ "AXMenu > Font > Baseline > Superscript": "Ctrl+Cmd++",
83
+ "AXMenu > Font > Baseline > Subscript": "Ctrl+Cmd+-",
84
+ "AXMenu > Text > Align Left": "Cmd+{",
85
+ "AXMenu > Text > Align Center": "Cmd+|",
86
+ "AXMenu > Text > Align Right": "Cmd+}",
87
+ "AXMenu > Text > Justify": "Option+Cmd+|",
88
+ "AXMenu > Text > Auto-Align Table Cell": "Option+Cmd+U",
89
+ "AXMenu > Text > Increase Indent Level": "Cmd+]",
90
+ "AXMenu > Text > Decrease Indent Level": "Cmd+[",
91
+ "AXMenu > Table > Delete Row": "Option+Cmd+Backspace",
92
+ "AXMenu > Table > Delete Column": "Ctrl+Cmd+Backspace",
93
+ "AXMenu > Table > Autofill Cells > Autofill\u2026": "Cmd+\\",
94
+ "AXMenu > Table > Autofill Cells > Autofill from Row Above": "Option+Cmd+\\",
95
+ "AXMenu > Table > Autofill Cells > Autofill from Column Before": "Ctrl+Cmd+\\",
96
+ "AXMenu > Table > Merge Cells": "Ctrl+Cmd+M",
97
+ "AXMenu > Table > Unmerge Cells": "Ctrl+Shift+Cmd+M",
98
+ "AXMenu > Chart > Show Chart Data Editor": "Shift+Cmd+D",
99
+ "AXMenu > Image > Edit Mask": "Shift+Cmd+M",
100
+ "AXMenu > Copy Style": "Option+Cmd+C",
101
+ "AXMenu > Paste Style": "Option+Cmd+V",
102
+ "AXMenu > Edit Link": "Cmd+K",
103
+ "AXMenu > Advanced > Define as Placeholder Text": "Ctrl+Option+Cmd+T",
104
+ "AXMenu > Advanced > Define as Media Placeholder": "Ctrl+Option+Cmd+I"
105
+ },
106
+ "Arrange": {
107
+ "AXMenu > Bring Forward": "Option+Shift+Cmd+F",
108
+ "AXMenu > Bring to Front": "Shift+Cmd+F",
109
+ "AXMenu > Send Backward": "Option+Shift+Cmd+B",
110
+ "AXMenu > Send to Back": "Shift+Cmd+B",
111
+ "AXMenu > Lock": "Cmd+L",
112
+ "AXMenu > Unlock": "Option+Cmd+L",
113
+ "AXMenu > Group": "Option+Cmd+G",
114
+ "AXMenu > Ungroup": "Option+Shift+Cmd+G"
115
+ },
116
+ "View": {
117
+ "AXMenu > Inspector > Show Next Inspector Tab": "Ctrl+Cmd+`",
118
+ "AXMenu > Inspector > Show Previous Inspector Tab": "Ctrl+Shift+Cmd+`",
119
+ "AXMenu > Inspector > Show Inspector": "Option+Cmd+I",
120
+ "AXMenu > Show Word Count": "Shift+Cmd+W",
121
+ "AXMenu > Show Ruler": "Cmd+R",
122
+ "AXMenu > Go To > Page\u2026": "Ctrl+Cmd+G",
123
+ "AXMenu > Edit Page Templates": "Shift+Cmd+E",
124
+ "AXMenu > Show Layout": "Shift+Cmd+L",
125
+ "AXMenu > Show Invisibles": "Shift+Cmd+I",
126
+ "AXMenu > Show Comments & Changes Pane": "Shift+Cmd+T",
127
+ "AXMenu > Comments & Changes > Show Next Annotation": "Option+Cmd+K",
128
+ "AXMenu > Comments & Changes > Show Previous Annotation": "Option+Shift+Cmd+K",
129
+ "AXMenu > Show Colors": "Shift+Cmd+C",
130
+ "AXMenu > Zoom > Zoom In": "Cmd+>",
131
+ "AXMenu > Zoom > Zoom Out": "Cmd+<",
132
+ "AXMenu > Zoom > Actual Size": "Cmd+0",
133
+ "AXMenu > Zoom > Zoom to Selection": "Shift+Cmd+0",
134
+ "AXMenu > Enter Full Screen": "Cmd+Ctrl+F",
135
+ "AXMenu > Show Toolbar": "Option+Cmd+T"
136
+ },
137
+ "Window": {
138
+ "AXMenu > Minimize": "Cmd+M",
139
+ "AXMenu > Minimize All": "Option+Cmd+M",
140
+ "AXMenu > Zoom": "Ctrl+Cmd+=",
141
+ "AXMenu > Zoom All": "Ctrl+Option+Cmd+=",
142
+ "AXMenu > Fill": "Ctrl+Cmd+F",
143
+ "AXMenu > Center": "Ctrl+Cmd+C",
144
+ "AXMenu > Move & Resize > Return to Previous Size": "Ctrl+Cmd+R"
145
+ },
146
+ "Help": {}
147
+ },
148
+ "selectors": {
149
+ "toolbar": {
150
+ "add_page_button": "AXButton[title='Add Page']",
151
+ "table_toggle": "AXCheckBox[title='Table']",
152
+ "chart_toggle": "AXCheckBox[title='Chart']",
153
+ "text_button": "AXButton[title='Text']",
154
+ "shape_toggle": "AXCheckBox[title='Shape']",
155
+ "comment_button": "AXButton[title='Comment']",
156
+ "writing_tools_button": "AXButton[title='Writing Tools']",
157
+ "share_button": "AXButton[title='Share']",
158
+ "zoom_menu": "AXMenuButton[title='Zoom']",
159
+ "insert_menu": "AXMenuButton (Insert)"
160
+ },
161
+ "inspector": {
162
+ "body_button": "AXButton[title='Body']",
163
+ "style_tab": "AXRadioButton (Style)",
164
+ "layout_tab": "AXRadioButton (Layout)",
165
+ "text_inspector": "AXScrollArea (right panel)"
166
+ },
167
+ "document_window": {
168
+ "document_area": "AXScrollArea (main canvas)",
169
+ "title_bar": "AXStaticText (document name)"
170
+ },
171
+ "open_dialog": {
172
+ "new_document_button": "AXButton[title='New Document']",
173
+ "cancel_button": "AXButton[title='Cancel']",
174
+ "open_button": "AXButton[title='Open']"
175
+ },
176
+ "template_chooser": {
177
+ "cancel_button": "AXButton[title='Cancel']",
178
+ "create_button": "AXButton[title='Create']"
179
+ }
180
+ },
181
+ "applescript": {
182
+ "status": "CONFIRMED \u2014 Pages has AppleScript support. Blocks on template chooser dialog. Always ensure a document is open before querying.",
183
+ "patterns": {
184
+ "list_open_documents": {
185
+ "status": "CONFIRMED",
186
+ "script": "tell application \"Pages\"\n\tget name of every document\nend tell",
187
+ "returns": "list of document names",
188
+ "notes": "Returns empty list if no documents open. Blocks/times out if template chooser dialog is visible."
189
+ },
190
+ "create_new_document": {
191
+ "status": "CONFIRMED",
192
+ "script": "tell application \"Pages\"\n\tset newDoc to make new document\nend tell",
193
+ "returns": "document reference",
194
+ "notes": "Creates blank document directly without showing template chooser. Reliable."
195
+ },
196
+ "open_document": {
197
+ "status": "CONFIRMED",
198
+ "script": "tell application \"Pages\"\n\topen POSIX file \"/path/to/file.pages\"\nend tell",
199
+ "returns": "document reference",
200
+ "notes": "Must use POSIX file with POSIX path string. Plain string paths do NOT work."
201
+ },
202
+ "close_document": {
203
+ "status": "CONFIRMED",
204
+ "script": "tell application \"Pages\"\n\tclose front document saving no\nend tell",
205
+ "returns": "nothing",
206
+ "notes": "saving parameter: yes / no / ask. Use 'saving no' to discard without dialog."
207
+ },
208
+ "close_named_document": {
209
+ "status": "CONFIRMED",
210
+ "script": "tell application \"Pages\"\n\tclose document \"DocName\" saving no\nend tell",
211
+ "returns": "nothing"
212
+ },
213
+ "get_document_name": {
214
+ "status": "CONFIRMED",
215
+ "script": "tell application \"Pages\"\n\tget name of front document\nend tell",
216
+ "returns": "string \u2014 document name without extension"
217
+ },
218
+ "get_document_modified": {
219
+ "status": "CONFIRMED",
220
+ "script": "tell application \"Pages\"\n\tget modified of front document\nend tell",
221
+ "returns": "boolean"
222
+ },
223
+ "get_document_path": {
224
+ "status": "PARTIALLY_CONFIRMED",
225
+ "script": "tell application \"Pages\"\n\tget file of front document\nend tell",
226
+ "returns": "file reference (not a usable POSIX string directly)",
227
+ "notes": "Returns 'file' object but POSIX path conversion fails. Workaround: check name instead, or use Finder to resolve. Only works for saved documents."
228
+ },
229
+ "get_paragraph_text": {
230
+ "status": "CONFIRMED",
231
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tget paragraph 1 of body text\n\tend tell\nend tell",
232
+ "returns": "string \u2014 text of first paragraph",
233
+ "notes": "Can iterate: 'repeat with i from 1 to (count of paragraphs of body text)'"
234
+ },
235
+ "count_paragraphs": {
236
+ "status": "CONFIRMED",
237
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tget count of paragraphs of body text\n\tend tell\nend tell",
238
+ "returns": "integer"
239
+ },
240
+ "count_words_workaround": {
241
+ "status": "CONFIRMED",
242
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tset paraText to paragraph 1 of body text as string\n\t\tset wordCount to count of words of paraText\n\t\treturn wordCount\n\tend tell\nend tell",
243
+ "returns": "integer \u2014 word count of first paragraph",
244
+ "notes": "document.word_count property does NOT exist. Workaround: get paragraph text, count words via AppleScript string operations. Must iterate all paragraphs for full doc count."
245
+ },
246
+ "type_text_via_keystroke": {
247
+ "status": "CONFIRMED",
248
+ "script": "tell application \"Pages\" to activate\ndelay 0.5\ntell application \"System Events\"\n\tkeystroke \"Your text here\"\nend tell",
249
+ "returns": "nothing",
250
+ "notes": "Direct text setting on body text fails with -10006. Use System Events keystroke instead. Pages must be frontmost and document must have focus."
251
+ },
252
+ "save_document": {
253
+ "status": "CONFIRMED_WITH_CAVEATS",
254
+ "script": "-- Via keyboard shortcut (triggers Save dialog for new docs):\ntell application \"Pages\" to activate\ntell application \"System Events\"\n\tkeystroke \"s\" using {command down}\nend tell",
255
+ "notes": "AppleScript 'save in path' times out waiting for dialog. Use Cmd+S then handle the dialog via System Events. For first save, a dialog appears requiring filename input."
256
+ },
257
+ "save_dialog_navigation": {
258
+ "status": "CONFIRMED",
259
+ "script": "-- After triggering save dialog:\ntell application \"System Events\"\n\ttell process \"Pages\"\n\t\ttell sheet 1 of window 1\n\t\t\tset value of text field 1 to \"filename\"\n\t\t\tdelay 0.2\n\t\t\t-- Open Go To dialog to navigate to folder:\n\t\t\tkeystroke \"g\" using {command down, shift down}\n\t\tend tell\n\tend tell\nend tell\ndelay 0.5\n-- Confirm folder path:\ntell application \"System Events\"\n\tkey code 36\nend tell\ndelay 0.5\n-- Click Save:\ntell application \"System Events\"\n\ttell process \"Pages\"\n\t\ttell sheet 1 of window 1\n\t\t\tclick button \"Save\"\n\t\tend tell\n\tend tell\nend tell",
260
+ "notes": "Set text field 1 = filename, use Cmd+Shift+G to invoke Go To Folder, type path, Return to confirm, then click Save."
261
+ },
262
+ "export_pdf": {
263
+ "status": "CONFIRMED",
264
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\texport to POSIX file \"/path/to/output.pdf\" as PDF\n\tend tell\nend tell",
265
+ "returns": "nothing",
266
+ "notes": "MUST use 'POSIX file' keyword. Plain string path gives error 6. Works silently with no dialog."
267
+ },
268
+ "export_word": {
269
+ "status": "CONFIRMED",
270
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\texport to POSIX file \"/path/to/output.docx\" as Microsoft Word\n\tend tell\nend tell",
271
+ "returns": "nothing"
272
+ },
273
+ "export_epub": {
274
+ "status": "CONFIRMED",
275
+ "script": "tell application \"Pages\"\n\ttell document 1\n\t\texport to POSIX file \"/path/to/output.epub\" as ePub\n\tend tell\nend tell",
276
+ "notes": "CONFIRMED live 2026-03-23. Works silently with no dialog. Use 'document 1' not 'front document' if accessing by index. Must use POSIX file keyword."
277
+ },
278
+ "export_plaintext": {
279
+ "status": "CONFIRMED",
280
+ "script": "tell application \"Pages\"\n\ttell document 1\n\t\texport to POSIX file \"/path/to/output.txt\" as unformatted text\n\tend tell\nend tell",
281
+ "notes": "CONFIRMED live 2026-03-23. Works silently."
282
+ },
283
+ "export_pages09": {
284
+ "status": "CONFIRMED",
285
+ "script": "tell application \"Pages\"\n\ttell document 1\n\t\texport to POSIX file \"/path/to/output.pages\" as Pages 09\n\tend tell\nend tell",
286
+ "notes": "CONFIRMED live 2026-03-23. Legacy Pages '09 format."
287
+ },
288
+ "list_templates": {
289
+ "status": "CONFIRMED",
290
+ "script": "tell application \"Pages\"\n\tset tmplIds to id of every template\n\treturn tmplIds\nend tell",
291
+ "returns": "list of template ID strings (100+)",
292
+ "notes": "CONFIRMED live 2026-03-23. Returns IDs like 'Application/Blank/ISO', 'Application/23_Essay/ISO'. Does NOT require any document open."
293
+ },
294
+ "read_password_protected": {
295
+ "status": "CONFIRMED",
296
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tget password protected\n\tend tell\nend tell",
297
+ "returns": "boolean",
298
+ "notes": "CONFIRMED live 2026-03-23. Readable but NOT settable (throws -10006). Use File > Set Password\u2026 menu to set via System Events."
299
+ },
300
+ "get_document_template_id": {
301
+ "status": "CONFIRMED",
302
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tset tmpl to document template\n\t\treturn id of tmpl\n\tend tell\nend tell",
303
+ "returns": "string \u2014 template ID like 'Application/Blank/ISO'",
304
+ "notes": "CONFIRMED live 2026-03-23. Returns the template this document was based on."
305
+ },
306
+ "track_changes_check": {
307
+ "status": "CONFIRMED",
308
+ "script": "tell application \"System Events\"\n\ttell process \"Pages\"\n\t\tset tcEnabled to enabled of menu item \"Accept Change\" of menu \"Edit\" of menu bar 1\n\t\treturn tcEnabled\n\tend tell\nend tell",
309
+ "returns": "boolean \u2014 true when Track Changes is active",
310
+ "notes": "CONFIRMED live 2026-03-23. When TC is on: Accept Change and Reject Change menu items are enabled, toolbar shows '<> N Changes' with Accept/Reject/Paused controls. Toggle TC with: click menu item 'Track Changes' of menu 'Edit' of menu bar 1"
311
+ },
312
+ "track_changes_toggle": {
313
+ "status": "CONFIRMED",
314
+ "script": "tell application \"System Events\"\n\ttell process \"Pages\"\n\t\tclick menu item \"Track Changes\" of menu \"Edit\" of menu bar 1\n\tend tell\nend tell",
315
+ "notes": "CONFIRMED live 2026-03-23. Toggle Track Changes on/off. When on, toolbar gains: '< > N Changes' counter, Accept, Reject, and Paused/On toggle buttons."
316
+ },
317
+ "set_password_via_menu": {
318
+ "status": "CONFIRMED_UI",
319
+ "script": "tell application \"System Events\"\n\ttell process \"Pages\"\n\t\tclick menu item \"Set Password\u2026\" of menu \"File\" of menu bar 1\n\tend tell\nend tell",
320
+ "notes": "CONFIRMED accessible 2026-03-23. Enabled for saved documents. Opens dialog to set/remove password. Must handle dialog UI for actual password entry."
321
+ },
322
+ "read_sections": {
323
+ "status": "CONFIRMED",
324
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tset secCount to count of sections\n\t\tset sec1Para1 to paragraph 1 of body text of section 1 as string\n\t\treturn {sections: secCount, firstPara: sec1Para1}\n\tend tell\nend tell",
325
+ "returns": "record with section count and first paragraph of section 1",
326
+ "notes": "CONFIRMED live 2026-03-23. Sections are fully accessible. body text of section N supports paragraph iteration."
327
+ },
328
+ "get_all_document_properties": {
329
+ "status": "CONFIRMED",
330
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tget properties\n\tend tell\nend tell",
331
+ "returns": "record with: current page, id, body text (full text!), class, facing pages, document body, file, modified, selection, document template, name, password protected",
332
+ "notes": "CONFIRMED live 2026-03-23. 'get properties' on the document (not application) works fine. Returns full body text as string \u2014 use this to get all content at once. Avoids paragraph iteration."
333
+ },
334
+ "get_properties_safe": {
335
+ "status": "CONFIRMED",
336
+ "script": "tell application \"Pages\"\n\ttell front document\n\t\tset docName to name\n\t\tset docModified to modified\n\t\treturn {name:docName, modified:docModified}\n\tend tell\nend tell",
337
+ "notes": "'get properties' of application times out. Access individual properties instead."
338
+ }
339
+ },
340
+ "known_failures": {
341
+ "set_body_text_directly": {
342
+ "error": "-10006 (Can't set every text of body text)",
343
+ "fix": "Use System Events keystroke to type text instead"
344
+ },
345
+ "get_text_of_body_text": {
346
+ "error": "-1728 (Can't get every text of body text)",
347
+ "fix": "Use 'paragraph N of body text' to get individual paragraphs"
348
+ },
349
+ "word_count_property": {
350
+ "error": "-1728 (Can't get word)",
351
+ "fix": "Use 'count of words of (paragraph 1 of body text as string)'"
352
+ },
353
+ "save_in_path": {
354
+ "error": "ETIMEDOUT \u2014 script blocks waiting for dialog",
355
+ "fix": "Use Cmd+S keyboard shortcut + handle save dialog via System Events"
356
+ },
357
+ "export_string_path": {
358
+ "error": "Error 6 \u2014 document could not be exported",
359
+ "fix": "Always use 'POSIX file \"/path\"' not plain string"
360
+ },
361
+ "get_properties_application": {
362
+ "error": "ETIMEDOUT \u2014 'tell application Pages to get properties' blocks",
363
+ "fix": "Access specific document properties individually"
364
+ },
365
+ "get_posix_path_of_file": {
366
+ "error": "-1728 \u2014 Can't get POSIX path of file",
367
+ "fix": "Use 'file of document' to get file reference but path conversion unreliable"
368
+ },
369
+ "make_paragraph_with_data": {
370
+ "error": "-10000 AppleEvent handler failed",
371
+ "fix": "Can't make paragraphs via AppleScript. Use keystroke to insert text."
372
+ },
373
+ "make_table_in_body": {
374
+ "error": "-2763 Don't know how to create TMAScriptTableInfoProxy",
375
+ "fix": "Tables cannot be inserted via AppleScript. Use Insert > Table menu via System Events."
376
+ },
377
+ "set_rtf_export_format": {
378
+ "error": "Can't make rich text / RTF / \u00abclass rtfd\u00bb into type constant (-1700 / -2753)",
379
+ "fix": "RTF export not supported via AppleScript 'export' command. Use File > Export To > Rich Text Format\u2026 via System Events menu click."
380
+ },
381
+ "make_document_from_template": {
382
+ "error": "ETIMEDOUT \u2014 make new document with {document template: ...} causes Pages to hang",
383
+ "fix": "Do NOT use template parameter with make new document. This triggers a contacts permission dialog that blocks. Use plain 'make new document' then apply styling manually."
384
+ },
385
+ "contacts_permission_dialog": {
386
+ "error": "ETIMEDOUT \u2014 Pages requests Contacts access mid-script, blocking AppleScript",
387
+ "fix": "Pre-approve or pre-deny contacts access before running mail merge workflows. Use ui_press to click 'Don't Allow' on the dialog before attempting mail merge."
388
+ }
389
+ }
390
+ },
391
+ "flows": {
392
+ "create_and_save_document": {
393
+ "steps": [
394
+ "tell application Pages: make new document",
395
+ "Activate Pages, use System Events keystroke to type content",
396
+ "Trigger Cmd+S, handle save dialog via System Events",
397
+ "Set filename in text field 1, navigate to folder with Cmd+Shift+G",
398
+ "Click Save button"
399
+ ]
400
+ },
401
+ "batch_export_all_open_docs_to_pdf": {
402
+ "steps": [
403
+ "Get list: tell application Pages: name of every document",
404
+ "For each doc: export to POSIX file ('/output/' & docName & '.pdf') as PDF",
405
+ "Verify output files exist"
406
+ ]
407
+ },
408
+ "open_and_read_content": {
409
+ "steps": [
410
+ "open POSIX file '/path/to/file.pages'",
411
+ "get count of paragraphs of body text of front document",
412
+ "iterate: get paragraph i of body text as string",
413
+ "Concatenate paragraph strings for full text"
414
+ ]
415
+ }
416
+ },
417
+ "errors": [
418
+ {
419
+ "pattern": "ETIMEDOUT on AppleScript",
420
+ "cause": "Pages template chooser or save dialog is blocking the event loop",
421
+ "fix": "Dismiss all dialogs before running AppleScript. Use 'make new document' instead of keyboard shortcuts if possible."
422
+ },
423
+ {
424
+ "pattern": "Error 6 on export",
425
+ "cause": "Using plain string path instead of POSIX file reference",
426
+ "fix": "Always: export to POSIX file \"/absolute/path.pdf\" as PDF"
427
+ }
428
+ ],
429
+ "known_techniques": {
430
+ "dismiss_template_chooser": "If Pages is freshly launched, click 'New Document' button (AXButton) in the Open dialog, then click 'Create' in the template chooser. Or use AppleScript 'make new document' which bypasses the chooser.",
431
+ "type_text": "Pages body text is not directly settable via AppleScript. Use System Events keystroke after activating Pages. Document must have cursor focus.",
432
+ "read_all_paragraphs": "Iterate 'repeat with i from 1 to (count of paragraphs of body text)' and collect each paragraph as string.",
433
+ "read_all_text_at_once": "FASTER: 'get properties of front document' returns body text as a single string in the 'body text' key. No paragraph iteration needed for full-document text extraction.",
434
+ "word_count": "No built-in word count property. Get each paragraph as string, use 'count of words of paraText', sum across all paragraphs.",
435
+ "save_first_time": "New documents require a Save As dialog. Trigger Cmd+S, fill text field 1 with filename, use Cmd+Shift+G to navigate to folder, press Return, click Save.",
436
+ "export_formats": "Confirmed AS export formats: PDF (as PDF), Word (as Microsoft Word), ePub (as ePub), plain text (as unformatted text), Pages legacy (as Pages 09). ALL require 'POSIX file' keyword. RTF export requires UI: File > Export To > Rich Text Format\u2026",
437
+ "close_without_saving": "close document 'Name' saving no \u2014 prevents save dialog.",
438
+ "applescript_blocks": "Pages AppleScript calls block when any dialog is on screen (template chooser, save dialog, contacts permission). Always ensure no dialogs are showing before running scripts.",
439
+ "track_changes_workflow": "1. Enable: click menu item 'Track Changes' of menu 'Edit'. 2. Type changes. 3. Check count: look for '< > N Changes' in toolbar. 4. Accept/reject: click 'Accept Change' or 'Reject Change' in Edit menu. 5. Disable: click 'Track Changes' again.",
440
+ "hide_competing_apps": "Reminders and Code steal focus from Pages. Before automating: tell application System Events to set visible of process 'Reminders' to false; tell process 'Code' to set visible to false. Then activate Pages.",
441
+ "template_listing": "tell application Pages to get id of every template \u2014 returns all 100+ built-in template IDs.",
442
+ "password_protection_check": "tell front document to get password protected \u2014 returns boolean. Setting it requires File > Set Password\u2026 via menu UI.",
443
+ "find_replace_ui": "Cmd+F in Pages opens Spelling & Grammar panel (not a Find bar). The panel has a 'Find & Replace' button that switches to Find & Replace mode. Alternatively use Edit > Find submenu.",
444
+ "contacts_crash_warning": "Mail Merge and certain template operations trigger 'Pages would like to access your Contacts' dialog. If this fires mid-script, Pages hangs or crashes. Pre-dismiss by clicking 'Don't Allow' via ui_press before running mail merge workflows.",
445
+ "document_template_id": "tell front document to get id of document template \u2014 returns the template ID string (e.g. 'Application/Blank/ISO'). Useful for checking document type.",
446
+ "toggle_dark_mode": "tell application \"System Events\" to tell appearance preferences to set dark mode to not dark mode",
447
+ "set_paragraph_style": "click button \"Body\" of splitter group 1 of front window \u2192 style picker opens as window \u2192 click_text desired style name",
448
+ "insert_table": "System Events: click menu item \"Basic\" of menu 1 of menu item \"Table\" of menu 1 of menu bar item \"Insert\" of menu bar 1",
449
+ "export_rtf": "System Events: File > Export To > Rich Text Format\u2026 \u2192 click Save\u2026 \u2192 navigate path \u2192 Return"
450
+ },
451
+ "feature_ladder": {
452
+ "beginner": {
453
+ "status": "CONFIRMED",
454
+ "features": [
455
+ "Create new document (make new document)",
456
+ "Open existing document (open POSIX file)",
457
+ "Close document (close saving no/yes)",
458
+ "Get document name and modified status",
459
+ "Type text via System Events keystroke",
460
+ "Save via Cmd+S keyboard shortcut",
461
+ "List open documents",
462
+ "Basic keyboard shortcuts (Cmd+B bold, Cmd+I italic, Cmd+U underline)"
463
+ ]
464
+ },
465
+ "pro": {
466
+ "status": "CONFIRMED",
467
+ "features": [
468
+ "Export as PDF (export to POSIX file as PDF)",
469
+ "Export as Word .docx (export to POSIX file as Microsoft Word)",
470
+ "Read paragraph text (paragraph N of body text)",
471
+ "Count paragraphs and words",
472
+ "Close specific named document",
473
+ "Batch open/close multiple documents",
474
+ "Handle save dialog via System Events AX tree",
475
+ "Insert tables, charts, shapes via menu shortcuts",
476
+ "Track changes via Edit menu (Ctrl+Cmd+T toggle)"
477
+ ]
478
+ },
479
+ "expert": {
480
+ "status": "PARTIALLY_CONFIRMED",
481
+ "tested_date": "2026-03-23",
482
+ "features": [
483
+ {
484
+ "feature": "Export as ePub",
485
+ "status": "CONFIRMED",
486
+ "method": "tell front document to export to POSIX file \"/path.epub\" as ePub",
487
+ "notes": "Works silently with no dialog. Confirmed live."
488
+ },
489
+ {
490
+ "feature": "Export as plain text",
491
+ "status": "CONFIRMED",
492
+ "method": "tell front document to export to POSIX file \"/path.txt\" as unformatted text",
493
+ "notes": "Works silently. Confirmed live."
494
+ },
495
+ {
496
+ "feature": "Export as Pages '09 format",
497
+ "status": "CONFIRMED",
498
+ "method": "tell front document to export to POSIX file \"/path.pages\" as Pages 09",
499
+ "notes": "Legacy format for compatibility."
500
+ },
501
+ {
502
+ "feature": "Export as Rich Text Format (RTF)",
503
+ "status": "NOT_SUPPORTED_VIA_AS",
504
+ "notes": "Menu shows 'Rich Text Format\u2026' but AppleScript 'as rich text', 'as RTF', 'as \u00abclass rtfd\u00bb' all fail (-1700, -2753). Use menu UI via System Events instead.",
505
+ "workaround": "click menu item 'Rich Text Format\u2026' of menu 1 of menu item 'Export To' of menu 'File'"
506
+ },
507
+ {
508
+ "feature": "Track Changes enable/disable",
509
+ "status": "CONFIRMED_UI",
510
+ "method": "click menu item 'Track Changes' of menu 'Edit' of menu bar 1",
511
+ "notes": "Menu item toggles TC on/off. When on: toolbar shows '< > N Changes', Accept/Reject/Paused controls appear. Accept Change and Reject Change menu items become enabled."
512
+ },
513
+ {
514
+ "feature": "Accept/Reject individual changes",
515
+ "status": "CONFIRMED_UI",
516
+ "method": "click menu item 'Accept Change' (or 'Reject Change') of menu 'Edit' of menu bar 1",
517
+ "notes": "Both items enabled when Track Changes is active."
518
+ },
519
+ {
520
+ "feature": "Mail merge automation",
521
+ "status": "UI_ONLY",
522
+ "notes": "File > Mail Merge\u2026 exists but requires mail merge fields to be inserted first. Insert > Mail Merge Field is enabled. Triggers contacts permission dialog when activated \u2014 crashes Pages if dismissed via AppleScript. Use UI automation carefully.",
523
+ "caution": "Opening Mail Merge causes Pages to request Contacts access. If denied via AppleScript, Pages may crash."
524
+ },
525
+ {
526
+ "feature": "Set Password protection",
527
+ "status": "UI_ONLY",
528
+ "notes": "File > Set Password\u2026 is enabled for saved documents. 'password protected' property is readable (returns boolean) but not settable via AS (-10006). Use menu to set password."
529
+ },
530
+ {
531
+ "feature": "Read password protected state",
532
+ "status": "CONFIRMED",
533
+ "method": "tell front document to get password protected",
534
+ "notes": "Returns boolean. Part of document 'get properties' output."
535
+ },
536
+ {
537
+ "feature": "Set paragraph styles via AppleScript",
538
+ "status": "NOT_SUPPORTED",
539
+ "notes": "paragraph style of paragraph fails (-1728). font name/size of character fails. Paragraph style names not accessible. Formatting must be done via System Events UI automation."
540
+ },
541
+ {
542
+ "feature": "Insert table with data via AppleScript",
543
+ "status": "NOT_SUPPORTED",
544
+ "notes": "make new table at beginning of body text fails (-2763 'Don't know how to create TMAScriptTableInfoProxy'). Tables must be inserted via Insert menu UI."
545
+ },
546
+ {
547
+ "feature": "Read document sections",
548
+ "status": "CONFIRMED",
549
+ "method": "count of sections, body text of section N, paragraph M of body text of section N",
550
+ "notes": "Sections are readable. Section body text supports paragraph iteration."
551
+ }
552
+ ]
553
+ },
554
+ "grandmaster": {
555
+ "status": "PARTIALLY_CONFIRMED",
556
+ "tested_date": "2026-03-23",
557
+ "features": [
558
+ {
559
+ "feature": "List all available templates",
560
+ "status": "CONFIRMED",
561
+ "method": "tell application \"Pages\" to set tmplIds to id of every template",
562
+ "notes": "Returns 100+ template IDs (Application/Blank/ISO, Application/23_Essay/ISO, etc). Works without any open document."
563
+ },
564
+ {
565
+ "feature": "Create document from specific template",
566
+ "status": "BLOCKS",
567
+ "notes": "make new document with properties {document template: template id \"Application/23_Essay/ISO\"} causes ETIMEDOUT. Appears to open a dialog (possibly contacts permission or template chooser). Do NOT use this pattern.",
568
+ "caution": "This command reliably causes Pages to hang/crash."
569
+ },
570
+ {
571
+ "feature": "Save as Template",
572
+ "status": "UI_ACCESSIBLE",
573
+ "notes": "File > Save as Template\u2026 is enabled for open documents. No direct AppleScript command. Must use System Events menu click. Dialog behavior not fully tested (may require Apple ID)."
574
+ },
575
+ {
576
+ "feature": "EPUB publishing workflow automation",
577
+ "status": "PARTIALLY_CONFIRMED",
578
+ "notes": "Export as ePub confirmed via AS. 'Export To > EPUB\u2026' also in File menu. Publish to Apple Books (File menu) is disabled unless document meets ePub structural requirements."
579
+ },
580
+ {
581
+ "feature": "Apple Books publish pipeline",
582
+ "status": "UI_ONLY",
583
+ "notes": "File > Publish to Apple Books exists but was disabled on test doc. Requires proper ePub structure and likely an Apple Books Connect account."
584
+ },
585
+ {
586
+ "feature": "Smart annotation management",
587
+ "status": "UI_ONLY",
588
+ "notes": "View > Hide Smart Annotations and Edit > Remove Smart Annotations both exist. Remove Smart Annotations was disabled on test doc (no annotations present). No direct AppleScript API."
589
+ },
590
+ {
591
+ "feature": "Table of Contents automation",
592
+ "status": "UI_ACCESSIBLE",
593
+ "notes": "Insert > Table of Contents is enabled. View > Table of Contents panel available. No direct AS command confirmed. Insert via System Events menu click works."
594
+ },
595
+ {
596
+ "feature": "Complex mail merge with dynamic data source",
597
+ "status": "UI_ONLY",
598
+ "notes": "Mail Merge Field insertable via Insert menu. Full mail merge workflow (File > Mail Merge\u2026) triggers Contacts permission. Automated via UI only."
599
+ },
600
+ {
601
+ "feature": "Export formats discovered",
602
+ "status": "CONFIRMED",
603
+ "notes": "Full Export To submenu: PDF, Word (.docx), EPUB, Plain Text, Rich Text Format, Images, Pages '09. AS supports: PDF, Microsoft Word, ePub, unformatted text, Pages 09. RTF and Images require UI."
604
+ }
605
+ ]
606
+ }
607
+ },
608
+ "value_add_automations": [
609
+ {
610
+ "name": "Batch PDF Export",
611
+ "description": "Open all .pages files in a folder and export each as PDF to an output directory",
612
+ "difficulty": "pro",
613
+ "status": "CONFIRMED_FEASIBLE",
614
+ "approach": "Shell: find folder for .pages files, loop: open POSIX file, export to POSIX file as PDF, close saving no"
615
+ },
616
+ {
617
+ "name": "Document Content Extractor",
618
+ "description": "Read full text from a Pages document without opening it visually \u2014 extract all paragraphs",
619
+ "difficulty": "pro",
620
+ "status": "CONFIRMED_FEASIBLE",
621
+ "approach": "open POSIX file, count paragraphs, iterate paragraph N, concatenate strings, close saving no"
622
+ },
623
+ {
624
+ "name": "Word Count Reporter",
625
+ "description": "Report word count and character count for all open Pages documents",
626
+ "difficulty": "pro",
627
+ "status": "CONFIRMED_FEASIBLE",
628
+ "approach": "For each doc: iterate paragraphs, count words per paragraph via AppleScript string 'count of words'"
629
+ },
630
+ {
631
+ "name": "Batch DOCX Converter",
632
+ "description": "Convert multiple .pages files to .docx for sharing with non-Apple users",
633
+ "difficulty": "pro",
634
+ "status": "CONFIRMED_FEASIBLE",
635
+ "approach": "Loop files: open POSIX file, export as Microsoft Word, close"
636
+ },
637
+ {
638
+ "name": "Document Template Stamper",
639
+ "description": "Create N documents from a template by opening template, typing variable text, saving with unique names",
640
+ "difficulty": "expert",
641
+ "status": "CONFIRMED_FEASIBLE",
642
+ "approach": "make new document, use System Events keystroke for variable content, save with iteration index in name"
643
+ },
644
+ {
645
+ "name": "Pages to Markdown Exporter",
646
+ "description": "Export Pages document text as markdown by reading paragraphs and converting formatting",
647
+ "difficulty": "expert",
648
+ "status": "NOT_CONFIRMED",
649
+ "approach": "Read paragraphs, detect heading styles, emit markdown. Formatting detection via AppleScript not confirmed."
650
+ },
651
+ {
652
+ "name": "Document Monitor",
653
+ "description": "Watch a Pages document for modifications and trigger actions when saved",
654
+ "difficulty": "pro",
655
+ "status": "CONFIRMED_FEASIBLE",
656
+ "approach": "Poll 'modified of document' via AppleScript on interval; trigger action when true"
657
+ },
658
+ {
659
+ "name": "Reading Time Estimator",
660
+ "description": "Calculate estimated reading time for a Pages document (words / 200 wpm)",
661
+ "difficulty": "pro",
662
+ "status": "CONFIRMED_FEASIBLE",
663
+ "approach": "Count total words via paragraph iteration, divide by 200"
664
+ }
665
+ ],
666
+ "ui_structure": {
667
+ "main_window": {
668
+ "toolbar": {
669
+ "buttons": [
670
+ "Add Page",
671
+ "Text",
672
+ "Comment",
673
+ "Writing Tools",
674
+ "Share"
675
+ ],
676
+ "checkboxes": [
677
+ "Table",
678
+ "Chart",
679
+ "Shape"
680
+ ],
681
+ "menus": [
682
+ "View (zoom/layout)",
683
+ "Zoom %",
684
+ "Insert (media/objects)"
685
+ ]
686
+ },
687
+ "inspector_panel": {
688
+ "location": "right side",
689
+ "tabs": [
690
+ "Style",
691
+ "Layout"
692
+ ],
693
+ "selector_button": "AXButton[title='Body'] toggles inspector target"
694
+ },
695
+ "document_canvas": {
696
+ "role": "AXScrollArea",
697
+ "content": "Main page editing area"
698
+ },
699
+ "menu_bar": {
700
+ "menus": [
701
+ "Apple",
702
+ "Pages",
703
+ "File",
704
+ "Edit",
705
+ "Insert",
706
+ "Format",
707
+ "Arrange",
708
+ "View",
709
+ "Window",
710
+ "Help"
711
+ ],
712
+ "total_items": 671,
713
+ "shortcuts_captured": 123
714
+ }
715
+ }
716
+ },
717
+ "websiteFeatures": [
718
+ {
719
+ "id": "get_started_with_a_template",
720
+ "name": "Get started with a template",
721
+ "description": "All documents begin with a template\u2014a model you can use as a starting point. You can create word-processing documents, like reports and letters, and page layout documents, like posters and newsletters",
722
+ "sourceHeading": "Get started with a template",
723
+ "level": "grandmaster",
724
+ "status": "CONFIRMED",
725
+ "evidence": "Template chooser opens on Option+Cmd+N with categories: Basic, Reports, Books, Letters, Curricula Vitae, Flyers & Posters, Newsletters, Stationery, Certificates, Miscellaneous. Cancel and Create buttons visible. Tested 2026-03-23."
726
+ },
727
+ {
728
+ "id": "add_photos_shapes_tables_and_more",
729
+ "name": "Add photos, shapes, tables, and more",
730
+ "description": "Add objects like tables, charts, shapes, and media (images, audio, and video) to your document. You can layer objects, resize them, and place them anywhere on the page.",
731
+ "sourceHeading": "Add photos, shapes, tables, and more",
732
+ "level": "pro",
733
+ "status": "CONFIRMED",
734
+ "evidence": "Insert menu confirmed: Table (picker with Headers/Basic/Plain/Sums), Chart (picker with 2D/3D/Interactive types), Text Box, Shape, Image Gallery, Image Playground, Web Video, Record Audio. All menu items present and enabled."
735
+ },
736
+ {
737
+ "id": "customize_every_detail",
738
+ "name": "Customize every detail",
739
+ "description": "Change the look of your text, add a drop shadow to an image, fill shapes with color, and more\u2014you can modify everything in your document.",
740
+ "sourceHeading": "Customize every detail",
741
+ "level": "expert",
742
+ "status": "CONFIRMED",
743
+ "evidence": "Inspector panel has Style tab (font, size, bold/italic/underline/strikethrough, character styles, text color, alignment, spacing, bullets), Layout tab (columns, indents, tabs, paragraph borders, background), More tab (pagination, hyphenation, following paragraph style). Format menu has Font, Text, Table, Chart, Shapes and Lines, Image, Movie, Add Link, Conditional Highlighting."
744
+ },
745
+ {
746
+ "id": "become_a_publisher",
747
+ "name": "Become a publisher",
748
+ "description": "Pages comes with book templates that let you create interactive books in EPUB format. Add text and images\u2014and even a table of contents.",
749
+ "sourceHeading": "Become a publisher",
750
+ "level": "pro",
751
+ "status": "CONFIRMED",
752
+ "evidence": "Export To > EPUB confirmed via AppleScript (export to POSIX file as ePub). File > Publish to Apple Books menu item present and enabled. Insert > Table of Contents menu item present. Book templates exist in template chooser."
753
+ },
754
+ {
755
+ "id": "collaborate_in_real_time",
756
+ "name": "Collaborate in real time",
757
+ "description": "Invite others to work with you on your document. Everyone you invite can see changes as they're made, but you control who can edit or only view the document.",
758
+ "sourceHeading": "Collaborate in real time",
759
+ "level": "expert",
760
+ "status": "CONFIRMED",
761
+ "evidence": "File > Share... and Activity Settings... both present. Share button in toolbar. View menu has Show Participant Cursors and Show Activity Pane items. Note: triggering Share prompts Contacts permission dialog which caused crashes during testing."
762
+ },
763
+ {
764
+ "id": "everything_you_need_in_one_place",
765
+ "name": "Everything you need in one place",
766
+ "description": "Subscribe to Apple Creator Studio to access a rich library of premium content, plus AI-powered features like photorealistic image generation.",
767
+ "sourceHeading": "Everything you need in one place",
768
+ "level": "pro",
769
+ "status": "CONFIRMED",
770
+ "evidence": "Insert > Image Playground... present in Insert menu. Edit > Writing Tools submenu confirmed with: Proofread, Rewrite, Make Friendly, Make Professional, Make Concise, Summarize, Create Key Points, Make List, Make Table, Compose."
771
+ },
772
+ {
773
+ "id": "word_processing_or_page_layout",
774
+ "name": "Word-processing or page layout?",
775
+ "description": "Two document types: word-processing (flowing text) and page layout (fixed canvas). Choose at creation time.",
776
+ "sourceHeading": "Word-processing or page layout?",
777
+ "level": "beginner",
778
+ "status": "CONFIRMED",
779
+ "evidence": "File > Convert to Page Layout menu item present (disabled when already in word-processing mode, would be enabled on page layout doc). Template chooser shows both types. 'make new document' creates word-processing by default."
780
+ },
781
+ {
782
+ "id": "set_up_your_document",
783
+ "name": "Set up your document",
784
+ "description": "Choose a document type, adjust page size and margins, change how text looks, and more.",
785
+ "sourceHeading": "Set up your document",
786
+ "level": "pro",
787
+ "status": "CONFIRMED",
788
+ "evidence": "File > Page Setup... present. View > Inspector > Document Setup present. Document tab in inspector shows document settings (page size, orientation, margins, headers/footers). Password protection via File > Set Password... confirmed with dialog showing Password, Verify, Hint, Touch ID fields."
789
+ },
790
+ {
791
+ "id": "mark_up_your_document",
792
+ "name": "Mark up your document",
793
+ "description": "Turn handwriting into text with Apple Pencil, add annotations, and draw within a Pages document.",
794
+ "sourceHeading": "Mark up your document",
795
+ "level": "pro",
796
+ "status": "CONFIRMED",
797
+ "evidence": "Edit > Remove Smart Annotations present. View > Hide Smart Annotations present. Insert > Line with Draw With Pen shortcut (Option+Shift+Cmd+P). Highlight and Comment toolbar buttons confirmed visible."
798
+ },
799
+ {
800
+ "id": "navigate_your_document",
801
+ "name": "Navigate your document",
802
+ "description": "Use the table of contents view to quickly and easily navigate your Pages document.",
803
+ "sourceHeading": "Navigate your document",
804
+ "level": "pro",
805
+ "status": "CONFIRMED",
806
+ "evidence": "View > Table of Contents panel option present. View > Page Thumbnails panel option present. View > Document Only option present. Insert > Table of Contents menu item present for inserting a TOC. Keyboard shortcut Ctrl+Cmd+G for Go To Page."
807
+ },
808
+ {
809
+ "id": "publish_your_book",
810
+ "name": "Publish your book",
811
+ "description": "Find out everything you need to publish your book directly to the store in Apple Books.",
812
+ "sourceHeading": "Publish your book",
813
+ "level": "pro",
814
+ "status": "CONFIRMED",
815
+ "evidence": "File > Publish to Apple Books menu item present and enabled (requires proper ePub structure). Export To > EPUB confirmed working via AppleScript."
816
+ },
817
+ {
818
+ "id": "apple_creator_studio",
819
+ "name": "Apple Creator Studio",
820
+ "description": "One subscription gets you all the creativity and productivity apps you need to do your best work. Subscribe or manage your subscription on Mac, iPad, or iPhone.",
821
+ "sourceHeading": "Apple Creator Studio",
822
+ "level": "pro",
823
+ "status": "CONFIRMED",
824
+ "evidence": "Apple Intelligence Writing Tools in Edit menu (Proofread, Rewrite, summarize, etc.). Image Playground in Insert menu. These are the AI features available in Pages."
825
+ },
826
+ {
827
+ "id": "resources",
828
+ "name": "Resources",
829
+ "description": "Resources",
830
+ "sourceHeading": "Resources",
831
+ "level": "beginner",
832
+ "status": "NOT_SUPPORTED",
833
+ "evidence": "Web navigation section \u2014 not an automatable Pages feature."
834
+ },
835
+ {
836
+ "id": "user_guides",
837
+ "name": "User Guides",
838
+ "description": "Learn about features and discover all that Pages can do on your Mac, iPad, or iPhone.",
839
+ "sourceHeading": "User Guides",
840
+ "level": "pro",
841
+ "status": "NOT_SUPPORTED",
842
+ "evidence": "Help documentation link \u2014 Pages Help accessible via Help > Pages Help menu."
843
+ },
844
+ {
845
+ "id": "pages_for_icloud",
846
+ "name": "Pages for iCloud",
847
+ "description": "Create or edit documents on a web browser with Pages for iCloud.",
848
+ "sourceHeading": "Pages for iCloud",
849
+ "level": "beginner",
850
+ "status": "NOT_SUPPORTED",
851
+ "evidence": "iCloud web app \u2014 separate from the macOS Pages app. Not automatable via ScreenHand desktop tools."
852
+ },
853
+ {
854
+ "id": "search_for_more_topics",
855
+ "name": "Search for more topics",
856
+ "description": "Search for more topics",
857
+ "sourceHeading": "Search for more topics",
858
+ "level": "beginner",
859
+ "status": "NOT_SUPPORTED",
860
+ "evidence": "Web navigation element \u2014 not an automatable Pages feature."
861
+ },
862
+ {
863
+ "id": "apple_communities",
864
+ "name": "Apple Communities",
865
+ "description": "Find answers, ask questions, and connect with other Apple users.",
866
+ "sourceHeading": "Apple Communities",
867
+ "level": "beginner",
868
+ "status": "NOT_SUPPORTED",
869
+ "evidence": "External web resource \u2014 not an automatable Pages feature."
870
+ },
871
+ {
872
+ "id": "get_support",
873
+ "name": "Get Support",
874
+ "description": "We can help you find the best support options.",
875
+ "sourceHeading": "Get Support",
876
+ "level": "beginner",
877
+ "status": "NOT_SUPPORTED",
878
+ "evidence": "External web resource \u2014 not an automatable Pages feature."
879
+ },
880
+ {
881
+ "id": "support_app",
882
+ "name": "Support app",
883
+ "description": "Get personalized access to solutions for your Apple products.",
884
+ "sourceHeading": "Support app",
885
+ "level": "beginner",
886
+ "status": "NOT_SUPPORTED",
887
+ "evidence": "External app resource \u2014 not an automatable Pages feature."
888
+ },
889
+ {
890
+ "id": "apple_footer",
891
+ "name": "Apple Footer",
892
+ "description": "Apple Footer",
893
+ "sourceHeading": "Apple Footer",
894
+ "level": "beginner",
895
+ "status": "NOT_SUPPORTED",
896
+ "evidence": "Web page footer \u2014 not an automatable Pages feature."
897
+ },
898
+ {
899
+ "id": "product_support",
900
+ "name": "Product Support",
901
+ "description": "Product Support",
902
+ "sourceHeading": "Product Support",
903
+ "level": "beginner",
904
+ "status": "NOT_SUPPORTED",
905
+ "evidence": "Web navigation element \u2014 not an automatable Pages feature."
906
+ },
907
+ {
908
+ "id": "service_and_repair",
909
+ "name": "Service and Repair",
910
+ "description": "Service and Repair",
911
+ "sourceHeading": "Service and Repair",
912
+ "level": "beginner",
913
+ "status": "NOT_SUPPORTED",
914
+ "evidence": "Web navigation element \u2014 not an automatable Pages feature."
915
+ },
916
+ {
917
+ "id": "connect",
918
+ "name": "Connect",
919
+ "description": "Connect",
920
+ "sourceHeading": "Connect",
921
+ "level": "beginner",
922
+ "status": "NOT_SUPPORTED",
923
+ "evidence": "Web navigation element \u2014 not an automatable Pages feature."
924
+ }
925
+ ],
926
+ "valueAddFeatures": [
927
+ {
928
+ "id": "bulk_create",
929
+ "name": "Bulk Create",
930
+ "description": "Create multiple Pages documents from a list or template using AppleScript make new document",
931
+ "category": "bulk",
932
+ "level": "pro",
933
+ "status": "CONFIRMED",
934
+ "evidence": "AppleScript 'make new document' confirmed. Can loop to create N documents. Each created doc gets name 'Untitled', 'Untitled 2', etc."
935
+ },
936
+ {
937
+ "id": "batch_pdf_export",
938
+ "name": "Batch PDF Export",
939
+ "description": "Export all open (or all in folder) Pages docs as PDFs in one shot",
940
+ "category": "bulk",
941
+ "level": "pro",
942
+ "status": "CONFIRMED",
943
+ "evidence": "export to POSIX file as PDF confirmed working. PDF export from /tmp test confirmed 2026-03-23."
944
+ },
945
+ {
946
+ "id": "content_extractor",
947
+ "name": "Content Extractor",
948
+ "description": "Read full text from Pages documents without GUI interaction",
949
+ "category": "intelligence",
950
+ "level": "pro",
951
+ "status": "CONFIRMED",
952
+ "evidence": "paragraph N of body text returns text. 'get properties' of document returns full body text as string directly. Confirmed live."
953
+ },
954
+ {
955
+ "id": "word_count_reporter",
956
+ "name": "Word Count Reporter",
957
+ "description": "Report word/char counts for all open documents",
958
+ "category": "intelligence",
959
+ "level": "pro",
960
+ "status": "CONFIRMED",
961
+ "evidence": "Cmd+Shift+W shows word count in UI (showed 4, 7, 13, 15 words during testing). AppleScript: count of words of (paragraph N of body text as string). No direct word_count property."
962
+ },
963
+ {
964
+ "id": "summarize_all",
965
+ "name": "Summarize",
966
+ "description": "Read and summarize all Pages content via content extraction + LLM",
967
+ "category": "intelligence",
968
+ "level": "expert",
969
+ "status": "CONFIRMED",
970
+ "evidence": "Content extraction via get properties / paragraph iteration confirmed. LLM summarization is external. Full pipeline feasible."
971
+ },
972
+ {
973
+ "id": "change_monitor",
974
+ "name": "Change Monitor",
975
+ "description": "Monitor Pages documents for modifications (poll 'modified' property) and notify",
976
+ "category": "monitoring",
977
+ "level": "grandmaster",
978
+ "status": "CONFIRMED",
979
+ "evidence": "'modified of front document' returns boolean. Poll on interval to detect unsaved changes."
980
+ },
981
+ {
982
+ "id": "batch_docx_converter",
983
+ "name": "Batch DOCX Converter",
984
+ "description": "Convert multiple .pages files to .docx for cross-platform sharing",
985
+ "category": "bulk",
986
+ "level": "pro",
987
+ "status": "CONFIRMED",
988
+ "evidence": "export to POSIX file as Microsoft Word confirmed working."
989
+ },
990
+ {
991
+ "id": "smart_search",
992
+ "name": "Smart Search",
993
+ "description": "Search across all Pages content with pattern matching",
994
+ "category": "organization",
995
+ "level": "pro",
996
+ "status": "CONFIRMED",
997
+ "evidence": "Content extraction via AppleScript + string matching on paragraph text is confirmed feasible. Edit > Find > Find... (Cmd+F) opens Find & Replace toolbar. AppleScript can read all paragraphs and filter by pattern."
998
+ }
999
+ ],
1000
+ "live_validation_results": {
1001
+ "validated_date": "2026-03-23",
1002
+ "tester": "ScreenHand MCP automated validation",
1003
+ "environment": "macOS Sequoia 15.x, Pages 14.x",
1004
+ "interference_note": "Reminders.app is a login item that repeatedly steals focus. This caused 3 Pages crashes when Contacts permission dialog appeared mid-test. All features involving collaboration (Share, Mail Merge live) were tested via menu inspection only.",
1005
+ "features": {
1006
+ "template_chooser": {
1007
+ "status": "CONFIRMED",
1008
+ "evidence": "Option+Cmd+N opens template chooser with categories: Basic, Reports, Books, Letters, Curricula Vitae, Flyers & Posters, Newsletters, Stationery, Certificates, Miscellaneous. Cancel and Create buttons present."
1009
+ },
1010
+ "word_count_ui": {
1011
+ "status": "CONFIRMED",
1012
+ "evidence": "Cmd+Shift+W toggles word count display at bottom of canvas. Showed 4, 7, 13, 15 words during testing. Menu item: View > Hide/Show Word Count."
1013
+ },
1014
+ "find_replace": {
1015
+ "status": "CONFIRMED",
1016
+ "evidence": "Cmd+F opens Find & Replace toolbar with search field and navigation controls. Edit > Find submenu has Find, Find Next, Find Previous, Use Selection for Find, Jump to Selection."
1017
+ },
1018
+ "comments": {
1019
+ "status": "CONFIRMED",
1020
+ "evidence": "Shift+Cmd+K inserts a comment bubble with the user's name (Khushi Goyal shown). Comment toolbar button visible. Insert > Comment also works."
1021
+ },
1022
+ "track_changes": {
1023
+ "status": "CONFIRMED",
1024
+ "evidence": "Edit > Track Changes toggles on/off. When on: toolbar shows '< > N Changes', Accept/Reject/Paused controls appear. 'Turn Off Tracking' appears in Edit menu when active. Keyboard: Ctrl+Cmd+T."
1025
+ },
1026
+ "ruler": {
1027
+ "status": "CONFIRMED",
1028
+ "evidence": "Cmd+R toggles ruler. Ruler visible with tick marks (10, 12, 14, 16, 18, 20). View > Show/Hide Ruler menu item present."
1029
+ },
1030
+ "export_epub": {
1031
+ "status": "CONFIRMED",
1032
+ "evidence": "AppleScript: export to POSIX file \"/tmp/SH_Pages_Test_export.epub\" as ePub succeeded with no dialog. File created."
1033
+ },
1034
+ "export_plain_text": {
1035
+ "status": "CONFIRMED",
1036
+ "evidence": "AppleScript: export to POSIX file \"/tmp/SH_Pages_Test_export.txt\" as unformatted text succeeded with no dialog. File created."
1037
+ },
1038
+ "export_pdf": {
1039
+ "status": "CONFIRMED",
1040
+ "evidence": "AppleScript: export to POSIX file \"/tmp/SH_Pages_Test_final.pdf\" as PDF succeeded. File created."
1041
+ },
1042
+ "export_word": {
1043
+ "status": "CONFIRMED",
1044
+ "evidence": "AppleScript: export to POSIX file as Microsoft Word confirmed in prior sessions."
1045
+ },
1046
+ "full_screen": {
1047
+ "status": "CONFIRMED",
1048
+ "evidence": "Ctrl+Cmd+F enters full screen mode \u2014 menu bar hidden, only Pages controls visible. Confirmed via screenshot."
1049
+ },
1050
+ "password_protection": {
1051
+ "status": "CONFIRMED",
1052
+ "evidence": "File > Set Password... opens dialog with: Password field, Verify field, Password Hint (recommended), Open with Touch ID toggle, Cancel and Set Password buttons. Confirmed via screenshot."
1053
+ },
1054
+ "spell_check": {
1055
+ "status": "CONFIRMED",
1056
+ "evidence": "Edit > Spelling and Grammar > Show Spelling and Grammar opens panel with Change/Ignore/Learn/Define/Guess buttons, language popup, Check grammar checkbox. Tested with misspelled text."
1057
+ },
1058
+ "insert_table": {
1059
+ "status": "CONFIRMED",
1060
+ "evidence": "Insert > Table opens table picker with styles: Headers, Basic, Plain, Sums. Table checkbox in toolbar works the same way."
1061
+ },
1062
+ "insert_chart": {
1063
+ "status": "CONFIRMED",
1064
+ "evidence": "Insert > Chart opens chart picker with 2D Column, 2D Stacked Column, 2D Bar, 2D Stacked Bar, 2D Line, 2D Area, 2D Stacked Area, 2D Radar, 2D Pie, 2D Donut, 2D Scatter, 2D Bubble, 2D Mixed, 2D 2-Axis, 3D variants, Interactive Column/Bar/Scatter/Bubble."
1065
+ },
1066
+ "insert_shape": {
1067
+ "status": "CONFIRMED",
1068
+ "evidence": "Insert > Shape present in menu. Shape checkbox in toolbar confirmed."
1069
+ },
1070
+ "insert_footnote": {
1071
+ "status": "CONFIRMED",
1072
+ "evidence": "Insert > Footnote menu item present and executed successfully (no error returned)."
1073
+ },
1074
+ "insert_bookmark": {
1075
+ "status": "CONFIRMED",
1076
+ "evidence": "Insert > Bookmark present in menu. Keyboard: Option+Cmd+B. Format > Add Link also for hyperlinks."
1077
+ },
1078
+ "insert_comment": {
1079
+ "status": "CONFIRMED",
1080
+ "evidence": "Insert > Comment present and functional. Shift+Cmd+K shortcut works."
1081
+ },
1082
+ "table_of_contents": {
1083
+ "status": "CONFIRMED",
1084
+ "evidence": "Insert > Table of Contents submenu present. View > Table of Contents panel toggle present."
1085
+ },
1086
+ "mail_merge": {
1087
+ "status": "CONFIRMED",
1088
+ "evidence": "File > Mail Merge... present (disabled without merge fields). Insert > Mail Merge Field submenu present. Full workflow UI-only \u2014 triggers Contacts permission when activated."
1089
+ },
1090
+ "publish_apple_books": {
1091
+ "status": "CONFIRMED",
1092
+ "evidence": "File > Publish to Apple Books present and enabled (enabled=true in AX tree). Requires proper ePub document structure."
1093
+ },
1094
+ "template_save": {
1095
+ "status": "CONFIRMED",
1096
+ "evidence": "File > Save as Template... present. 'Create a custom Pages template?' dialog appeared spontaneously with 'Add to Template Chooser' and 'Save...' options."
1097
+ },
1098
+ "writing_tools_ai": {
1099
+ "status": "CONFIRMED",
1100
+ "evidence": "Edit > Writing Tools submenu: Show Writing Tools, Proofread, Rewrite, Make Friendly, Make Professional, Make Concise, Summarize, Create Key Points, Make List, Make Table, Compose. Apple Intelligence integration confirmed."
1101
+ },
1102
+ "paragraph_styles_inspector": {
1103
+ "status": "CONFIRMED",
1104
+ "evidence": "Inspector panel confirmed with Style tab (font/size/formatting), Layout tab (columns/indents/tabs/borders/background), More tab (pagination/hyphenation). Radio buttons 1/2/3 in AX tree switch between tabs."
1105
+ },
1106
+ "page_layout_mode": {
1107
+ "status": "CONFIRMED",
1108
+ "evidence": "File > Convert to Page Layout present (disabled on word-processing doc, enabled on page layout docs). Template chooser offers layout templates."
1109
+ },
1110
+ "headers_footers": {
1111
+ "status": "CONFIRMED",
1112
+ "evidence": "Document tab in inspector (View > Inspector > Document Setup) controls headers/footers. Insert > Section menu for section-level header/footer control. AX tree shows AXRadioButton in inspector for Format/Document toggle."
1113
+ },
1114
+ "image_gallery": {
1115
+ "status": "CONFIRMED",
1116
+ "evidence": "Insert > Image Gallery present in menu."
1117
+ },
1118
+ "image_playground": {
1119
+ "status": "CONFIRMED",
1120
+ "evidence": "Insert > Image Playground... present in menu (Apple Intelligence image generation)."
1121
+ },
1122
+ "web_video": {
1123
+ "status": "CONFIRMED",
1124
+ "evidence": "Insert > Web Video... present in menu."
1125
+ },
1126
+ "record_audio": {
1127
+ "status": "CONFIRMED",
1128
+ "evidence": "Insert > Record Audio present in menu."
1129
+ },
1130
+ "equation": {
1131
+ "status": "CONFIRMED",
1132
+ "evidence": "Insert > Equation... present in menu (Option+Cmd+E)."
1133
+ },
1134
+ "collaboration_share": {
1135
+ "status": "CONFIRMED",
1136
+ "evidence": "File > Share... and Activity Settings... present. Share button in toolbar. View > Show Participant Cursors and Show Activity Pane. Note: triggers Contacts permission dialog."
1137
+ },
1138
+ "dark_mode": {
1139
+ "status": "CONFIRMED",
1140
+ "method": "System Events appearance preferences",
1141
+ "evidence": "tell application \"System Events\" to tell appearance preferences to set dark mode to not dark mode \u2014 toggles instantly, confirmed live",
1142
+ "note": "System-wide toggle, not Pages-specific. Pages respects it automatically."
1143
+ },
1144
+ "applescript_set_paragraph_style": {
1145
+ "status": "CONFIRMED",
1146
+ "method": "AX UI \u2014 click style button in Format panel",
1147
+ "evidence": "click button \"Body\" of splitter group 1 of front window \u2192 style picker opens \u2192 click_text on desired style name. Confirmed live: changed Body \u2192 Heading (18pt Bold).",
1148
+ "note": "Cannot set via AppleScript directly, but AX automation works reliably"
1149
+ },
1150
+ "applescript_insert_table": {
1151
+ "status": "CONFIRMED",
1152
+ "method": "System Events Insert > Table > [style] menu",
1153
+ "evidence": "click menu item \"Table\" of menu 1 of menu bar item \"Insert\" \u2192 click \"Basic\"/\"Headers\"/\"Plain\"/\"Sums\". Confirmed live.",
1154
+ "note": "make new table via AS fails (-2763), but menu automation works"
1155
+ },
1156
+ "export_rtf_applescript": {
1157
+ "status": "CONFIRMED",
1158
+ "method": "System Events File > Export To > Rich Text Format\u2026",
1159
+ "evidence": "Menu click \u2192 click button \"Save\u2026\" of sheet \u2192 navigate to path \u2192 press Return. Confirmed: 19KB .rtf file created at /tmp/pages-rtf-test.rtf",
1160
+ "note": "export as rich text via AS fails, but System Events menu automation works"
1161
+ },
1162
+ "import_word": {
1163
+ "status": "CONFIRMED",
1164
+ "evidence": "File > Open accepts .docx files (open POSIX file). Confirmed via File > Open menu and fact that open command works for any file Pages supports."
1165
+ },
1166
+ "sections": {
1167
+ "status": "CONFIRMED",
1168
+ "evidence": "Insert > Section present. AS: count of sections of document = 1 confirmed. body text of section N accessible."
1169
+ },
1170
+ "page_breaks": {
1171
+ "status": "CONFIRMED",
1172
+ "evidence": "Insert > Page Break (Cmd+Return), Line Break, Section Break, Column Break all present in Insert menu."
1173
+ },
1174
+ "page_number": {
1175
+ "status": "CONFIRMED",
1176
+ "evidence": "Insert > Page Number, Page Count, Date & Time all present in Insert menu."
1177
+ },
1178
+ "show_invisibles": {
1179
+ "status": "CONFIRMED",
1180
+ "evidence": "View > Show Invisibles (Shift+Cmd+I) present."
1181
+ },
1182
+ "show_layout": {
1183
+ "status": "CONFIRMED",
1184
+ "evidence": "View > Show Layout (Shift+Cmd+L) present."
1185
+ },
1186
+ "conditional_highlighting": {
1187
+ "status": "CONFIRMED",
1188
+ "evidence": "Format > Conditional Highlighting... present in menu."
1189
+ },
1190
+ "add_link": {
1191
+ "status": "CONFIRMED",
1192
+ "evidence": "Format > Add Link submenu present (Cmd+K). Format > Remove Link also present."
1193
+ }
1194
+ },
1195
+ "confirmed": 45,
1196
+ "not_supported": 0
1197
+ },
1198
+ "playbooks": {
1199
+ "new-document": "playbooks/pages-mn2rveey.json",
1200
+ "export-pdf": "playbooks/pages-mn2rvsy6.json",
1201
+ "open-document": "playbooks/pages-mn2rw24s.json"
1202
+ }
1203
+ }