shortcuts-playground 1.2.1
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.
- package/README.md +54 -0
- package/agents/shortcut-builder.md +172 -0
- package/agents/shortcut-remixer.md +239 -0
- package/commands/build-shortcut.md +32 -0
- package/commands/remix-shortcut.md +34 -0
- package/opencode.json +30 -0
- package/package.json +47 -0
- package/plugin/validator.ts +179 -0
- package/skills/shortcuts-playground/ACTIONS.md +713 -0
- package/skills/shortcuts-playground/APPINTENTS.md +2760 -0
- package/skills/shortcuts-playground/AUTOMATION_TRIGGERS.md +133 -0
- package/skills/shortcuts-playground/BEST_PRACTICES.md +357 -0
- package/skills/shortcuts-playground/CHANGELOG.md +585 -0
- package/skills/shortcuts-playground/CONTROL_FLOW.md +777 -0
- package/skills/shortcuts-playground/DATE_TIME.md +75 -0
- package/skills/shortcuts-playground/EXAMPLES.md +738 -0
- package/skills/shortcuts-playground/FILTERS.md +697 -0
- package/skills/shortcuts-playground/HEALTHKIT.md +317 -0
- package/skills/shortcuts-playground/ICONS_AND_COLORS.md +89 -0
- package/skills/shortcuts-playground/JAVASCRIPT_WEBPAGE.md +51 -0
- package/skills/shortcuts-playground/PARAMETER_TYPES.md +1117 -0
- package/skills/shortcuts-playground/PLIST_FORMAT.md +296 -0
- package/skills/shortcuts-playground/README.md +77 -0
- package/skills/shortcuts-playground/SKILL.md +459 -0
- package/skills/shortcuts-playground/THIRD_PARTY_ACTIONS.md +77 -0
- package/skills/shortcuts-playground/TOOLKIT_SNAPSHOT.md +62 -0
- package/skills/shortcuts-playground/URL_SCHEMES.md +59 -0
- package/skills/shortcuts-playground/VARIABLES.md +569 -0
- package/skills/shortcuts-playground/assets/shortcuts-small.svg +14 -0
- package/skills/shortcuts-playground/assets/shortcuts.png +0 -0
- package/skills/shortcuts-playground/data/healthkit-ios26.2-reference.json +2603 -0
- package/skills/shortcuts-playground/data/macos27-shortpy-grounding.json +4085 -0
- package/skills/shortcuts-playground/data/macos27-workflow-trigger-samples.json +1 -0
- package/skills/shortcuts-playground/data/shortcuts-glyph-synonyms.json +5102 -0
- package/skills/shortcuts-playground/data/shortcuts-icon-colors.json +107 -0
- package/skills/shortcuts-playground/data/shortcuts-official-glyph-mapping.json +509 -0
- package/skills/shortcuts-playground/data/toolkit-v63-tool-ids.json +1806 -0
- package/skills/shortcuts-playground/data/toolkit-v78-first-party-enum-cases.json +1 -0
- package/skills/shortcuts-playground/data/toolkit-v78-first-party-parameter-keys.json +1 -0
- package/skills/shortcuts-playground/data/toolkit-v78-ios27-tool-ids.json +1222 -0
- package/skills/shortcuts-playground/data/toolkit-v78-tool-ids.json +2745 -0
- package/skills/shortcuts-playground/data/toolkit-v78-trigger-parameter-keys.json +1051 -0
- package/skills/shortcuts-playground/golden-shortcuts/index.jsonl +19 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/1be4dde95b794253bf82438e201b33e7.xml +174 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/2e0fb675e45948aaacee7e534f910492.xml +1016 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/332c12a0060043b388b22b806be7ab58.xml +1924 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/3dd4ee24e43f464f92adaa70a0311eaa.xml +1177 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/4d102301c6e646faa7a8a221f4f4ec98.xml +321 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/51cc4e26d1044893a0c3f2f3630cf2d2.xml +1933 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/623e7f1ca5f948e2bd53811fec63e544.xml +136 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/6a18b76843ac45c384ac3400f3740997.xml +1791 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/71f0cacb0f604b399b76c5dcb7286e7c.xml +2228 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/807525ed9f974829bc8494defac923a8.xml +259 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/8ab0d39826ab4249be58672763caa3ba.xml +420 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/91c45fd3fd3b427897d9ba485efb1227.xml +800 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/97be626bb25c41709d175646a7f6d8f2.xml +424 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/ae59e10d409348f9bd33894f03f9beb4.xml +568 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/afa83b6be811483b9c32189c41eb9312.xml +391 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/cfdb083b857e4ac189629fa386d27cdc.xml +193 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/e01cebe192d64b2fbca80204d03d92ab.xml +111 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/ef669bcf8bad489d9ef4b88bfaf5772f.xml +780 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/f44f5caf5e3e48d4817e73af450c4404.xml +570 -0
- package/skills/shortcuts-playground/scripts/generate_healthkit_reference.py +394 -0
- package/skills/shortcuts-playground/scripts/lookup_action_grounding.py +1164 -0
- package/skills/shortcuts-playground/scripts/select_shortcut_icon_color.py +597 -0
- package/skills/shortcuts-playground/scripts/test_random_mixed_shortcuts.py +1067 -0
- package/skills/shortcuts-playground/scripts/test_wiring_regressions.py +2247 -0
- package/skills/shortcuts-playground/scripts/validate_shortcut.py +4526 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# Shortcut Plist Format
|
|
2
|
+
|
|
3
|
+
Complete documentation of the `.shortcut` file structure.
|
|
4
|
+
|
|
5
|
+
**Related docs:**
|
|
6
|
+
- [ACTIONS.md](./ACTIONS.md) - Action identifiers and parameters
|
|
7
|
+
- [FILTERS.md](./FILTERS.md) - Content filters for Find/Filter actions
|
|
8
|
+
- [PARAMETER_TYPES.md](./PARAMETER_TYPES.md) - All parameter value types
|
|
9
|
+
- [VARIABLES.md](./VARIABLES.md) - Variable references and outputs
|
|
10
|
+
- [CONTROL_FLOW.md](./CONTROL_FLOW.md) - Conditionals, loops, menus
|
|
11
|
+
|
|
12
|
+
## Root Structure
|
|
13
|
+
|
|
14
|
+
A `.shortcut` file is a binary plist (can be written as XML, then converted). The root is a dictionary with these keys:
|
|
15
|
+
|
|
16
|
+
```xml
|
|
17
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
18
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
19
|
+
<plist version="1.0">
|
|
20
|
+
<dict>
|
|
21
|
+
<!-- REQUIRED -->
|
|
22
|
+
<key>WFWorkflowActions</key>
|
|
23
|
+
<array>
|
|
24
|
+
<!-- Array of action dictionaries -->
|
|
25
|
+
</array>
|
|
26
|
+
|
|
27
|
+
<!-- REQUIRED - Version info -->
|
|
28
|
+
<key>WFWorkflowClientVersion</key>
|
|
29
|
+
<string>2700.0.4</string>
|
|
30
|
+
<key>WFWorkflowClientRelease</key>
|
|
31
|
+
<string>26A0000a</string>
|
|
32
|
+
<key>WFWorkflowMinimumClientVersion</key>
|
|
33
|
+
<integer>900</integer>
|
|
34
|
+
<key>WFWorkflowMinimumClientVersionString</key>
|
|
35
|
+
<string>900</string>
|
|
36
|
+
|
|
37
|
+
<!-- REQUIRED - Icon -->
|
|
38
|
+
<key>WFWorkflowIcon</key>
|
|
39
|
+
<dict>
|
|
40
|
+
<key>WFWorkflowIconGlyphNumber</key>
|
|
41
|
+
<integer>61440</integer>
|
|
42
|
+
<key>WFWorkflowIconStartColor</key>
|
|
43
|
+
<integer>431817727</integer>
|
|
44
|
+
</dict>
|
|
45
|
+
|
|
46
|
+
<!-- OPTIONAL - Shortcut name (displayed in app) -->
|
|
47
|
+
<key>WFWorkflowName</key>
|
|
48
|
+
<string>My Shortcut</string>
|
|
49
|
+
|
|
50
|
+
<!-- OPTIONAL - Usually empty arrays -->
|
|
51
|
+
<key>WFWorkflowHasOutputFallback</key>
|
|
52
|
+
<false/>
|
|
53
|
+
<key>WFWorkflowImportQuestions</key>
|
|
54
|
+
<array/>
|
|
55
|
+
<key>WFWorkflowOutputContentItemClasses</key>
|
|
56
|
+
<array/>
|
|
57
|
+
<key>WFWorkflowTypes</key>
|
|
58
|
+
<array/>
|
|
59
|
+
|
|
60
|
+
<!-- OPTIONAL - Input content types accepted -->
|
|
61
|
+
<key>WFWorkflowInputContentItemClasses</key>
|
|
62
|
+
<array>
|
|
63
|
+
<string>WFStringContentItem</string>
|
|
64
|
+
<string>WFURLContentItem</string>
|
|
65
|
+
<!-- ... more content types ... -->
|
|
66
|
+
</array>
|
|
67
|
+
</dict>
|
|
68
|
+
</plist>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Root Keys Reference
|
|
72
|
+
|
|
73
|
+
| Key | Type | Required | Description |
|
|
74
|
+
|-----|------|----------|-------------|
|
|
75
|
+
| `WFWorkflowActions` | Array | Yes | Array of action dictionaries |
|
|
76
|
+
| `WFWorkflowClientVersion` | String | Yes | Client version (e.g., "2700.0.4") |
|
|
77
|
+
| `WFWorkflowClientRelease` | String | No | Release identifier |
|
|
78
|
+
| `WFWorkflowMinimumClientVersion` | Integer | Yes | Minimum version number (900+) |
|
|
79
|
+
| `WFWorkflowMinimumClientVersionString` | String | Yes | String version of minimum |
|
|
80
|
+
| `WFWorkflowIcon` | Dict | Yes | Icon configuration |
|
|
81
|
+
| `WFWorkflowName` | String | No | Display name |
|
|
82
|
+
| `WFWorkflowHasOutputFallback` | Boolean | No | Has output fallback |
|
|
83
|
+
| `WFWorkflowImportQuestions` | Array | No | Import-time questions |
|
|
84
|
+
| `WFWorkflowInputContentItemClasses` | Array | No | Accepted input types |
|
|
85
|
+
| `WFWorkflowOutputContentItemClasses` | Array | No | Output types |
|
|
86
|
+
| `WFWorkflowTypes` | Array | No | Workflow types |
|
|
87
|
+
| `WFWorkflowHasShortcutInputVariables` | Boolean | No | True if shortcut uses input variables |
|
|
88
|
+
| `WFWorkflowIsDisabledOnLockScreen` | Boolean | No | Prevents execution from Lock Screen |
|
|
89
|
+
| `WFWorkflowQuickActionSurfaces` | Array | No | Surfaces where shortcut appears as quick action |
|
|
90
|
+
|
|
91
|
+
## Icon Configuration
|
|
92
|
+
|
|
93
|
+
```xml
|
|
94
|
+
<key>WFWorkflowIcon</key>
|
|
95
|
+
<dict>
|
|
96
|
+
<key>WFWorkflowIconGlyphNumber</key>
|
|
97
|
+
<integer>61440</integer>
|
|
98
|
+
<key>WFWorkflowIconStartColor</key>
|
|
99
|
+
<integer>431817727</integer>
|
|
100
|
+
</dict>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Use the resolver and data files documented in [ICONS_AND_COLORS.md](./ICONS_AND_COLORS.md) to pick icon values.
|
|
104
|
+
|
|
105
|
+
### Required Icon Keys
|
|
106
|
+
|
|
107
|
+
| Key | Type | Required | Notes |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| `WFWorkflowIconGlyphNumber` | Integer | Yes | One of the official 507 Shortcuts glyph codes |
|
|
110
|
+
| `WFWorkflowIconStartColor` | Integer | Yes | One of the 15 Shortcuts palette colors (canonical or alias integer) |
|
|
111
|
+
|
|
112
|
+
### Common Glyph Numbers
|
|
113
|
+
|
|
114
|
+
| Glyph | Number | Description |
|
|
115
|
+
|---|---:|---|
|
|
116
|
+
| shortcuts | `61440` | Default/fallback app icon |
|
|
117
|
+
| cloud | `59714` | Weather/cloud workflows |
|
|
118
|
+
| map | `61444` | Navigation/location workflows |
|
|
119
|
+
| checklist | `61587` | Tasks/todo workflows |
|
|
120
|
+
| dollarSign | `59395` | Finance/expense workflows |
|
|
121
|
+
| command | `61529` | Developer/terminal workflows |
|
|
122
|
+
| robot | `61566` | AI assistant workflows |
|
|
123
|
+
| paperAirplane | `59836` | Send/share workflows |
|
|
124
|
+
|
|
125
|
+
### Color Values (Shortcuts Palette)
|
|
126
|
+
|
|
127
|
+
Colors are 32-bit integers. Canonical values:
|
|
128
|
+
|
|
129
|
+
| Color | Value | Hex |
|
|
130
|
+
|---|---:|---|
|
|
131
|
+
| Red | `4282601983` | `#F36F74` |
|
|
132
|
+
| Orange | `4251333119` | `#FF8E73` |
|
|
133
|
+
| Yellow | `4271458815` | `#F8AE5F` |
|
|
134
|
+
| Gold | `4274264319` | `#E8CA45` |
|
|
135
|
+
| Green | `4292093695` | `#53CD6B` |
|
|
136
|
+
| Teal | `431817727` | `#57CFB4` |
|
|
137
|
+
| Cyan | `1440408063` | `#5ACCDE` |
|
|
138
|
+
| Blue | `463140863` | `#24BAF7` |
|
|
139
|
+
| Navy | `946986751` | `#5874CA` |
|
|
140
|
+
| Purple | `2071128575` | `#9164C7` |
|
|
141
|
+
| Lavender | `3679049983` | `#C085E6` |
|
|
142
|
+
| Pink | `3980825855` | `#F694D8` |
|
|
143
|
+
| Gray | `255` | `#9099A3` |
|
|
144
|
+
| Sage | `3031607807` | `#9DA79D` |
|
|
145
|
+
| Tan | `2846468607` | `#A49995` |
|
|
146
|
+
|
|
147
|
+
## Action Structure
|
|
148
|
+
|
|
149
|
+
Each action in `WFWorkflowActions` is a dictionary:
|
|
150
|
+
|
|
151
|
+
```xml
|
|
152
|
+
<dict>
|
|
153
|
+
<key>WFWorkflowActionIdentifier</key>
|
|
154
|
+
<string>is.workflow.actions.showresult</string>
|
|
155
|
+
<key>WFWorkflowActionParameters</key>
|
|
156
|
+
<dict>
|
|
157
|
+
<!-- Action-specific parameters -->
|
|
158
|
+
<key>UUID</key>
|
|
159
|
+
<string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
|
|
160
|
+
<!-- ... more parameters ... -->
|
|
161
|
+
</dict>
|
|
162
|
+
</dict>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Action Keys
|
|
166
|
+
|
|
167
|
+
| Key | Type | Required | Description |
|
|
168
|
+
|-----|------|----------|-------------|
|
|
169
|
+
| `WFWorkflowActionIdentifier` | String | Yes | Action identifier (e.g., `is.workflow.actions.showresult`) |
|
|
170
|
+
| `WFWorkflowActionParameters` | Dict | Yes | Action configuration |
|
|
171
|
+
|
|
172
|
+
### Common Parameter Keys
|
|
173
|
+
|
|
174
|
+
| Key | Type | Description |
|
|
175
|
+
|-----|------|-------------|
|
|
176
|
+
| `UUID` | String | Unique ID for referencing this action's output |
|
|
177
|
+
| `GroupingIdentifier` | String | Links control flow actions (repeat, if, menu) |
|
|
178
|
+
| `WFControlFlowMode` | Integer | 0=start, 1=middle, 2=end |
|
|
179
|
+
|
|
180
|
+
## Input Content Item Classes
|
|
181
|
+
|
|
182
|
+
These define what input types the shortcut accepts:
|
|
183
|
+
|
|
184
|
+
```xml
|
|
185
|
+
<key>WFWorkflowInputContentItemClasses</key>
|
|
186
|
+
<array>
|
|
187
|
+
<string>WFAppStoreAppContentItem</string>
|
|
188
|
+
<string>WFArticleContentItem</string>
|
|
189
|
+
<string>WFContactContentItem</string>
|
|
190
|
+
<string>WFDateContentItem</string>
|
|
191
|
+
<string>WFEmailAddressContentItem</string>
|
|
192
|
+
<string>WFGenericFileContentItem</string>
|
|
193
|
+
<string>WFImageContentItem</string>
|
|
194
|
+
<string>WFiTunesProductContentItem</string>
|
|
195
|
+
<string>WFLocationContentItem</string>
|
|
196
|
+
<string>WFDCMapsLinkContentItem</string>
|
|
197
|
+
<string>WFAVAssetContentItem</string>
|
|
198
|
+
<string>WFPDFContentItem</string>
|
|
199
|
+
<string>WFPhoneNumberContentItem</string>
|
|
200
|
+
<string>WFRichTextContentItem</string>
|
|
201
|
+
<string>WFSafariWebPageContentItem</string>
|
|
202
|
+
<string>WFStringContentItem</string>
|
|
203
|
+
<string>WFURLContentItem</string>
|
|
204
|
+
</array>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Binary vs XML Plist
|
|
208
|
+
|
|
209
|
+
Shortcuts are stored as binary plists but can be created as XML:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Convert XML to binary (optional - signing handles this)
|
|
213
|
+
plutil -convert binary1 MyShortcut.shortcut
|
|
214
|
+
|
|
215
|
+
# Convert binary to XML (for inspection)
|
|
216
|
+
plutil -convert xml1 MyShortcut.shortcut
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
The `shortcuts sign` command accepts both formats.
|
|
220
|
+
|
|
221
|
+
## Complete Template
|
|
222
|
+
|
|
223
|
+
```xml
|
|
224
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
225
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
226
|
+
<plist version="1.0">
|
|
227
|
+
<dict>
|
|
228
|
+
<key>WFWorkflowActions</key>
|
|
229
|
+
<array>
|
|
230
|
+
<dict>
|
|
231
|
+
<key>WFWorkflowActionIdentifier</key>
|
|
232
|
+
<string>is.workflow.actions.gettext</string>
|
|
233
|
+
<key>WFWorkflowActionParameters</key>
|
|
234
|
+
<dict>
|
|
235
|
+
<key>UUID</key>
|
|
236
|
+
<string>11111111-1111-1111-1111-111111111111</string>
|
|
237
|
+
<key>WFTextActionText</key>
|
|
238
|
+
<string>Hello World!</string>
|
|
239
|
+
</dict>
|
|
240
|
+
</dict>
|
|
241
|
+
<dict>
|
|
242
|
+
<key>WFWorkflowActionIdentifier</key>
|
|
243
|
+
<string>is.workflow.actions.showresult</string>
|
|
244
|
+
<key>WFWorkflowActionParameters</key>
|
|
245
|
+
<dict>
|
|
246
|
+
<key>Text</key>
|
|
247
|
+
<dict>
|
|
248
|
+
<key>Value</key>
|
|
249
|
+
<dict>
|
|
250
|
+
<key>attachmentsByRange</key>
|
|
251
|
+
<dict>
|
|
252
|
+
<key>{0, 1}</key>
|
|
253
|
+
<dict>
|
|
254
|
+
<key>OutputName</key>
|
|
255
|
+
<string>Text</string>
|
|
256
|
+
<key>OutputUUID</key>
|
|
257
|
+
<string>11111111-1111-1111-1111-111111111111</string>
|
|
258
|
+
<key>Type</key>
|
|
259
|
+
<string>ActionOutput</string>
|
|
260
|
+
</dict>
|
|
261
|
+
</dict>
|
|
262
|
+
<key>string</key>
|
|
263
|
+
<string></string>
|
|
264
|
+
</dict>
|
|
265
|
+
<key>WFSerializationType</key>
|
|
266
|
+
<string>WFTextTokenString</string>
|
|
267
|
+
</dict>
|
|
268
|
+
</dict>
|
|
269
|
+
</dict>
|
|
270
|
+
</array>
|
|
271
|
+
<key>WFWorkflowClientVersion</key>
|
|
272
|
+
<string>2700.0.4</string>
|
|
273
|
+
<key>WFWorkflowHasOutputFallback</key>
|
|
274
|
+
<false/>
|
|
275
|
+
<key>WFWorkflowIcon</key>
|
|
276
|
+
<dict>
|
|
277
|
+
<key>WFWorkflowIconGlyphNumber</key>
|
|
278
|
+
<integer>61440</integer>
|
|
279
|
+
<key>WFWorkflowIconStartColor</key>
|
|
280
|
+
<integer>431817727</integer>
|
|
281
|
+
</dict>
|
|
282
|
+
<key>WFWorkflowImportQuestions</key>
|
|
283
|
+
<array/>
|
|
284
|
+
<key>WFWorkflowMinimumClientVersion</key>
|
|
285
|
+
<integer>900</integer>
|
|
286
|
+
<key>WFWorkflowMinimumClientVersionString</key>
|
|
287
|
+
<string>900</string>
|
|
288
|
+
<key>WFWorkflowName</key>
|
|
289
|
+
<string>Hello World</string>
|
|
290
|
+
<key>WFWorkflowOutputContentItemClasses</key>
|
|
291
|
+
<array/>
|
|
292
|
+
<key>WFWorkflowTypes</key>
|
|
293
|
+
<array/>
|
|
294
|
+
</dict>
|
|
295
|
+
</plist>
|
|
296
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Shortcuts Playground Skill
|
|
2
|
+
|
|
3
|
+
Claude Code skill for AI-assisted generation and remixing of macOS/iOS Shortcuts. It produces valid Shortcuts plist XML, validates it with the bundled preflight validator, and signs it on macOS with Apple's `shortcuts` CLI through plugin-provided wrapper commands.
|
|
4
|
+
|
|
5
|
+
## Documentation Entry Points
|
|
6
|
+
|
|
7
|
+
- Start with [SKILL.md](SKILL.md) for workflow and high-level rules.
|
|
8
|
+
- Treat [BEST_PRACTICES.md](BEST_PRACTICES.md) as mandatory policy.
|
|
9
|
+
- Use [ACTIONS.md](ACTIONS.md), [APPINTENTS.md](APPINTENTS.md), and [THIRD_PARTY_ACTIONS.md](THIRD_PARTY_ACTIONS.md) as identifier references.
|
|
10
|
+
- Use [HEALTHKIT.md](HEALTHKIT.md) for iOS/iPadOS Health actions.
|
|
11
|
+
- Use [EXAMPLES.md](EXAMPLES.md) and `golden-shortcuts/index.jsonl` for working XML patterns.
|
|
12
|
+
|
|
13
|
+
## Claude Code Usage
|
|
14
|
+
|
|
15
|
+
Install the parent Claude Code plugin, then use either slash command:
|
|
16
|
+
|
|
17
|
+
- `/shortcuts-playground:build <brief>` creates a new shortcut from scratch.
|
|
18
|
+
- `/shortcuts-playground:remix <absolute-path-to-xml> <change>` applies a surgical diff to an existing unsigned XML shortcut.
|
|
19
|
+
|
|
20
|
+
The Claude package provides slash commands, specialized agents, a PostToolUse validation hook, and PATH wrapper commands:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
resolve-icon --prompt "Build a weather shortcut"
|
|
24
|
+
validate-shortcut /path/to/Shortcut.xml
|
|
25
|
+
sign-shortcut /path/to/Shortcut.xml --name "Shortcut Name"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`sign-shortcut` defaults to `CLAUDE_PLUGIN_OPTION_OUTPUT_DIR` or `~/Documents/Shortcuts Playground`, and `CLAUDE_PLUGIN_OPTION_SIGNING_MODE` or `anyone`.
|
|
29
|
+
|
|
30
|
+
If `shortcuts sign` reports that a validator-clean plist "isn't in the correct format", use the bundled signer wrapper or retry after binary plist conversion before assuming the XML is malformed. If XML and binary signing both fail, retry from an unrestricted shell and check filesystem permissions.
|
|
31
|
+
|
|
32
|
+
## What's Included
|
|
33
|
+
|
|
34
|
+
| File | Description |
|
|
35
|
+
|------|-------------|
|
|
36
|
+
| [SKILL.md](SKILL.md) | Skill definition with Claude Code workflow rules |
|
|
37
|
+
| [ACTIONS.md](ACTIONS.md) | WF*Action identifiers and parameters |
|
|
38
|
+
| [APPINTENTS.md](APPINTENTS.md) | AppIntent actions (ToolKit v63 base coverage plus target-gated v78 identifiers, parameters, enum values, and research notes) |
|
|
39
|
+
| [PARAMETER_TYPES.md](PARAMETER_TYPES.md) | Parameter value types and serialization formats |
|
|
40
|
+
| [PLIST_FORMAT.md](PLIST_FORMAT.md) | Complete plist structure |
|
|
41
|
+
| [BEST_PRACTICES.md](BEST_PRACTICES.md) | Mandatory generation guidelines |
|
|
42
|
+
| [HEALTHKIT.md](HEALTHKIT.md) | HealthKit action schemas and examples |
|
|
43
|
+
| [CONTROL_FLOW.md](CONTROL_FLOW.md) | Repeat, conditional, and menu patterns |
|
|
44
|
+
| [AUTOMATION_TRIGGERS.md](AUTOMATION_TRIGGERS.md) | OS 27 ToolKit automation trigger metadata plus exported `WFWorkflowTriggers` samples for automation shortcuts |
|
|
45
|
+
| [FILTERS.md](FILTERS.md) | Filter action predicates |
|
|
46
|
+
| [VARIABLES.md](VARIABLES.md) | Variable reference patterns |
|
|
47
|
+
| [ICONS_AND_COLORS.md](ICONS_AND_COLORS.md) | Icon glyph and color selection |
|
|
48
|
+
| [EXAMPLES.md](EXAMPLES.md) | Complete working examples |
|
|
49
|
+
| [URL_SCHEMES.md](URL_SCHEMES.md) | Shortcuts URL scheme and x-callback-url guidance |
|
|
50
|
+
| [JAVASCRIPT_WEBPAGE.md](JAVASCRIPT_WEBPAGE.md) | Run JavaScript on Webpage rules |
|
|
51
|
+
| [DATE_TIME.md](DATE_TIME.md) | Date/time recipes and custom format guidance |
|
|
52
|
+
| [THIRD_PARTY_ACTIONS.md](THIRD_PARTY_ACTIONS.md) | Third-party actions (ToolKit + backups) |
|
|
53
|
+
| [TOOLKIT_SNAPSHOT.md](TOOLKIT_SNAPSHOT.md) | Bundled ToolKit ID snapshots and field coverage |
|
|
54
|
+
| `scripts/select_shortcut_icon_color.py` | Natural-language icon/color resolver |
|
|
55
|
+
| `scripts/lookup_action_grounding.py` | Read-only lookup for reviewed Apple-derived macOS 27 Shortpy/WF mappings |
|
|
56
|
+
| `scripts/validate_shortcut.py` | Preflight validator |
|
|
57
|
+
| `scripts/test_wiring_regressions.py` | Deterministic validator regression suite |
|
|
58
|
+
| `scripts/test_random_mixed_shortcuts.py` | Random mixed-action validator suite |
|
|
59
|
+
| `data/toolkit-v63-tool-ids.json` | Bundled ToolKit v63 action-ID allowlist |
|
|
60
|
+
| `data/toolkit-v78-tool-ids.json` | Bundled macOS 27 ToolKit v78 action-ID allowlist, gated by validator target |
|
|
61
|
+
| `data/toolkit-v78-ios27-tool-ids.json` | Bundled iOS 27 Simulator ToolKit v78 action-ID allowlist, gated by validator target |
|
|
62
|
+
| `data/toolkit-v78-first-party-parameter-keys.json` | Target-gated OS 27 first-party parameter-key/name/type catalog for AppIntent schema checks |
|
|
63
|
+
| `data/toolkit-v78-first-party-enum-cases.json` | Static OS 27 enum-case catalog for ToolKit action and trigger parameter type names |
|
|
64
|
+
| `data/toolkit-v78-trigger-parameter-keys.json` | OS 27 ToolKit automation trigger IDs, Python names, parameter keys, and output types |
|
|
65
|
+
| `data/macos27-workflow-trigger-samples.json` | Sanitized exported `WFWorkflowTriggers` samples for OS 27 automation headers |
|
|
66
|
+
| `data/macos27-shortpy-grounding.json` | Reviewed static Apple-derived grounding catalog for macOS 27 action schemas and Shortpy names |
|
|
67
|
+
| `data/healthkit-ios26.2-reference.json` | HealthKit types, category values, workout types, and units |
|
|
68
|
+
|
|
69
|
+
## Requirements
|
|
70
|
+
|
|
71
|
+
- Python 3.10+ for validation.
|
|
72
|
+
- macOS with the built-in `shortcuts` CLI for signing.
|
|
73
|
+
- Claude Code with plugin support.
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
MIT
|