Create Apple Shortcuts with natural language using Claude Code or Codex. Shortcuts Playground is a plugin for Claude Code and Codex that lets you turn any idea into a shortcut for Apple's Shortcuts app.
> /plugin marketplace add viticci/shortcuts-playground-plugin> /plugin install shortcuts-playground@shortcuts-playground
What's inside


Create Apple Shortcuts with natural language using Claude Code or Codex.
Shortcuts Playground is a plugin for Claude Code and Codex that lets you turn any idea into a shortcut for Apple's Shortcuts app. Describe what you want in plain English; a few minutes later, you get a real, signed .shortcut file ready to import into the Shortcuts app.
Under the hood, shortcuts have always been XML files that get signed and encrypted into a special, Apple-only .shortcut format. Shortcuts Playground ships a comprehensive knowledge base that teaches Claude and Codex how Shortcuts actions work, what syntax they use, and how they connect to one another. Agents generate the XML, validate it through a loop, and sign it using Apple's native shortcuts CLI.
For OS 27-era Shortcuts, the plugin also ships target-gated ToolKit v78 action coverage from macOS 27 and iOS 27 Simulator, plus reviewed static Apple-derived grounding, parameter-key, enum-case, automation-trigger, and exported WFWorkflowTriggers catalogs. Those catalogs are generated from Apple's local ToolKit/ToolRenderer/WorkflowKit metadata and maintainer-exported shortcut XML, then packaged as JSON so existing users do not need macOS 27 or private Apple frameworks.
The result is a valid shortcut, built from a sentence.
A project by Federico Viticci. Read more here.β
v1.2.1 extends the early, opt-in macOS/iOS 27 support while keeping macOS 26 users on the existing validation surface by default.
WFWorkflowTriggers samples ship as static JSON; users do not need macOS 27 or private Apple frameworks installed.target_macos = "27" / SHORTCUTS_PLAYGROUND_TARGET_MACOS=27; default validation remains conservative for existing macOS 26 users.You can install Shortcuts Playground in either Claude Code or Codex. At the moment, the Claude Code version of the plugin offers a richer experience thanks to dedicated commands and agents.
/shortcuts-playground:build followed by a description of the shortcut you want. Claude designs the action list, wires variables, picks an icon, validates the XML through a self-correcting loop, and signs the result./shortcuts-playground:remix with a path to an unsigned .xml shortcut file and describe what to change. The agent applies a surgical diff β preserving every action, UUID, and icon you didn't ask to touch.PostToolUse hook on every file write. Codex can do the same when Codex plugin hooks are enabled with [features].plugin_hooks = true. Errors feed back into the agent's context so it can fix them before signing. This is called a Craig Loop. It adds a few seconds of latency but dramatically improves output quality.shortcuts CLI, which is macOS-only.brew install python3) or set SHORTCUTS_PLAYGROUND_PYTHON to point at your interpreter.Two commands. Run them from any directory:
# 1. Register the marketplace
claude plugin marketplace add https://github.com/viticci/shortcuts-playground-plugin
# 2. Install the plugin
claude plugin install shortcuts-playground@shortcuts-playground
Claude Code clones the repository into its plugin cache on first install. If the clone fails with a GitHub auth error, make sure git clone https://github.com/viticci/shortcuts-playground-plugin.git works in your terminal first.
claude plugin marketplace add https://github.com/viticci/shortcuts-playground-plugin
claude plugin install shortcuts-playground@shortcuts-playground
Codex installs plugins from marketplaces. This repository includes a Codex marketplace at .agents/plugins/marketplace.json, which points at the Codex package in ./codex.
Register the marketplace, then install the plugin from Codex's plugin browser:
# 1. Register the marketplace
codex plugin marketplace add https://github.com/viticci/shortcuts-playground-plugin
# 2. Open Codex
codex
Inside Codex, type /plugins, choose the Shortcuts Playground marketplace, open Shortcuts Playground, and select Install plugin. Start a new session to load the plugin.
For local development from a cloned checkout, register the checkout instead of GitHub:
codex plugin marketplace add /absolute/path/to/shortcuts-playground-plugin
codex plugin marketplace add https://github.com/viticci/shortcuts-playground-plugin
Add to Codex.[features].plugin_hooks = true to ~/.codex/config.toml, then review/trust the hook from /hooks if Codex prompts for it.
/shortcuts-playground:build a shortcut that asks for a city, fetches the current weather, and shows a notification
Or just describe what you want in natural language β Claude's skill auto-invocation will pick up the intent:
Build me a shortcut that takes my 5 most recent screenshots and sends them to a contact on iMessage
When it's done, open the signed .shortcut file from ~/Documents/Shortcuts Playground/ in Finder. Shortcuts.app will offer to import it.
Point it at an unsigned .xml file and describe the change:
/shortcuts-playground:remix /Users/you/Documents/Shortcuts Playground/drafts/Weather.xml add a notification at the start saying "Fetching weatherβ¦"
The remix preserves everything you didn't ask to change. Your original file is never overwritten.
Shortcuts Playground can take you roughly 90% of the way to a complete, functioning shortcut. The remaining 10% should be checked and refined by you. In testing, it was able to one-shot dozens of simple shortcuts using Apple's built-in actions, as well as complex shortcuts involving web APIs, advanced logic, SSH, shell scripting, and more.
Common things to watch for:
For best results, use Claude Opus 4.6/4.7 or GPT 5.5 as the underlying models. Higher reasoning efforts produce better outputs, but introduce latency.
| Component | Purpose |
|---|---|
Skill (skills/shortcuts-playground/) | The complete Shortcuts knowledge base: reference material, mandatory best-practice rules, verified action identifiers from Apple's ToolKit v63 plus target-gated macOS/iOS 27 ToolKit v78 coverage, OS 27 parameter/trigger catalogs, and golden example XMLs. |
Build agent (agents/shortcut-builder.md) | Specialized agent that owns the full design, build, validate, sign, and archive loop for new shortcuts. |
Remix agent (agents/shortcut-remixer.md) | Specialized agent that applies a surgical diff to an existing unsigned XML shortcut. |
Validation hook (hooks/) | PostToolUse hook that runs the Craig Loop validator on Shortcuts XML writes. Codex requires [features].plugin_hooks = true. |
CLI wrappers (bin/) | validate-shortcut, resolve-icon, sign-shortcut, shortcuts-playground-selftest β added to Claude's PATH when the plugin is enabled. |
Slash commands (commands/) | /shortcuts-playground:build and /shortcuts-playground:remix. |
By default, shortcuts are saved to ~/Documents/Shortcuts Playground/:
~/Documents/Shortcuts Playground/
βββ My Shortcut.shortcut # signed file β open to import
βββ drafts/
β βββ My Shortcut.xml # working unsigned draft
βββ 2026-05-09/
βββ My Shortcut-151223.xml # dated archive
To change the output directory, edit ~/.claude/settings.json:
{
"pluginConfigs": {
"shortcuts-playground@shortcuts-playground": {
"options": {
"output_dir": "/Users/you/Documents/Shortcuts Playground",
"target_macos": "auto",
"target_platform": "macos"
}
}
}
}
The plugin also supports signing_mode (anyone for public distribution, people-who-know-me for contacts only), target_macos (auto, 26, 27, or latest), and target_platform (macos, ios, or all). Default validation detects the host macOS version, falls back to macOS 26 if the host cannot be detected, and targets macos. Use target_macos = "27" only when intentionally building Golden Gate-era shortcuts, and target_platform = "ios" only when authoring iPhone/iPad-only actions.
A companion Shortcuts Playground Remote shortcut that communicates with Claude Code and Codex over SSH β letting you generate shortcuts from iPhone and iPad β is available exclusively for Club MacStories members.
claude plugin update shortcuts-playground@shortcuts-playground
Start a new Claude Code session after updating to pick up changes to agents and hooks.
claude plugin uninstall shortcuts-playground@shortcuts-playground
claude plugin marketplace remove shortcuts-playground
Your ~/Documents/Shortcuts Playground/ directory stays intact.
This repository ships plugins for two agent runtimes:
| Folder | Runtime | Notes |
|---|---|---|
claude/ | Claude Code | Full plugin with skill, slash commands, specialized agents, PostToolUse hook, and CLI wrappers. |
codex/ | Codex | Codex-compatible plugin with bundled skill, validator/signing scripts, and opt-in PostToolUse validation hook. |
The root .claude-plugin/marketplace.json installs the Claude Code plugin from ./claude. The root .agents/plugins/marketplace.json installs the Codex plugin from ./codex.
For detailed technical documentation, see claude/README.md and claude/INSTALL.md.
by Federico Viticci, MacStories.net
MIT.
.agents/
plugins/
marketplace.json
.claude-plugin/
marketplace.json
.gitignore
claude/
.claude-plugin/
plugin.json
agents/
shortcut-builder.md
shortcut-remixer.md
bin/
resolve-icon
shortcuts-playground-selftest
sign-shortcut
validate-shortcut
CHANGELOG.md
commands/
build.md
remix.md
hooks/
auto-validate.sh
hooks.json
INSTALL.md
README.md
skills/
shortcuts-playground/
ACTIONS.md
APPINTENTS.md
assets/
shortcuts-small.svg
shortcuts.png
AUTOMATION_TRIGGERS.md
BEST_PRACTICES.md
CHANGELOG.md
CONTROL_FLOW.md
data/
healthkit-ios26.2-reference.json
macos27-shortpy-grounding.json
macos27-workflow-trigger-samples.json
shortcuts-glyph-synonyms.json
shortcuts-icon-colors.json
shortcuts-official-glyph-mapping.json
toolkit-v63-tool-ids.json
toolkit-v78-first-party-enum-cases.json
toolkit-v78-first-party-parameter-keys.json
toolkit-v78-ios27-tool-ids.json
toolkit-v78-tool-ids.json
toolkit-v78-trigger-parameter-keys.json
DATE_TIME.md
EXAMPLES.md
FILTERS.md
golden-shortcuts/
index.jsonl
xml/
1be4dde95b794253bf82438e201b33e7.xml
2e0fb675e45948aaacee7e534f910492.xml
332c12a0060043b388b22b806be7ab58.xml
3dd4ee24e43f464f92adaa70a0311eaa.xml
4d102301c6e646faa7a8a221f4f4ec98.xml
51cc4e26d1044893a0c3f2f3630cf2d2.xml
623e7f1ca5f948e2bd53811fec63e544.xml
6a18b76843ac45c384ac3400f3740997.xml
71f0cacb0f604b399b76c5dcb7286e7c.xml
807525ed9f974829bc8494defac923a8.xml
8ab0d39826ab4249be58672763caa3ba.xml
91c45fd3fd3b427897d9ba485efb1227.xml
97be626bb25c41709d175646a7f6d8f2.xml
ae59e10d409348f9bd33894f03f9beb4.xml
afa83b6be811483b9c32189c41eb9312.xml
cfdb083b857e4ac189629fa386d27cdc.xml
e01cebe192d64b2fbca80204d03d92ab.xml
ef669bcf8bad489d9ef4b88bfaf5772f.xml
f44f5caf5e3e48d4817e73af450c4404.xml
HEALTHKIT.md
ICONS_AND_COLORS.md
JAVASCRIPT_WEBPAGE.md
PARAMETER_TYPES.md
PLIST_FORMAT.md
README.md
scripts/
generate_healthkit_reference.py
lookup_action_grounding.py
select_shortcut_icon_color.py
test_random_mixed_shortcuts.py
test_wiring_regressions.py
validate_shortcut.py
SKILL.md
THIRD_PARTY_ACTIONS.md
TOOLKIT_SNAPSHOT.md
URL_SCHEMES.md
VARIABLES.md
codex/
.codex-plugin/
plugin.json
assets/
icon-small.png
icon.png
logo.png
hooks/
auto-validate.sh
hooks.json
README.md
skills/
shortcuts-playground/
ACTIONS.md
APPINTENTS.md
assets/
shortcuts-small.svg
shortcuts.png
AUTOMATION_TRIGGERS.md
BEST_PRACTICES.md
CHANGELOG.md
CONTROL_FLOW.md
data/
healthkit-ios26.2-reference.json
macos27-shortpy-grounding.json
macos27-workflow-trigger-samples.json
shortcuts-glyph-synonyms.json
shortcuts-icon-colors.json
shortcuts-official-glyph-mapping.json
toolkit-v63-tool-ids.json
toolkit-v78-first-party-enum-cases.json
toolkit-v78-first-party-parameter-keys.json
toolkit-v78-ios27-tool-ids.json
toolkit-v78-tool-ids.json
toolkit-v78-trigger-parameter-keys.json
DATE_TIME.md
EXAMPLES.md
FILTERS.md
golden-shortcuts/
index.jsonl
xml/
1be4dde95b794253bf82438e201b33e7.xml
2e0fb675e45948aaacee7e534f910492.xml
332c12a0060043b388b22b806be7ab58.xml
3dd4ee24e43f464f92adaa70a0311eaa.xml
4d102301c6e646faa7a8a221f4f4ec98.xml
51cc4e26d1044893a0c3f2f3630cf2d2.xml
623e7f1ca5f948e2bd53811fec63e544.xml
6a18b76843ac45c384ac3400f3740997.xml
71f0cacb0f604b399b76c5dcb7286e7c.xml
807525ed9f974829bc8494defac923a8.xml
8ab0d39826ab4249be58672763caa3ba.xml
91c45fd3fd3b427897d9ba485efb1227.xml
97be626bb25c41709d175646a7f6d8f2.xml
ae59e10d409348f9bd33894f03f9beb4.xml
afa83b6be811483b9c32189c41eb9312.xml
cfdb083b857e4ac189629fa386d27cdc.xml
e01cebe192d64b2fbca80204d03d92ab.xml
ef669bcf8bad489d9ef4b88bfaf5772f.xml
f44f5caf5e3e48d4817e73af450c4404.xml
HEALTHKIT.md
ICONS_AND_COLORS.md
JAVASCRIPT_WEBPAGE.md
PARAMETER_TYPES.md
PLIST_FORMAT.md
README.md
scripts/
generate_healthkit_reference.py
lookup_action_grounding.py
select_shortcut_icon_color.py
sign_shortcut.sh
test_random_mixed_shortcuts.py
test_wiring_regressions.py
validate_shortcut.py
SKILL.md
THIRD_PARTY_ACTIONS.md
TOOLKIT_SNAPSHOT.md
URL_SCHEMES.md
VARIABLES.md
LICENSE
README.md
tests/
test_issue_regressions.pyFAQ
shortcuts-playground-plugin is a Claude Code plugin with 2 hand-picked skills for automation work, indexed on Flowy. Install it with the command on its page. It includes shortcuts-playground, shortcuts-playground. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.