/shortcut
Creating Apple Shortcuts programmatically as plist XML files. Use when the user wants to build, generate, or author Apple Shortcuts without the GUI app.
$ npx -y skills add bendrucker/claude --skill shortcut --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/shortcut
Context preview
The summary Claude sees to decide when to auto-load this skill.
Creating Apple Shortcuts programmatically as plist XML files. Use when the user wants to build, generate, or author Apple Shortcuts without the GUI app.
SKILL.md
shortcut.SKILL.mdname: shortcuts:shortcut
description: Creating Apple Shortcuts programmatically as plist XML files. Use when the user wants to build, generate, or author Apple Shortcuts without the GUI app.
disable-model-invocation: true
allowed-tools:
- Read
- Write
- Edit
- "Bash(swift ${CLAUDE_SKILL_DIR}/scripts/discover.swift:*)"
- Bash(plutil:*)
- Bash(shortcuts:*)
- Bash(open:*)
- Bash(jq:*)
- Bash(uname:*)
- Bash(which:*)
- Glob
- Grep
hooks:
PreToolUse:
- matcher: "Bash(swift ${CLAUDE_SKILL_DIR}/scripts/discover.swift:*)|Bash(shortcuts:*)"
hooks:
- type: command
command: |
cat | jq '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: {dangerouslyDisableSandbox: true}}}'Apple Shortcuts
Generate Apple Shortcuts as XML property list files.
Environment
- **OS**: !`uname -s`
- **shortcuts CLI**: !`which shortcuts 2>/dev/null && echo "available" || echo "not available"`
If the OS is **Darwin** (macOS), use the discovery CLI and the full deployment pipeline (convert, sign, import, run). If **Linux**, generate XML only — signing and import are unavailable; inform the user.
Discovery
**On macOS**, use the discovery CLI to find actions: see [references/discovery.md](references/discovery.md)
**On any platform**, use the static action catalog: see [references/actions.md](references/actions.md)
Generation
Write the shortcut as an XML plist. Load references as needed.
- **Starting a shortcut?** See [references/plist-structure.md](references/plist-structure.md) for top-level keys, icon, types
- **Writing control flow?** See [references/control-flow.md](references/control-flow.md) for if/else, repeat, menu XML
- **Passing data between actions?** See [references/variables.md](references/variables.md) for set/get, output UUIDs
- **Complex parameter values?** See [references/parameters.md](references/parameters.md) for serialization types
Minimal template:
<?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>WFWorkflowMinimumClientVersionString</key>
<string>900</string>
<key>WFWorkflowMinimumClientVersion</key>
<integer>900</integer>
<key>WFWorkflowClientVersion</key>
<string>2702</string>
<key>WFWorkflowIcon</key>
<dict>
<key>WFWorkflowIconStartColor</key>
<integer>463140863</integer>
<key>WFWorkflowIconGlyphNumber</key>
<integer>59511</integer>
</dict>
<key>WFWorkflowTypes</key>
<array>
<string>MenuBar</string>
</array>
<key>WFWorkflowInputContentItemClasses</key>
<array/>
<key>WFWorkflowActions</key>
<array>
<!-- actions go here -->
</array>
</dict>
</plist>Key conventions:
- **UUIDs**: Control flow and variable references use v4 UUIDs. Generate a fresh one for each linkage.
- **Variables**: Prefer `Set Variable` / `Get Variable` over inline `WFTextTokenString`.
- **Action output**: Add `UUID` and `CustomOutputName` to an action's parameters to capture its output.
Deployment (macOS only)
See [references/deployment.md](references/deployment.md) for the full pipeline: convert, sign, import, iterate.
Quick reference:
plutil -convert binary1 -o "My Shortcut.shortcut" "My Shortcut.plist"
mkdir -p out
shortcuts sign -i "My Shortcut.shortcut" -o "out/My Shortcut.shortcut"
open "out/My Shortcut.shortcut"
Constraints
- Signing requires macOS. No way to sign on Linux.
- Shortcuts must be signed before import.
- No public action spec. Use discovery on macOS; use static references elsewhere.
References
- **[references/discovery.md](references/discovery.md)** — Swift CLI for enumerating actions, app inspection
- **[references/actions.md](references/actions.md)** — Static catalog of common built-in actions
- **[references/plist-structure.md](references/plist-structure.md)** — Top-level keys, icon colors, workflow types
- **[references/control-flow.md](references/control-flow.md)** — If/else, repeat, menu with full XML examples
- **[references/variables.md](references/variables.md)** — Set/Get variable, output UUIDs, token strings
- **[references/parameters.md](references/parameters.md)** — Value types, serialization, dictionary encoding
- **[references/deployment.md](references/deployment.md)** — plutil, shortcuts sign, import via open, iteration
Read more
name: shortcuts:shortcut
description: Creating Apple Shortcuts programmatically as plist XML files. Use when the user wants to build, generate, or author Apple Shortcuts without the GUI app.
disable-model-invocation: true
allowed-tools:
- Read
- Write
- Edit
- "Bash(swift ${CLAUDE_SKILL_DIR}/scripts/discover.swift:*)"
- Bash(plutil:*)
- Bash(shortcuts:*)
- Bash(open:*)
- Bash(jq:*)
- Bash(uname:*)
- Bash(which:*)
- Glob
- Grep
hooks:
PreToolUse:
- matcher: "Bash(swift ${CLAUDE_SKILL_DIR}/scripts/discover.swift:*)|Bash(shortcuts:*)"
hooks:
- type: command
command: |
cat | jq '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: {dangerouslyDisableSandbox: true}}}'Apple Shortcuts
Generate Apple Shortcuts as XML property list files.
Environment
- **OS**: !`uname -s`
- **shortcuts CLI**: !`which shortcuts 2>/dev/null && echo "available" || echo "not available"`
If the OS is **Darwin** (macOS), use the discovery CLI and the full deployment pipeline (convert, sign, import, run). If **Linux**, generate XML only — signing and import are unavailable; inform the user.
Discovery
**On macOS**, use the discovery CLI to find actions: see [references/discovery.md](references/discovery.md)
**On any platform**, use the static action catalog: see [references/actions.md](references/actions.md)
Generation
Write the shortcut as an XML plist. Load references as needed.
- **Starting a shortcut?** See [references/plist-structure.md](references/plist-structure.md) for top-level keys, icon, types
- **Writing control flow?** See [references/control-flow.md](references/control-flow.md) for if/else, repeat, menu XML
- **Passing data between actions?** See [references/variables.md](references/variables.md) for set/get, output UUIDs
- **Complex parameter values?** See [references/parameters.md](references/parameters.md) for serialization types
Minimal template:
<?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>WFWorkflowMinimumClientVersionString</key>
<string>900</string>
<key>WFWorkflowMinimumClientVersion</key>
<integer>900</integer>
<key>WFWorkflowClientVersion</key>
<string>2702</string>
<key>WFWorkflowIcon</key>
<dict>
<key>WFWorkflowIconStartColor</key>
<integer>463140863</integer>
<key>WFWorkflowIconGlyphNumber</key>
<integer>59511</integer>
</dict>
<key>WFWorkflowTypes</key>
<array>
<string>MenuBar</string>
</array>
<key>WFWorkflowInputContentItemClasses</key>
<array/>
<key>WFWorkflowActions</key>
<array>
<!-- actions go here -->
</array>
</dict>
</plist>Key conventions:
- **UUIDs**: Control flow and variable references use v4 UUIDs. Generate a fresh one for each linkage.
- **Variables**: Prefer `Set Variable` / `Get Variable` over inline `WFTextTokenString`.
- **Action output**: Add `UUID` and `CustomOutputName` to an action's parameters to capture its output.
Deployment (macOS only)
See [references/deployment.md](references/deployment.md) for the full pipeline: convert, sign, import, iterate.
Quick reference:
plutil -convert binary1 -o "My Shortcut.shortcut" "My Shortcut.plist" mkdir -p out shortcuts sign -i "My Shortcut.shortcut" -o "out/My Shortcut.shortcut" open "out/My Shortcut.shortcut"
Constraints
- Signing requires macOS. No way to sign on Linux.
- Shortcuts must be signed before import.
- No public action spec. Use discovery on macOS; use static references elsewhere.
References
- **[references/discovery.md](references/discovery.md)** — Swift CLI for enumerating actions, app inspection
- **[references/actions.md](references/actions.md)** — Static catalog of common built-in actions
- **[references/plist-structure.md](references/plist-structure.md)** — Top-level keys, icon colors, workflow types
- **[references/control-flow.md](references/control-flow.md)** — If/else, repeat, menu with full XML examples
- **[references/variables.md](references/variables.md)** — Set/Get variable, output UUIDs, token strings
- **[references/parameters.md](references/parameters.md)** — Value types, serialization, dictionary encoding
- **[references/deployment.md](references/deployment.md)** — plutil, shortcuts sign, import via open, iteration
My personal plugin marketplace for Claude Code, Anthropic's AI coding assistant.
Repo: bendrucker/claude
Other skills on bendrucker-claude.
cleye
Type-safe CLI argument parsing with cleye, the standard parser for this repo's Bun scripts. Use when writing or editing any script that takes arguments (flags,…
activity
Report real device usage from ActivityWatch. Covers per-app time, window titles, and active vs idle spans. Use when asked "what apps did I use", "how long was…
history
Report shell history from atuin's local capture. Covers what commands ran, when, where, and how they exited. Use when asked "what commands did I run", "what…
bun
Bun runtime patterns. Use when running bun commands, working with package.json/bun.lock, writing TypeScript scripts under Bun, or developing Claude Code…
agent-team
Orchestrating Claude Code agent teams. Use when creating teams, spawning teammates, assigning tasks, configuring teammate modes, or setting up team quality…

