From sundial-org-awesome-openclaw-skills-4
Generates macOS/iOS Shortcuts by creating plist files. Covers 1,155 actions, variable references, and control flow for automating workflows.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sundial-org-awesome-openclaw-skills-4:shortcuts-generatorThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate valid `.shortcut` files that can be signed and imported into Apple's Shortcuts app.
Generate valid .shortcut files that can be signed and imported into Apple's Shortcuts app.
A shortcut is a binary plist with this structure:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>WFWorkflowActions</key>
<array>
<!-- Actions go here -->
</array>
<key>WFWorkflowClientVersion</key>
<string>2700.0.4</string>
<key>WFWorkflowHasOutputFallback</key>
<false/>
<key>WFWorkflowIcon</key>
<dict>
<key>WFWorkflowIconGlyphNumber</key>
<integer>59511</integer>
<key>WFWorkflowIconStartColor</key>
<integer>4282601983</integer>
</dict>
<key>WFWorkflowImportQuestions</key>
<array/>
<key>WFWorkflowMinimumClientVersion</key>
<integer>900</integer>
<key>WFWorkflowMinimumClientVersionString</key>
<string>900</string>
<key>WFWorkflowName</key>
<string>My Shortcut</string>
<key>WFWorkflowOutputContentItemClasses</key>
<array/>
<key>WFWorkflowTypes</key>
<array/>
</dict>
</plist>
<dict>
<key>WFWorkflowActionIdentifier</key>
<string>is.workflow.actions.gettext</string>
<key>WFWorkflowActionParameters</key>
<dict>
<key>UUID</key>
<string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
<key>WFTextActionText</key>
<string>Hello World!</string>
</dict>
</dict>
<dict>
<key>WFWorkflowActionIdentifier</key>
<string>is.workflow.actions.showresult</string>
<key>WFWorkflowActionParameters</key>
<dict>
<key>Text</key>
<dict>
<key>Value</key>
<dict>
<key>attachmentsByRange</key>
<dict>
<key>{0, 1}</key>
<dict>
<key>OutputName</key>
<string>Text</string>
<key>OutputUUID</key>
<string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
<key>Type</key>
<string>ActionOutput</string>
</dict>
</dict>
<key>string</key>
<string></string>
</dict>
<key>WFSerializationType</key>
<string>WFTextTokenString</string>
</dict>
</dict>
</dict>
Every action has:
is.workflow.actions.<name> (e.g., is.workflow.actions.showresult)WFWorkflowActionParametersTo use output from a previous action:
UUID parameterOutputUUID in an attachmentsByRange dictionary (U+FFFC) as placeholder in the string where the variable goesWFSerializationType to WFTextTokenStringControl flow actions (repeat, conditional, menu) use:
GroupingIdentifier: UUID linking start/middle/end actionsWFControlFlowMode: 0=start, 1=middle (else/case), 2=end| Action | Identifier | Key Parameters |
|---|---|---|
| Text | is.workflow.actions.gettext | WFTextActionText |
| Show Result | is.workflow.actions.showresult | Text |
| Ask for Input | is.workflow.actions.ask | WFAskActionPrompt, WFInputType |
| Use AI Model | is.workflow.actions.askllm | WFLLMPrompt, WFLLMModel, WFGenerativeResultType |
| Comment | is.workflow.actions.comment | WFCommentActionText |
| URL | is.workflow.actions.url | WFURLActionURL |
| Get Contents of URL | is.workflow.actions.downloadurl | WFURL, WFHTTPMethod |
| Get Weather | is.workflow.actions.weather.currentconditions | (none required) |
| Open App | is.workflow.actions.openapp | WFAppIdentifier |
| Open URL | is.workflow.actions.openurl | WFInput |
| Alert | is.workflow.actions.alert | WFAlertActionTitle, WFAlertActionMessage |
| Notification | is.workflow.actions.notification | WFNotificationActionTitle, WFNotificationActionBody |
| Set Variable | is.workflow.actions.setvariable | WFVariableName, WFInput |
| Get Variable | is.workflow.actions.getvariable | WFVariable |
| Number | is.workflow.actions.number | WFNumberActionNumber |
| List | is.workflow.actions.list | WFItems |
| Dictionary | is.workflow.actions.dictionary | WFItems |
| Repeat (count) | is.workflow.actions.repeat.count | WFRepeatCount, GroupingIdentifier, WFControlFlowMode |
| Repeat (each) | is.workflow.actions.repeat.each | WFInput, GroupingIdentifier, WFControlFlowMode |
| If/Otherwise | is.workflow.actions.conditional | WFInput, WFCondition, GroupingIdentifier, WFControlFlowMode |
| Choose from Menu | is.workflow.actions.choosefrommenu | WFMenuPrompt, WFMenuItems, GroupingIdentifier, WFControlFlowMode |
| Find Photos | is.workflow.actions.filter.photos | WFContentItemFilter (see FILTERS.md) |
| Delete Photos | is.workflow.actions.deletephotos | photos (NOT WFInput!) |
For complete documentation, see:
Shortcuts MUST be signed before they can be imported. Use the macOS shortcuts CLI:
# Sign for anyone to use
shortcuts sign --mode anyone --input MyShortcut.shortcut --output MyShortcut_signed.shortcut
# Sign for people who know you
shortcuts sign --mode people-who-know-me --input MyShortcut.shortcut --output MyShortcut_signed.shortcut
The signing process:
.shortcut fileshortcuts sign to add cryptographic signature (~19KB added)OutputUUID.shortcut (XML plist format is fine)shortcuts sign to make it importableA1B2C3D4-E5F6-7890-ABCD-EF1234567890<integer>0</integer> not <string>0</string>{position, length} - e.g., {0, 1} for first character (U+FFFC) marks where variables are insertedGroupingIdentifiernpx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-2 --plugin sundial-org-awesome-openclaw-skills-4Build, validate, sign, and remix macOS/iOS Shortcuts by creating plist files. Use for automating workflows, generating .shortcut files, or modifying existing shortcuts.
Generates Apple Shortcuts as plist XML files programmatically without the GUI app. Supports macOS deployment (discovery, convert, sign, import) and Linux XML export.
Provides summaries and file paths from App Intents docs for Siri, Shortcuts, Spotlight integration and exposing app functionality in iOS/macOS apps.