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,73 @@
1
+ {
2
+ "platform": "google-search-competitor-research",
3
+ "version": "1.0.0",
4
+ "updated": "2026-03-12",
5
+ "description": "Curated ScreenHand reference for competitor discovery and message validation through Google Search.",
6
+ "urls": {
7
+ "search": "https://www.google.com/search?q={QUERY}",
8
+ "site_search": "https://www.google.com/search?q=site:{DOMAIN}+{QUERY}"
9
+ },
10
+ "selectors": {
11
+ "search": {
12
+ "query_field": "textarea#APjFqb",
13
+ "fallback_query_field": "[name='q']",
14
+ "search_button": "[aria-label='Search']"
15
+ },
16
+ "results": {
17
+ "headings": "h3",
18
+ "result_links": "a[href]"
19
+ }
20
+ },
21
+ "flows": {
22
+ "market_query": {
23
+ "steps": [
24
+ "Open a direct Google Search URL with the target query",
25
+ "Capture the first 5-10 visible headings and their domains",
26
+ "Use repeated brand presence across multiple queries as a relevance signal"
27
+ ],
28
+ "guards": [
29
+ "Google Search is for discovery and validation, not direct proof of paid performance",
30
+ "Results vary with geography, personalization, and AI Overview presence"
31
+ ],
32
+ "why": "Search results show who consistently owns the category conversation and which phrases competitors emphasize."
33
+ },
34
+ "brand_validation": {
35
+ "steps": [
36
+ "Run exact brand and offer searches after the market query",
37
+ "Check whether the same landing page angles appear across multiple searches",
38
+ "Use Search findings to choose which domains to verify in Ads Transparency or Meta"
39
+ ],
40
+ "why": "Search helps decide which competitors deserve deeper ad-library validation."
41
+ }
42
+ },
43
+ "detection": {
44
+ "on_google_search": "location.hostname.includes('google.com') && location.pathname === '/search'",
45
+ "results_loaded": "document.querySelectorAll('h3').length > 0"
46
+ },
47
+ "errors": [
48
+ {
49
+ "error": "search result composition varies by query and account",
50
+ "context": "AI Overviews, videos, or local modules can reorder the page",
51
+ "solution": "Extract visible h3 headings and domains rather than assuming a fixed result layout.",
52
+ "severity": "medium"
53
+ },
54
+ {
55
+ "error": "Google Search does not prove ad performance",
56
+ "context": "Strong rankings or brand presence do not equal conversion success",
57
+ "solution": "Use Search for discovery, then validate active paid inventory through Meta Ad Library or Ads Transparency.",
58
+ "severity": "medium"
59
+ }
60
+ ],
61
+ "_meta": {
62
+ "curated": true,
63
+ "sourceArtifacts": [
64
+ "references/google-search-competitor-research-explore.json",
65
+ "client/careermitra/competitor-ad-scan.md"
66
+ ],
67
+ "seedQueries": [
68
+ "career counselling for students india psychometric test stream selection",
69
+ "psychometric test for students india",
70
+ "career counselling after 10th india"
71
+ ]
72
+ }
73
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "id": "keynote",
3
+ "name": "keynote playbook",
4
+ "description": "",
5
+ "platform": "keynote",
6
+ "urlPatterns": [],
7
+ "steps": [],
8
+ "tags": [
9
+ "keynote"
10
+ ],
11
+ "version": "1.0.0",
12
+ "successCount": 0,
13
+ "failCount": 0,
14
+ "bundleId": "com.apple.iWork.Keynote",
15
+ "selectors": {
16
+ "toolbar": {
17
+ "addSlideButton": "AXToolbar > AXButton[AXDescription='Add Slide']",
18
+ "playButton": "AXToolbar > AXButton[AXDescription='Play']",
19
+ "formatInspector": "AXToolbar > AXButton[AXDescription='Format']",
20
+ "animateInspector": "AXToolbar > AXButton[AXDescription='Animate']",
21
+ "documentInspector": "AXToolbar > AXButton[AXDescription='Document']"
22
+ },
23
+ "slidePanel": {
24
+ "slideNavigator": "AXScrollArea[AXDescription='Slide Navigator']",
25
+ "slideCell": "AXGroup > AXCell"
26
+ },
27
+ "canvas": {
28
+ "slideCanvas": "AXScrollArea[AXIdentifier='canvas-scroll-view']"
29
+ },
30
+ "presenterNotes": {
31
+ "notesArea": "AXTextArea[AXDescription='Presenter Notes']"
32
+ },
33
+ "auto_discovered": {}
34
+ },
35
+ "flows": {
36
+ "create-titled-presentation": {
37
+ "description": "Create a new presentation, set theme, and add a title slide",
38
+ "steps": [
39
+ "make new document with properties {document theme: theme id '...' of application 'Keynote'}",
40
+ "set object text of default title item of slide 1 to 'Title'",
41
+ "set object text of default body item of slide 1 to 'Subtitle'",
42
+ "save document in POSIX file '/path/file.key'"
43
+ ]
44
+ },
45
+ "batch-slide-deck": {
46
+ "description": "Create a multi-slide deck from a data list",
47
+ "steps": [
48
+ "make new document",
49
+ "set slide 1 title/body",
50
+ "repeat with data: make new slide, set title/body",
51
+ "export to PDF or PPTX"
52
+ ]
53
+ },
54
+ "export-all-formats": {
55
+ "description": "Export presentation in multiple formats",
56
+ "steps": [
57
+ "export as PDF to /tmp/out.pdf",
58
+ "export as Microsoft PowerPoint to /tmp/out.pptx",
59
+ "export as slide images (PNG) to /tmp/slides/",
60
+ "export as HTML to /tmp/html/"
61
+ ]
62
+ },
63
+ "add-data-table": {
64
+ "description": "Add a table to a slide and populate it",
65
+ "steps": [
66
+ "make new table with {position, row count, column count} in slide N",
67
+ "set value of cell C of row R of table 1 to 'header'",
68
+ "repeat for each data row"
69
+ ]
70
+ },
71
+ "set-auto-advance-slideshow": {
72
+ "description": "Configure slides to auto-advance and loop",
73
+ "steps": [
74
+ "set transition properties of each slide to {transition effect:dissolve, automatic transition:true}",
75
+ "set auto play of document to true",
76
+ "set auto loop of document to true",
77
+ "start front document"
78
+ ]
79
+ }
80
+ },
81
+ "errors": [
82
+ {
83
+ "error": "Can't make {x:100, y:200} into type point (-1700)",
84
+ "cause": "Using record notation {x:100, y:200} for position/size",
85
+ "fix": "Use list notation {100, 200} for position; set width and height separately for size"
86
+ },
87
+ {
88
+ "error": "Can't set size of shape N to {w, h} (-10006)",
89
+ "cause": "Setting size as a list in one step",
90
+ "fix": "Set width and height as separate properties: 'set width of shape to 200' then 'set height of shape to 150'"
91
+ },
92
+ {
93
+ "error": "Can't get theme id '...' of document 1 (-1728)",
94
+ "cause": "Accessing theme by ID from document scope",
95
+ "fix": "Get theme from application scope: 'theme id \"...\" of application \"Keynote\"'"
96
+ },
97
+ {
98
+ "error": "Can't make string into type document (-1700) when setting password",
99
+ "cause": "AppleScript cannot set password property directly",
100
+ "fix": "Password setting is UI-only via File > Set Password... dialog"
101
+ },
102
+ {
103
+ "error": "Can't make none into type constant (-1700) for transition effect",
104
+ "cause": "Using 'none' as transition effect constant",
105
+ "fix": "Use 'no transition effect' as the keyword for no transition"
106
+ },
107
+ {
108
+ "error": "Expected ',' or '}' but found ':' (-2741) in transition properties",
109
+ "cause": "Using abbreviated key names like 'duration:' instead of full names",
110
+ "fix": "Use full property names: 'transition duration', 'transition delay', 'transition effect', 'automatic transition'"
111
+ },
112
+ {
113
+ "error": "Keynote got an error: '.mov' or '.mp4' (6)",
114
+ "cause": "Attempting to export as QuickTime movie",
115
+ "fix": "Video export not supported via AppleScript in current Keynote version. Use File > Export To > Movie via UI."
116
+ },
117
+ {
118
+ "error": "Security filter blocked: string concatenation containing 'script'",
119
+ "cause": "ScreenHand security filter blocks AppleScript with 'script' in concatenated strings",
120
+ "fix": "Avoid concatenating the word 'script' in string expressions. Restructure to use separate variables."
121
+ },
122
+ {
123
+ "error": "Can't get name of slide N (-1728)",
124
+ "cause": "Slides in Keynote don't have a 'name' property",
125
+ "fix": "Use 'slide number' for identifier, 'object text of default title item' for the title text"
126
+ },
127
+ {
128
+ "error": "App com.apple.Music not running",
129
+ "context": "tool: platform_explore, domain: native:com.apple.iWork.Keynote",
130
+ "solution": "No resolution yet — investigate and update this entry",
131
+ "severity": "medium"
132
+ }
133
+ ]
134
+ }
@@ -0,0 +1,431 @@
1
+ {
2
+ "id": "mail",
3
+ "name": "Mail — Auto-Generated Reference",
4
+ "platform": "mail",
5
+ "bundleId": "com.apple.mail",
6
+ "shortcuts": {
7
+ "Apple": {
8
+ "AXMenu > Force Quit…": "Option+Cmd+⎋",
9
+ "AXMenu > Force Quit Mail": "Option+Shift+Cmd+⎋",
10
+ "AXMenu > Lock Screen": "Ctrl+Cmd+Q",
11
+ "AXMenu > Log Out khushi goyal…": "Shift+Cmd+Q",
12
+ "AXMenu > Log Out khushi goyal": "Option+Shift+Cmd+Q"
13
+ },
14
+ "Mail": {
15
+ "AXMenu > Settings…": "Cmd+,",
16
+ "AXMenu > Hide Mail": "Cmd+H",
17
+ "AXMenu > Hide Others": "Option+Cmd+H",
18
+ "AXMenu > Quit Mail": "Cmd+Q",
19
+ "AXMenu > Quit and Keep Windows": "Option+Cmd+Q"
20
+ },
21
+ "File": {
22
+ "AXMenu > New Message": "Cmd+N",
23
+ "AXMenu > New Viewer Window": "Option+Cmd+N",
24
+ "AXMenu > New Viewer Tab": "Option+Shift+Cmd+N",
25
+ "AXMenu > Open Messages": "Cmd+O",
26
+ "AXMenu > Close": "Cmd+W",
27
+ "AXMenu > Close All": "Option+Cmd+W",
28
+ "AXMenu > Save": "Cmd+S",
29
+ "AXMenu > Save As…": "Shift+Cmd+S",
30
+ "AXMenu > Attach Files…": "Shift+Cmd+A",
31
+ "AXMenu > Quick Look Attachments…": "Cmd+Y",
32
+ "AXMenu > Print…": "Cmd+P"
33
+ },
34
+ "Edit": {
35
+ "AXMenu > Undo": "Cmd+Z",
36
+ "AXMenu > Redo": "Shift+Cmd+Z",
37
+ "AXMenu > Cut": "Cmd+X",
38
+ "AXMenu > Copy": "Cmd+C",
39
+ "AXMenu > Paste": "Cmd+V",
40
+ "AXMenu > Delete": "Cmd+\b",
41
+ "AXMenu > Select All": "Cmd+A",
42
+ "AXMenu > Complete": "Option+Cmd+\u001b",
43
+ "AXMenu > Paste as Quotation": "Shift+Cmd+V",
44
+ "AXMenu > Paste and Match Style": "Option+Shift+Cmd+V",
45
+ "AXMenu > Append Selected Messages": "Option+Cmd+I",
46
+ "AXMenu > Add Link…": "Cmd+K",
47
+ "AXMenu > Remove Link": "Option+Cmd+K",
48
+ "AXMenu > Find > AXMenu > Mailbox Search": "Option+Cmd+F",
49
+ "AXMenu > Find > AXMenu > Find…": "Cmd+F",
50
+ "AXMenu > Find > AXMenu > Find Next": "Cmd+G",
51
+ "AXMenu > Find > AXMenu > Find Previous": "Shift+Cmd+G",
52
+ "AXMenu > Find > AXMenu > Use Selection for Find": "Cmd+E",
53
+ "AXMenu > Find > AXMenu > Jump to Selection": "Cmd+J",
54
+ "AXMenu > Find > AXMenu > Jump to Top": "Ctrl+Cmd+T",
55
+ "AXMenu > Spelling and Grammar > AXMenu > Show Spelling and Grammar": "Cmd+:",
56
+ "AXMenu > Spelling and Grammar > AXMenu > Check Document Now": "Cmd+;",
57
+ "AXMenu > Start Dictation…": "Cmd+🎤",
58
+ "AXMenu > Emoji & Symbols": "Cmd+🌐"
59
+ },
60
+ "View": {
61
+ "AXMenu > Filter > AXMenu > Enable Message Filter": "Cmd+L",
62
+ "AXMenu > Bcc Address Field": "Option+Cmd+B",
63
+ "AXMenu > Reply-To Address Field": "Option+Cmd+R",
64
+ "AXMenu > Message > AXMenu > All Headers": "Shift+Cmd+H",
65
+ "AXMenu > Message > AXMenu > Raw Source": "Option+Cmd+U",
66
+ "AXMenu > Hide Sidebar": "Ctrl+Cmd+S",
67
+ "AXMenu > Hide Toolbar": "Option+Cmd+T",
68
+ "AXMenu > Show Favorites Bar": "Option+Shift+Cmd+H",
69
+ "AXMenu > Enter Full Screen": "Ctrl+Cmd+F"
70
+ },
71
+ "Mailbox": {
72
+ "AXMenu > Get New Mail": "Shift+Cmd+N",
73
+ "AXMenu > Erase Deleted Items > AXMenu > In All Accounts…": "Shift+Cmd+\b",
74
+ "AXMenu > Erase Deleted Items > AXMenu > In All Accounts": "Option+Shift+Cmd+\b",
75
+ "AXMenu > Erase Junk Mail": "Option+Cmd+J",
76
+ "AXMenu > Go to Favorite Mailbox > AXMenu > Inbox": "Cmd+1",
77
+ "AXMenu > Go to Favorite Mailbox > AXMenu > Flagged": "Cmd+2",
78
+ "AXMenu > Go to Favorite Mailbox > AXMenu > Drafts": "Cmd+3",
79
+ "AXMenu > Go to Favorite Mailbox > AXMenu > Sent": "Cmd+4",
80
+ "AXMenu > Move to Favorite Mailbox > AXMenu > Inbox": "Ctrl+Cmd+1",
81
+ "AXMenu > Move to Favorite Mailbox > AXMenu > Flagged": "Ctrl+Cmd+2",
82
+ "AXMenu > Move to Favorite Mailbox > AXMenu > Drafts": "Ctrl+Cmd+3",
83
+ "AXMenu > Move to Favorite Mailbox > AXMenu > Sent": "Ctrl+Cmd+4",
84
+ "AXMenu > Go to Previous Mailbox": "Ctrl+Cmd+[",
85
+ "AXMenu > Go to Previous Unread Mailbox": "Ctrl+Option+Cmd+[",
86
+ "AXMenu > Go to Next Mailbox": "Ctrl+Cmd+]",
87
+ "AXMenu > Go to Next Unread Mailbox": "Ctrl+Option+Cmd+]"
88
+ },
89
+ "Message": {
90
+ "AXMenu > Send Again": "Shift+Cmd+D",
91
+ "AXMenu > Reply": "Cmd+R",
92
+ "AXMenu > Reply All": "Shift+Cmd+R",
93
+ "AXMenu > Forward": "Shift+Cmd+F",
94
+ "AXMenu > Redirect": "Shift+Cmd+E",
95
+ "AXMenu > Mark as Unread": "Shift+Cmd+U",
96
+ "AXMenu > Move to Junk": "Shift+Cmd+J",
97
+ "AXMenu > Unmute": "Ctrl+Shift+Cmd+M",
98
+ "AXMenu > Flag > AXMenu > Toggle Flag": "Shift+Cmd+L",
99
+ "AXMenu > Archive": "Ctrl+Cmd+A",
100
+ "AXMenu > Move to Predicted Mailbox": "Ctrl+Cmd+M",
101
+ "AXMenu > Apply Rules": "Option+Cmd+L"
102
+ },
103
+ "Format": {
104
+ "AXMenu > Show Fonts": "Cmd+T",
105
+ "AXMenu > Show Colors": "Shift+Cmd+C",
106
+ "AXMenu > Style > AXMenu > Bold": "Cmd+B",
107
+ "AXMenu > Style > AXMenu > Italic": "Cmd+I",
108
+ "AXMenu > Style > AXMenu > Underline": "Cmd+U",
109
+ "AXMenu > Style > AXMenu > Bigger": "Cmd++",
110
+ "AXMenu > Style > AXMenu > Smaller": "Cmd+-",
111
+ "AXMenu > Style > AXMenu > Copy Style": "Option+Cmd+C",
112
+ "AXMenu > Style > AXMenu > Paste Style": "Option+Cmd+V",
113
+ "AXMenu > Alignment > AXMenu > Align Left": "Cmd+{",
114
+ "AXMenu > Alignment > AXMenu > Center": "Cmd+|",
115
+ "AXMenu > Alignment > AXMenu > Align Right": "Cmd+}",
116
+ "AXMenu > Indentation > AXMenu > Increase": "Cmd+]",
117
+ "AXMenu > Indentation > AXMenu > Decrease": "Cmd+[",
118
+ "AXMenu > Quote Level > AXMenu > Increase": "Cmd+'",
119
+ "AXMenu > Quote Level > AXMenu > Decrease": "Option+Cmd+'",
120
+ "AXMenu > Make Rich Text": "Shift+Cmd+T"
121
+ },
122
+ "Window": {
123
+ "AXMenu > Minimize": "Cmd+M",
124
+ "AXMenu > Minimize All": "Option+Cmd+M",
125
+ "AXMenu > Fill": "Ctrl+Cmd+F",
126
+ "AXMenu > Center": "Ctrl+Cmd+C",
127
+ "AXMenu > Move & Resize > AXMenu > Return to Previous Size": "Ctrl+Cmd+R",
128
+ "AXMenu > Message Viewer": "Cmd+0",
129
+ "AXMenu > Show Previous Tab": "Ctrl+Shift+Cmd+\t",
130
+ "AXMenu > Show Next Tab": "Ctrl+Cmd+\t",
131
+ "AXMenu > Activity": "Option+Cmd+0"
132
+ },
133
+ "Help": {}
134
+ },
135
+ "selectors": {},
136
+ "flows": {},
137
+ "errors": [],
138
+ "websiteFeatures": [
139
+ {
140
+ "id": "get_started_with_mail",
141
+ "name": "Get Started with Mail",
142
+ "description": "Set up Mail and start sending, receiving, and managing all your email accounts from one app.",
143
+ "sourceHeading": "Get Started with Mail",
144
+ "level": "grandmaster"
145
+ },
146
+ {
147
+ "id": "reduce_the_noise",
148
+ "name": "Reduce the noise",
149
+ "description": "Keep your inbox and attention focused by blocking emails from specific people or groups.",
150
+ "sourceHeading": "Reduce the noise",
151
+ "level": "pro"
152
+ },
153
+ {
154
+ "id": "stay_organized_with_categories",
155
+ "name": "Stay organized with categories",
156
+ "description": "Mail automatically sorts your messages into categories—Primary, Transactions, Updates, and Promotions.",
157
+ "sourceHeading": "Stay organized with categories",
158
+ "level": "pro"
159
+ },
160
+ {
161
+ "id": "find_the_perfect_words",
162
+ "name": "Find the perfect words",
163
+ "description": "With Apple Intelligence*, you can use Writing Tools to summarize selected text with a click, proofread your work, and find just the right wording and tone.",
164
+ "sourceHeading": "Find the perfect words",
165
+ "level": "pro"
166
+ },
167
+ {
168
+ "id": "mail_user_guide",
169
+ "name": "Mail User Guide",
170
+ "description": "Mail User Guide",
171
+ "sourceHeading": "Mail User Guide",
172
+ "level": "beginner"
173
+ },
174
+ {
175
+ "id": "apple_footer",
176
+ "name": "Apple Footer",
177
+ "description": "Apple Footer",
178
+ "sourceHeading": "Apple Footer",
179
+ "level": "beginner"
180
+ },
181
+ {
182
+ "id": "welcome",
183
+ "name": "Welcome",
184
+ "description": "Welcome",
185
+ "sourceHeading": "Welcome",
186
+ "level": "beginner"
187
+ }
188
+ ],
189
+ "mastery": "expert",
190
+ "masteryNotes": "50+ features verified live across 2 sessions. Core: compose/reply/forward/flag/archive/junk/search/rules/categories/smart mailbox/export PDF. Advanced: Full Screen, Tab management (New Viewer Tab/Merge All), Move to Predicted Mailbox, live send via AppleScript, Signatures create/delete, Undo Send 10s delay, Forward as Attachment/Redirect, Remind Me, Set Priority, Mute/Unmute, Categorize Sender, Raw Source, Sort By, Column Layout, Favorites Bar. 108 shortcuts, 483 menu items mapped. Known bugs: platform_explore crash, Don't Save apostrophe, focus tool error (all workarounded).",
191
+ "testedOn": "2026-03-24",
192
+ "selectors": {
193
+ "compose": {
194
+ "newMessage": "Cmd+N",
195
+ "toField": "AXTextField[To:]",
196
+ "subjectField": "AXTextField[Subject:]",
197
+ "bodyArea": "AXTextArea (body)",
198
+ "bccToggle": "Option+Cmd+B",
199
+ "replyToToggle": "Option+Cmd+R",
200
+ "attachFiles": "Shift+Cmd+A",
201
+ "addLink": "Cmd+K",
202
+ "sendButton": "AXButton[Send]",
203
+ "saveDraft": "Cmd+S"
204
+ },
205
+ "messageActions": {
206
+ "reply": "Cmd+R",
207
+ "replyAll": "Shift+Cmd+R",
208
+ "forward": "Shift+Cmd+F",
209
+ "archive": "Ctrl+Cmd+A",
210
+ "flag": "Shift+Cmd+L",
211
+ "markUnread": "Shift+Cmd+U",
212
+ "moveToJunk": "Shift+Cmd+J",
213
+ "exportPDF": "File/Export as PDF…"
214
+ },
215
+ "navigation": {
216
+ "inbox": "Cmd+1",
217
+ "flagged": "Cmd+2",
218
+ "drafts": "Cmd+3",
219
+ "sent": "Cmd+4",
220
+ "search": "Option+Cmd+F",
221
+ "filterToggle": "Cmd+L",
222
+ "sidebarToggle": "Ctrl+Cmd+S"
223
+ },
224
+ "settings": {
225
+ "open": "Cmd+,",
226
+ "rulesTab": "AXButton[Rules]",
227
+ "signaturesTab": "AXButton[Signatures]",
228
+ "junkMailTab": "AXButton[Junk Mail]"
229
+ },
230
+ "utilities": {
231
+ "activityWindow": "Option+Cmd+0",
232
+ "connectionDoctor": "Window/Connection Doctor",
233
+ "photoBrowser": "Window/Photo Browser",
234
+ "previousRecipients": "Window/Previous Recipients"
235
+ },
236
+ "tabs": {
237
+ "newViewerTab": "Option+Shift+Cmd+N",
238
+ "showNextTab": "Ctrl+Cmd+Tab",
239
+ "showPreviousTab": "Ctrl+Shift+Cmd+Tab",
240
+ "mergeAllWindows": "Window/Merge All Windows"
241
+ },
242
+ "windowManagement": {
243
+ "enterFullScreen": "Ctrl+Cmd+F",
244
+ "exitFullScreen": "Ctrl+Cmd+F"
245
+ }
246
+ },
247
+ "flows": {
248
+ "compose_and_save_draft": {
249
+ "steps": [
250
+ "key: Cmd+N",
251
+ "type To address, Tab",
252
+ "type Subject, Tab",
253
+ "type body",
254
+ "key: Cmd+S to save as draft"
255
+ ],
256
+ "verified": true
257
+ },
258
+ "reply_to_message": {
259
+ "steps": [
260
+ "click message in list",
261
+ "key: Cmd+R",
262
+ "type reply body",
263
+ "key: Cmd+S or send"
264
+ ],
265
+ "verified": true
266
+ },
267
+ "forward_message": {
268
+ "steps": [
269
+ "click message in list",
270
+ "key: Shift+Cmd+F",
271
+ "type To address",
272
+ "send"
273
+ ],
274
+ "verified": true
275
+ },
276
+ "search_messages": {
277
+ "steps": [
278
+ "key: Option+Cmd+F",
279
+ "type search query",
280
+ "results show Top Hits + All Results with smart suggestions"
281
+ ],
282
+ "verified": true
283
+ },
284
+ "create_smart_mailbox": {
285
+ "steps": [
286
+ "menu: Mailbox/New Smart Mailbox…",
287
+ "set name and conditions",
288
+ "click OK"
289
+ ],
290
+ "verified": true
291
+ },
292
+ "export_message_as_pdf": {
293
+ "steps": [
294
+ "select a message",
295
+ "menu: File/Export as PDF…",
296
+ "choose save location",
297
+ "click Save"
298
+ ],
299
+ "verified": true
300
+ },
301
+ "enable_categories": {
302
+ "steps": [
303
+ "navigate to Inbox",
304
+ "click 'Try Categories' in prompt",
305
+ "inbox now shows Primary/Transactions/Updates/Promotions tabs"
306
+ ],
307
+ "verified": true
308
+ },
309
+ "manage_rules": {
310
+ "steps": [
311
+ "menu: Mail/Settings…",
312
+ "click Rules tab",
313
+ "Add Rule / Edit / Remove"
314
+ ],
315
+ "verified": true
316
+ },
317
+ "send_email_applescript": {
318
+ "steps": [
319
+ "tell application Mail",
320
+ "make new outgoing message with properties {subject:..., content:..., visible:true}",
321
+ "make new to recipient with properties {address:...}",
322
+ "send newMsg"
323
+ ],
324
+ "verified": true,
325
+ "notes": "Returns true on success. Undo Send delay (10s) applies."
326
+ },
327
+ "full_screen": {
328
+ "steps": [
329
+ "key: Ctrl+Cmd+F to enter full screen (menu bar disappears)",
330
+ "key: Ctrl+Cmd+F again to exit"
331
+ ],
332
+ "verified": true
333
+ },
334
+ "tab_management": {
335
+ "steps": [
336
+ "key: Option+Shift+Cmd+N — New Viewer Tab (tab bar appears)",
337
+ "key: Ctrl+Cmd+Tab — Show Next Tab",
338
+ "menu: Window/Merge All Windows — consolidate windows to tabs",
339
+ "key: Ctrl+Cmd+W — close current tab"
340
+ ],
341
+ "verified": true
342
+ },
343
+ "manage_signatures": {
344
+ "steps": [
345
+ "menu: Mail/Settings… (Cmd+,)",
346
+ "click Signatures tab",
347
+ "click + button (button 1 of group 1 of splitter group 1) to create",
348
+ "click - button (button 2) to delete",
349
+ "Signature dropdown appears in compose window as AXPopUpButton[Signature:]"
350
+ ],
351
+ "verified": true,
352
+ "notes": "3-column layout: All Signatures | Account | Preview. Default content is name + email."
353
+ },
354
+ "message_advanced_actions": {
355
+ "steps": [
356
+ "Forward as Attachment: Message/Forward as Attachment (verified)",
357
+ "Redirect: Shift+Cmd+E (verified)",
358
+ "Remind Me: Message/Remind Me submenu — 1 Hour / Tonight / Tomorrow / Later (verified)",
359
+ "Set Priority: Message/Set Priority — Low/Normal/High (verified)",
360
+ "Mute: Message/Mute → menu changes to Unmute (verified via Ctrl+Shift+Cmd+M)",
361
+ "Categorize Sender: Message/Categorize Sender submenu (verified)",
362
+ "Move to Predicted Mailbox: Ctrl+Cmd+M (executes silently, verified)"
363
+ ],
364
+ "verified": true
365
+ },
366
+ "raw_source": {
367
+ "steps": [
368
+ "select a message",
369
+ "menu: View/Message/Raw Source (Option+Cmd+U)",
370
+ "opens in separate window showing full SMTP headers + raw body"
371
+ ],
372
+ "verified": true
373
+ },
374
+ "sort_and_layout": {
375
+ "steps": [
376
+ "Sort By: View/Sort By → Attachments/Date/From/Subject/Flags/Size/To/Unread (verified)",
377
+ "Column Layout: View/Use Column Layout (verified)",
378
+ "Bottom Preview: View/Show Side Preview (verified)",
379
+ "Favorites Bar: View/Show Favorites Bar → Option+Shift+Cmd+H (verified)"
380
+ ],
381
+ "verified": true
382
+ }
383
+ },
384
+ "errors": {
385
+ "platform_explore_crash": {
386
+ "description": "platform_explore fails with 'App com.apple.mail not running' even when app is running",
387
+ "workaround": "Use ui_tree(pid) + scan_menu_bar(pid) instead for exploration",
388
+ "observed": "2026-03-23"
389
+ },
390
+ "dont_save_apostrophe": {
391
+ "description": "ui_press cannot find AXButton \"Don't Save\" — curly apostrophe causes selector mismatch",
392
+ "workaround": "Use AppleScript: `click button 2 of sheet 1 of window \"New Message\"` (button index is stable: 1=Save, 2=Don't Save, 3=Cancel)",
393
+ "observed": "2026-03-24"
394
+ },
395
+ "focus_tool_error": {
396
+ "description": "focus tool throws 'playbook.errors is not iterable' for com.apple.mail",
397
+ "workaround": "Non-blocking error — tool still works. Or use AppleScript to activate: `tell application \"Mail\" to activate`",
398
+ "observed": "2026-03-24"
399
+ }
400
+ },
401
+ "valueAddFeatures": [
402
+ {
403
+ "id": "auto_organize",
404
+ "name": "Auto-Organize",
405
+ "description": "Sort and organize Mail items by content, date, or type",
406
+ "category": "organization",
407
+ "level": "expert"
408
+ },
409
+ {
410
+ "id": "smart_search",
411
+ "name": "Smart Search",
412
+ "description": "Search across all Mail content with pattern matching",
413
+ "category": "organization",
414
+ "level": "pro"
415
+ },
416
+ {
417
+ "id": "summarize_all",
418
+ "name": "Summarize",
419
+ "description": "Read and summarize all Mail content",
420
+ "category": "intelligence",
421
+ "level": "expert"
422
+ },
423
+ {
424
+ "id": "change_monitor",
425
+ "name": "Change Monitor",
426
+ "description": "Monitor Mail for changes and notify",
427
+ "category": "monitoring",
428
+ "level": "grandmaster"
429
+ }
430
+ ]
431
+ }