/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.
- 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.
- /agent-ideas
Harvest agent-tooling ideas from prominent developers.
Open skill - /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, positional parameters, subcommands, --help) instead of reading existing scripts for the pattern.
Open skill - /coverage
Measure Bun test coverage and close gaps on a specific file. Use when adding or editing tests, when asked about coverage, or when the PostToolUse coverage hook reports uncovered lines.
Open skill - /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 I in X", "what did I work on today", "how much was I active vs idle", or to mine usage patterns for automation.
Open skill - /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 was I working on in the terminal", "have I ever run X", "how do I usually invoke X", or about recent shell activity,
Open skill - /bun
Bun runtime patterns. Use when running bun commands, working with package.json/bun.lock, writing TypeScript scripts under Bun, or developing Claude Code plugins.
Open skill

