orval
Generate type-safe API clients, TanStack Query/SWR hooks, Zod schemas, MSW mocks, Hono server handlers, MCP servers, and…
Generate macOS/iOS Shortcuts by creating plist files. Use when asked to create shortcuts, automate workflows, build .shortcut files, or generate Shortcuts plists. Covers 1,155 actions (427 WF*Actions + 728 AppIntents), variable references, and control flow.
Claude Code
$ npx -y skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill --agent claude-code
Codex
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a codex -y
Cursor
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a cursor -y
Gemini CLI
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a gemini-cli -y
GitHub Copilot
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a github-copilot -y
OpenCode
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a opencode -y
Windsurf
$ npx skills add drewocarr/generate-shortcuts-skill --skill generate-shortcuts-skill -a windsurf -y
name: shortcuts-generator description: Generate macOS/iOS Shortcuts by creating plist files. Use when asked to create shortcuts, automate workflows, build .shortcut files, or generate Shortcuts plists. Covers 1,155 actions (427 WF*Actions + 728 AppIntents), variable references, and control flow. allowed-tools: Write, Bash
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:
To use output from a previous action: 1. The source action needs a `UUID` parameter 2. Reference it using `OutputUUID` in an `attachmentsByRange` dictionary 3. Use `` (U+FFFC) as placeholder in the string where the variable goes 4. Set `WFSerializationType` to `WFTextTokenString`
Control flow actions (repeat, conditional, menu) use:
| 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:
A Claude Code skill that enables AI-assisted generation of macOS/iOS Shortcuts. Create valid .shortcut plist files that can be signed and imported into Apple's Shortcuts app.
Generate type-safe API clients, TanStack Query/SWR hooks, Zod schemas, MSW mocks, Hono server handlers, MCP servers, and…
Use the Modern Go Guidelines CLI whenever writing, modifying, fixing, or refactoring Go code. Apply its version-specific guidance…
Use this skill when the user is building against Anthropic APIs or SDKs, including `@anthropic-ai/sdk`, `anthropic`, or Agent SDK…
Writing or converting formatted output in ripwire's C++ source — std::print/std::format via rw::emitTo, emitRaw and formatTo,…