{
  "catalogId": "mavor-skills",
  "schemaVersion": 1,
  "version": "1.0.0+8c7a4c3",
  "publishedAt": "2026-06-04T06:08:39.477Z",
  "gitRef": "8c7a4c3",
  "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": "a81ba93891cf3698f68855a0e7ff3b280c43c9e9168a87cf8f066e90444820a0"
        }
      ],
      "contentHash": "sha256:f705575720e37d92516af05654b390b045529a6af7e8ab108f2d8fc19d8f8235"
    },
    {
      "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": "7fa273f2997aff7b84b11ca19ef44a03edc4664c19e3e4cc8b66f1a782ff757f"
        }
      ],
      "contentHash": "sha256:e1e8b0e6fe6b59cfd19f1bdc6bae11e63408b48697e2affb45abde69b68bfec1"
    },
    {
      "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": "e73d8e3de4e64662cc508e0afc7f4044dbae85819a2233e86a7e7ea7125c75d8"
        }
      ],
      "contentHash": "sha256:795c90891055d233ea0e6352a7587450b79087b280cd0d41818e2be8ca01e417"
    },
    {
      "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": "4593f87b0407ecb0c895a56cc8fc41cd43ef185f33155e46b481724813147c19"
        }
      ],
      "contentHash": "sha256:ca635afdb10ae69b0cfe8e0a720ba66d33a53eead14fbacf077ba7ff471ede6c"
    },
    {
      "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": "ed18829eceeb4eb4ef29d4d392184fcd1ec45e89bc85440a77cadb64dfbbf341"
        }
      ],
      "contentHash": "sha256:0b47d0e3f0b63f8e48a846865593cc1f0c5321266f7c8573c62993985005610e"
    },
    {
      "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": "3cc90969ee1b4daf281a36af44027c8ad13f39bad19221c8c109aa5975efa48a"
        }
      ],
      "contentHash": "sha256:81b5c84418d95ff846da97ed1be344e3c5aba92093fae76cab2a4ef941bfb8c5"
    },
    {
      "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": "a303928c040bf1d36f31bcc746402a1e501792181102a0181a5490f2e3e395d9"
        }
      ],
      "contentHash": "sha256:dc9cad87519ce2518f8639c8ad44fe9d22f4c7eb981be9ff3ae3b695648bb37d"
    },
    {
      "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": "fc132140d86f20500325ed0a1ea6d49b00d8e56eda541640571e4f1c1fcc14ba"
        }
      ],
      "contentHash": "sha256:6f3d1f3a17cb318bf52a4134cc2e4ada20911cce3d9a9cd6ddda92255e74e607"
    },
    {
      "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": "33628f5b9bb391b5fbb521bd838650b4c39f22743906edf4edfd0054f315a5f1"
        }
      ],
      "contentHash": "sha256:98dbc98149a3f52e4d8fc6b3bab2ff877a85db468f9d9190043f91b4cf6f473e"
    },
    {
      "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": "a58d0f2ee908aac0ac5896670c52929252bdc90b47cc8ea39c87cf9c798a5033"
        }
      ],
      "contentHash": "sha256:7f6c72d4c039a21f38fda08a31b2ec7eaa8dab96261fbbd8ff917f08042fb3d9"
    },
    {
      "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": "5be4c83ed2595a579778687d4165fcbb389ba5b6767a3c69a00b3dae28c1ce66"
        }
      ],
      "contentHash": "sha256:a7605c36ef5060fc4bfd5bbd68660002a6ebe03f07418e69316f9cb2d0eb63d8"
    },
    {
      "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": "ef7163a5c59ede2df53549975f27e461ff1236a866c82b1073116c373bae5630"
        }
      ],
      "contentHash": "sha256:1116b151b90dcfaf82ef9cb49ccbf5089e0436ed73d0bbb3730e12b7c321f741"
    },
    {
      "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": "5861efc5c310f35f59eb916e7d1fd5623d6a9af53ade15075d1cd81cd984f5fc"
        }
      ],
      "contentHash": "sha256:1b2421844d068b26d61e8b2b46ae23dfd2d9271d7da4ec671d41a33b2af614f6"
    },
    {
      "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": "27e6cd9f5411d74a786cdfab9e60e8444648289b616a5209b43e53d5209c49a9"
        }
      ],
      "contentHash": "sha256:6917dc741be1037eadf6e54fe88bca4bcfb8fd041b3eeaa4ef2b30dfde4c2ff5"
    },
    {
      "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": "d3bf234719b3892d4c592cf5fb5a8d368a94aa0841d223b8a25c4c7eb8f9dedc"
        }
      ],
      "contentHash": "sha256:783f08c8373133808989c569b94a5fd87444977526c5dbccab0376dabfd9853f"
    },
    {
      "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": "998f390a176dcac84e6a79f39ff33b0e3deec3bd23d9c7f425240ab8531da504"
        }
      ],
      "contentHash": "sha256:3efead98caf321dabd4bfdf45794b1f4a1e6648967eb1888f95f2c335c1b1fcc"
    },
    {
      "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": "c3722567487149ebd1d5cf2372c82aac3b473f16c342b81279b22235ffad7dae"
        }
      ],
      "contentHash": "sha256:60e96b651ac89d56076b109f4ba2e019e5a7e3e4b4f3803b62a01f7a452fae8b"
    },
    {
      "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": "e9fd1f8e4d2d3efed94b87003183a347b6874b35d6e803cb7ac779e8105791f2"
        }
      ],
      "contentHash": "sha256:7da02bd86674de734791b20c91bb3253eceddc1e8348fe76c35e9fcde60273ad"
    },
    {
      "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": "6d307ca27d3b2103ac35012c4067f17fef10f3135d3bcb1f793a45064dd5c95d"
        }
      ],
      "contentHash": "sha256:4638df762dfb8e04913eb15a78e60d94a6c16d5cea3aa97e3e0581c9cc8202df"
    },
    {
      "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": "8a00df7d13e423e9263ee8ceb3ed236df4b374bc0fc3a69f20ff57c35767fb31"
        }
      ],
      "contentHash": "sha256:b5b19027f2f52f755d71c7006379ee65e0afaca265b46feb596bb7570d7c0941"
    },
    {
      "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": "7b055bc641b38059ad7e18270bdb742ab7255a6e233c2eec4a6cc25de2a94b90"
        }
      ],
      "contentHash": "sha256:8a8261f508eac7e9cae4277f1a2e945d17078121b9a04e9cf8d6af59b1d7c3e0"
    },
    {
      "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": "c27275dd48f5f6641e44976ffaf1f82d926892c11b1b377dd5881024aab31236"
        }
      ],
      "contentHash": "sha256:f62f8e356b71039c3c4f4f46ba7e79b27f33c33498788b3339ce63bc1f63d6b9"
    },
    {
      "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": "9c4096fcf30c27da5b0979399ad180518158684eb58d5bb55da40d63f967736a"
        }
      ],
      "contentHash": "sha256:a1ec8a476cf99e75e361c5233078f6637b55c4eb879b156a473f12f1d6977fb9"
    },
    {
      "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": "237eb65e28247568c7304462b70b4406a0927bccbe389b85f4955d6fbc960d9d"
        }
      ],
      "contentHash": "sha256:cb965b3d40ce1f3f2d7eb719881b056ab0a3a60c283dafd76e286bc6fd5cf651"
    },
    {
      "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": "bb1b8b3af8735ee4e17cd3f2661eece4afcc1947794fb14adf9ba4f6cc9218dc"
        }
      ],
      "contentHash": "sha256:ec956c3a3adf878de5dc13b7263d1c35a676adcbab994a6dfaaa652d3deec648"
    },
    {
      "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": "b719cf0473ff93cea9a8fefb994730fe30ccb1a5bf3d14b49d4e8f9014889712"
        }
      ],
      "contentHash": "sha256:62933828fe7eaac45db4212f2945fa5338198b742a992fe409f2dce6ee35bcc8"
    },
    {
      "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": "a092067df10ff27a319ed454e698ef4e3d0ee336d1635bd3d48efd267513c811"
        }
      ],
      "contentHash": "sha256:eb92ca6629371fe35cbdb76dae3deb5d15421b9305bd657b0f2035820a65e839"
    },
    {
      "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": "5115f49858b4818aa30cf9564712a416f5599302bf2310826a580ebd13fd0a0d"
        }
      ],
      "contentHash": "sha256:01674cf2d09dc1519ea36db000b4f8ed2a0dba935187b0c955e4ffa78c3c7dda"
    },
    {
      "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": "7be6c1265dbc56f8696168126f5f658d931acffae869ec6c7a79869839c0a946"
        }
      ],
      "contentHash": "sha256:57614276e571ab0115408a83531f5ce026391c8cf9971d08bae3e27cd413a9cf"
    },
    {
      "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": "f3f0ddfaf2db5bee130a8fedb88dab806f89be3781d0663234697c6a3b3455e5"
        }
      ],
      "contentHash": "sha256:cccc97b3f6b02530577438253d2c0ec3d4f28fd28792eeac653f7e4c87e315f0"
    },
    {
      "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": "bb8e4ced885a24f0d6cd005a5636897295fd220956ddea32bf04a0e05dd5daa7"
        }
      ],
      "contentHash": "sha256:e2ffcd0b5945a7a8d242c06a7b7f14ceae3b5ecffc92bdb56c588ae63178cdc3"
    },
    {
      "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": "9959558a7497c07f595215ba6300718534cc2e85784ffe26802f8192028919ef"
        }
      ],
      "contentHash": "sha256:f0f9a3039da97f2f26a50a475916b68e3edf3a85644a110bf1b87c3980e5f4d3"
    },
    {
      "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": "329044add58241d0266a0fbe6d384c0b60b9249d44212327f507c54cbbe03042"
        }
      ],
      "contentHash": "sha256:3de35c8a5538f95c486c28c3019c71622453c1d25724c8e1000515da3d5f7da9"
    },
    {
      "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": "cd8af1dab4d8d81bfd732fddf383a07f4fb071ff9d27390871b34109c8243aa2"
        }
      ],
      "contentHash": "sha256:59ff926a0133d09a20113d7694c013d0f5302d8ab43f7250bcc72d11ebc27653"
    },
    {
      "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": "420f4f2f6d20c81bfdd0c5626d964e3b1153fbf2303770d5ef3fc464b96adba0"
        }
      ],
      "contentHash": "sha256:6e8ff113fad213826ddf3fa6630589d79d651aad3e827d2b01a054fd7aa27a7f"
    },
    {
      "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": "fcd3151dfd7f878e4369af6185abec601631bdaa3764dae79457a05110a01fbc"
        }
      ],
      "contentHash": "sha256:c447f79c45f180f03767c4de22ed6abe419f07aa87877e8b4fa4713bae02d449"
    },
    {
      "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": "f689f3f25450adf5dee25c3834cc085a21b3e43d59b3d9268a8519374229bf8f"
        }
      ],
      "contentHash": "sha256:b8098f6e826c0af31510d2185346ddabd13054fb78c8bcdde43b742e7d627cb8"
    },
    {
      "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": "a605f3ac58e8de3153c5ce4907a9492f6bfb8ae609a34701d2e2301b1fb2477e"
        }
      ],
      "contentHash": "sha256:131dfba22c5fa9f483d01d9fa4c4d5a40debf8b123eb92c37ff1e0d97961bcec"
    },
    {
      "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": "7773718e37cfedd88a6bd8fec83755705a865ba6a049d7d6b4df40f4cfc72d75"
        }
      ],
      "contentHash": "sha256:7fa2bed1bfecc7b9d38666b090f23484f4f2e92b9223a0e6ddcbd898cffff0f4"
    },
    {
      "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": "e409d3dfefd46e288b952eb60824bec80fcf01e9855fc0648cef2659bf799d63"
        }
      ],
      "contentHash": "sha256:afed11fbd0bbbd84cc7221b6a88610e4af6327a2043d1b08a4f08c7e2a43d348"
    },
    {
      "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": "80cce4d6b1251b0dfe4a3f4df2cb59127be09f72d78ce5e2d0a259aa8dfa042b"
        }
      ],
      "contentHash": "sha256:2b0e49e7fb1423bcdd4b07ed2ca864aa8064de07d5b26547eeb6db6bfa2343ea"
    },
    {
      "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": "1646c9b7642a082e931cf928371ca9d0f77b8b7804396e28cb45f7b273fb4f13"
        }
      ],
      "contentHash": "sha256:2e2bb4ce211d3579c3e294a7f829376fa2f0c7e8b13168ffe12da2dc528bb6b9"
    },
    {
      "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": "fe382836c602f03f6f1aa8574f4030f5ff8926f10ec59e358a70feb76d3d8a28"
        }
      ],
      "contentHash": "sha256:59d9546cf9697b0f98d63d15bd12f97e8601c8000c88771b15f24510e5dbe925"
    },
    {
      "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": "30985513d37a6bf4eeb8d0c08757755ef5d440f6ecb8a240a7eb55eab101bfcd"
        }
      ],
      "contentHash": "sha256:65d3cfae15cfa29f7b4ec75b96a760b940e374b274f761f0ba202ca031e38337"
    },
    {
      "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": "0cf2a43c059355f195338ae8800423fe3b9d11295fae9a079ad2003c4d61d292"
        }
      ],
      "contentHash": "sha256:bf9dcf59ac466205c6c1411300b8b7db67a2aeccbf78afaeb3ed7a9461ffe5ea"
    },
    {
      "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": "ba50ba9fece3d512715d6a7fdf31e353e582c9d039fbcda0b2612e3979e660c0"
        }
      ],
      "contentHash": "sha256:dce2751a7bb4936e13cf11ffa4840dabc9275626fb5e2ec565d060f2a122e04f"
    },
    {
      "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": "8fbd068e1a5f48b491e9383c716dc3a36be9bca4e5334af7eb8edadb31e80966"
        }
      ],
      "contentHash": "sha256:589101eaade0bc7de9417023b381ee1051e32864d9eb5775744efe28d4a4a489"
    },
    {
      "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": "eabe3e62365a2f1844ad8eb190ec5af548257eac8c1a746c0ec55148cfa3bcb1"
        }
      ],
      "contentHash": "sha256:9a1feac687a9fc54a73c6f607505cc41d3b4c29a058ecf58a3c1f779366c3bfc"
    },
    {
      "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": "cfd0eebf5dd5abbaf9f073ba0caf08ac6842bb297d9602226d5e052dd8409c58"
        }
      ],
      "contentHash": "sha256:95257d7d218ec3e1e9ad1a768a6a9b688ed7e6663bc45434e7dcbfc5eb6abeb5"
    },
    {
      "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": "b49756eb61a625c530d2a6ca6d7e621b8ccfd7e2a05f20c85e76546551c87e3e"
        }
      ],
      "contentHash": "sha256:31b0e729c79b3713443ba84a2afd7f0be8cd47a8100cef71d3e055ae3375b765"
    },
    {
      "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": "7a2d59727e436636316051a149a17860ca3367ecb112bae8b49ed86bfa73c5d5"
        }
      ],
      "contentHash": "sha256:6844c2bf91d6cb8aff2d035c35cdbff05c8288be35a14335b5e020bb5f7c23cd"
    },
    {
      "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": "4a281da197a535697915d3514c9e44a88b53baf23423ae01264c77cbf8b84fd2"
        }
      ],
      "contentHash": "sha256:30c39d5b40d157784e096209dbb9036e0b83674b7b466dd718356df2717dd16b"
    },
    {
      "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": "f4fb28b8abb358e1896dda9917763f4ab97293561d8f88be07b9026275485e51"
        }
      ],
      "contentHash": "sha256:a1eac5c60fff02868170e9e65df30a02144e0c215dc995cb866186f96d5cba24"
    },
    {
      "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": "a488f0baaa6c806a6837333e232859337a37e56b84832c3afece80537b1b8ddb"
        }
      ],
      "contentHash": "sha256:118cfc264fb7f4137bb8854b3eb76bd0e0de26bab5b02922dc769e187da69b8e"
    },
    {
      "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": "c457d5e125a11a96443ff517d061de36e06a5c8cea90390e0ad64d7bcf6ca0de"
        }
      ],
      "contentHash": "sha256:0ec3bf8f05a1dac82c797f648e441e48ac8be8b24696e6b4b21c9dfafb38baec"
    },
    {
      "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": "3da6cb07c51bd2ce01bfd0e82bb0aa6d3d82583dc478fcaf6167256d179c1d3e"
        }
      ],
      "contentHash": "sha256:34165e7e4b4a9237d1984ac768e9160279a5aeee24377943b925d6bc24fddc9d"
    },
    {
      "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": "ae2bbec95a92fd53aa199419c1dcb097156d62672ad29adf4e2ce4133fe3bd41"
        }
      ],
      "contentHash": "sha256:39ccad264df6e03293b91573445bb4efe7dd1414044b877221f7eb04474a0a79"
    },
    {
      "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": "41a04d18ee83fa33e63a9b392035c3a9967897a0f449c3030cf0d4c988206640"
        }
      ],
      "contentHash": "sha256:b7595b51288021c2504b38a5b5bebbbbff944fbeab013dc3e1e75a2233eb12ed"
    },
    {
      "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": "3d5d4c82255a8cdcc3e77723ce431a0d213066e770ffbf2b29c570f1a71919ed"
        }
      ],
      "contentHash": "sha256:251f641779942d80f00ff55ee7a0717ecafc0b22c54f582c83a4c0b2b9e4665c"
    },
    {
      "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": "ce5875365f7d9d18cc6340526f6363b54494682dab4afffb663f50187d782691"
        }
      ],
      "contentHash": "sha256:6c1a100cc5efc75e4c04ed5a7dd60b6247785f3b754f9b656c04fa94d80e636b"
    },
    {
      "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": "1d27fa74424c40a663983b9458ba80785426ef579835f777904cb5f21697db5c"
        }
      ],
      "contentHash": "sha256:7306696f214f22dc5c8069f7baf97a5f2a774514f6287534c2e22d3465b69d3e"
    },
    {
      "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": "4841b2630f48b6c6d9abe9944fabb4ce5aecb04be2f65f80b9d3683453ea35b7"
        }
      ],
      "contentHash": "sha256:93cf48ce03b66e4c332e20d2a194db74a65120cfd3eb4e04f5fd212977cff161"
    },
    {
      "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": "2acd4a0a581b87050be570a5be2a627c0515be01a0c8d3f31ea63b9f16350ed5"
        }
      ],
      "contentHash": "sha256:6ae627b31a1cde8d48756f189326bc75dc46840b12a5a765c71f717fcf2d87a0"
    },
    {
      "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": "1809e9623e0450afde223dfae08a8137bb2e5317b51f146345d7496b9e22296a"
        }
      ],
      "contentHash": "sha256:ca7b3c7b6b2dda79725d340cb623d2dc82439389f0c01fdc1305edc3090a92d5"
    },
    {
      "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": "67fe7a6fa2630e0210d0e08df9a61ae42295d0c9561834c50ff21695b4a4858b"
        }
      ],
      "contentHash": "sha256:b47f815a63e3a1fe40b6f4922e792e56d0ace4b601e9ea0fcf821460076047af"
    },
    {
      "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": "042dcf3f7a9f80dbc1dc78729b807a9d8d9553522f047911060b771c1f920abd"
        }
      ],
      "contentHash": "sha256:e889234afbc67a26bb32a226103693e49fe2c4c6a2346dea2370ea69784aae5f"
    },
    {
      "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": "96eeb96b139d525f8b83d711976cd0457c38e8cf1b4cd4eb4e5acaf722d4c6e6"
        }
      ],
      "contentHash": "sha256:61ec392dd0cfabd22a11bec9d7a679eebdfed1ea1d36279d567f75d6962f5ab9"
    },
    {
      "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": "b0baf5dc24e2698f9e33a2a72a7fa5192a71e54830e28fbdfb47bffae072af0e"
        }
      ],
      "contentHash": "sha256:15a6bde12deb118271478d5c4c2147899651e68d8cd1a2599e79f065e224eb88"
    },
    {
      "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": "9258c70182e3df7e9326a9d6c469e58f6406e0048a0d6801fc46711a27572093"
        }
      ],
      "contentHash": "sha256:a4141a7c39df7a4ba55e88310267565202199eebb2bf68170f12e3b5e8e9c12d"
    },
    {
      "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": "0d99ac10ec7620f476bca89a5e9f5a530032a2474c0de656a36a6efad1785c03"
        }
      ],
      "contentHash": "sha256:c66b9811dbf05372ccea681e8d7a05982901b6a8f3cfa2deb41dc44a8af015a8"
    },
    {
      "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": "d3af86de707e193a5fa24ef4211ccf9ef0280a7514883f91f232ea66eacf2916"
        }
      ],
      "contentHash": "sha256:459206651533dcff77ec3dbf8d986092f8b02c609447536b7304737d09ed6b10"
    },
    {
      "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": "b1e27de2b210eb654cd8f5864cf6b61262fa604af2e942c6af23e12e1ba05808"
        }
      ],
      "contentHash": "sha256:25a0793861d09658f8bb27943e5c85fe217601970f5d0a7d29854a5f2d129fcc"
    },
    {
      "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": "66060e1581909302cd644841e676143920d78c38805183cb451ea44ba6f1306a"
        }
      ],
      "contentHash": "sha256:651e5b2c0f138a5297eb75fe75fe10aa5b2f09eb6085953bc36fcd61fc7a6cb0"
    },
    {
      "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": "dd5fbb337b6904278cdb4baba07a2c125eea27f7614956bdfdd335f5559c34ff"
        }
      ],
      "contentHash": "sha256:109d71658331e2e447199e3a630dcf160f7759e830f188056514beed4e74e750"
    },
    {
      "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": "08e2970e1da21cefc8e656390160c68a603ebd32ea4a40b5c9b10991337356ae"
        }
      ],
      "contentHash": "sha256:19f4ab351e232fc5e23b08a9fdc37f81d7790c0efffc8ca58597f99496ac16ed"
    },
    {
      "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": "2a9047b6a0eb7cc14ad2b90db34e4fafd6be0e91f25d7979c6bfce84eb2c025d"
        }
      ],
      "contentHash": "sha256:7d3fc3eea12a1d9db1343210356c21a2f47779141509c0ca3c2eefa5d805e81e"
    },
    {
      "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": "942a2d1186198a879aee310a85a4324764cb6c0b4979be5614165f4b478b1dc4"
        }
      ],
      "contentHash": "sha256:9ef280bb7cb211cad4201fdece3f5d0199c16536c8f4e5bdc048342fe8d33033"
    },
    {
      "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": "cc5adc1acb7d6329815efe1557fcabf0ff4cfb3b45b072bce45f81fa6ab12494"
        }
      ],
      "contentHash": "sha256:b19a228c55932e4a6be6676715a152883741128375fef6b8e0043f8a3882562b"
    },
    {
      "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": "6a6fce4fefc8fcf0ff30658aa673e0e1d49dde6f3efad85a4c529c392fa414f6"
        }
      ],
      "contentHash": "sha256:0b98783205c02d5f2a93ac1e779d3b4adbe3beb8b29f8031c5ff62481c19a0cf"
    },
    {
      "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": "aaba4ca67f4da61134f628191ecc1be277d61fd758ed5240583e4b72b41f5d6b"
        }
      ],
      "contentHash": "sha256:1a659300f2e8adf03f859fd73adcf601e3656c7f1d73e406b0920ed625322e98"
    },
    {
      "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": "bb526407ddb5a5917903c29ced477edfd3aa5a314375cdb2817531a81434dce3"
        }
      ],
      "contentHash": "sha256:e5134c3e345e6c05f68cbfe678ff0be52d50b094f84deef42131f6f71c70ca2a"
    },
    {
      "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": "46941dc4bfbd6479b8ee1abb5a125116af5fb99bfbb0e4c641ba1ba042fd543d"
        }
      ],
      "contentHash": "sha256:0dd2584dbbdf512a8310468275399cb9ccaad4093e93507423a7a0a54831f9dd"
    },
    {
      "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": "ed7a19ff4784a103ca7be21ea59a4a80338c265a03a16d231b1ef9c52936722b"
        }
      ],
      "contentHash": "sha256:320469a6083d350019cc85cda3547e40d807ae99c7e47e8f178b0566300a7cdb"
    },
    {
      "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": "7fea499c0f34442b9595931d80f8d15c24d801e85e1644dabe3cecd1973a751e"
        }
      ],
      "contentHash": "sha256:a46b81eb3c62d52a96881b24e12e77a45b699db03ef527be93fb83962ab32daa"
    },
    {
      "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": "c0c90561a9afa95f362ebdb71d57f53640783ea5f35a8878398265e4a08fc621"
        }
      ],
      "contentHash": "sha256:919d0c54c7a41a3e594c66b20d807bdebc595566d8c43cae506d4240363b8c9a"
    },
    {
      "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": "0c8b72c6af8df28147a992ccf50491ef3ec0b07afb0ea5a225ffc31c859eef41"
        }
      ],
      "contentHash": "sha256:91272b02cb8d3012a07c53383d6cf966b205ab30a7162f131ba7bc224664871f"
    },
    {
      "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": "190556941b9658fc933286e2fea75307081fefe39d6f7f1621577f0ecb88540e"
        }
      ],
      "contentHash": "sha256:623216f81662ca283f71a11f8ffe1c8073ea9fe834dff94a196e6d06d09d52a8"
    },
    {
      "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": "6926e24c39eff92eeaa7ff3e40324ddf87ad77800f8e3c467f7dad4583f5ea73"
        }
      ],
      "contentHash": "sha256:f690455f1e7848fc38bb66ba810fbd233138f437fb9400ee7aae8a73c519d3b5"
    },
    {
      "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": "7653693f4922aa5d80a09ed9aec26e1f2c1d5f5a8f49235d7f78cbcbcaaf142b"
        }
      ],
      "contentHash": "sha256:d6f7167072d2faee8d9813b169d8930ce7e5adaddd55dc984c212850814fb7e3"
    },
    {
      "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": "8763698305fecf3e4b34d6afb3f2eaf9e9acd4b37dceb96cca72919ab5e5e20b"
        }
      ],
      "contentHash": "sha256:0cce897982a4e1a43ec0fbd76726cd1c5d6dca8867dc24c55477c2ab5482df9d"
    },
    {
      "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": "f3ad085e23d67d78085eff2e18ca15d1e2409a3e6982ab0d6f22023fb54bd085"
        }
      ],
      "contentHash": "sha256:b6218dbdb22d192fa9112f6677664b6d96d72042e314ae4880d05ba5766b0704"
    },
    {
      "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": "25fcf143cbac31d76c22360f6846b45948bb1b274e0b019ac4b9a01b1bf06e53"
        }
      ],
      "contentHash": "sha256:a1e08c35ef996168f563e092f84858a1d951e5c6b1d97136a30996aaf9d15119"
    },
    {
      "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": "a7d207864e94669ade30710126a8a68997e80092013a9ed902ae1a93c31167b7"
        }
      ],
      "contentHash": "sha256:ed475975baee6b71dd0f07b191f674e89a3cda605f7cccddee1f7f8cb1663ac4"
    },
    {
      "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": "8ffb0be798065d120f4e94d1bc98184843a6d59ff584df2a15dc703fbbe265a5"
        }
      ],
      "contentHash": "sha256:8f450ad4fb965dd2b1855929775f3387a6d7f20e22d8efe720686a9a8dc58e09"
    },
    {
      "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": "e985a5b5fce22552bce95862185a70d7388da8e9fc9ebbd2f1cf4b1cf9c48c07"
        }
      ],
      "contentHash": "sha256:e94fc9fce72fa90ab56643d274a105293d742cbc766cba2c56e62ecd88fc9477"
    },
    {
      "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": "1cd44f32ace00050c417549baefba13184c1bd67f764e2148490348aed60ba31"
        }
      ],
      "contentHash": "sha256:feeb93d7a80226c88b27bee050f3435fd0af6c490740d96672a208be41758785"
    },
    {
      "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": "2eb3232d4acfd5131efddb68181cbd0a6e269902318644b2396706c153d0574d"
        }
      ],
      "contentHash": "sha256:ec3ace154ed37c10da4e7fdbef458967d4a92ad0705414e240ae4217cb307158"
    },
    {
      "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": "455b2bc5fc36953066c5ff69e9c2c4fb35fbe5be8d3660d02d73ea9b4fd57851"
        }
      ],
      "contentHash": "sha256:3da10847c1e1002fef91d4cc341230a213c9099347275a9f0caf9487abb058a3"
    },
    {
      "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": "8b464e227fcc13aaccd772794f07407cbc778a9d9a66fb168a879a79346e6e0b"
        }
      ],
      "contentHash": "sha256:49093244d33b9f9346cf08a2da557dc077f9486614909f1087ff00a5759c06d1"
    },
    {
      "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": "8eb00834bc0daa8b2dfa53c599bf2e3b874c68c3c7cedda168eb186ff1b5a93b"
        }
      ],
      "contentHash": "sha256:745c595fade709d0a354e8d333b7012098d6615d5355db6133941696741b1a4b"
    },
    {
      "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": "20d1e56b3cdff8323cb3df948eb6409e3ef81b0ae7680313fc149ab6a64219a3"
        }
      ],
      "contentHash": "sha256:0a187fe97c42f26056e94ed4ba20968e0e8ce12b61a3dfdb708ace1d8a0d65b5"
    },
    {
      "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": "1532d38457748727f036c7869c5c1f3936a044195162882b780e8f3533264069"
        }
      ],
      "contentHash": "sha256:927ac1b96266c378c421b096f2dcb7668447e199bb033b32728f227dc6d7bd38"
    },
    {
      "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": "4d8969827579e835263dd094c73a3e76f4d5a2c2d5de59b4f82fd5b24555ba98"
        }
      ],
      "contentHash": "sha256:640c3d795ec11a31be2d26dc1d6883f425e6002e27ed6d457c74844b2b1d4676"
    },
    {
      "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": "af58373523c2c8099fd84014c138821a977d7e5177b688b90b84d1bd976d4e16"
        }
      ],
      "contentHash": "sha256:e485aef93ea7fb50cbe9a940c43b238860aaea73675b7fbaaa5345d6f32399c8"
    },
    {
      "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": "1d941d26311274cd4c11851e46bf64216c1d9d799901c6653e434727ba6bbe6b"
        }
      ],
      "contentHash": "sha256:68abff2f4480e597579e2268b21dfd98df9642c5aca682dff03f904597d435d7"
    },
    {
      "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": "d035d7c6b70f0f29afd178b78c45c9684a41ecddf23d8b8380dce3dabdd72c32"
        }
      ],
      "contentHash": "sha256:c8618227eb43667bb59c9e41b834d97fcfcb6a9d53628f3443981278e4cec582"
    }
  ]
}
