{
  "schemaVersion": "1.0",
  "item": {
    "slug": "shortcuts-skill",
    "name": "Shortcuts Generator",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/erik-agens/shortcuts-skill",
    "canonicalUrl": "https://clawhub.ai/erik-agens/shortcuts-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/shortcuts-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=shortcuts-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "ACTIONS.md",
      "APPINTENTS.md",
      "CONTROL_FLOW.md",
      "EXAMPLES.md",
      "FILTERS.md",
      "PARAMETER_TYPES.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/shortcuts-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/shortcuts-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "macOS Shortcuts Generator",
        "body": "Generate valid .shortcut files that can be signed and imported into Apple's Shortcuts app."
      },
      {
        "title": "Quick Start",
        "body": "A shortcut is a binary plist with this structure:\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>WFWorkflowActions</key>\n    <array>\n        <!-- Actions go here -->\n    </array>\n    <key>WFWorkflowClientVersion</key>\n    <string>2700.0.4</string>\n    <key>WFWorkflowHasOutputFallback</key>\n    <false/>\n    <key>WFWorkflowIcon</key>\n    <dict>\n        <key>WFWorkflowIconGlyphNumber</key>\n        <integer>59511</integer>\n        <key>WFWorkflowIconStartColor</key>\n        <integer>4282601983</integer>\n    </dict>\n    <key>WFWorkflowImportQuestions</key>\n    <array/>\n    <key>WFWorkflowMinimumClientVersion</key>\n    <integer>900</integer>\n    <key>WFWorkflowMinimumClientVersionString</key>\n    <string>900</string>\n    <key>WFWorkflowName</key>\n    <string>My Shortcut</string>\n    <key>WFWorkflowOutputContentItemClasses</key>\n    <array/>\n    <key>WFWorkflowTypes</key>\n    <array/>\n</dict>\n</plist>"
      },
      {
        "title": "Minimal Hello World",
        "body": "<dict>\n    <key>WFWorkflowActionIdentifier</key>\n    <string>is.workflow.actions.gettext</string>\n    <key>WFWorkflowActionParameters</key>\n    <dict>\n        <key>UUID</key>\n        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>\n        <key>WFTextActionText</key>\n        <string>Hello World!</string>\n    </dict>\n</dict>\n<dict>\n    <key>WFWorkflowActionIdentifier</key>\n    <string>is.workflow.actions.showresult</string>\n    <key>WFWorkflowActionParameters</key>\n    <dict>\n        <key>Text</key>\n        <dict>\n            <key>Value</key>\n            <dict>\n                <key>attachmentsByRange</key>\n                <dict>\n                    <key>{0, 1}</key>\n                    <dict>\n                        <key>OutputName</key>\n                        <string>Text</string>\n                        <key>OutputUUID</key>\n                        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>\n                        <key>Type</key>\n                        <string>ActionOutput</string>\n                    </dict>\n                </dict>\n                <key>string</key>\n                <string>￼</string>\n            </dict>\n            <key>WFSerializationType</key>\n            <string>WFTextTokenString</string>\n        </dict>\n    </dict>\n</dict>"
      },
      {
        "title": "1. Actions",
        "body": "Every action has:\n\nIdentifier: is.workflow.actions.<name> (e.g., is.workflow.actions.showresult)\nParameters: Action-specific configuration in WFWorkflowActionParameters\nUUID: Unique identifier for referencing this action's output"
      },
      {
        "title": "2. Variable References",
        "body": "To use output from a previous action:\n\nThe source action needs a UUID parameter\nReference it using OutputUUID in an attachmentsByRange dictionary\nUse ￼ (U+FFFC) as placeholder in the string where the variable goes\nSet WFSerializationType to WFTextTokenString"
      },
      {
        "title": "3. Control Flow",
        "body": "Control flow actions (repeat, conditional, menu) use:\n\nGroupingIdentifier: UUID linking start/middle/end actions\nWFControlFlowMode: 0=start, 1=middle (else/case), 2=end"
      },
      {
        "title": "Common Actions Quick Reference",
        "body": "ActionIdentifierKey ParametersTextis.workflow.actions.gettextWFTextActionTextShow Resultis.workflow.actions.showresultTextAsk for Inputis.workflow.actions.askWFAskActionPrompt, WFInputTypeUse AI Modelis.workflow.actions.askllmWFLLMPrompt, WFLLMModel, WFGenerativeResultTypeCommentis.workflow.actions.commentWFCommentActionTextURLis.workflow.actions.urlWFURLActionURLGet Contents of URLis.workflow.actions.downloadurlWFURL, WFHTTPMethodGet Weatheris.workflow.actions.weather.currentconditions(none required)Open Appis.workflow.actions.openappWFAppIdentifierOpen URLis.workflow.actions.openurlWFInputAlertis.workflow.actions.alertWFAlertActionTitle, WFAlertActionMessageNotificationis.workflow.actions.notificationWFNotificationActionTitle, WFNotificationActionBodySet Variableis.workflow.actions.setvariableWFVariableName, WFInputGet Variableis.workflow.actions.getvariableWFVariableNumberis.workflow.actions.numberWFNumberActionNumberListis.workflow.actions.listWFItemsDictionaryis.workflow.actions.dictionaryWFItemsRepeat (count)is.workflow.actions.repeat.countWFRepeatCount, GroupingIdentifier, WFControlFlowModeRepeat (each)is.workflow.actions.repeat.eachWFInput, GroupingIdentifier, WFControlFlowModeIf/Otherwiseis.workflow.actions.conditionalWFInput, WFCondition, GroupingIdentifier, WFControlFlowModeChoose from Menuis.workflow.actions.choosefrommenuWFMenuPrompt, WFMenuItems, GroupingIdentifier, WFControlFlowModeFind Photosis.workflow.actions.filter.photosWFContentItemFilter (see FILTERS.md)Delete Photosis.workflow.actions.deletephotosphotos (NOT WFInput!)"
      },
      {
        "title": "Detailed Reference Files",
        "body": "For complete documentation, see:\n\nPLIST_FORMAT.md - Complete plist structure\nACTIONS.md - All 427 WF*Action identifiers and parameters\nAPPINTENTS.md - All 728 AppIntent actions\nPARAMETER_TYPES.md - All parameter value types and serialization formats\nVARIABLES.md - Variable reference system\nCONTROL_FLOW.md - Repeat, Conditional, Menu patterns\nFILTERS.md - Content filters for Find/Filter actions (photos, files, etc.)\nEXAMPLES.md - Complete working examples"
      },
      {
        "title": "Signing Shortcuts",
        "body": "Shortcuts MUST be signed before they can be imported. Use the macOS shortcuts CLI:\n\n# Sign for anyone to use\nshortcuts sign --mode anyone --input MyShortcut.shortcut --output MyShortcut_signed.shortcut\n\n# Sign for people who know you\nshortcuts sign --mode people-who-know-me --input MyShortcut.shortcut --output MyShortcut_signed.shortcut\n\nThe signing process:\n\nWrite your plist as XML to a .shortcut file\nRun shortcuts sign to add cryptographic signature (~19KB added)\nThe signed file can be opened/imported into Shortcuts.app"
      },
      {
        "title": "Workflow for Creating Shortcuts",
        "body": "Define actions - List what the shortcut should do\nGenerate UUIDs - Each action that produces output needs a unique UUID\nBuild action array - Create each action dictionary with identifier and parameters\nWire variable references - Connect outputs to inputs using OutputUUID\nWrap in plist - Add the root structure with icon, name, version\nWrite to file - Save as .shortcut (XML plist format is fine)\nSign - Run shortcuts sign to make it importable"
      },
      {
        "title": "Key Rules",
        "body": "UUIDs must be uppercase: A1B2C3D4-E5F6-7890-ABCD-EF1234567890\nWFControlFlowMode is an integer: Use <integer>0</integer> not <string>0</string>\nRange keys use format: {position, length} - e.g., {0, 1} for first character\nThe placeholder character: ￼ (U+FFFC) marks where variables are inserted\nControl flow needs matching ends: Every repeat/if/menu start needs an end action with same GroupingIdentifier"
      }
    ],
    "body": "macOS Shortcuts Generator\n\nGenerate valid .shortcut files that can be signed and imported into Apple's Shortcuts app.\n\nQuick Start\n\nA shortcut is a binary plist with this structure:\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>WFWorkflowActions</key>\n    <array>\n        <!-- Actions go here -->\n    </array>\n    <key>WFWorkflowClientVersion</key>\n    <string>2700.0.4</string>\n    <key>WFWorkflowHasOutputFallback</key>\n    <false/>\n    <key>WFWorkflowIcon</key>\n    <dict>\n        <key>WFWorkflowIconGlyphNumber</key>\n        <integer>59511</integer>\n        <key>WFWorkflowIconStartColor</key>\n        <integer>4282601983</integer>\n    </dict>\n    <key>WFWorkflowImportQuestions</key>\n    <array/>\n    <key>WFWorkflowMinimumClientVersion</key>\n    <integer>900</integer>\n    <key>WFWorkflowMinimumClientVersionString</key>\n    <string>900</string>\n    <key>WFWorkflowName</key>\n    <string>My Shortcut</string>\n    <key>WFWorkflowOutputContentItemClasses</key>\n    <array/>\n    <key>WFWorkflowTypes</key>\n    <array/>\n</dict>\n</plist>\n\nMinimal Hello World\n<dict>\n    <key>WFWorkflowActionIdentifier</key>\n    <string>is.workflow.actions.gettext</string>\n    <key>WFWorkflowActionParameters</key>\n    <dict>\n        <key>UUID</key>\n        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>\n        <key>WFTextActionText</key>\n        <string>Hello World!</string>\n    </dict>\n</dict>\n<dict>\n    <key>WFWorkflowActionIdentifier</key>\n    <string>is.workflow.actions.showresult</string>\n    <key>WFWorkflowActionParameters</key>\n    <dict>\n        <key>Text</key>\n        <dict>\n            <key>Value</key>\n            <dict>\n                <key>attachmentsByRange</key>\n                <dict>\n                    <key>{0, 1}</key>\n                    <dict>\n                        <key>OutputName</key>\n                        <string>Text</string>\n                        <key>OutputUUID</key>\n                        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>\n                        <key>Type</key>\n                        <string>ActionOutput</string>\n                    </dict>\n                </dict>\n                <key>string</key>\n                <string>￼</string>\n            </dict>\n            <key>WFSerializationType</key>\n            <string>WFTextTokenString</string>\n        </dict>\n    </dict>\n</dict>\n\nCore Concepts\n1. Actions\n\nEvery action has:\n\nIdentifier: is.workflow.actions.<name> (e.g., is.workflow.actions.showresult)\nParameters: Action-specific configuration in WFWorkflowActionParameters\nUUID: Unique identifier for referencing this action's output\n2. Variable References\n\nTo use output from a previous action:\n\nThe source action needs a UUID parameter\nReference it using OutputUUID in an attachmentsByRange dictionary\nUse ￼ (U+FFFC) as placeholder in the string where the variable goes\nSet WFSerializationType to WFTextTokenString\n3. Control Flow\n\nControl flow actions (repeat, conditional, menu) use:\n\nGroupingIdentifier: UUID linking start/middle/end actions\nWFControlFlowMode: 0=start, 1=middle (else/case), 2=end\nCommon Actions Quick Reference\nAction\tIdentifier\tKey Parameters\nText\tis.workflow.actions.gettext\tWFTextActionText\nShow Result\tis.workflow.actions.showresult\tText\nAsk for Input\tis.workflow.actions.ask\tWFAskActionPrompt, WFInputType\nUse AI Model\tis.workflow.actions.askllm\tWFLLMPrompt, WFLLMModel, WFGenerativeResultType\nComment\tis.workflow.actions.comment\tWFCommentActionText\nURL\tis.workflow.actions.url\tWFURLActionURL\nGet Contents of URL\tis.workflow.actions.downloadurl\tWFURL, WFHTTPMethod\nGet Weather\tis.workflow.actions.weather.currentconditions\t(none required)\nOpen App\tis.workflow.actions.openapp\tWFAppIdentifier\nOpen URL\tis.workflow.actions.openurl\tWFInput\nAlert\tis.workflow.actions.alert\tWFAlertActionTitle, WFAlertActionMessage\nNotification\tis.workflow.actions.notification\tWFNotificationActionTitle, WFNotificationActionBody\nSet Variable\tis.workflow.actions.setvariable\tWFVariableName, WFInput\nGet Variable\tis.workflow.actions.getvariable\tWFVariable\nNumber\tis.workflow.actions.number\tWFNumberActionNumber\nList\tis.workflow.actions.list\tWFItems\nDictionary\tis.workflow.actions.dictionary\tWFItems\nRepeat (count)\tis.workflow.actions.repeat.count\tWFRepeatCount, GroupingIdentifier, WFControlFlowMode\nRepeat (each)\tis.workflow.actions.repeat.each\tWFInput, GroupingIdentifier, WFControlFlowMode\nIf/Otherwise\tis.workflow.actions.conditional\tWFInput, WFCondition, GroupingIdentifier, WFControlFlowMode\nChoose from Menu\tis.workflow.actions.choosefrommenu\tWFMenuPrompt, WFMenuItems, GroupingIdentifier, WFControlFlowMode\nFind Photos\tis.workflow.actions.filter.photos\tWFContentItemFilter (see FILTERS.md)\nDelete Photos\tis.workflow.actions.deletephotos\tphotos (NOT WFInput!)\nDetailed Reference Files\n\nFor complete documentation, see:\n\nPLIST_FORMAT.md - Complete plist structure\nACTIONS.md - All 427 WF*Action identifiers and parameters\nAPPINTENTS.md - All 728 AppIntent actions\nPARAMETER_TYPES.md - All parameter value types and serialization formats\nVARIABLES.md - Variable reference system\nCONTROL_FLOW.md - Repeat, Conditional, Menu patterns\nFILTERS.md - Content filters for Find/Filter actions (photos, files, etc.)\nEXAMPLES.md - Complete working examples\nSigning Shortcuts\n\nShortcuts MUST be signed before they can be imported. Use the macOS shortcuts CLI:\n\n# Sign for anyone to use\nshortcuts sign --mode anyone --input MyShortcut.shortcut --output MyShortcut_signed.shortcut\n\n# Sign for people who know you\nshortcuts sign --mode people-who-know-me --input MyShortcut.shortcut --output MyShortcut_signed.shortcut\n\n\nThe signing process:\n\nWrite your plist as XML to a .shortcut file\nRun shortcuts sign to add cryptographic signature (~19KB added)\nThe signed file can be opened/imported into Shortcuts.app\nWorkflow for Creating Shortcuts\nDefine actions - List what the shortcut should do\nGenerate UUIDs - Each action that produces output needs a unique UUID\nBuild action array - Create each action dictionary with identifier and parameters\nWire variable references - Connect outputs to inputs using OutputUUID\nWrap in plist - Add the root structure with icon, name, version\nWrite to file - Save as .shortcut (XML plist format is fine)\nSign - Run shortcuts sign to make it importable\nKey Rules\nUUIDs must be uppercase: A1B2C3D4-E5F6-7890-ABCD-EF1234567890\nWFControlFlowMode is an integer: Use <integer>0</integer> not <string>0</string>\nRange keys use format: {position, length} - e.g., {0, 1} for first character\nThe placeholder character: ￼ (U+FFFC) marks where variables are inserted\nControl flow needs matching ends: Every repeat/if/menu start needs an end action with same GroupingIdentifier"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/erik-agens/shortcuts-skill",
    "publisherUrl": "https://clawhub.ai/erik-agens/shortcuts-skill",
    "owner": "erik-agens",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/shortcuts-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/shortcuts-skill",
    "agentUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/shortcuts-skill/agent.md"
  }
}