# Send Shortcuts Generator to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "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": {
    "downloadUrl": "/downloads/shortcuts-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=shortcuts-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "ACTIONS.md",
      "APPINTENTS.md",
      "CONTROL_FLOW.md",
      "EXAMPLES.md",
      "FILTERS.md",
      "PARAMETER_TYPES.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "shortcuts-skill",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-08T19:20:19.105Z",
      "expiresAt": "2026-05-15T19:20:19.105Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=shortcuts-skill",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=shortcuts-skill",
        "contentDisposition": "attachment; filename=\"shortcuts-skill-0.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "shortcuts-skill"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "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."
      ]
    }
  },
  "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"
  }
}
```
## Documentation

### macOS Shortcuts Generator

Generate valid .shortcut files that can be signed and imported into Apple's Shortcuts app.

### Quick Start

A shortcut is a binary plist with this structure:

<?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>WFWorkflowActions</key>
    <array>
        <!-- Actions go here -->
    </array>
    <key>WFWorkflowClientVersion</key>
    <string>2700.0.4</string>
    <key>WFWorkflowHasOutputFallback</key>
    <false/>
    <key>WFWorkflowIcon</key>
    <dict>
        <key>WFWorkflowIconGlyphNumber</key>
        <integer>59511</integer>
        <key>WFWorkflowIconStartColor</key>
        <integer>4282601983</integer>
    </dict>
    <key>WFWorkflowImportQuestions</key>
    <array/>
    <key>WFWorkflowMinimumClientVersion</key>
    <integer>900</integer>
    <key>WFWorkflowMinimumClientVersionString</key>
    <string>900</string>
    <key>WFWorkflowName</key>
    <string>My Shortcut</string>
    <key>WFWorkflowOutputContentItemClasses</key>
    <array/>
    <key>WFWorkflowTypes</key>
    <array/>
</dict>
</plist>

### Minimal Hello World

<dict>
    <key>WFWorkflowActionIdentifier</key>
    <string>is.workflow.actions.gettext</string>
    <key>WFWorkflowActionParameters</key>
    <dict>
        <key>UUID</key>
        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
        <key>WFTextActionText</key>
        <string>Hello World!</string>
    </dict>
</dict>
<dict>
    <key>WFWorkflowActionIdentifier</key>
    <string>is.workflow.actions.showresult</string>
    <key>WFWorkflowActionParameters</key>
    <dict>
        <key>Text</key>
        <dict>
            <key>Value</key>
            <dict>
                <key>attachmentsByRange</key>
                <dict>
                    <key>{0, 1}</key>
                    <dict>
                        <key>OutputName</key>
                        <string>Text</string>
                        <key>OutputUUID</key>
                        <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
                        <key>Type</key>
                        <string>ActionOutput</string>
                    </dict>
                </dict>
                <key>string</key>
                <string>￼</string>
            </dict>
            <key>WFSerializationType</key>
            <string>WFTextTokenString</string>
        </dict>
    </dict>
</dict>

### 1. Actions

Every action has:

Identifier: is.workflow.actions.<name> (e.g., is.workflow.actions.showresult)
Parameters: Action-specific configuration in WFWorkflowActionParameters
UUID: Unique identifier for referencing this action's output

### 2. Variable References

To use output from a previous action:

The source action needs a UUID parameter
Reference it using OutputUUID in an attachmentsByRange dictionary
Use ￼ (U+FFFC) as placeholder in the string where the variable goes
Set WFSerializationType to WFTextTokenString

### 3. Control Flow

Control flow actions (repeat, conditional, menu) use:

GroupingIdentifier: UUID linking start/middle/end actions
WFControlFlowMode: 0=start, 1=middle (else/case), 2=end

### Common Actions Quick Reference

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!)

### Detailed Reference Files

For complete documentation, see:

PLIST_FORMAT.md - Complete plist structure
ACTIONS.md - All 427 WF*Action identifiers and parameters
APPINTENTS.md - All 728 AppIntent actions
PARAMETER_TYPES.md - All parameter value types and serialization formats
VARIABLES.md - Variable reference system
CONTROL_FLOW.md - Repeat, Conditional, Menu patterns
FILTERS.md - Content filters for Find/Filter actions (photos, files, etc.)
EXAMPLES.md - Complete working examples

### Signing Shortcuts

Shortcuts MUST be signed before they can be imported. Use the macOS shortcuts CLI:

# Sign for anyone to use
shortcuts sign --mode anyone --input MyShortcut.shortcut --output MyShortcut_signed.shortcut

# Sign for people who know you
shortcuts sign --mode people-who-know-me --input MyShortcut.shortcut --output MyShortcut_signed.shortcut

The signing process:

Write your plist as XML to a .shortcut file
Run shortcuts sign to add cryptographic signature (~19KB added)
The signed file can be opened/imported into Shortcuts.app

### Workflow for Creating Shortcuts

Define actions - List what the shortcut should do
Generate UUIDs - Each action that produces output needs a unique UUID
Build action array - Create each action dictionary with identifier and parameters
Wire variable references - Connect outputs to inputs using OutputUUID
Wrap in plist - Add the root structure with icon, name, version
Write to file - Save as .shortcut (XML plist format is fine)
Sign - Run shortcuts sign to make it importable

### Key Rules

UUIDs must be uppercase: A1B2C3D4-E5F6-7890-ABCD-EF1234567890
WFControlFlowMode is an integer: Use <integer>0</integer> not <string>0</string>
Range keys use format: {position, length} - e.g., {0, 1} for first character
The placeholder character: ￼ (U+FFFC) marks where variables are inserted
Control flow needs matching ends: Every repeat/if/menu start needs an end action with same GroupingIdentifier
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: erik-agens
- Version: 0.1.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-08T19:20:19.105Z
- Expires at: 2026-05-15T19:20:19.105Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/shortcuts-skill)
- [Send to Agent page](https://openagent3.xyz/skills/shortcuts-skill/agent)
- [JSON manifest](https://openagent3.xyz/skills/shortcuts-skill/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/shortcuts-skill/agent.md)
- [Download page](https://openagent3.xyz/downloads/shortcuts-skill)