Algolia-Central

Knowledge/AgentStudio/evidence/shopping-assistant-10-tool-core.md

Evidence — Shopping Assistant 10-Tool Core

The shopping assistant archetype's universal tool set. Every production single-agent shopping assistant in the demo app implements all 10. Vertical-specific additions go ON TOP of these 10.

The 10 tools

1. algolia_search_index (built-in)

The foundation. Single index per shopping assistant. Used by the agent to retrieve real product data with real objectIDs that downstream tools then reference. Always present.

2. suggest_searches — discovery primary

Suggest 1-3 relevant searches with optional facet filters.

{
  "name": "suggest_searches",
  "type": "client_side",
  "description": "Primary discovery tool for suggesting relevant product searches. Use when user wants to explore new products.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string", "description": "Friendly intro message" },
      "suggestions": {
        "type": "array",
        "description": "1-3 search suggestions",
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": ["query", "label", "facets"],
          "properties": {
            "query": { "type": "string" },
            "label": { "type": "string" },
            "facets": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": ["attribute", "type", "values"],
                "properties": {
                  "attribute": { "type": "string", "enum": ["gender", "color.original_name", "price.value"] },
                  "type": { "type": "string", "enum": ["list", "range"] },
                  "values": { "type": "array", "items": { "type": "string" } },
                  "value": { "type": "string", "description": "For range facets, 'min:max' format" }
                }
              }
            }
          }
        }
      }
    },
    "required": ["suggestions", "message"]
  }
}

3. suggest_conv_prompts — follow-up prompts

3-4 conversational follow-ups.

{
  "name": "suggest_conv_prompts",
  "type": "client_side",
  "description": "Suggest 3-4 follow-up prompts to guide user conversation",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string" },
      "initialQuery": { "type": "string" },
      "conversationPrompts": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "prompt": { "type": "string" },
            "type": { "type": "string", "enum": ["refinement", "discovery", "outfit", "general"] }
          },
          "required": ["prompt", "type"]
        }
      }
    },
    "required": ["initialQuery", "conversationPrompts", "message"]
  }
}

4. ui_refinement — filter visible results

Modify visible search results without starting a new search.

{
  "name": "ui_refinement",
  "type": "client_side",
  "description": "Filter or narrow down currently visible results by color, size, price, brand, etc. Do not use for new searches or gender changes.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string", "description": "Explains refinements applied AND any omitted because not available" },
      "facets": {
        "type": "array",
        "description": "Include ONLY facets that exist in availableFacets data and are explicitly requested by user",
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": ["attribute", "type", "configWidgetType"],
          "properties": {
            "attribute": { "type": "string" },
            "type": { "type": "string", "enum": ["list", "hierarchical", "range", "toggle", "numericMenu"] },
            "values": { "type": "array", "items": { "type": "string" } },
            "paths": { "type": "array", "items": { "type": "string" } },
            "value": { "type": "string", "description": "For range, 'min:max'" },
            "configWidgetType": { "type": "string" }
          }
        }
      }
    },
    "required": ["facets", "message"]
  }
}

5. view_product — single PDP

Show detail view of one product.

{
  "name": "view_product",
  "type": "client_side",
  "description": "Show details for a specific product the user wants to view.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string" },
      "productId": { "type": "string" },
      "productName": { "type": "string" },
      "productImageUrl": { "type": "string" },
      "productImageAttribute": { "type": "string" }
    },
    "required": ["productId", "productName", "productImageUrl", "message"]
  }
}

6. compare_products — comparison table

Side-by-side comparison with verdict.

{
  "name": "compare_products",
  "type": "client_side",
  "description": "Compare selected products and highlight key differences. Provide a recommendation based on comparison.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string" },
      "comparisonText": { "type": "string", "description": "2-3 sentences, ≤300 chars" },
      "table": { "type": "array", "items": { "type": "object" } },
      "recommendation": { "type": "string" },
      "products": {
        "type": "array",
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": ["objectID", "name", "image", "price"],
          "properties": {
            "objectID": { "type": "string" },
            "name": { "type": "string" },
            "price": { "type": "string" },
            "color": { "type": "string" },
            "brand": { "type": "string" },
            "category": { "type": "string" },
            "rating": { "type": "string" },
            "image": { "type": "string" }
          }
        }
      }
    },
    "required": ["comparisonText", "products", "recommendation", "message"]
  }
}

7. show_products — product cards

Display 5-8 product cards by objectID.

{
  "name": "show_products",
  "type": "client_side",
  "description": "Display product cards in chat using objectIDs from algolia_search_index results. CRITICAL: Only send objectIDs you have retrieved from a search - never invent.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "objectIDs": {
        "type": "array",
        "items": { "type": "string" },
        "minItems": 1,
        "maxItems": 10
      },
      "message": { "type": "string" }
    },
    "required": ["objectIDs"]
  }
}

8. bundle_suggestion — Algolia Recommend wrapper

Related/bought-together products.

{
  "name": "bundle_suggestion",
  "type": "client_side",
  "description": "Suggests products that pair well with a specific item. Use when users ask for complementary items, accessories, or items to complete a set.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "objectID": { "type": "string" },
      "model": { "type": "string", "enum": ["related-products", "bought-together"] },
      "message": { "type": "string" },
      "reason": { "type": "string" }
    },
    "required": ["objectID", "message"]
  }
}

Zero-argument tool, frontend resolves trending from analytics.

{
  "name": "trending_items",
  "type": "client_side",
  "description": "Find the current trending items. Use this whenever trying to find the current trending items.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "required": []
  }
}

10. welcome_prompts — conversation starters

3-4 starter prompts at session open.

{
  "name": "welcome_prompts",
  "type": "client_side",
  "description": "Generate simple, short conversation starters for a shopping assistant based on demo config.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "message": { "type": "string" },
      "initialQuery": { "type": "string", "description": "Should always be 'welcome_suggestions'" },
      "conversationPrompts": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "prompt": { "type": "string" },
            "type": { "type": "string", "enum": ["discovery", "general", "refinement", "outfit"] }
          },
          "required": ["prompt", "type"]
        }
      }
    },
    "required": ["message", "initialQuery", "conversationPrompts"]
  }
}

Vertical-specific additions

Vertical Extra tools
Fashion (incl. Luxury Fashion) analyze_image, outfit_components (or show_multi_query_results), store_search, clear_search
Grocery display_recipes, display_ingredients, nutrition_info (replaces compare_products and review_summary)
Electronics / Furnishings / Ecom review_summary
B2B (10-tool core only; strips fashion-specific tools)

Notes

  • Total 10 tools is ABOVE Algolia's official "3-5 max" recommendation. Production assistants exceed this and work because they are heavily prompt-tuned and the tools are well-described.
  • For our AskAI-archetype agents (Maverick / Elena / Bruno), the 3-5 ceiling is more directly applicable — we don't need 10+ tools, we need 2-4 render tools.
  • The 10-tool core is reference, not template for us. We're not building shopping assistants.