{
  "$schema": "https://agentready.app/schemas/agent-skills/v1.json",
  "spec_version": "2025-11",
  "agent": {
    "name": "Boutique Rugs",
    "description": "Online retailer of area rugs across styles, sizes, and materials — Persian, modern, traditional, runners, round, outdoor, kids, and more. Agents can search the catalog, fetch product details, browse collections, build a cart, and hand the user a checkout URL.",
    "vendor": "Boutique Rugs",
    "homepage": "https://boutiquerugs.com",
    "logo_url": "https://boutiquerugs.com/cdn/shop/files/br-logo1.png?v=1624019742",
    "locales": ["en-US"]
  },
  "auth": {
    "type": "cookie_session",
    "notes": "All read skills are public and stateless. Cart skills (add_to_cart, get_cart, update_cart, start_checkout) require the agent to maintain Shopify's cart cookie (cart, _shopify_y) across requests. The agent should call get_cart first to ensure a session exists, then reuse Set-Cookie values on subsequent calls."
  },
  "skills": [
    {
      "id": "search_products",
      "name": "Predictive product search",
      "description": "Search the rug catalog by free-text query. Returns matching products with title, price, image, and URL. Best for keyword or feature-based queries (e.g. 'blue persian 8x10', 'round jute rug', 'washable runner').",
      "when_to_use": "When the user asks to find, browse, or compare rugs in the Boutique Rugs catalog.",
      "endpoint": "https://boutiquerugs.com/search/suggest.json",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "q": { "type": "string", "description": "Free-text query, e.g. 'blue persian 8x10'" },
          "resources[type]": { "type": "string", "const": "product" },
          "resources[limit]": { "type": "integer", "default": 10, "maximum": 10 },
          "resources[options][unavailable_products]": { "type": "string", "enum": ["last", "hide", "show"], "default": "last" }
        },
        "required": ["q"]
      },
      "examples": [
        {
          "request": "GET https://boutiquerugs.com/search/suggest.json?q=blue%20persian%208x10&resources[type]=product&resources[limit]=10",
          "output_summary": "Up to 10 product matches with title, price, image, and product URL."
        }
      ]
    },
    {
      "id": "list_products",
      "name": "List products (paginated)",
      "description": "Paginated dump of the entire catalog. Useful for cold-start indexing or when no specific query is given.",
      "when_to_use": "When the agent needs to enumerate the catalog or fetch a large window of products.",
      "endpoint": "https://boutiquerugs.com/products.json",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "limit": { "type": "integer", "default": 30, "maximum": 250 },
          "page": { "type": "integer", "default": 1, "minimum": 1 }
        }
      }
    },
    {
      "id": "get_product",
      "name": "Get product details",
      "description": "Full product detail by handle: variants (size, color), inventory availability, options, images, and full description (HTML).",
      "when_to_use": "After a product appears in search and the user wants details, variant choices, or pricing.",
      "endpoint": "https://boutiquerugs.com/products/{handle}.json",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "handle": { "type": "string", "description": "Product handle from a search result, e.g. 'aurora-blue-8x10'" }
        },
        "required": ["handle"]
      }
    },
    {
      "id": "list_collections",
      "name": "List collections",
      "description": "Returns all storefront collections (e.g. 'Persian Rugs', 'Round Rugs', 'Outdoor', 'Runners', 'On Sale'). Use as a navigation hint for users browsing by category.",
      "when_to_use": "When the user asks 'what kinds of rugs do you have' or wants to browse by category.",
      "endpoint": "https://boutiquerugs.com/collections.json",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "limit": { "type": "integer", "default": 50, "maximum": 250 },
          "page": { "type": "integer", "default": 1 }
        }
      }
    },
    {
      "id": "get_collection_products",
      "name": "Get products in a collection",
      "description": "Lists products inside a specific collection. Supports sort order.",
      "when_to_use": "When the user picks a category (e.g. 'show me runners') and wants the products in it.",
      "endpoint": "https://boutiquerugs.com/collections/{handle}/products.json",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "handle": { "type": "string", "description": "Collection handle, e.g. 'runner-rugs'" },
          "limit": { "type": "integer", "default": 30, "maximum": 250 },
          "page": { "type": "integer", "default": 1 },
          "sort_by": {
            "type": "string",
            "enum": ["manual", "best-selling", "title-ascending", "title-descending", "price-ascending", "price-descending", "created-ascending", "created-descending"],
            "default": "manual"
          }
        },
        "required": ["handle"]
      }
    },
    {
      "id": "get_cart",
      "name": "Get current cart",
      "description": "Returns the line items, totals, and currency for the agent's active cart session. If no cart cookie has been established yet, returns an empty cart and Set-Cookie initializes one.",
      "when_to_use": "Before any cart mutation, or when the user asks 'what's in my cart'.",
      "endpoint": "https://boutiquerugs.com/cart.js",
      "method": "GET",
      "auth_required": true
    },
    {
      "id": "add_to_cart",
      "name": "Add item to cart",
      "description": "Adds one or more variants to the cart. Returns the updated line items.",
      "when_to_use": "When the user confirms they want to put a specific variant into the cart.",
      "endpoint": "https://boutiquerugs.com/cart/add.js",
      "method": "POST",
      "auth_required": true,
      "headers": { "Content-Type": "application/json" },
      "input_schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": { "type": "integer", "description": "Variant ID from get_product" },
                "quantity": { "type": "integer", "minimum": 1, "default": 1 }
              },
              "required": ["id"]
            }
          }
        },
        "required": ["items"]
      },
      "examples": [
        {
          "request": "POST /cart/add.js  body: { \"items\": [{ \"id\": 39482739182, \"quantity\": 1 }] }",
          "output_summary": "Returns the added line items with prices and the new cart total."
        }
      ]
    },
    {
      "id": "update_cart",
      "name": "Update cart line quantities",
      "description": "Sets quantities for existing line items. Quantity 0 removes the line.",
      "when_to_use": "When the user changes quantities or removes an item.",
      "endpoint": "https://boutiquerugs.com/cart/update.js",
      "method": "POST",
      "auth_required": true,
      "headers": { "Content-Type": "application/json" },
      "input_schema": {
        "type": "object",
        "properties": {
          "updates": {
            "type": "object",
            "additionalProperties": { "type": "integer", "minimum": 0 },
            "description": "Map of variant_id -> quantity, or line_index (1-based) -> quantity."
          }
        },
        "required": ["updates"]
      }
    },
    {
      "id": "clear_cart",
      "name": "Clear cart",
      "description": "Empties the current cart session.",
      "when_to_use": "When the user wants to start over.",
      "endpoint": "https://boutiquerugs.com/cart/clear.js",
      "method": "POST",
      "auth_required": true
    },
    {
      "id": "start_checkout",
      "name": "Start checkout",
      "description": "Returns the checkout URL for the active cart. The agent MUST hand this URL to the user — payment, shipping address, and contact info are collected in Shopify's hosted checkout, not by the agent.",
      "when_to_use": "When the user confirms they want to purchase the cart contents.",
      "endpoint": "https://boutiquerugs.com/checkout",
      "method": "GET",
      "auth_required": true,
      "output_schema": {
        "type": "object",
        "properties": {
          "checkout_url": { "type": "string", "format": "uri", "description": "https://boutiquerugs.com/checkout — open in browser to complete purchase" }
        }
      },
      "notes": "Shopify's /checkout endpoint redirects (302) to the hosted checkout page using the active cart cookie. The agent should treat https://boutiquerugs.com/checkout as the canonical handoff URL."
    },
    {
      "id": "get_policy",
      "name": "Get store policy",
      "description": "Fetches a store policy page (HTML) — shipping, returns, refunds, privacy, terms.",
      "when_to_use": "When the user asks about shipping times, returns, refunds, privacy, or terms.",
      "endpoint": "https://boutiquerugs.com/policies/{handle}",
      "method": "GET",
      "input_schema": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "string",
            "enum": ["shipping-policy", "refund-policy", "privacy-policy", "terms-of-service"]
          }
        },
        "required": ["handle"]
      },
      "notes": "Returns HTML, not JSON. Agent should extract text from the main content region."
    }
  ],
  "rate_limits": {
    "per_minute": 60,
    "per_day": 5000,
    "notes": "Shopify's storefront Ajax endpoints are throttled at the edge. Stay under 2 requests/second per IP to avoid 429s."
  },
  "policies": {
    "privacy_url": "https://boutiquerugs.com/policies/privacy-policy",
    "terms_url": "https://boutiquerugs.com/policies/terms-of-service",
    "shipping_url": "https://boutiquerugs.com/policies/shipping-policy",
    "refund_url": "https://boutiquerugs.com/policies/refund-policy",
    "agent_usage_policy": "Agents may browse the catalog and transact on behalf of identified end users. Bulk scraping for resale of catalog data is not permitted."
  },
  "updated_at": "2026-05-04T00:00:00Z"
}
