{
  "catalogId": "mavor-skills",
  "schemaVersion": 1,
  "version": "1.0.0+b64c9b5",
  "publishedAt": "2026-06-04T04:13:41.864Z",
  "gitRef": "b64c9b5",
  "baseUrl": "https://mavor-ai.github.io/mavor-skills/",
  "skillCount": 106,
  "namespaces": [
    "shopify-admin"
  ],
  "skills": [
    {
      "id": "shopify-abandoned-cart-recovery",
      "namespace": "shopify-admin",
      "displayName": "Abandoned Cart Recovery",
      "description": "Query checkouts abandoned in the last N days, generate unique discount codes per customer, and tag them for re-engagement.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for abandoned checkouts"
        },
        "min_cart_value": {
          "type": "number",
          "required": false,
          "description": "Minimum cart total to include (USD)"
        },
        "discount_pct": {
          "type": "number",
          "required": false,
          "description": "Discount percentage to create per customer"
        },
        "code_prefix": {
          "type": "string",
          "required": false,
          "description": "Prefix for generated discount codes"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Tag applied to eligible customers"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-abandoned-cart-recovery",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-abandoned-cart-recovery/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "98b80be3a7e16dc0cdbd75ed4bc9ddab74d6afb6dbe31e1c2ec11a7f8b1d2164"
        }
      ],
      "contentHash": "sha256:a9ce7378ae7eea519d0a892e8464f8f1a80e81c05ffee6e55a651785939700a0"
    },
    {
      "id": "shopify-address-correction",
      "namespace": "shopify-admin",
      "displayName": "Address Correction",
      "description": "Update the shipping address on an unfulfilled order before it ships.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "order_id": {
          "type": "string",
          "required": true,
          "description": "GID of the order (e.g., `gid://shopify/Order/12345`)"
        },
        "new_address": {
          "type": "string",
          "required": true,
          "description": "New shipping address: `address1`, `address2` (optional), `city`, `province`, `country`, `zip`, `phone` (optional), `first_name`, `last_name`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-address-correction",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-address-correction/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "fae383e2193b86670b589b916fc09e3d865c4ef187aa53cac1f5e32cc562a65f"
        }
      ],
      "contentHash": "sha256:ef3805dc8c7f2380f6b6391e778e6960a817e91d5ecc1e919e4e84317fecbba8"
    },
    {
      "id": "shopify-automated-order-tagger",
      "namespace": "shopify-admin",
      "displayName": "Automated Order Tagger",
      "description": "Mutation: applies tags to orders based on configurable rules (geography, value, product type, risk level, customer tier).",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.order.write",
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "rules": {
          "type": "string",
          "required": true,
          "description": "Array of tagging rules (see Rules Format below)"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders to tag"
        },
        "skip_tagged": {
          "type": "boolean",
          "required": false,
          "description": "Skip orders that already have the target tag"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview only — don't apply tags"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-automated-order-tagger",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-automated-order-tagger/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "e5c06430a2e74995aa83fefd009a210fe867ef8a84958ee2c96f4c7e31159e60"
        }
      ],
      "contentHash": "sha256:d2c1f1b01b71dfdc5a0352fa59f617f24b6147c04d715d30df47fcfad61d105c"
    },
    {
      "id": "shopify-average-order-value-trends",
      "namespace": "shopify-admin",
      "displayName": "Average Order Value Trends",
      "description": "Read-only: tracks AOV over time buckets and segments by new vs. returning customers.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Total lookback window"
        },
        "bucket": {
          "type": "string",
          "required": false,
          "description": "Time bucket: `day`, `week`, or `month`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-average-order-value-trends",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-average-order-value-trends/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "8696abb77a5e85fd0b60a0b8bea5e0940218de97ea5935d4eb78614ce0f551cc"
        }
      ],
      "contentHash": "sha256:47e1db00e6fe5ea90ba87170fa077616b041829423c30d8991cb881e97f0c3ce"
    },
    {
      "id": "shopify-b2b-company-overview",
      "namespace": "shopify-admin",
      "displayName": "B2b Company Overview",
      "description": "Read-only: lists B2B company accounts with locations, catalogs, and payment terms for wholesale management.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-b2b-company-overview",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-b2b-company-overview/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "66792f897c734740d549ccc8f17b4713c776d4e1ec53980b1c0c30b2da5e93e6"
        }
      ],
      "contentHash": "sha256:c7152f89271a978317943574150b2431de3f7e18b03a86aef8ef102bd500036d"
    },
    {
      "id": "shopify-bulk-customer-tag-update",
      "namespace": "shopify-admin",
      "displayName": "Bulk Customer Tag Update",
      "description": "Adds and/or removes tags across a filtered set of customers — supports query-based selection, explicit ID lists, and union/replace tag modes.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview matching customers and the planned tag changes without executing mutations"
        },
        "filter": {
          "type": "string",
          "required": false,
          "description": "Customer query filter (e.g., `tag:newsletter`, `total_spent:>=500`); required if `customer_ids` is omitted"
        },
        "customer_ids": {
          "type": "string",
          "required": false,
          "description": "Explicit list of customer GIDs; required if `filter` is omitted"
        },
        "add_tags": {
          "type": "string",
          "required": false,
          "description": "Tags to add (union with existing tags)"
        },
        "remove_tags": {
          "type": "string",
          "required": false,
          "description": "Tags to remove (set difference)"
        },
        "mode": {
          "type": "string",
          "required": false,
          "description": "Tag write mode: `merge` (apply add/remove to existing) or `replace` (overwrite tags entirely with `add_tags` only)"
        },
        "max_customers": {
          "type": "number",
          "required": false,
          "description": "Run-size cap; abort if filter matches more than this"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-bulk-customer-tag-update",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-bulk-customer-tag-update/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "5b20073caeef27dcc37205f2271db3f36d4a35a2f983bb13a2851d1becd31527"
        }
      ],
      "contentHash": "sha256:7f1474b780461efc65a22d8cffdac256ecc91b41664efaffec545866d5b22e25"
    },
    {
      "id": "shopify-bulk-fulfillment-creation",
      "namespace": "shopify-admin",
      "displayName": "Bulk Fulfillment Creation",
      "description": "Batch-fulfill open fulfillment orders with tracking numbers. Supports partial fulfillment and customer notification toggle.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "location_id": {
          "type": "string",
          "required": true,
          "description": "GID of the fulfillment location (e.g., gid://shopify/Location/123)"
        },
        "tracking_numbers": {
          "type": "string",
          "required": false,
          "description": "List of `{fulfillment_order_id, tracking_number, tracking_url, carrier}` objects"
        },
        "notify_customer": {
          "type": "boolean",
          "required": false,
          "description": "Send shipping confirmation email to customer"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview fulfillments without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-bulk-fulfillment-creation",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-bulk-fulfillment-creation/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "8fc6b594b9f6dc9d191d0559e725fef7f31f8ffcadafedffc5f22d7ca02de45f"
        }
      ],
      "contentHash": "sha256:dc62974eb1f1c98623a1a50c154c73f0275c33711ade0aa6d3195c26e4479e5d"
    },
    {
      "id": "shopify-bulk-price-adjustment",
      "namespace": "shopify-admin",
      "displayName": "Bulk Price Adjustment",
      "description": "Query products by collection or tag and update all variant prices by a percentage or fixed amount, with optional floor/ceiling constraints.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "collection_id": {
          "type": "string",
          "required": false,
          "description": "GID of collection to target (e.g., `gid://shopify/Collection/123`)"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Product tag to filter by (alternative to collection_id)"
        },
        "adjustment_type": {
          "type": "string",
          "required": true,
          "description": "`percent` or `fixed`"
        },
        "adjustment_value": {
          "type": "number",
          "required": true,
          "description": "Amount to adjust. Positive = increase, negative = decrease. For percent: `-10` = 10% discount."
        },
        "min_price": {
          "type": "number",
          "required": false,
          "description": "Floor price — no variant will be set below this value"
        },
        "max_price": {
          "type": "number",
          "required": false,
          "description": "Ceiling price — no variant will be set above this value (optional)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-bulk-price-adjustment",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-bulk-price-adjustment/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "7d22ab04f095b0761b3d6c90440ccc9f11b35f59d420d802b949610dd906e560"
        }
      ],
      "contentHash": "sha256:9045ad460c880866d2efead9ec8da67c9959f6ad4a94b21fb2a8eb48384ee564"
    },
    {
      "id": "shopify-bundle-availability-check",
      "namespace": "shopify-admin",
      "displayName": "Bundle Availability Check",
      "description": "Read-only: for native bundle products and metafield-defined bundles, verifies every component variant has sufficient stock to fulfill the bundle's effective availability.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "metafield_namespace": {
          "type": "string",
          "required": false,
          "description": "Metafield namespace where bundle component definitions live"
        },
        "metafield_key": {
          "type": "string",
          "required": false,
          "description": "Metafield key that holds the JSON list of `{variantId, quantity}`"
        },
        "safety_stock": {
          "type": "number",
          "required": false,
          "description": "Treat component as out-of-stock if on-hand minus this buffer is below required"
        },
        "only_listed": {
          "type": "boolean",
          "required": false,
          "description": "Only check bundle products with status `ACTIVE`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-bundle-availability-check",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-bundle-availability-check/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3b6be5dfa2440df3cc794ade317d5a45c874aaea64f7af8d393fd427b2dffea2"
        }
      ],
      "contentHash": "sha256:863d38af299c0277febbc599ef9056249805ba3cb57ed9ce5c7b168be424dced"
    },
    {
      "id": "shopify-cancel-and-restock",
      "namespace": "shopify-admin",
      "displayName": "Cancel And Restock",
      "description": "Cancel an unfulfilled order, optionally restock inventory, and optionally notify the customer — all in a single validated workflow.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "order_id": {
          "type": "string",
          "required": true,
          "description": "GID of the order (e.g., `gid://shopify/Order/12345`)"
        },
        "reason": {
          "type": "string",
          "required": false,
          "description": "Cancel reason: `CUSTOMER`, `DECLINED`, `FRAUD`, `INVENTORY`, `STAFF`, `OTHER`"
        },
        "restock": {
          "type": "boolean",
          "required": false,
          "description": "Restock inventory for cancelled line items"
        },
        "refund": {
          "type": "boolean",
          "required": false,
          "description": "Issue refund for any captured payments"
        },
        "notify_customer": {
          "type": "boolean",
          "required": false,
          "description": "Send cancellation email to customer"
        },
        "staff_note": {
          "type": "string",
          "required": false,
          "description": "Internal note recorded on the cancellation"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-cancel-and-restock",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-cancel-and-restock/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "5d3e145f70ac0ffb05ca8dbd4f9733994685e513113a5166c48071f49aa311be"
        }
      ],
      "contentHash": "sha256:f8ec1439822d65ccf479fcec4f1caf7c02e8c0938d5d6163086414564b73abf2"
    },
    {
      "id": "shopify-carrier-performance-comparison",
      "namespace": "shopify-admin",
      "displayName": "Carrier Performance Comparison",
      "description": "Read-only: compares delivery times and shipping costs across carriers used in fulfillments to inform carrier mix and contract decisions.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for fulfilled orders"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders per carrier to include in comparison"
        },
        "segment_by": {
          "type": "string",
          "required": false,
          "description": "Optional segmentation: `country`, `weight`, or `none`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-carrier-performance-comparison",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-carrier-performance-comparison/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "5f0342b8596773aa70b02eaf8dc604a19984480a933a20c6d7f4947788b9e127"
        }
      ],
      "contentHash": "sha256:521df60ee8ae47435ddabe68146560a781cc454cf9cb338bf326f6cd92092c7e"
    },
    {
      "id": "shopify-chargeback-watchlist-tagger",
      "namespace": "shopify-admin",
      "displayName": "Chargeback Watchlist Tagger",
      "description": "Identifies customers with disputed or charged-back orders and tags their customer record for proactive review on future orders.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Historical window to scan for disputes (2 years default)"
        },
        "watchlist_tag": {
          "type": "string",
          "required": false,
          "description": "Tag applied to flagged customers"
        },
        "include_won_disputes": {
          "type": "boolean",
          "required": false,
          "description": "If false, only tag customers whose disputes were lost or are open"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without applying tags"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-chargeback-watchlist-tagger",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-chargeback-watchlist-tagger/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "d0867ccd18b87815d90c0b082397efe88dbd6c4e2d23686d7344b8def8e6cf62"
        }
      ],
      "contentHash": "sha256:731ad477a10e5f0601049d6e1168855b14c0d47ece8c88d9b45f377d201a843a"
    },
    {
      "id": "shopify-checkout-abandonment-report",
      "namespace": "shopify-admin",
      "displayName": "Checkout Abandonment Report",
      "description": "Aggregate abandoned checkout data for a time range, broken down by cart value bucket and hour of day (UTC).",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "date_range_start": {
          "type": "string",
          "required": true,
          "description": "Start date in ISO 8601 (e.g., `2025-01-01`)"
        },
        "date_range_end": {
          "type": "string",
          "required": true,
          "description": "End date in ISO 8601 (e.g., `2025-01-31`)"
        },
        "cart_value_buckets": {
          "type": "string",
          "required": false,
          "description": "Array of thresholds defining cart value bands (e.g., `[0,25,50,100,250]` creates bands: $0–25, $25–50, $50–100, $100–250, $250+)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-checkout-abandonment-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-checkout-abandonment-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "1545b467cedfe597f30e1ed08beac6b59a3dec36c3ce0a496e101b465fe2ec3c"
        }
      ],
      "contentHash": "sha256:a3709a4448aa9c3eeb98f2fcb596e7ffb43ef8ba676af2fce26b054658a8162d"
    },
    {
      "id": "shopify-churn-risk-scorer",
      "namespace": "shopify-admin",
      "displayName": "Churn Risk Scorer",
      "description": "Read-only: scores customers by churn probability based on purchase recency, frequency decay, and expected repurchase intervals.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Historical window for purchase pattern analysis"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders to calculate purchase interval (need 2+ for frequency)"
        },
        "risk_threshold": {
          "type": "number",
          "required": false,
          "description": "Multiplier of avg purchase interval before flagging as at-risk"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-churn-risk-scorer",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-churn-risk-scorer/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "fe867625aaa239619410ad061fe2d16d62523dcba734b5e1757ee917efbe0d71"
        }
      ],
      "contentHash": "sha256:ef3343f4e67d319710db97d2d6aabc7df04915e07476b4ed9d1685aba3199053"
    },
    {
      "id": "shopify-cogs-completeness-audit",
      "namespace": "shopify-admin",
      "displayName": "Cogs Completeness Audit",
      "description": "Read-only: identifies products and variants that are missing inventoryItem.unitCost so margin and inventory valuation reports stay accurate.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "status_filter": {
          "type": "string",
          "required": false,
          "description": "Variant product status to audit: `ACTIVE`, `DRAFT`, `ARCHIVED`, or `ALL`"
        },
        "vendor_filter": {
          "type": "string",
          "required": false,
          "description": "Optional vendor to scope the audit"
        },
        "include_zero_cost": {
          "type": "boolean",
          "required": false,
          "description": "Treat `unitCost = 0` as missing (recommended; zero cost is rarely intentional)"
        },
        "only_stocked": {
          "type": "boolean",
          "required": false,
          "description": "Limit to variants with `inventoryQuantity > 0`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-cogs-completeness-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-cogs-completeness-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "5564c5fc7a5a5e7d1a5903379bbc3ba521574c26becb6cfede0f8e62e9a44b4e"
        }
      ],
      "contentHash": "sha256:4160466f6960b5e00467fa2e428133d3b1d3dc8f78bd607672df3a5e41e59de6"
    },
    {
      "id": "shopify-collection-membership-audit",
      "namespace": "shopify-admin",
      "displayName": "Collection Membership Audit",
      "description": "Read-only: lists orphan products (in zero collections) and over-collected products for catalog hygiene.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "max_collections": {
          "type": "number",
          "required": false,
          "description": "Flag products in more than this many collections"
        },
        "status_filter": {
          "type": "string",
          "required": false,
          "description": "Product status to scan: `active`, `draft`, or `all`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-collection-membership-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-collection-membership-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ca8ab38eb041b568e8829e2180373700d8ea619b0be3780454be9e0af81f9803"
        }
      ],
      "contentHash": "sha256:cffadf109178e7dbd2dfd40e553f7793514bbf345d2ee74d28866a87661839dc"
    },
    {
      "id": "shopify-collection-reorganization",
      "namespace": "shopify-admin",
      "displayName": "Collection Reorganization",
      "description": "Reorder products in a manual Shopify collection by inventory level, moving in-stock products to the top and out-of-stock to the bottom.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "collection_id": {
          "type": "string",
          "required": true,
          "description": "GID of the manual collection (e.g., `gid://shopify/Collection/123`)"
        },
        "sort_by": {
          "type": "string",
          "required": false,
          "description": "`inventory_desc` (highest stock first) or `inventory_asc` (lowest stock first)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-collection-reorganization",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-collection-reorganization/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "bfe99d463e0cfde0b1687f7a92c8f8d16c24ec5bcb683e4c9a3c781443d48cfd"
        }
      ],
      "contentHash": "sha256:633656d0038dc28178f4a09fc0795837379b5045a8c4d0a5bd3552fbdcba4858"
    },
    {
      "id": "shopify-compare-at-price-cleanup",
      "namespace": "shopify-admin",
      "displayName": "Compare At Price Cleanup",
      "description": "Removes stale compareAtPrice values where current price >= compareAtPrice (no real discount) or compareAtPrice has been set for over a configurable age threshold.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview the cleanup without executing mutations"
        },
        "clean_no_discount": {
          "type": "boolean",
          "required": false,
          "description": "Clear `compareAtPrice` when `price >= compareAtPrice`"
        },
        "clean_stale": {
          "type": "boolean",
          "required": false,
          "description": "Clear `compareAtPrice` set longer than `max_age_days`"
        },
        "max_age_days": {
          "type": "number",
          "required": false,
          "description": "Age threshold in days for the stale rule (uses variant `updatedAt` as proxy)"
        },
        "collection_id": {
          "type": "string",
          "required": false,
          "description": "Optional collection GID to scope the cleanup"
        },
        "tag_filter": {
          "type": "string",
          "required": false,
          "description": "Optional product tag to scope the cleanup"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-compare-at-price-cleanup",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-compare-at-price-cleanup/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "dc6a86a01146162f40cfacfa429b11b9686724a548bb61f0c874528eb8c1e9dc"
        }
      ],
      "contentHash": "sha256:ea03ee295040b2ad73a5531f20bd25c7e2f58c080c127ec003b95e2e6eff9fcf"
    },
    {
      "id": "shopify-cross-sell-opportunity-finder",
      "namespace": "shopify-admin",
      "displayName": "Cross Sell Opportunity Finder",
      "description": "Read-only: identifies products with high single-purchase rates that could benefit from cross-sell pairing based on category and price affinity.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Order lookback window"
        },
        "solo_threshold": {
          "type": "number",
          "required": false,
          "description": "% of orders where product is bought alone to flag as \"solo\""
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders for a product to be analyzed"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-cross-sell-opportunity-finder",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-cross-sell-opportunity-finder/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "df254a6d3bda902be56f4930b13a7abce34e14edef4c1b2d738f713b76f9a047"
        }
      ],
      "contentHash": "sha256:799cc821c947b13c90a1d1d719525f04709fc01bf49595b625a2a9e5e039f183"
    },
    {
      "id": "shopify-customer-acquisition-cost-by-source",
      "namespace": "shopify-admin",
      "displayName": "Customer Acquisition Cost By Source",
      "description": "Read-only: estimates customer acquisition cost (CAC) per traffic source by joining order count per landing site / referrer with configurable ad spend.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders to attribute"
        },
        "ad_spend": {
          "type": "string",
          "required": false,
          "description": "Map of source name → spend in store currency, e.g. `{\"google\": 4500, \"meta\": 3200, \"tiktok\": 1800}`"
        },
        "new_customers_only": {
          "type": "boolean",
          "required": false,
          "description": "Count only first-order customers as \"acquired\""
        },
        "min_orders_per_source": {
          "type": "number",
          "required": false,
          "description": "Minimum orders for a source to be reported"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-acquisition-cost-by-source",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-acquisition-cost-by-source/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "66fc785ebcabef6693b537e0c0e61c0249eaa182ad5fee91781f5fd10ba304dc"
        }
      ],
      "contentHash": "sha256:7092878091d71824678197478962f7b5e8f9b84b9dfe4c9aa59f5409bec7bcc2"
    },
    {
      "id": "shopify-customer-cohort-analysis",
      "namespace": "shopify-admin",
      "displayName": "Customer Cohort Analysis",
      "description": "Read-only: groups customers by first-purchase month and tracks repeat purchase rate and revenue per cohort.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "cohort_months": {
          "type": "number",
          "required": false,
          "description": "Number of months of cohorts to analyze"
        },
        "follow_months": {
          "type": "number",
          "required": false,
          "description": "Number of months to follow each cohort after acquisition"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-cohort-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-cohort-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3fca12fa1d9af3a1f4d90c5cbd39d2209190455f86ae99b7c48eb2556c405140"
        }
      ],
      "contentHash": "sha256:a86d5d76705a67d1f55be7fe33da0171459aa1346719b044d82a2ac480d8fc9d"
    },
    {
      "id": "shopify-customer-merge",
      "namespace": "shopify-admin",
      "displayName": "Customer Merge",
      "description": "Merges duplicate customer records: invokes Shopify's native customer merge API where supported, otherwise consolidates the loser record's tags and notes into the winner via customerUpdate.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview merge plan without executing mutations"
        },
        "customer_winner_id": {
          "type": "string",
          "required": true,
          "description": "GID of the customer record to keep (e.g., `gid://shopify/Customer/12345`)"
        },
        "customer_loser_id": {
          "type": "string",
          "required": true,
          "description": "GID of the customer record to merge into the winner"
        },
        "use_native_merge": {
          "type": "boolean",
          "required": false,
          "description": "Try `customerMerge` first; if it fails or is unavailable, fall back to consolidation via `customerUpdate`"
        },
        "merge_tags": {
          "type": "boolean",
          "required": false,
          "description": "Union the loser's tags onto the winner"
        },
        "merge_note": {
          "type": "boolean",
          "required": false,
          "description": "Append the loser's note to the winner (with timestamp prefix)"
        },
        "annotate_loser": {
          "type": "boolean",
          "required": false,
          "description": "Write a note on the loser record pointing to the winner GID for manual cleanup"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-merge",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-merge/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "0e453e57d24fa0234cb7adf2becac0dc42d5f742b3603b56d36267744fdbe91f"
        }
      ],
      "contentHash": "sha256:e9a41516372a6c7b3fcab52ab7630872e1b167be5d23b61386892c79c1997280"
    },
    {
      "id": "shopify-customer-note-bulk-annotator",
      "namespace": "shopify-admin",
      "displayName": "Customer Note Bulk Annotator",
      "description": "Adds internal notes to customer records in bulk — useful for post-campaign flags, import annotations, or support context.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "filter": {
          "type": "string",
          "required": true,
          "description": "Customer filter query (e.g., `tag:vip`, `total_spent:>=500`)"
        },
        "note": {
          "type": "string",
          "required": true,
          "description": "Note text to append to matching customers"
        },
        "append": {
          "type": "boolean",
          "required": false,
          "description": "Append to existing note (true) or replace entirely (false)"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview matching customers without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-note-bulk-annotator",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-note-bulk-annotator/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "af09a37fc64f303711a9fc7c28d0e05fd3ca320f12d889fc65bcb07f6cf57b23"
        }
      ],
      "contentHash": "sha256:646eaaa8705fa430b3e057bbb97f725ff8cecdf89a8b0dbf3aa85645dc3cbf78"
    },
    {
      "id": "shopify-customer-spend-tier-tagger",
      "namespace": "shopify-admin",
      "displayName": "Customer Spend Tier Tagger",
      "description": "Calculates lifetime spend per customer and applies tier tags (Bronze/Silver/Gold/Platinum) based on configurable thresholds.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "tiers": {
          "type": "string",
          "required": false,
          "description": "Spend thresholds per tier (in store currency)"
        },
        "tag_prefix": {
          "type": "string",
          "required": false,
          "description": "Tag prefix (e.g., `tier:bronze`, `tier:silver`)"
        },
        "remove_old_tiers": {
          "type": "boolean",
          "required": false,
          "description": "Remove existing tier tags before applying new ones"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-spend-tier-tagger",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-spend-tier-tagger/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "29ae5cb6b23fe633f64bade28bb4e7d181b6838000568fb4f31821fadf2f2130"
        }
      ],
      "contentHash": "sha256:562ed225ac0d85af50df49a2537bb3f58e42daaf8ebbdeaba83452aa050f1c2c"
    },
    {
      "id": "shopify-customer-timeline-export",
      "namespace": "shopify-admin",
      "displayName": "Customer Timeline Export",
      "description": "Read-only: exports a complete chronological history for a single customer — orders, refunds, returns, addresses, notes, tags, marketing consent, and lifetime spend — as one consolidated CSV.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "customer_id": {
          "type": "string",
          "required": true,
          "description": "GID of the customer (e.g., `gid://shopify/Customer/12345`)"
        },
        "include_line_items": {
          "type": "boolean",
          "required": false,
          "description": "Include per-line-item rows in the CSV (one row per line item)"
        },
        "include_refunds": {
          "type": "boolean",
          "required": false,
          "description": "Include refunds and returns as separate rows in the timeline"
        },
        "max_orders": {
          "type": "number",
          "required": false,
          "description": "Cap on orders fetched (most recent first); 0 = no cap"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-timeline-export",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-timeline-export/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3a369099dab30106cca62968cbcc4b8192679bf8de3738d9458deb6eed9204b0"
        }
      ],
      "contentHash": "sha256:f74b9589ecfddef61a3984bdd13f8766e1ca061eb82eb9e404053be745cecb9f"
    },
    {
      "id": "shopify-customer-win-back",
      "namespace": "shopify-admin",
      "displayName": "Customer Win Back",
      "description": "Identify customers who have not ordered in N days, export a re-engagement list, and tag them in Shopify.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "`human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without tagging"
        },
        "inactive_days": {
          "type": "number",
          "required": false,
          "description": "Days since last order to qualify as lapsed"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime order count to include"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Tag applied to lapsed customers"
        },
        "max_customers": {
          "type": "number",
          "required": false,
          "description": "Maximum customers to process per run"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-customer-win-back",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-customer-win-back/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3705de1387015f9bd2abc75972e5f5f5faee932e767f9c14e599533893eba033"
        }
      ],
      "contentHash": "sha256:f4b449f29a7b8ff09e15e65dee4911b31cc20abc8958ed7c831733a0eb4c576e"
    },
    {
      "id": "shopify-dead-stock-identifier",
      "namespace": "shopify-admin",
      "displayName": "Dead Stock Identifier",
      "description": "Read-only: cross-references inventory levels with order velocity to flag items with positive stock but zero sales in N days.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Sales lookback window — SKUs with no sales in this period are flagged"
        },
        "min_quantity": {
          "type": "number",
          "required": false,
          "description": "Minimum on-hand quantity to include (exclude truly zero-stock)"
        },
        "vendor_filter": {
          "type": "string",
          "required": false,
          "description": "Optional vendor to scope the audit"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-dead-stock-identifier",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-dead-stock-identifier/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "5841d59b800b1867cb1dccd710da98c87ec65a5d504fa2bb82c2e6945e016fcb"
        }
      ],
      "contentHash": "sha256:18c870a1d6870b881eb36058673a575f0b00b619b507c0167bc16ff6d61c45d8"
    },
    {
      "id": "shopify-delivery-time-analysis",
      "namespace": "shopify-admin",
      "displayName": "Delivery Time Analysis",
      "description": "Read-only: calculates average time from fulfillment creation to delivery by carrier using fulfillment and order data.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for fulfilled orders"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders per carrier to include in averages"
        },
        "location_id": {
          "type": "string",
          "required": false,
          "description": "Filter by fulfillment location (optional)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-delivery-time-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-delivery-time-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "c8f4efa14d84c49cb4cb5556f4ead51def5badbb2d290b1936dd71a2a030abb8"
        }
      ],
      "contentHash": "sha256:a7577dafda94b9c55c91c4dc7592fe99b620a7145a4b23335cd5f5759e79d220"
    },
    {
      "id": "shopify-demand-forecast-reorder",
      "namespace": "shopify-admin",
      "displayName": "Demand Forecast Reorder",
      "description": "Read-only: forecasts demand per SKU using sales velocity and seasonality, then calculates reorder points and suggested purchase order quantities.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Historical sales window for velocity calculation"
        },
        "forecast_days": {
          "type": "number",
          "required": false,
          "description": "Days into the future to forecast demand"
        },
        "lead_time_days": {
          "type": "number",
          "required": false,
          "description": "Default vendor lead time in days"
        },
        "safety_stock_days": {
          "type": "number",
          "required": false,
          "description": "Extra days of safety stock buffer"
        },
        "vendor_filter": {
          "type": "string",
          "required": false,
          "description": "Scope to specific vendor"
        },
        "only_low_stock": {
          "type": "boolean",
          "required": false,
          "description": "Only show items projected to stock out within forecast window"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-demand-forecast-reorder",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-demand-forecast-reorder/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "b74a0869272be1e365a073272d129de6d85b9c807f9c8f90517776f8ed606e11"
        }
      ],
      "contentHash": "sha256:2b74524acbf4115c588f4006dee4205fcf7e52b08a3e289ea13b8a5eafa1b1c1"
    },
    {
      "id": "shopify-discount-ab-analysis",
      "namespace": "shopify-admin",
      "displayName": "Discount Ab Analysis",
      "description": "Compare redemption rates and revenue performance across two or more discount codes over a specified date range.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "discount_codes": {
          "type": "string",
          "required": true,
          "description": "Array of 2 or more discount code strings to compare (e.g., `[\"SAVE10\", \"WELCOME15\"]`)"
        },
        "date_range_start": {
          "type": "string",
          "required": true,
          "description": "Start date in ISO 8601 (e.g., `2025-01-01`)"
        },
        "date_range_end": {
          "type": "string",
          "required": true,
          "description": "End date in ISO 8601 (e.g., `2025-01-31`)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-discount-ab-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-discount-ab-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "56bd8b075c6547c0b57a103eb2f90f9a3548fbcc2faf80fee90acab4adc0193c"
        }
      ],
      "contentHash": "sha256:a7ce47e4c6ee67441a780e405eb7e02b4aae646550987a1c23e78bd12cb33889"
    },
    {
      "id": "shopify-discount-cost-trend",
      "namespace": "shopify-admin",
      "displayName": "Discount Cost Trend",
      "description": "Read-only: tracks total discount dollars given over configurable time buckets (week/month/quarter), broken down by discount type and code.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "period": {
          "type": "string",
          "required": false,
          "description": "Bucket size: `week`, `month`, or `quarter`"
        },
        "periods_back": {
          "type": "number",
          "required": false,
          "description": "Number of buckets to report"
        },
        "top_codes": {
          "type": "number",
          "required": false,
          "description": "Top discount codes to break out individually; remainder grouped as `other`"
        },
        "include_shipping_discounts": {
          "type": "boolean",
          "required": false,
          "description": "Whether to count shipping discounts in the totals"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-discount-cost-trend",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-discount-cost-trend/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "a6581d44e3eaf2022d190d3268f56ef640e3cbb4523bec5e1ef8b92cc5bdf9a7"
        }
      ],
      "contentHash": "sha256:15ca6fa8fe44ff24b4627d703c45774c58c99a3e3d2c44f836e1a492b5877f04"
    },
    {
      "id": "shopify-discount-hygiene-cleanup",
      "namespace": "shopify-admin",
      "displayName": "Discount Hygiene Cleanup",
      "description": "Finds expired, zero-usage, or duplicate discount codes and optionally deactivates or deletes them.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "flag_expired": {
          "type": "boolean",
          "required": false,
          "description": "Flag/delete discounts past their end date"
        },
        "flag_zero_usage": {
          "type": "boolean",
          "required": false,
          "description": "Flag/delete discounts with 0 redemptions older than N days"
        },
        "zero_usage_min_age_days": {
          "type": "number",
          "required": false,
          "description": "Age threshold for zero-usage flags"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-discount-hygiene-cleanup",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-discount-hygiene-cleanup/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "57e1bf62042475013d2d5d7f821b8f6ae4637045cbbbdcfdf466aa149b256128"
        }
      ],
      "contentHash": "sha256:eff99942c28eba308e52ab3a22e93940380d51616a618e598515dfd798a0c99d"
    },
    {
      "id": "shopify-discount-roi-calculator",
      "namespace": "shopify-admin",
      "displayName": "Discount Roi Calculator",
      "description": "Read-only: calculates the true ROI of each discount code and automatic discount by comparing incremental revenue against discount cost.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window"
        },
        "min_uses": {
          "type": "number",
          "required": false,
          "description": "Minimum uses for a discount to be analyzed"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-discount-roi-calculator",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-discount-roi-calculator/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "402594d60750a13584952547a16fde409300de20f544af0928083c978b26d89a"
        }
      ],
      "contentHash": "sha256:45766b56c949ec37c448bfee29ffa324f414355db5e1f6f020dedbb54430e900"
    },
    {
      "id": "shopify-draft-order-cleanup",
      "namespace": "shopify-admin",
      "displayName": "Draft Order Cleanup",
      "description": "Finds stale draft orders older than N days and optionally deletes them to reduce admin clutter.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.order.write",
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "older_than_days": {
          "type": "number",
          "required": false,
          "description": "Delete drafts older than this many days"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview drafts to delete without executing mutation"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-draft-order-cleanup",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-draft-order-cleanup/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ffb8a13f0f3447239d3273d890c32b51d7060e80839f6118daede4f7307b4f0e"
        }
      ],
      "contentHash": "sha256:dd23e12d1ccd9829e54dea25e4c5cd27005554542f0c8acb80fd7b4a734e3bf7"
    },
    {
      "id": "shopify-duplicate-customer-finder",
      "namespace": "shopify-admin",
      "displayName": "Duplicate Customer Finder",
      "description": "Read-only: finds likely duplicate customer records by matching email, phone, or name combinations.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "match_on": {
          "type": "string",
          "required": false,
          "description": "Match strategy: `email`, `phone`, `name`, or `all`"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Only flag duplicates where at least one record has this many orders"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-duplicate-customer-finder",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-duplicate-customer-finder/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "1ff1d0e957c340a20fd48d750be0fce0b5f072c5f2716de3d906ebe80df21b94"
        }
      ],
      "contentHash": "sha256:22e945e67d281a866ea5dc53ac0fee2548a5b41efa357f394a1f65d165ba89e4"
    },
    {
      "id": "shopify-duplicate-sku-barcode-detector",
      "namespace": "shopify-admin",
      "displayName": "Duplicate Sku Barcode Detector",
      "description": "Read-only: finds duplicate SKUs or barcodes across all product variants.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "check_skus": {
          "type": "boolean",
          "required": false,
          "description": "Check for duplicate SKUs"
        },
        "check_barcodes": {
          "type": "boolean",
          "required": false,
          "description": "Check for duplicate barcodes"
        },
        "include_blank": {
          "type": "boolean",
          "required": false,
          "description": "Flag variants with blank/null SKU"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-duplicate-sku-barcode-detector",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-duplicate-sku-barcode-detector/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "45f1e8822d15305c6287e45d332ea04a76ef4757dad5f70325b5a6baa04cd158"
        }
      ],
      "contentHash": "sha256:0e1c2b07357cabd0d48cc2d798afc171688c44bc5b6c172fd0e354c284dcc36b"
    },
    {
      "id": "shopify-email-deliverability-audit",
      "namespace": "shopify-admin",
      "displayName": "Email Deliverability Audit",
      "description": "Read-only: scans the customer database for malformed emails, role accounts, disposable domains, and bounce-suspect patterns to protect sender reputation.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "marketing_consent_only": {
          "type": "boolean",
          "required": false,
          "description": "Only scan customers who currently accept marketing — those are the ones at risk of being mailed"
        },
        "disposable_domains": {
          "type": "string",
          "required": false,
          "description": "Override built-in disposable-domain list"
        },
        "role_localparts": {
          "type": "string",
          "required": false,
          "description": "Local-part prefixes to flag as role accounts"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-email-deliverability-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-email-deliverability-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "e455d8c79a1786c6851d135f106922dea9a41d14fade9cc02fc22e3c8019c5b0"
        }
      ],
      "contentHash": "sha256:10be2ae51876922671939a52e8b4e096b8f93bee09b4f3009ee9387315242c73"
    },
    {
      "id": "shopify-exchange-vs-refund-ratio",
      "namespace": "shopify-admin",
      "displayName": "Exchange Vs Refund Ratio",
      "description": "Read-only: tracks what percentage of returns become exchanges vs. refunds vs. store credit — measures revenue recovery rate.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for return resolutions"
        },
        "compare_days_back": {
          "type": "number",
          "required": false,
          "description": "Optional prior period for comparison (0 = no comparison)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-exchange-vs-refund-ratio",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-exchange-vs-refund-ratio/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "c50bf5a86e78c8a7df2a88d9eaef560dd8ef026601c5bdc676108894fa92ee9a"
        }
      ],
      "contentHash": "sha256:d3d94cc3fb676014ae51100e60dea0433804a329e9738dba2d7f4e4755876686"
    },
    {
      "id": "shopify-file-storage-audit",
      "namespace": "shopify-admin",
      "displayName": "File Storage Audit",
      "description": "Read-only: lists every file in CDN storage, cross-references usage on products, pages, and articles, and flags orphaned/unreferenced assets.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "min_age_days": {
          "type": "number",
          "required": false,
          "description": "Only flag files older than this (avoid newly uploaded assets in flight)"
        },
        "file_types": {
          "type": "string",
          "required": false,
          "description": "Filter: `IMAGE`, `VIDEO`, `GENERIC_FILE`, or `all`"
        },
        "sample_orphans": {
          "type": "number",
          "required": false,
          "description": "Number of orphaned files to print in the human-format completion banner"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-file-storage-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-file-storage-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "92c03305ec2e64c1457ddd30e59a25cd436a0962f8bdbe57314110a7797dac7a"
        }
      ],
      "contentHash": "sha256:8acc43034cf3704155a25886ea74b1f9e1669c62dfc49817f2dcd92e22a41d76"
    },
    {
      "id": "shopify-frequently-bought-together",
      "namespace": "shopify-admin",
      "displayName": "Frequently Bought Together",
      "description": "Read-only: mines order history to find product pairs and triplets frequently purchased together, generating cross-sell and bundle recommendations.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Order lookback window"
        },
        "min_support": {
          "type": "number",
          "required": false,
          "description": "Minimum co-occurrence count to report a pair"
        },
        "max_results": {
          "type": "number",
          "required": false,
          "description": "Maximum product pairs to return"
        },
        "group_size": {
          "type": "number",
          "required": false,
          "description": "Pair size: `2` for pairs, `3` for triplets"
        },
        "collection_filter": {
          "type": "string",
          "required": false,
          "description": "Limit to products in a specific collection"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-frequently-bought-together",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-frequently-bought-together/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "47a517076012d73b7e5de03cedb081c008c4d8ac4e4b0bb9fb27827e5628a9a8"
        }
      ],
      "contentHash": "sha256:f39d3f65699704069bd7744d2fbe8f99bfe6e4b9ed39e665d05b9fe9eac6770f"
    },
    {
      "id": "shopify-fulfillment-location-routing",
      "namespace": "shopify-admin",
      "displayName": "Fulfillment Location Routing",
      "description": "Reassign fulfillment orders from one location to another for warehouse overflow or regional routing.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "source_location_id": {
          "type": "string",
          "required": true,
          "description": "GID of the location to move orders FROM"
        },
        "destination_location_id": {
          "type": "string",
          "required": true,
          "description": "GID of the location to move orders TO"
        },
        "order_filter": {
          "type": "string",
          "required": false,
          "description": "Optional order name filter (e.g., \"#1001,#1002\")"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview moves without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-fulfillment-location-routing",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-fulfillment-location-routing/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "fb62cbd5c8e923e8f925073111455ef772f3fc632af0c8a2c09efd1c31e292ae"
        }
      ],
      "contentHash": "sha256:848b905061d33fc6366e74a46eecf3a6a1ffd3c8670496c5596b8223021ffe24"
    },
    {
      "id": "shopify-fulfillment-status-digest",
      "namespace": "shopify-admin",
      "displayName": "Fulfillment Status Digest",
      "description": "Generate a daily fulfillment triage digest: all open orders segmented by fulfillment age and flagged for holds or exceptions.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "aging_thresholds_days": {
          "type": "string",
          "required": false,
          "description": "Day boundaries for age buckets (e.g., `[1,3,7]` creates: 0–1d, 1–3d, 3–7d, 7d+)"
        },
        "include_holds": {
          "type": "boolean",
          "required": false,
          "description": "Include orders with active fulfillment holds in a separate section"
        },
        "limit": {
          "type": "number",
          "required": false,
          "description": "Maximum orders to fetch per page"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-fulfillment-status-digest",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-fulfillment-status-digest/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "52379b821ff91486e52404e7f6b9a8d297dc6c6ac6d9fc47e3c1b8fee825d1a3"
        }
      ],
      "contentHash": "sha256:d024743e01780f1e4fa2fa6fb48e88e122a5211e816f33a035a41092316349f1"
    },
    {
      "id": "shopify-gift-card-balance-report",
      "namespace": "shopify-admin",
      "displayName": "Gift Card Balance Report",
      "description": "Read-only: lists all active gift cards with remaining balance, expiry, and last-used date for liability tracking.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "status": {
          "type": "string",
          "required": false,
          "description": "Filter by status: `enabled`, `disabled`, or `all`"
        },
        "expiring_within_days": {
          "type": "number",
          "required": false,
          "description": "Flag gift cards expiring within this many days"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-gift-card-balance-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-gift-card-balance-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "600d7758e67798beab86e698fc8b495bb6acabdffee76b5d77b86258093257db"
        }
      ],
      "contentHash": "sha256:83a1694afa2adc92251428064e36036a7d94374b3e5c030310d96bc4b6184b6b"
    },
    {
      "id": "shopify-gift-card-issuance",
      "namespace": "shopify-admin",
      "displayName": "Gift Card Issuance",
      "description": "Issue Shopify gift cards (store credit) to customers as a goodwill gesture, post-return incentive, or loyalty reward.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "customer_email": {
          "type": "string",
          "required": false,
          "description": "Customer email to look up and associate with the gift card"
        },
        "customer_id": {
          "type": "string",
          "required": false,
          "description": "Customer GID (alternative to email)"
        },
        "amount": {
          "type": "number",
          "required": true,
          "description": "Gift card value in the store's default currency"
        },
        "reason": {
          "type": "string",
          "required": false,
          "description": "Internal note logged on the gift card (e.g., `\"Goodwill: delayed shipment #1042\"`)"
        },
        "expires_on": {
          "type": "string",
          "required": false,
          "description": "Expiry date in ISO 8601 (e.g., `2026-12-31`); if omitted, gift card does not expire"
        },
        "tag_customer": {
          "type": "string",
          "required": false,
          "description": "Optional tag to add to the customer record (e.g., `goodwill-issued`)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-gift-card-issuance",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-gift-card-issuance/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "2faa3aab89f680493e1c7be5915b3691b0a90f579c7c543afeda837ecd21a4ec"
        }
      ],
      "contentHash": "sha256:8b574c1cee0053276f33d762f5b93bf7db65f23c6b26faea870dc635dcdbdfef"
    },
    {
      "id": "shopify-gift-card-liability-report",
      "namespace": "shopify-admin",
      "displayName": "Gift Card Liability Report",
      "description": "Read-only: calculates total outstanding gift card balance as a financial liability, broken down by issue cohort and remaining balance band.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "status": {
          "type": "string",
          "required": false,
          "description": "Filter by status: `enabled`, `disabled`, or `all`"
        },
        "balance_bands": {
          "type": "string",
          "required": false,
          "description": "Upper edges of balance bands (in store currency) for distribution table"
        },
        "stale_days": {
          "type": "number",
          "required": false,
          "description": "Cards untouched longer than this are flagged as breakage candidates"
        },
        "as_of": {
          "type": "string",
          "required": false,
          "description": "ISO date for the \"as of\" snapshot label on the report"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-gift-card-liability-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-gift-card-liability-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "e73f33e2a3e98c0013692e4e1a551e5dc7740f9e093f9772173fbf0dd28ccb11"
        }
      ],
      "contentHash": "sha256:0843df6b9354cf7a6787859e2e7c3af57c391afd7443af0a02ca15ad53d514c0"
    },
    {
      "id": "shopify-gift-message-extraction",
      "namespace": "shopify-admin",
      "displayName": "Gift Message Extraction",
      "description": "Read-only: extracts gift messages, gift recipients, and gift flags from order custom attributes and notes for fulfillment teams to print on packing slips.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window of orders to scan"
        },
        "status": {
          "type": "string",
          "required": false,
          "description": "Order status filter: `unfulfilled`, `partial`, `any`"
        },
        "message_keys": {
          "type": "string",
          "required": false,
          "description": "Custom attribute keys (any case) that may contain a gift message"
        },
        "recipient_keys": {
          "type": "string",
          "required": false,
          "description": "Custom attribute keys that may contain a recipient name"
        },
        "flag_keys": {
          "type": "string",
          "required": false,
          "description": "Custom attribute keys whose presence/value marks an order as a gift"
        },
        "include_order_note": {
          "type": "boolean",
          "required": false,
          "description": "Also scan the order-level `note` field for free-text gift messages"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-gift-message-extraction",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-gift-message-extraction/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "f403ae7c5ed541b936c3a529ba7b1fff9c1bb1d9117e6d6ce1d495670eda6f66"
        }
      ],
      "contentHash": "sha256:628ce4cec6ca3b18249d6f760922042074417929825e0d1189686b178d929370"
    },
    {
      "id": "shopify-high-risk-order-tagger",
      "namespace": "shopify-admin",
      "displayName": "High Risk Order Tagger",
      "description": "Tags orders flagged as high-risk for manual review and optionally places fulfillment holds to prevent shipping.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window (default: last 24 hours)"
        },
        "min_order_value": {
          "type": "number",
          "required": false,
          "description": "Only flag orders above this value"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Tag applied to flagged orders"
        },
        "hold_fulfillment": {
          "type": "boolean",
          "required": false,
          "description": "Also place a fulfillment hold on flagged orders"
        },
        "hold_reason": {
          "type": "string",
          "required": false,
          "description": "Fulfillment hold reason"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-high-risk-order-tagger",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-high-risk-order-tagger/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "db1e18e527e1eec86f46a4a9c0e6075320a16f1253f30a171de0688ffe04e248"
        }
      ],
      "contentHash": "sha256:ab3e225619baa41c5e3866a4c3f36b9f452da046c72e8cee84aa2940e06b1a03"
    },
    {
      "id": "shopify-inventory-adjustment",
      "namespace": "shopify-admin",
      "displayName": "Inventory Adjustment",
      "description": "Apply inventory quantity adjustments to specific variants at specific locations — after a cycle count, 3PL return batch, or sync discrepancy correction.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.inventory.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "adjustments": {
          "type": "string",
          "required": true,
          "description": "Array of `{sku, location_id, delta}` objects. `delta` is the signed quantity change (e.g., `+5` to add 5 units, `-3` to remove 3)"
        },
        "reason": {
          "type": "string",
          "required": false,
          "description": "Adjustment reason logged to audit trail: `correction`, `cycle_count`, `damaged`, `received`, `reservation_created`, `reservation_deleted`, `shrinkage`"
        },
        "reference_document_uri": {
          "type": "string",
          "required": false,
          "description": "URI to link the adjustment to a PO, return, or cycle count document"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-inventory-adjustment",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-inventory-adjustment/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "8f24a60722036fcbe1a66c9f3381dde582bb835b64d6dce97d420159ad782aea"
        }
      ],
      "contentHash": "sha256:8f79cf66d49bae2bd0b05abaa1020a900a3bfe03feb8b8fe7df5cd2bcea930b7"
    },
    {
      "id": "shopify-inventory-aging-report",
      "namespace": "shopify-admin",
      "displayName": "Inventory Aging Report",
      "description": "Read-only: categorizes inventory into aging buckets (0-30, 31-60, 61-90, 90+ days) based on time since last sale or receipt.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "buckets": {
          "type": "string",
          "required": false,
          "description": "Comma-separated aging buckets in days"
        },
        "carrying_cost_pct": {
          "type": "number",
          "required": false,
          "description": "Annual carrying cost as % of inventory value (industry avg 20-30%)"
        },
        "vendor_filter": {
          "type": "string",
          "required": false,
          "description": "Scope to specific vendor"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-inventory-aging-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-inventory-aging-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "b4ea3515965aedb9668d898d9e335db6cc98b2d7e96cfd4a01ab9f2e6f358b2e"
        }
      ],
      "contentHash": "sha256:dcdc76eb77c08b6fd89d78f3febffe67d4233ca327295a012bc9d5ac1e1ea01c"
    },
    {
      "id": "shopify-inventory-transfer-between-locations",
      "namespace": "shopify-admin",
      "displayName": "Inventory Transfer Between Locations",
      "description": "Moves inventory units from one location to another by decrementing the source and incrementing the destination.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.inventory.update",
          "shop.read"
        ]
      },
      "input": {
        "source_location_id": {
          "type": "string",
          "required": true,
          "description": "GID of the location to move stock FROM"
        },
        "destination_location_id": {
          "type": "string",
          "required": true,
          "description": "GID of the location to move stock TO"
        },
        "transfers": {
          "type": "string",
          "required": true,
          "description": "List of `{sku, quantity}` objects to transfer"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview adjustments without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-inventory-transfer-between-locations",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-inventory-transfer-between-locations/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "e867475946698a7d2560badd3fc2922b9612a6d971ba6b4928e66ed3a83cd25c"
        }
      ],
      "contentHash": "sha256:3074fb98ee14399bae7937eda35cca1d76799e4e7d031a5ec1c3defae5060b28"
    },
    {
      "id": "shopify-inventory-valuation-report",
      "namespace": "shopify-admin",
      "displayName": "Inventory Valuation Report",
      "description": "Read-only: calculates total inventory value (quantity × cost) per location and per vendor for accounting and insurance.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "breakdown": {
          "type": "string",
          "required": false,
          "description": "Breakdown level: `location`, `vendor`, or `both`"
        },
        "include_zero_cost": {
          "type": "boolean",
          "required": false,
          "description": "Include items with no cost set (shown as $0)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-inventory-valuation-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-inventory-valuation-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "f9acbb0971d90d25d1623fc8813989812bffe7e2c765c09eb471236654f6a459"
        }
      ],
      "contentHash": "sha256:a1ce1b0c908162d880471aaef36fb3e068a01ed1370dcb3b2fa65ea61c9d258d"
    },
    {
      "id": "shopify-low-inventory-restock",
      "namespace": "shopify-admin",
      "displayName": "Low Inventory Restock",
      "description": "Query all tracked product variants below a stock threshold and export a restock list grouped by vendor.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "threshold": {
          "type": "number",
          "required": false,
          "description": "Variants at or below this quantity are included"
        },
        "location_id": {
          "type": "string",
          "required": false,
          "description": "GID of a specific location to filter by (optional; if omitted, uses `inventoryQuantity` across all locations)"
        },
        "include_zero_stock": {
          "type": "boolean",
          "required": false,
          "description": "Include variants with 0 quantity"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-low-inventory-restock",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-low-inventory-restock/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "4ae9d78cf506fe158d20261aed7b1523099225fa41100aaeab7622c1a1b0d818"
        }
      ],
      "contentHash": "sha256:df8080952b975729d90133464c4d78472f4b5979d990dbef5c2f5caab9c5e7b3"
    },
    {
      "id": "shopify-loyalty-segment-export",
      "namespace": "shopify-admin",
      "displayName": "Loyalty Segment Export",
      "description": "Identify high-LTV customers by order count and lifetime spend, tag them, and export a loyalty-ready contact list.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "`human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without tagging"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime order count"
        },
        "min_spend": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime spend (store currency)"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Tag applied to qualifying customers"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-loyalty-segment-export",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-loyalty-segment-export/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3dda68c97e2627965593b7aa4cb57da41c05105102534fdfbb0bb056e5a5f02e"
        }
      ],
      "contentHash": "sha256:59ec208da3976e4609b9abfa0759ec185f138372c4618c67207f0d9b1da7a289"
    },
    {
      "id": "shopify-marketing-consent-report",
      "namespace": "shopify-admin",
      "displayName": "Marketing Consent Report",
      "description": "Read-only: audits email and SMS marketing consent status across the customer base for compliance and segmentation.",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "channel": {
          "type": "string",
          "required": false,
          "description": "Consent channel to audit: `email`, `sms`, or `both`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-marketing-consent-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-marketing-consent-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "4edf048689c13f08010d4b41243a98dfea667466abefd4837e295f8796ac4ea3"
        }
      ],
      "contentHash": "sha256:5d914dcf8afa2cef0fc0a73675bd50c4de80bc813bea36495162056825c2e264"
    },
    {
      "id": "shopify-metafield-bulk-update",
      "namespace": "shopify-admin",
      "displayName": "Metafield Bulk Update",
      "description": "Bulk set or delete metafields on products, variants, or customers filtered by tag or collection.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "resource_type": {
          "type": "string",
          "required": false,
          "description": "Resource to update: `product`, `variant`, or `customer`"
        },
        "filter": {
          "type": "string",
          "required": true,
          "description": "Filter query (e.g., `tag:summer-2026`, `vendor:Nike`)"
        },
        "namespace": {
          "type": "string",
          "required": true,
          "description": "Metafield namespace (e.g., `custom`)"
        },
        "key": {
          "type": "string",
          "required": true,
          "description": "Metafield key (e.g., `material`)"
        },
        "value": {
          "type": "string",
          "required": false,
          "description": "Value to set. If omitted and `action: delete`, metafield is deleted"
        },
        "value_type": {
          "type": "string",
          "required": false,
          "description": "Metafield type (e.g., `single_line_text_field`, `boolean`, `number_integer`)"
        },
        "action": {
          "type": "string",
          "required": false,
          "description": "`set` or `delete`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-metafield-bulk-update",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-metafield-bulk-update/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "9395a055e1ee16e32b3b0ac1c0b8f90ba3b11418dfcdf723f41a5e4a411128d0"
        }
      ],
      "contentHash": "sha256:17a4427fdfff991c8a9cb1372b83dcc19365c163e5f2d51c5e1e9f4f83a16336"
    },
    {
      "id": "shopify-metafield-definition-audit",
      "namespace": "shopify-admin",
      "displayName": "Metafield Definition Audit",
      "description": "Read-only: enumerates every metafield definition across all owner types and flags unused, undocumented, or duplicate-key definitions.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "owner_types": {
          "type": "string",
          "required": false,
          "description": "Comma-separated owner types to scan (e.g. `PRODUCT,CUSTOMER`); `all` scans every supported type"
        },
        "flag_unused": {
          "type": "boolean",
          "required": false,
          "description": "Flag definitions whose `metafieldsCount` is zero"
        },
        "flag_undocumented": {
          "type": "boolean",
          "required": false,
          "description": "Flag definitions with empty/null `description`"
        },
        "flag_duplicates": {
          "type": "boolean",
          "required": false,
          "description": "Flag `namespace.key` pairs that exist on more than one owner type"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-metafield-definition-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-metafield-definition-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "4e45e0b3208f9fa176c5b66196f252cb1835b2dc798db619225804462704ff3d"
        }
      ],
      "contentHash": "sha256:3540745f139ac623f2d2f723642b279d9f5d6159b67466ce3858608ee5159ef0"
    },
    {
      "id": "shopify-multi-location-inventory-audit",
      "namespace": "shopify-admin",
      "displayName": "Multi Location Inventory Audit",
      "description": "Audit inventory levels across all active locations, flagging variants where Available quantity is negative or Committed exceeds On Hand — a signal of inventory sync drift.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "location_ids": {
          "type": "string",
          "required": false,
          "description": "Specific location GIDs to audit (default: all active locations)"
        },
        "flag_negative_available": {
          "type": "boolean",
          "required": false,
          "description": "Flag variants where `available < 0`"
        },
        "flag_committed_exceeds_onhand": {
          "type": "boolean",
          "required": false,
          "description": "Flag variants where `committed > on_hand`"
        },
        "include_untracked": {
          "type": "boolean",
          "required": false,
          "description": "Include variants with inventory tracking disabled"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-multi-location-inventory-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-multi-location-inventory-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ca50f7bf411645f8b2d2d00cabeb7d4ea61752aff6a3894c11838c4e9cc6051c"
        }
      ],
      "contentHash": "sha256:8c3d8591b5a182d9be9097a0184bcb4d03422f3c1dc328695b3ed9ea3c5ba8fc"
    },
    {
      "id": "shopify-order-attribution-report",
      "namespace": "shopify-admin",
      "displayName": "Order Attribution Report",
      "description": "Read-only: parses UTM source/medium/campaign from order landing site URLs to attribute revenue, AOV, and conversion volume to marketing channels.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders to attribute"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Primary grouping dimension: `source`, `medium`, `campaign`, or `source_medium`"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders per group to include in the report"
        },
        "include_organic": {
          "type": "boolean",
          "required": false,
          "description": "When false, omit orders with no UTM parameters from the breakdown"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-attribution-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-attribution-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "2d415e43dc176c8f1848a8cb2ff2b77819ffc9b9c09489169d90dace6a40bed9"
        }
      ],
      "contentHash": "sha256:c22973286bfd732ced9823dd1943b679f6bf599151cfe04538c45d3b6c9ac10f"
    },
    {
      "id": "shopify-order-cancellation-analysis",
      "namespace": "shopify-admin",
      "displayName": "Order Cancellation Analysis",
      "description": "Read-only: tracks cancellation rate over time and breaks down cancelled orders by cancelReason to surface fraud, inventory, customer, and declined-payment patterns.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders included in the analysis"
        },
        "bucket": {
          "type": "string",
          "required": false,
          "description": "Time bucket: `day`, `week`, or `month`"
        },
        "min_value": {
          "type": "number",
          "required": false,
          "description": "Only include orders above this total value"
        },
        "reason_filter": {
          "type": "string",
          "required": false,
          "description": "Optional filter to a single `cancelReason`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-cancellation-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-cancellation-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3c85bee9cc40c96baf0eadd4dc70e5b32faf9d557c899a00c2b4705537f67d9e"
        }
      ],
      "contentHash": "sha256:f010f98e8786764a8de676cb77913701906e994cf975c75f0073accaeed2219f"
    },
    {
      "id": "shopify-order-hold-and-release",
      "namespace": "shopify-admin",
      "displayName": "Order Hold And Release",
      "description": "Place or release fulfillment holds on open orders in batch — with a stated reason and optional expiry date.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "action": {
          "type": "string",
          "required": true,
          "description": "`hold` or `release`"
        },
        "order_ids": {
          "type": "string",
          "required": false,
          "description": "Array of order GIDs to target (e.g., `[\"gid://shopify/Order/123\"]`)"
        },
        "query_filter": {
          "type": "string",
          "required": false,
          "description": "Shopify order search query to select orders (e.g., `\"tag:fraud-review\"`)"
        },
        "reason": {
          "type": "string",
          "required": false,
          "description": "Hold reason: `AWAITING_PAYMENT`, `HIGH_RISK_OF_FRAUD`, `INCORRECT_ADDRESS`, `INVENTORY_OUT_OF_STOCK`, `OTHER`"
        },
        "reason_notes": {
          "type": "string",
          "required": false,
          "description": "Free-text note visible to fulfillment staff"
        },
        "hold_until": {
          "type": "string",
          "required": false,
          "description": "ISO 8601 date when hold auto-expires (optional)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-hold-and-release",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-hold-and-release/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "e8d5954a2f55f38a88785473edc733cade09a4d4ade1ce8c188e4fd04ed86eba"
        }
      ],
      "contentHash": "sha256:eb76f4f31559557f11621755f5c79f563d9aee17d7e786ebc367258fd5919f56"
    },
    {
      "id": "shopify-order-lookup-and-summary",
      "namespace": "shopify-admin",
      "displayName": "Order Lookup And Summary",
      "description": "Retrieve and summarize full order details for a customer by email, order number, or phone number.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "lookup_by": {
          "type": "string",
          "required": true,
          "description": "`order_number`, `email`, or `phone`"
        },
        "lookup_value": {
          "type": "string",
          "required": true,
          "description": "The value to search for (e.g., `#1001`, `jane@example.com`, `+15551234567`)"
        },
        "limit": {
          "type": "number",
          "required": false,
          "description": "Maximum number of orders to return"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-lookup-and-summary",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-lookup-and-summary/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ce6454d0e24b722eb342e6845f94cbb787e48b87b128f79169ba5da9b3107057"
        }
      ],
      "contentHash": "sha256:acd44238d056a11fd13beccd1ece9d89a1ff149a7731dc6bd34ad40a2efac723"
    },
    {
      "id": "shopify-order-notes-and-attributes-report",
      "namespace": "shopify-admin",
      "displayName": "Order Notes And Attributes Report",
      "description": "Read-only: extracts and tabulates order notes and custom attributes for ops review of gift messages and special instructions.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window (default: last 24 hours for daily ops use)"
        },
        "attribute_keys": {
          "type": "string",
          "required": false,
          "description": "Specific line item attribute keys to extract (e.g., `[\"gift_message\", \"engraving\"]`); empty = all"
        },
        "only_with_notes": {
          "type": "boolean",
          "required": false,
          "description": "Only include orders that have a note or attributes"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-notes-and-attributes-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-notes-and-attributes-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "0958221c3f3eeeb366973cf296c8136b4d765497acd4ab358bad6a4b8b2a45ea"
        }
      ],
      "contentHash": "sha256:00b53ea238d1ff2db4ea89c56501859fe89d60f623a00a1d649002361b266fb2"
    },
    {
      "id": "shopify-order-risk-report",
      "namespace": "shopify-admin",
      "displayName": "Order Risk Report",
      "description": "Read-only: lists orders by fraud risk level with indicator details for building a manual review queue.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "risk_level": {
          "type": "string",
          "required": false,
          "description": "Minimum risk level to include: `high`, `medium`, or `all`"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders to review"
        },
        "min_order_value": {
          "type": "number",
          "required": false,
          "description": "Only include orders above this value (USD)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-order-risk-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-order-risk-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "fe053d56885b893de17b6728ce72b9c6d7426f36b6e98996df14b12e54ca292b"
        }
      ],
      "contentHash": "sha256:0ddae9d678bfdfd97fff52059eb649bef407ade196da437c45e2b4341dab8361"
    },
    {
      "id": "shopify-page-content-audit",
      "namespace": "shopify-admin",
      "displayName": "Page Content Audit",
      "description": "Read-only: lists all pages and blog posts, flags empty or short content and missing SEO fields.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "min_body_length": {
          "type": "number",
          "required": false,
          "description": "Flag pages with body content shorter than this (characters)"
        },
        "include_unpublished": {
          "type": "boolean",
          "required": false,
          "description": "Also audit unpublished pages and articles"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-page-content-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-page-content-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "713ffa7adf3197b70e4dfcef401b61ebe07dfa34809f7e8bd01f22930beadbb3"
        }
      ],
      "contentHash": "sha256:ac5cc831b7b6c0b7bd6f006d05d897bdfa82f1c11cf696a3ac1f3b3f5a7dea89"
    },
    {
      "id": "shopify-partial-refund-pattern-detector",
      "namespace": "shopify-admin",
      "displayName": "Partial Refund Pattern Detector",
      "description": "Read-only: surfaces orders with multiple partial refunds or unusually high partial-refund-to-total ratios that may indicate fraud, chronic complaints, or process gaps.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders to analyze"
        },
        "min_partials": {
          "type": "number",
          "required": false,
          "description": "Minimum number of partial refunds to flag an order"
        },
        "ratio_threshold": {
          "type": "number",
          "required": false,
          "description": "Flag orders where total refunded / order total exceeds this ratio (still partial, i.e. below 1.0)"
        },
        "min_order_value": {
          "type": "number",
          "required": false,
          "description": "Skip low-value orders below this amount"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-partial-refund-pattern-detector",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-partial-refund-pattern-detector/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "da241d1dbdb94304f5d429e78c9aea36f0448f22df25cd10b504cfc8e2d0cb40"
        }
      ],
      "contentHash": "sha256:54f4296bc0accb806448c63bacbb75d622de32e0b270f979471b68ba14c6e63e"
    },
    {
      "id": "shopify-payout-reconciliation",
      "namespace": "shopify-admin",
      "displayName": "Payout Reconciliation",
      "description": "Read-only: reconciles Shopify Payments payouts against the order transactions that funded them and flags amount discrepancies.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window covering payouts issued in this period"
        },
        "tolerance": {
          "type": "number",
          "required": false,
          "description": "Acceptable delta in store currency before flagging a discrepancy"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-payout-reconciliation",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-payout-reconciliation/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "29b0c8d0f9196ba4e230f9328180bf9aa92ef7fb6c8a7a894caa8f41aa13ff70"
        }
      ],
      "contentHash": "sha256:f4d5e01fa51f53b39bc17c4a51c999242b31e5bd4536ea5c48973cef66db8b5c"
    },
    {
      "id": "shopify-post-purchase-survey-trigger",
      "namespace": "shopify-admin",
      "displayName": "Post Purchase Survey Trigger",
      "description": "Read-only: identifies orders 7–14 days post-fulfillment that are eligible for a post-purchase survey campaign, excluding refunded or cancelled orders.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "survey_min_days": {
          "type": "number",
          "required": false,
          "description": "Earliest days after fulfillment to survey (give time for delivery + initial use)"
        },
        "survey_max_days": {
          "type": "number",
          "required": false,
          "description": "Latest days after fulfillment to survey (recall fades after ~2 weeks)"
        },
        "marketing_consent_only": {
          "type": "boolean",
          "required": false,
          "description": "Restrict to customers with `marketingState: SUBSCRIBED`"
        },
        "exclude_repeat_recipients_days": {
          "type": "number",
          "required": false,
          "description": "Skip customers who were already on a survey list within this window (caller-tracked)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-post-purchase-survey-trigger",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-post-purchase-survey-trigger/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "2cef16c5f4882e46b21a580765c7430247c72ed6c79cd1144b2d2cab8702159e"
        }
      ],
      "contentHash": "sha256:7da8129bafd5017c78af4b79e3046f18ad4604ed95065226dd0c7f7f3cd9e340"
    },
    {
      "id": "shopify-price-elasticity-analyzer",
      "namespace": "shopify-admin",
      "displayName": "Price Elasticity Analyzer",
      "description": "Read-only: analyzes the relationship between product pricing and sales velocity to identify optimal price points and price-sensitive products.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Sales lookback window"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Group comparison: `product_type`, `vendor`, or `collection`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-price-elasticity-analyzer",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-price-elasticity-analyzer/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "4e208df81c4c36c98c0213a9155770a4aefb9b61c302662b42a8c278b6dd11c0"
        }
      ],
      "contentHash": "sha256:c682f4259cba517c0c95adb8cb817cf5ce747a67106b610b5f7b8fb87de67a56"
    },
    {
      "id": "shopify-product-affinity-cross-sell",
      "namespace": "shopify-admin",
      "displayName": "Product Affinity Cross Sell",
      "description": "Mine order history to find which products are most frequently bought together, then rank pairs by support, confidence, and lift to power bundles and cross-sell recommendations.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "date_range_start": {
          "type": "string",
          "required": true,
          "description": "Start date in ISO 8601 (e.g., `2025-01-01`)"
        },
        "date_range_end": {
          "type": "string",
          "required": true,
          "description": "End date in ISO 8601 (e.g., `2025-03-31`)"
        },
        "min_support": {
          "type": "number",
          "required": false,
          "description": "Minimum number of orders a pair must co-appear in to be included"
        },
        "min_confidence": {
          "type": "number",
          "required": false,
          "description": "Minimum P(B\\"
        },
        "min_lift": {
          "type": "number",
          "required": false,
          "description": "Only include pairs where lift > this value (> 1 means non-random)"
        },
        "top_n": {
          "type": "number",
          "required": false,
          "description": "Number of top pairs to show in the ranked output"
        },
        "sort_by": {
          "type": "string",
          "required": false,
          "description": "Ranking metric: `lift`, `confidence`, or `support`"
        },
        "exclude_tags": {
          "type": "string",
          "required": false,
          "description": "Comma-separated product tags to exclude (e.g., `gift-wrap,donation`)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-product-affinity-cross-sell",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-product-affinity-cross-sell/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "2404e5dc12fe67fab54f5ac17492881c902fc7a34156139fc51feed6814fdb19"
        }
      ],
      "contentHash": "sha256:119ccc0cfca186ccbb553ea138ddb7a22f9d9692ed946d9a40115a988b06f201"
    },
    {
      "id": "shopify-product-data-completeness-score",
      "namespace": "shopify-admin",
      "displayName": "Product Data Completeness Score",
      "description": "Read-only: scores each product on data completeness across description, images, SEO, weight, barcode, cost, and metafields.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "status_filter": {
          "type": "string",
          "required": false,
          "description": "Product status to score: `active`, `draft`, or `all`"
        },
        "required_metafields": {
          "type": "string",
          "required": false,
          "description": "List of `namespace.key` metafields that are required (e.g., `[\"custom.material\"]`)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-product-data-completeness-score",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-product-data-completeness-score/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "bde7fb824001e5b9553702c9eb6b52dffd527010341187cb8970ce5d99cc5368"
        }
      ],
      "contentHash": "sha256:6e150281089f8163d9e71d7d36bc5b40efd18bf201bb70938eefd7159c739050"
    },
    {
      "id": "shopify-product-image-audit",
      "namespace": "shopify-admin",
      "displayName": "Product Image Audit",
      "description": "Read-only: flags products and variants with missing images or fewer than a minimum number of images.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "min_images": {
          "type": "number",
          "required": false,
          "description": "Flag products with fewer than this many images"
        },
        "check_variants": {
          "type": "boolean",
          "required": false,
          "description": "Also flag variants with no assigned image"
        },
        "status_filter": {
          "type": "string",
          "required": false,
          "description": "Product status to scan: `active`, `draft`, or `all`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-product-image-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-product-image-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ff91b2c6c2717fbad9fef3c88563c294a29012058612f7cd72665f76926c0e7a"
        }
      ],
      "contentHash": "sha256:a33604eeb73f7f374fba2b72d30a2f982ce9568695bd129a243d3f2f60365a13"
    },
    {
      "id": "shopify-product-lifecycle-manager",
      "namespace": "shopify-admin",
      "displayName": "Product Lifecycle Manager",
      "description": "Bulk transition products through DRAFT → ACTIVE → ARCHIVED status for seasonal launches and sunsetting.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "filter": {
          "type": "string",
          "required": true,
          "description": "Product filter query (e.g., `tag:summer-2026`, `vendor:Nike`, `status:draft`)"
        },
        "target_status": {
          "type": "string",
          "required": true,
          "description": "Target status: `ACTIVE`, `DRAFT`, or `ARCHIVED`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview products without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-product-lifecycle-manager",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-product-lifecycle-manager/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "cbce1da7b20b0dfa9633f9e4ed018deb43c9f38df736e6bf4f65a7cd18ed6a60"
        }
      ],
      "contentHash": "sha256:ea1b1cdfc190b72a8727d6b9d14d3ed3512cd73d084e4e20fda4fe51b04d45b1"
    },
    {
      "id": "shopify-product-tag-bulk-update",
      "namespace": "shopify-admin",
      "displayName": "Product Tag Bulk Update",
      "description": "Add or remove tags on all products matching a collection, existing tag, or search query — for campaign setup, teardown, or catalog organization.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "action": {
          "type": "string",
          "required": true,
          "description": "`add` or `remove`"
        },
        "tags": {
          "type": "string",
          "required": true,
          "description": "One or more tag strings to add or remove (e.g., `[\"summer-sale\", \"clearance\"]`)"
        },
        "collection_id": {
          "type": "string",
          "required": false,
          "description": "GID of a collection — target all products in this collection"
        },
        "filter_tag": {
          "type": "string",
          "required": false,
          "description": "Target all products that currently have this tag"
        },
        "query_filter": {
          "type": "string",
          "required": false,
          "description": "Shopify product search query (e.g., `\"product_type:Apparel\"`)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-product-tag-bulk-update",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-product-tag-bulk-update/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "6265a0d309bd7abe2f210948d8d0cf354a642c04a236c04d345c869ff1dc1bd6"
        }
      ],
      "contentHash": "sha256:edd54899013c87dff94801dbff423762ee02bcc09bc4f2d081e459dd3d35e5de"
    },
    {
      "id": "shopify-profit-margin-calculator",
      "namespace": "shopify-admin",
      "displayName": "Profit Margin Calculator",
      "description": "Read-only: calculates true net profit per order and per product by factoring in COGS, shipping costs, transaction fees, discounts, refunds, and taxes.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Grouping: `order`, `product`, or `variant`"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders for a product to appear (product/variant mode)"
        },
        "include_refunded": {
          "type": "boolean",
          "required": false,
          "description": "Include fully refunded orders in calculation"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-profit-margin-calculator",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-profit-margin-calculator/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "369c0e0c3949d8f036386229bd4b2f7a7128417ec1dd26ee05f1ac27c4e6c0c3"
        }
      ],
      "contentHash": "sha256:18f679d348b62b93eb0852e8153d531a1bc734e6265cdf9942c13c46df812c0c"
    },
    {
      "id": "shopify-promo-code-bulk-generator",
      "namespace": "shopify-admin",
      "displayName": "Promo Code Bulk Generator",
      "description": "Bulk-creates a batch of unique discount codes for campaigns, giveaways, or partner distributions — each code is its own DiscountCodeBasic with single-use limit by default.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview the codes that would be created without executing mutations"
        },
        "prefix": {
          "type": "string",
          "required": true,
          "description": "Prefix for every generated code (e.g., `GIVEAWAY` produces `GIVEAWAY-A4F2X9`)"
        },
        "count": {
          "type": "number",
          "required": true,
          "description": "Number of unique codes to generate (max 1000 per run)"
        },
        "value_type": {
          "type": "string",
          "required": true,
          "description": "Discount type: `percentage`, `fixed_amount`, or `free_shipping`"
        },
        "value": {
          "type": "number",
          "required": false,
          "description": "Numeric value: percent off (1–100) for `percentage`; currency amount for `fixed_amount`; ignored for `free_shipping`"
        },
        "usage_limit": {
          "type": "number",
          "required": false,
          "description": "How many times each individual code can be redeemed"
        },
        "starts_at": {
          "type": "string",
          "required": false,
          "description": "ISO8601 datetime when codes become valid"
        },
        "ends_at": {
          "type": "string",
          "required": false,
          "description": "ISO8601 datetime when codes expire (omit for no expiry)"
        },
        "applies_to": {
          "type": "string",
          "required": false,
          "description": "Code applies to: `order` (entire order) or `shipping_only` (with `free_shipping` value type)"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-promo-code-bulk-generator",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-promo-code-bulk-generator/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "20149548498415245f0ad4116ce6f934f022cb67221a41d39d31419a148d577b"
        }
      ],
      "contentHash": "sha256:1f6d82868c1904103ba6f10994c46ac03762274a16a6992075ff18bedf6062de"
    },
    {
      "id": "shopify-publication-channel-audit",
      "namespace": "shopify-admin",
      "displayName": "Publication Channel Audit",
      "description": "Read-only: shows which products are published to which sales channels and flags unpublished active products.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "required_channels": {
          "type": "string",
          "required": false,
          "description": "Channel names that all active products should be on"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-publication-channel-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-publication-channel-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "79f598a04f5f8e19f07b3689bc332818052c4c44e9f21a55e047e2675119b6b0"
        }
      ],
      "contentHash": "sha256:cafb5bb974a2941ef1765dd2c0039b81324da34bbeee9dd4749933faad2ff5bf"
    },
    {
      "id": "shopify-referral-source-attribution",
      "namespace": "shopify-admin",
      "displayName": "Referral Source Attribution",
      "description": "Read-only: parses each order's landing site and referrer URL to break down orders, revenue, and AOV by traffic source — direct, organic, paid, social, email, or referral domain.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window in days"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders per source to include in the human-readable summary"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Grouping level: `category` (direct/organic/paid/social/email/referral), `domain` (raw referrer host), or `utm_source` (UTM param value)"
        },
        "include_utm": {
          "type": "boolean",
          "required": false,
          "description": "When true, parse `utm_source`, `utm_medium`, `utm_campaign` from `landingPageUrl` query string"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-referral-source-attribution",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-referral-source-attribution/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "9496017507863ce1f0565f5568a507ffa3bce5f4c7da338665b43bb13e59f894"
        }
      ],
      "contentHash": "sha256:d9bebbf084abe89faabada247b973c7b28bf00539654da36b2534116e85ba4a0"
    },
    {
      "id": "shopify-refund-and-reorder",
      "namespace": "shopify-admin",
      "displayName": "Refund And Reorder",
      "description": "Process a full or partial refund on an order and optionally create a replacement draft order for the customer.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.order.write",
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "order_id": {
          "type": "string",
          "required": true,
          "description": "GID of the order (e.g., `gid://shopify/Order/12345`)"
        },
        "refund_line_items": {
          "type": "string",
          "required": false,
          "description": "Array of `{line_item_id, quantity}` to refund; if omitted, refunds all refundable quantities"
        },
        "reason": {
          "type": "string",
          "required": false,
          "description": "Refund reason: `customer`, `fraud`, `inventory`, `declined`, `other`"
        },
        "create_replacement": {
          "type": "boolean",
          "required": false,
          "description": "If true, create a draft order with the same line items after refund"
        },
        "notify_customer": {
          "type": "boolean",
          "required": false,
          "description": "Send refund notification email to customer"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-refund-and-reorder",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-refund-and-reorder/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "55e81cc8398dbf2f41f0b8ce190f8ba4c536925ebf350b9a5291e00f3d657077"
        }
      ],
      "contentHash": "sha256:d91e6653ea08b9f0556e5973b1654cdb25b707bf9a4fd9606d27012d9ead951a"
    },
    {
      "id": "shopify-refund-rate-analysis",
      "namespace": "shopify-admin",
      "displayName": "Refund Rate Analysis",
      "description": "Read-only: calculates refund rate by product, collection, or period — identifies quality and listing issues.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Breakdown: `product`, `vendor`, or `period`"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders per group to include in rate calculation"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-refund-rate-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-refund-rate-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "978b4d6be7deac1c17cc798d19257786ef474f9deba69a112d00c6ec7acd5689"
        }
      ],
      "contentHash": "sha256:9e9b9aa81f86cb44c66ecd78eaa3ce7bb2caa7cb37a290feb0866a8a52a83a01"
    },
    {
      "id": "shopify-repeat-purchase-rate",
      "namespace": "shopify-admin",
      "displayName": "Repeat Purchase Rate",
      "description": "Read-only: calculates what percentage of customers place 2+ orders within N days, segmented by product or collection.",
      "category": "order-intelligence",
      "tags": [
        "shopify",
        "order-intelligence"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Acquisition window — customers first purchased in this period"
        },
        "repeat_window": {
          "type": "number",
          "required": false,
          "description": "Days after first purchase to look for a repeat order"
        },
        "segment_by": {
          "type": "string",
          "required": false,
          "description": "Segment repeat rate by: `product`, `none`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-repeat-purchase-rate",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-repeat-purchase-rate/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "151aab6c9bb52405d6dc240f5a15ba22267d4a338a5e0f087defe306adb0e405"
        }
      ],
      "contentHash": "sha256:dc974770989125d455530589c2ae31c91d5d9292dcd8e9a287b81135f44aa855"
    },
    {
      "id": "shopify-restock-on-return",
      "namespace": "shopify-admin",
      "displayName": "Restock On Return",
      "description": "For approved/closed returns, restocks inventory at the return location by adjusting on-hand quantities for each returned line item.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.inventory.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview restock plan without executing inventory mutations"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for recently completed returns"
        },
        "return_status": {
          "type": "string",
          "required": false,
          "description": "Only restock returns in this status: `CLOSED`, `OPEN`, or `ANY`"
        },
        "location_id": {
          "type": "string",
          "required": false,
          "description": "If set, restock only returns whose inventory destination matches this location GID"
        },
        "restock_only_return_reasons": {
          "type": "string",
          "required": false,
          "description": "If set (e.g., `[\"UNWANTED\", \"SI"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-restock-on-return",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-restock-on-return/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "a48e68027884dd985acd48fb1335913ddc4459729a54941ba7c740b8e422febe"
        }
      ],
      "contentHash": "sha256:414aeb65154e44952cdf0acfd552877c36b087af5bf9b6fc0d8bf12d2fde7151"
    },
    {
      "id": "shopify-return-cost-attribution",
      "namespace": "shopify-admin",
      "displayName": "Return Cost Attribution",
      "description": "Read-only: calculates the true cost of returns by reason and product — refund dollars, restocking impact, shipping cost lost, and COGS impact for items written off.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for returns"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Aggregation level: `reason`, `product`, `sku`, or `reason_x_product`"
        },
        "min_returns": {
          "type": "number",
          "required": false,
          "description": "Minimum returns per group to include in summary"
        },
        "writeoff_reasons": {
          "type": "string",
          "required": false,
          "description": "Return reasons whose items are treated as non-restockable (full COGS write-off)"
        },
        "flat_restocking_cost": {
          "type": "number",
          "required": false,
          "description": "Average labor cost per return line item to model restocking workload"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-return-cost-attribution",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-return-cost-attribution/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "7b2f13286fb7c13b868594d2a21e4f8a8f79e112505bdaf260f170c29a374d93"
        }
      ],
      "contentHash": "sha256:849fb48b7a46da50c08f309a366a4ca9112bd21bba6a8b70f2b17276b3252862"
    },
    {
      "id": "shopify-return-fraud-detector",
      "namespace": "shopify-admin",
      "displayName": "Return Fraud Detector",
      "description": "Read-only: identifies customers with abnormal return behavior — high return rate, wardrobing patterns, or serial returner profiles — for manual review.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for orders and returns"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime orders for a customer to be evaluated (avoid penalizing one-off accidents)"
        },
        "return_rate_threshold": {
          "type": "number",
          "required": false,
          "description": "Fraction of orders returned to flag as high (default 40%)"
        },
        "wardrobing_window_days": {
          "type": "number",
          "required": false,
          "description": "Window between delivery and return-initiated to flag as wardrobing"
        },
        "serial_threshold": {
          "type": "number",
          "required": false,
          "description": "Minimum total returns to flag as serial returner"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-return-fraud-detector",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-return-fraud-detector/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "54956e419c07d7ed7a204c9d23ea3d54270739ed4898d2ac25c868c0e2059b49"
        }
      ],
      "contentHash": "sha256:cdda9a26d4e8db45fddd40319635febb72153477cb8cbc04a7b65c172ee52e0b"
    },
    {
      "id": "shopify-return-initiation",
      "namespace": "shopify-admin",
      "displayName": "Return Initiation",
      "description": "Create a formal Shopify Return record for an order, specifying line items, quantities, and return reason — the first step in the native returns workflow.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "order_id": {
          "type": "string",
          "required": true,
          "description": "GID of the order (e.g., `gid://shopify/Order/12345`)"
        },
        "return_line_items": {
          "type": "string",
          "required": false,
          "description": "Array of `{fulfillment_line_item_id, quantity, reason, reason_note}` to return"
        },
        "return_reason": {
          "type": "string",
          "required": false,
          "description": "Default return reason for all items if not specified per-item: `SI"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-return-initiation",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-return-initiation/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "c8f54549299165b644a5a14ca0df227f8aec29ba321cccb817f82f1003872294"
        }
      ],
      "contentHash": "sha256:880a96ea0aee43fa32361d9d8cc381f5b7ffc9dc99c084166c10548914dbbf85"
    },
    {
      "id": "shopify-return-processing-sla",
      "namespace": "shopify-admin",
      "displayName": "Return Processing Sla",
      "description": "Read-only: measures average time from return request to refund completion, surfacing SLA breaches.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for return requests"
        },
        "sla_days": {
          "type": "number",
          "required": false,
          "description": "Maximum acceptable days from request to refund"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-return-processing-sla",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-return-processing-sla/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "787eaf751c937e42858312e9fdd444c6a595f3b50f37488056e02811729f8fe2"
        }
      ],
      "contentHash": "sha256:8849841cbb8f6f8af6f4ec635f11bad7cdfb7a74b4bbb0b25b094ffb13fac6bc"
    },
    {
      "id": "shopify-return-reason-analysis",
      "namespace": "shopify-admin",
      "displayName": "Return Reason Analysis",
      "description": "Read-only: aggregates return reasons across orders to identify product quality or listing issues.",
      "category": "returns",
      "tags": [
        "shopify",
        "returns"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for return requests"
        },
        "min_returns": {
          "type": "number",
          "required": false,
          "description": "Minimum returns per product to include in output"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-return-reason-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-return-reason-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "fa3f92c9f728924fa073965efd679b9556f97b0d2834479666214462cf2f17d2"
        }
      ],
      "contentHash": "sha256:63ef6e3df749652180733eae81cca0de39545206224663ca69e2dbb40180f018"
    },
    {
      "id": "shopify-revenue-by-location-report",
      "namespace": "shopify-admin",
      "displayName": "Revenue By Location Report",
      "description": "Read-only: breaks down revenue by fulfillment location for multi-warehouse P&L and location performance.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-revenue-by-location-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-revenue-by-location-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "7a3663551f1296b720cfa086ba648245f76aeba2c22eeb923f082a5dbbaff8dc"
        }
      ],
      "contentHash": "sha256:d10fb4166898539d1e46f0565f73cca46ba5922a270bcb51d991021e63a13c3a"
    },
    {
      "id": "shopify-rfm-customer-segmentation",
      "namespace": "shopify-admin",
      "displayName": "Rfm Customer Segmentation",
      "description": "Read-only: scores every customer on Recency, Frequency, and Monetary value to segment them into actionable groups (Champions, Loyal, At-Risk, Lost).",
      "category": "customer-ops",
      "tags": [
        "shopify",
        "customer-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window for order history"
        },
        "segments": {
          "type": "number",
          "required": false,
          "description": "Number of quintile buckets per dimension (3 or 5)"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum orders for a customer to be scored"
        },
        "tag_customers": {
          "type": "boolean",
          "required": false,
          "description": "If true, add RFM segment tag to customer (requires write_customers scope)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-rfm-customer-segmentation",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-rfm-customer-segmentation/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "59dec5b70e9258d2eb0ac8dab640246a2566cd73dcbedc601679e6b91592aa42"
        }
      ],
      "contentHash": "sha256:35ed45b806b78eee20e1f496b989b751820ff4a45bb164ba7ec0206449dc93a7"
    },
    {
      "id": "shopify-sales-by-channel-report",
      "namespace": "shopify-admin",
      "displayName": "Sales By Channel Report",
      "description": "Read-only: breaks down revenue, units, and AOV by sales channel (Online Store, POS, Draft Orders, etc.).",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-sales-by-channel-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-sales-by-channel-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "1ffb7a7217ebcdee324c61ad7aff1b69e9810020e793ad68345a90581b9befe3"
        }
      ],
      "contentHash": "sha256:51591d0a8156180c5ec7c39ddf52a27fcf987f796e0c25ad591a24843f8cd129"
    },
    {
      "id": "shopify-seo-metadata-audit",
      "namespace": "shopify-admin",
      "displayName": "Seo Metadata Audit",
      "description": "Read-only: scans products, collections, and pages for missing SEO titles or meta descriptions.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "min_title_length": {
          "type": "number",
          "required": false,
          "description": "Flag SEO titles shorter than this (characters)"
        },
        "min_description_length": {
          "type": "number",
          "required": false,
          "description": "Flag meta descriptions shorter than this (characters)"
        },
        "scope": {
          "type": "string",
          "required": false,
          "description": "What to scan: `products`, `collections`, `pages`, or `all`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-seo-metadata-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-seo-metadata-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ce31c697eadc4b969c768a698ead59b57e88b8deba64ce17e90f6f52b042852e"
        }
      ],
      "contentHash": "sha256:7552d1c7a62be2962d6869d5427b88a18df0f6a9fcb4e988b3fbd475a34375ef"
    },
    {
      "id": "shopify-shipping-cost-analysis",
      "namespace": "shopify-admin",
      "displayName": "Shipping Cost Analysis",
      "description": "Read-only: aggregates shipping revenue charged to customers vs. actual shipping line costs by carrier and method.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-shipping-cost-analysis",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-shipping-cost-analysis/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "78fc13bfe8ef06c941106a53c9abb887b96b5c1c80e0d4704b37669487c64da9"
        }
      ],
      "contentHash": "sha256:9e79b925169b98132140378d06a4fad0d0762015f1de73cceadcac7deb2463ec"
    },
    {
      "id": "shopify-shipping-rate-audit",
      "namespace": "shopify-admin",
      "displayName": "Shipping Rate Audit",
      "description": "Read-only: walks every delivery profile and zone to verify each has at least one valid shipping rate, surfacing zones with no rates or only manual rates.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "profile_filter": {
          "type": "string",
          "required": false,
          "description": "Optional delivery profile name to scope the audit"
        },
        "flag_manual_only": {
          "type": "boolean",
          "required": false,
          "description": "Flag zones that have only manual rates (no carrier-calculated rates)"
        },
        "flag_high_price": {
          "type": "number",
          "required": false,
          "description": "Optional: flag any rate above this price (likely typo or stale)"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-shipping-rate-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-shipping-rate-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "24c8967fe9e20256c74ce5880b19471f003c902d8d315a84b1719534aaccfaf7"
        }
      ],
      "contentHash": "sha256:5c74387ed4a346daca0dd9ac93f1fa3ccde9f603a31759536604a240a6e4e04b"
    },
    {
      "id": "shopify-split-shipment-planner",
      "namespace": "shopify-admin",
      "displayName": "Split Shipment Planner",
      "description": "Splits a multi-line fulfillment order into separate shipments for partial or location-specific shipping.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "fulfillment_order_id": {
          "type": "string",
          "required": true,
          "description": "GID of the fulfillment order to split"
        },
        "split_groups": {
          "type": "string",
          "required": true,
          "description": "List of `{line_item_ids: [], quantities: []}` defining each shipment group"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview split without executing mutation"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-split-shipment-planner",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-split-shipment-planner/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ada7b6529c97ac2504b73064e797c289fa77ac1f8f76d1507c1b9da26161b22a"
        }
      ],
      "contentHash": "sha256:27c11e2893783ce54afc58e09de882dd8d828631f19f04712f1060ff5455dfe8"
    },
    {
      "id": "shopify-staff-account-audit",
      "namespace": "shopify-admin",
      "displayName": "Staff Account Audit",
      "description": "Read-only: reviews staff accounts for stale logins, inactive status, and overpermissioned roles to surface security and access hygiene issues.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "stale_days": {
          "type": "number",
          "required": false,
          "description": "Flag accounts with no login activity in this many days"
        },
        "include_inactive": {
          "type": "boolean",
          "required": false,
          "description": "Include accounts where `active: false` in the audit output"
        },
        "include_owner": {
          "type": "boolean",
          "required": false,
          "description": "Include the shop owner row in flagged-account counts"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-staff-account-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-staff-account-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "66b7e42774809750968c1ce0242c59ceff49cf98afe0fba1b15e7dc7e5c3c095"
        }
      ],
      "contentHash": "sha256:00f1a2b99847f18f54a0f17f9bc56b6d8ceb2192e5ba3d552596645f30ed1e93"
    },
    {
      "id": "shopify-stock-velocity-report",
      "namespace": "shopify-admin",
      "displayName": "Stock Velocity Report",
      "description": "Read-only: calculates days-of-supply and sell-through rate per SKU and location for replenishment planning.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Sales window for velocity calculation"
        },
        "dos_alert_threshold": {
          "type": "number",
          "required": false,
          "description": "Flag SKUs with fewer than this many days of supply"
        },
        "vendor_filter": {
          "type": "string",
          "required": false,
          "description": "Optional vendor to scope report"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-stock-velocity-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-stock-velocity-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "db5a177c845ffe91aac7236a67009010b0bdb78c7e5232a5a87b962c0fe3f32c"
        }
      ],
      "contentHash": "sha256:be0857f3f9649c74a3d19a106bb50335221b18107fd02872b517443b71c134e5"
    },
    {
      "id": "shopify-subscription-mrr-tracker",
      "namespace": "shopify-admin",
      "displayName": "Subscription Mrr Tracker",
      "description": "Read-only: for stores with subscription products, calculates MRR, ARR, active subscriber count, and rolling churn rate from subscription contracts.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "churn_window_days": {
          "type": "number",
          "required": false,
          "description": "Rolling window for churn calculation (cancellations / starting subscribers)"
        },
        "as_of": {
          "type": "string",
          "required": false,
          "description": "ISO date for \"as of\" snapshot label"
        },
        "include_paused": {
          "type": "boolean",
          "required": false,
          "description": "Treat `PAUSED` contracts as active recurring revenue"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-subscription-mrr-tracker",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-subscription-mrr-tracker/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ce8401ca1175014c3822a7a0c3b5bef4b6817b33a8ad05b38ca4f0c9af010668"
        }
      ],
      "contentHash": "sha256:22e805b4d3e3d90668ffbadd1db64d3e820f5af3bfdbdb0c0969f66fd394d04c"
    },
    {
      "id": "shopify-tax-liability-summary",
      "namespace": "shopify-admin",
      "displayName": "Tax Liability Summary",
      "description": "Read-only: aggregates tax collected by jurisdiction from order tax lines for filing prep.",
      "category": "finance",
      "tags": [
        "shopify",
        "finance"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window (use 30/90 to match filing periods)"
        },
        "group_by": {
          "type": "string",
          "required": false,
          "description": "Breakdown: `jurisdiction` or `rate`"
        },
        "exclude_refunded": {
          "type": "boolean",
          "required": false,
          "description": "Exclude tax from fully refunded orders"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-tax-liability-summary",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-tax-liability-summary/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "626e387d81cb8ee3ee671c20c6083c9c0a1a292fa95dca65e04685ce2ffacfc9"
        }
      ],
      "contentHash": "sha256:83ea4de405b2920f0be6fc6eee47d3f54900e1186c6e4b7697b0d8a515ed0488"
    },
    {
      "id": "shopify-top-product-performance",
      "namespace": "shopify-admin",
      "displayName": "Top Product Performance",
      "description": "Rank products by revenue, units sold, and refund rate over a date range by aggregating order line items.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "date_range_start": {
          "type": "string",
          "required": true,
          "description": "Start date in ISO 8601 (e.g., `2025-01-01`)"
        },
        "date_range_end": {
          "type": "string",
          "required": true,
          "description": "End date in ISO 8601 (e.g., `2025-01-31`)"
        },
        "top_n": {
          "type": "number",
          "required": false,
          "description": "Number of top products to show in the ranked output"
        },
        "sort_by": {
          "type": "string",
          "required": false,
          "description": "Ranking metric: `revenue`, `units`, or `refund_rate`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-top-product-performance",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-top-product-performance/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "3369cd586519939fc3cee6381882c7f623376ecace24583b3e6f09979cc57138"
        }
      ],
      "contentHash": "sha256:458bbfee70cbdd343d1bc771ec46ca34efddeaf42e9ecce917a16cc41ae46ee3"
    },
    {
      "id": "shopify-tracking-update-bulk",
      "namespace": "shopify-admin",
      "displayName": "Tracking Update Bulk",
      "description": "Batch-update tracking numbers and URLs on existing fulfillments when a carrier reassigns tracking IDs.",
      "category": "fulfillment-ops",
      "tags": [
        "shopify",
        "fulfillment-ops",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "updates": {
          "type": "string",
          "required": true,
          "description": "List of `{order_id, fulfillment_id, tracking_number, tracking_url, carrier}` objects"
        },
        "notify_customer": {
          "type": "boolean",
          "required": false,
          "description": "Resend shipping confirmation with updated tracking"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview updates without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-tracking-update-bulk",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-tracking-update-bulk/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "79f286c0d151e0a597ccf96fda287d0953c773bb7bf6a44f48019987de075f78"
        }
      ],
      "contentHash": "sha256:0c20bbea3f1306c7b20a303537909f5f7f98c12b79bc647ccd8d125077ca10ce"
    },
    {
      "id": "shopify-traffic-by-page-report",
      "namespace": "shopify-admin",
      "displayName": "Traffic By Page Report",
      "description": "Report sessions, conversion rate, and bounce rate for every product and collection page using Shopify's analytics API — surfaces which pages earn eyeballs and which convert them.",
      "category": "conversion-optimization",
      "tags": [
        "shopify",
        "conversion-optimization"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "days_back": {
          "type": "number",
          "required": false,
          "description": "Lookback window in days (e.g., `30` = last 30 days)"
        },
        "page_type": {
          "type": "string",
          "required": false,
          "description": "Filter to: `products`, `collections`, or `both`"
        },
        "top_n": {
          "type": "number",
          "required": false,
          "description": "Number of pages to show in the ranked output"
        },
        "sort_by": {
          "type": "string",
          "required": false,
          "description": "Ranking metric: `sessions`, `conversion_rate`, or `bounce_rate`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-traffic-by-page-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-traffic-by-page-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "cf61b94be7b3080014910e2991c66426453e6864e925b849709f1401228adb87"
        }
      ],
      "contentHash": "sha256:062508c3dccbd811088e1150bc11c928d0b768e9fffe465a8d02e362c182ec99"
    },
    {
      "id": "shopify-url-redirect-audit",
      "namespace": "shopify-admin",
      "displayName": "Url Redirect Audit",
      "description": "Read-only: lists all URL redirects, flags redirect chains (A→B→C) and duplicate targets.",
      "category": "store-management",
      "tags": [
        "shopify",
        "store-management",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-url-redirect-audit",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-url-redirect-audit/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "193a895762fc04cffaac709e2ed7c7e4fe9fa3228eedee1c22b493411bef02ea"
        }
      ],
      "contentHash": "sha256:f52b9e9922ceed5cbbbb929f1ee2174847a8671032f21951d2c60a296f1e2eab"
    },
    {
      "id": "shopify-variant-option-normalizer",
      "namespace": "shopify-admin",
      "displayName": "Variant Option Normalizer",
      "description": "Detects inconsistent variant option naming (Sm vs Small vs S) and bulk-corrects to a standard set.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.product.write",
          "shop.read"
        ]
      },
      "input": {
        "option_name": {
          "type": "string",
          "required": true,
          "description": "Option to normalize (e.g., `Size`, `Color`)"
        },
        "mapping": {
          "type": "string",
          "required": true,
          "description": "Map of non-standard → canonical values (e.g., `{\"Sm\": \"S\", \"small\": \"S\", \"Sml\": \"S\"}`)"
        },
        "filter": {
          "type": "string",
          "required": false,
          "description": "Optional product filter (e.g., `tag:apparel`)"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview changes without executing mutations"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-variant-option-normalizer",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-variant-option-normalizer/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "b7a2392266a2d7a048d01ad918f6aeff50f192cd4919147a501d60e80b817bdf"
        }
      ],
      "contentHash": "sha256:58e7f9d902d57605376104e6ed6d3aee8ceca42d785db6109b5b8db203140520"
    },
    {
      "id": "shopify-variant-performance-report",
      "namespace": "shopify-admin",
      "displayName": "Variant Performance Report",
      "description": "Rank every product variant by revenue, units sold, and refund rate, then cross-reference against current inventory to identify dead weight vs. top performers.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "date_range_start": {
          "type": "string",
          "required": true,
          "description": "Start date in ISO 8601 (e.g., `2025-01-01`)"
        },
        "date_range_end": {
          "type": "string",
          "required": true,
          "description": "End date in ISO 8601 (e.g., `2025-01-31`)"
        },
        "top_n": {
          "type": "number",
          "required": false,
          "description": "Number of top and bottom variants to display"
        },
        "sort_by": {
          "type": "string",
          "required": false,
          "description": "Ranking metric: `revenue`, `units`, or `refund_rate`"
        },
        "min_units": {
          "type": "number",
          "required": false,
          "description": "Exclude variants with fewer than N units sold in the period"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-variant-performance-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-variant-performance-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "ec27d7cfa9f129a4991485be04a9360d786e2938cc002e9da096b80348bd86b7"
        }
      ],
      "contentHash": "sha256:2a35a2d93c29b938513dff9463f310a7ef576a2f74b0748f7d6521ef96a72619"
    },
    {
      "id": "shopify-vendor-consolidation",
      "namespace": "shopify-admin",
      "displayName": "Vendor Consolidation",
      "description": "Read-only: detects vendor field typos, casing variants, and trailing-whitespace duplicates across the catalog and proposes a canonical merge per cluster.",
      "category": "merchandising",
      "tags": [
        "shopify",
        "merchandising"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "similarity_threshold": {
          "type": "number",
          "required": false,
          "description": "Levenshtein-ratio threshold for clustering (0.0–1.0)"
        },
        "min_cluster_size": {
          "type": "number",
          "required": false,
          "description": "Only emit clusters with at least this many distinct vendor strings"
        },
        "ignore_suffixes": {
          "type": "string",
          "required": false,
          "description": "Comma-separated company suffixes stripped before comparison"
        },
        "status_filter": {
          "type": "string",
          "required": false,
          "description": "Product status to include: `ACTIVE`, `DRAFT`, `ARCHIVED`, or `ALL`"
        },
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-vendor-consolidation",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-vendor-consolidation/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "6195a43c8d62fa76f17cb24d1ef07a160ffb94fd961dfe14d1a04ac2f71fb3f6"
        }
      ],
      "contentHash": "sha256:db05acf29bb4e7a81cd2fff9edf8b8d03c6206af04b9dbadd81ffbd90e3c8a80"
    },
    {
      "id": "shopify-vip-customer-identifier",
      "namespace": "shopify-admin",
      "displayName": "Vip Customer Identifier",
      "description": "Identifies top-spending customers (top N% by lifetime value or order frequency) and exports a VIP candidate list; optionally tags qualified customers as VIPs.",
      "category": "marketing",
      "tags": [
        "shopify",
        "marketing",
        "mutation"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.price.update",
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview VIP list without applying tags"
        },
        "rank_by": {
          "type": "string",
          "required": false,
          "description": "Ranking strategy: `spend` (lifetime value), `frequency` (order count), or `both` (composite score)"
        },
        "top_pct": {
          "type": "number",
          "required": false,
          "description": "Top percentile to qualify as VIP (e.g., 5 = top 5%)"
        },
        "min_orders": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime orders to be eligible"
        },
        "min_spend": {
          "type": "number",
          "required": false,
          "description": "Minimum lifetime spend (shop currency) to be eligible"
        },
        "tag_customers": {
          "type": "boolean",
          "required": false,
          "description": "If true, apply VIP tag to qualified customers via `customerUpdate`"
        },
        "tag": {
          "type": "string",
          "required": false,
          "description": "Tag string applied when `tag_customers: true`"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-vip-customer-identifier",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-vip-customer-identifier/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "05d3d43f7349a7acbcb9fff1b0561b2bc5a68bbd1be15fa4045556ddfdc8b2c8"
        }
      ],
      "contentHash": "sha256:5ba91d5d08973250649d87e64089cb3a242ce03639f12da14cf4c9aba0fd4322"
    },
    {
      "id": "shopify-wismo-bulk-status-report",
      "namespace": "shopify-admin",
      "displayName": "Wismo Bulk Status Report",
      "description": "Identify orders at risk of generating WISMO support tickets: shipped orders with stale tracking, and unfulfilled orders past their SLA window.",
      "category": "customer-support",
      "tags": [
        "shopify",
        "customer-support"
      ],
      "runtime": {
        "type": "llm",
        "executor": "auto"
      },
      "capabilities": {
        "tools": [
          "shopify_graphql_query"
        ],
        "permissions": [
          "shop.read"
        ]
      },
      "input": {
        "format": {
          "type": "string",
          "required": false,
          "description": "Output format: `human` or `json`"
        },
        "dry_run": {
          "type": "boolean",
          "required": false,
          "description": "Preview operations without executing mutations"
        },
        "unfulfilled_sla_days": {
          "type": "number",
          "required": false,
          "description": "Flag unfulfilled orders older than this many days"
        },
        "stale_tracking_days": {
          "type": "number",
          "required": false,
          "description": "Flag shipped orders where the last fulfillment was created more than this many days ago (proxy for stale tracking)"
        },
        "limit": {
          "type": "number",
          "required": false,
          "description": "Max orders per page"
        }
      },
      "output": {},
      "bundleRoot": "shopify-admin/shopify-wismo-bulk-status-report",
      "entry": "SKILL.md",
      "path": "shopify-admin/shopify-wismo-bulk-status-report/SKILL.md",
      "files": [
        {
          "path": "SKILL.md",
          "kind": "playbook",
          "mediaType": "text/markdown",
          "sha256": "4a16adef2871465c1e8e3ecb6132975d27a8f13579d9e52f1ea059235412eaae"
        }
      ],
      "contentHash": "sha256:b99f93b1da0bf619d3e5f702f8f0880e9e377c958edc63b47534097a6e952e8d"
    }
  ]
}
