Apple shortcuts
π§ Modular skills for autonomous AI agents. Production-ready Docker & Kubernetes tooling with built-in validators. Install once, use everywhere.
npx -y skills add obeone/claude-skills --skill apple-shortcutsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate importable Apple Shortcuts (.shortcut / plist XML) for macOS and iOS. Use this skill whenever the user wants to create, modify, reverse-engineer, or understand Apple Shortcuts, including native actions, third-party app integrations (Actions, Data Jar, Toolbox Pro, Scriptable, a-Shell, Jayson, Pushcut), automations, and complex control flow. Trigger on mentions of "shortcut", "raccourci", "workflow iOS/macOS", ".shortcut file", "Apple automation", or any request to produce a file the user can import into the Shortcuts app.
SKILL.md
12.0 KB, as published. Nobody here has run it
Apple Shortcuts
Generate plist XML that the Shortcuts app imports. Targets macOS 12+ and iOS 15+. Use this skill for creation, modification, reverse engineering, and reference lookups.
Critical upfront fact: signing
Since iOS 15 / macOS 12, Shortcuts refuses unsigned files. This skill produces plist XML. Delivery to the user requires one of:
- macOS 12+: run
shortcuts sign -i in.plist -o out.shortcut -m anyoneto produce a distributable.shortcut. The user double-clicks or runsopen -a Shortcuts out.shortcut. - macOS, manual route: open the plist in Shortcuts.app (rename to
.shortcutfirst), re-save β Shortcuts re-signs it. - iOS, no signing toolchain: the user must receive a signed
.shortcutvia iCloud share link (https://www.icloud.com/ shortcuts/...), AirDrop, or Messages. Unsigned plist XML cannot be imported on iOS.
State this cost to the user before generating. If they lack macOS, the deliverable is XML plus instructions; full binary signing without macOS is a rabbit hole this skill does not enter.
See gotchas/signing-and-sharing.md for the full story.
Quickstart (three steps)
1. Identify the action set
If you know the action by name but not its identifier:
./tools/find-action-identifier.py "send message"
If you need to discover an unknown third-party action on macOS:
./tools/list-app-intents.py --bundle com.example.app
If you need the full native action catalog:
./tools/list-native-actions.py
2. Generate the plist
Consult references in this order:
references/plist-format.mdfor the envelope and top-level keys.references/variables-and-types.mdfor magic variable wiring.references/actions-native-*.mdfor concrete action schemas.patterns/*.mdif the task matches a known pattern.templates/*.plistas starting points.
Write the plist as XML. Every action dict must carry at minimum
WFWorkflowActionIdentifier and WFWorkflowActionParameters.
3. Validate and deliver
./tools/validate-shortcut.py path/to/shortcut.plist
Fix any errors. Then either sign on macOS or instruct the user to.
Progressive disclosure table
Load only the files your current task needs. This table maps request types to files.
| Request contains | Load |
|---|---|
| "how do I make a shortcut that..." | patterns/ + relevant actions-*.md |
| "what's the identifier for X action" | actions-native-full-index.md or find |
| "why won't my shortcut import" | gotchas/signing-and-sharing.md |
| "what does this .shortcut file do" | tools/inspect-shortcut.py |
| "call an API / fetch JSON" | patterns/http-api-calls.md |
| "show a menu to the user" | patterns/user-input.md |
| "run another shortcut" | patterns/shortcuts-chaining.md |
| "personal automation / trigger" | patterns/automation-triggers.md |
| "use <third-party app> action" | third-party/<app>.md |
| "variables aren't working" | references/variables-and-types.md |
| "compare two shortcuts" | tools/diff-actions.py |
| "what actions are in WorkflowKit" | tools/list-native-actions.py |
Canonical generation workflow
- Detect target platform. iOS-only, macOS-only, or cross-platform shapes the action set. Shell Script, AppleScript, JXA, and window management are macOS-only. Health, HomeKit scene execution, and camera actions are iOS-only.
- Resolve identifiers. Every action string must be real. If an
identifier is unverified, mark it
β unverifiedin your plan and prefer a verified alternative. - Load references. Pull in only the specific
references/*.mdandthird-party/*.mdyou need. Do not eagerly load the full catalog. - Generate the plist. Emit the XML envelope, icon dict,
WFWorkflowActionsarray. Assign a UUID to every action whose output is referenced later. Wire magic variables viaattachmentsByRangeusing{position, length}strings and theU+FFFCobject replacement character (seereferences/variables-and-types.md). - Validate. Run
tools/validate-shortcut.py. Do not skip this step. - Deliver with import instructions. Provide the three import paths (macOS CLI, macOS GUI, iOS), noting the signing requirement explicitly.
Minimum viable plist shape
<?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>WFWorkflowClientVersion</key>
<string>2607.0.3</string>
<key>WFWorkflowMinimumClientVersion</key>
<integer>900</integer>
<key>WFWorkflowMinimumClientVersionString</key>
<string>900</string>
<key>WFWorkflowIcon</key>
<dict>
<key>WFWorkflowIconGlyphNumber</key>
<integer>59511</integer>
<key>WFWorkflowIconStartColor</key>
<integer>463140863</integer>
</dict>
<key>WFWorkflowImportQuestions</key>
<array/>
<key>WFWorkflowInputContentItemClasses</key>
<array>
<string>WFStringContentItem</string>
</array>
<key>WFWorkflowTypes</key>
<array/>
<key>WFWorkflowActions</key>
<array>
<dict>
<key>WFWorkflowActionIdentifier</key>
<string>is.workflow.actions.gettext</string>
<key>WFWorkflowActionParameters</key>
<dict>
<key>WFTextActionText</key>
<string>Hello from Claude</string>
</dict>
</dict>
<dict>
<key>WFWorkflowActionIdentifier</key>
<string>is.workflow.actions.showresult</string>
<key>WFWorkflowActionParameters</key>
<dict>
<key>Text</key>
<string>Hello from Claude</string>
</dict>
</dict>
</array>
</dict>
</plist>
This is templates/minimal-shortcut.plist. It imports after signing.
Import methods (three paths)
macOS, CLI (requires macOS 12+)
# Save plist with .shortcut extension
mv out.plist out.shortcut
# Sign it for public sharing
shortcuts sign -i out.shortcut -o out.signed.shortcut -m anyone
# Open in Shortcuts.app to complete import
open -a Shortcuts out.signed.shortcut
Signing modes:
anyoneβ distributable via any channel; lax trust.people-who-know-meβ requires recipient to be in Contacts.
macOS, drag and drop
mv out.plist out.shortcut
open -a Shortcuts out.shortcut
Shortcuts.app imports, signs locally, and stores in
~/Library/Shortcuts/.
iOS, iCloud / AirDrop
There is no iOS signing toolchain. The user must receive a shortcut that was signed on macOS. Paths:
- iCloud share link β sign on macOS, upload to iCloud, share the
https://www.icloud.com/shortcuts/<uuid>link. Recipient taps link, Shortcuts opens. - AirDrop a signed
.shortcutfile from macOS to iOS. - Email / Messages attachment of a signed
.shortcutfile.
If the user is iOS-only and has no macOS device, the skill cannot fully close the loop. Deliver the plist XML and document the gap.
Reference files inventory
references/plist-format.mdβ envelope, top-level keys, content item classes, XML rules.references/variables-and-types.mdβ magic variables,attachmentsByRange, serialization types, coercion.references/control-flow.mdβ If, Repeat, Choose from Menu,GroupingIdentifier,WFControlFlowMode.references/actions-native-core.mdβ Text, Dictionary, List, Variables, Scripting, Device.references/actions-native-web.mdβ URL, Get Contents of URL, JSON parsing, headers, authentication.references/actions-native-files.mdβ Files, Photos, Documents, archive, hash.references/actions-native-communication.mdβ Messages, Mail, Notifications, Speak Text.references/actions-native-automation.mdβ Automations, triggers, focus, personal vs home.references/actions-native-full-index.mdβ Flat identifier index, fallback lookup.
Third-party catalog
third-party/actions-app.mdβ Sindre Sorhus's Actions (OSS, free, covers ~80% of gaps).third-party/data-jar.mdβ Simon StΓΈvring's persistent key-value store.third-party/toolbox-pro.mdβ Alex Hay's advanced utilities.third-party/scriptable.mdβ JavaScript bridge.third-party/a-shell.mdβ iOS shell bridge.third-party/jayson.mdβ JSON manipulation.third-party/pushcut.mdβ Automation server, webhooks.third-party/discovery-pattern.mdβ Reverse engineer any unknown third-party app's actions.
Patterns
patterns/http-api-calls.mdβ REST calls, auth headers, pagination.patterns/json-parsing.mdβ Dictionary access, Get Dictionary Value.patterns/error-handling.mdβ Exit, fallback, validation.patterns/user-input.mdβ Ask, Choose from Menu, Show Alert.patterns/shortcuts-chaining.mdβ Run Shortcut with parameters, output passing.patterns/automation-triggers.mdβ Personal automation, Home, limits, confirmation.
Gotchas
gotchas/platform-differences.mdβ iOS vs macOS vs watchOS action availability.gotchas/signing-and-sharing.mdβ iOS 15+ signing requirement, share links, trust prompts.gotchas/common-pitfalls.mdβ Variable scope, UUID duplicates, magic variable binding bugs.gotchas/performance.mdβ Action limits, timeouts, Get Contents of URL failure modes.
Tools
tools/validate-shortcut.pyβ Validate a plist. Check syntax, required keys, identifier existence, variable referencing.tools/inspect-shortcut.pyβ Dump a.shortcutor.plistas structured JSON or human-readable list.tools/list-native-actions.pyβ ExtractWFWorkflowActionIdentifiervalues from WorkflowKit.framework (macOS) or fall back to embedded index.tools/list-app-intents.pyβ Scan installed apps for App Intents metadata and enumerate their Shortcuts actions.tools/find-action-identifier.pyβ Fuzzy search for an action by name across native and known third-party catalogs.tools/diff-actions.pyβ Semantic diff between two shortcuts (action-by-action, reorder-aware).tools/README.mdβ Script inventory, usage examples, exit codes.
Hard rules
- No invention. If an identifier, parameter key, or version number
is not verified, mark it
β unverifiedin output and suggest the user confirm viatools/list-native-actions.pyor by round-tripping through Shortcuts.app. - One source of truth per fact. Identifier strings live in
actions-native-full-index.mdandthird-party/*.md; prose references link there rather than re-state. - Templates are importable. Every file in
templates/passesplutil -lintandtools/validate-shortcut.py. - English-only in code and documentation. User-facing prose in chat may be in the user's language; files in this skill are English.
When the request is ambiguous
Before generating, resolve:
- Target platform β iOS only, macOS only, or both.
- Trigger β manual run, share sheet, personal automation, Home automation, menu bar (macOS).
- Input β no input, Shortcut Input, explicit prompt (Ask for Input).
- Output β none, Show Result, Quick Look, return to caller.
- Third-party dependencies β any action outside
is.workflow.actions.*?
Do not guess. Ask the user for any of the five that remain unclear after reading the request.