gradeNot graded
page: Every page
show-pet-summaryAction
Display a summary card of the pet's details (name, species, breed, age, etc.) so the user can confirm the information before continuing. Call this after lassie-quote has collected the pet data, passing the returned pet fields as arguments. Use it whenever the pet's information needs to be reviewed or re-confirmed by the user.
View tool JSON
{
"name": "show-pet-summary",
"kind": "act",
"impl": "imperative",
"description": "Display a summary card of the pet's details (name, species, breed, age, etc.) so the user can confirm the information before continuing. Call this after lassie-quote has collected the pet data, passing the returned pet fields as arguments. Use it whenever the pet's information needs to be reviewed or re-confirmed by the user.",
"inputSchema": {
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"sv",
"en",
"fr",
"de"
]
},
"animalType": {
"type": "string",
"enum": [
"dog",
"cat"
]
},
"petName": {
"type": "string"
},
"breed": {
"type": "string"
},
"gender": {
"type": "string",
"enum": [
"male",
"female"
]
},
"isNeutered": {
"type": "boolean"
},
"birthDate": {
"type": "string"
},
"indoorOutdoor": {
"description": "Cats only. Whether the cat lives indoors or goes outside. Do NOT set this for dogs — leave it undefined.",
"type": "string",
"enum": [
"indoor",
"outdoor"
]
},
"municipality": {
"type": "string"
},
"municipalityCode": {
"type": "string"
},
"country": {
"type": "string",
"enum": [
"SWE",
"FRA",
"GER",
"OTHER"
]
},
"isMixedBreed": {
"description": "Whether the pet is a mixed breed.",
"type": "boolean"
},
"mixedBreedWeight": {
"description": "MIXED BREED DOGS ONLY. Weight category for a mixed breed dog of unknown breeds. Do NOT set for single-breed pets or cats.",
"type": "string",
"enum": [
"weight_0_10",
"weight_10_20",
"weight_20_30",
"weight_30_plus"
]
},
"mixedBreedHeight": {
"description": "MIXED BREED DOGS ONLY. Shoulder height category for a mixed breed dog of unknown breeds. Do NOT set for single-breed pets or cats.",
"type": "string",
"enum": [
"height_0_45",
"height_45_plus"
]
}
},
"required": [
"locale",
"animalType",
"petName",
"breed",
"gender",
"isNeutered",
"birthDate",
"municipality",
"municipalityCode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
},
"page": "/"
}show-pricingAnswer
Display the available Lassie pet insurance plans with their prices and coverage details so the user can compare options. Call this after lassie-quote has produced a pricing quote, passing the returned pricing fields (country, insurance type, plans, etc.) as arguments. Use it whenever the user needs to see or revisit the available plans for their pet.
View tool JSON
{
"name": "show-pricing",
"kind": "answer",
"impl": "imperative",
"description": "Display the available Lassie pet insurance plans with their prices and coverage details so the user can compare options. Call this after lassie-quote has produced a pricing quote, passing the returned pricing fields (country, insurance type, plans, etc.) as arguments. Use it whenever the user needs to see or revisit the available plans for their pet.",
"inputSchema": {
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"sv",
"en",
"fr",
"de"
]
},
"country": {
"type": "string",
"enum": [
"SWE",
"FRA",
"GER"
]
},
"insuranceType": {
"type": "string",
"enum": [
"health",
"liability"
]
},
"animalType": {
"type": "string",
"enum": [
"dog",
"cat"
]
},
"petName": {
"type": "string"
},
"draftId": {
"type": "string"
},
"quoteUrl": {
"type": "string"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"total": {
"type": "number"
},
"limit": {
"type": "number"
},
"deductible": {
"type": "number"
},
"copay": {
"type": [
"number",
"null"
]
},
"netPremium": {
"type": "number"
},
"discounts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"total": {
"type": "number"
},
"applicationType": {
"type": "string"
},
"applicationTotal": {
"type": "number"
},
"maxInvoicesSpread": {
"type": [
"number",
"null"
]
}
},
"required": [
"type",
"name",
"total",
"applicationType",
"applicationTotal",
"maxInvoicesSpread"
]
}
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"total",
"limit",
"deductible",
"copay",
"netPremium"
]
}
}
},
"required": [
"locale",
"country",
"animalType",
"petName",
"draftId",
"quoteUrl",
"plans"
],
"$schema": "http://json-schema.org/draft-07/schema#"
},
"page": "/"
}faqAnswer
Answer frequently asked questions about Lassie pet insurance. Use this when users ask about coverage, waiting periods, plans, pricing, cancellation, or other insurance-related questions. Pass the country parameter when the question is about a specific country's insurance. TONE GUIDE — "Care from your pet's point of view": When answering FAQ questions, embody Lassie's voice: compassionate, reliable, and inspirational. - Talk like a caring friend — warm, helpful, never stiff or clinical - Explain insurance concepts simply — avoid jargon, be relatable for someone new to pet insurance - Be frank and truthful — never hide things, but frame information positively - Keep answers short and concise — no walls of text - Express passion for pet health and preventative care - Do NOT sound sales-y or focus on price/being cheap — highlight Lassie's care-first qualities instead - Never be judgmental - COMPLIANCE: Lassie is an insurance broker — NEVER say Lassie is an insurance company. NEVER give recommendations or advice — only provide information. If the user asks what you recommend, firmly but warmly decline and redirect to factual information. NEVER use social proof (e.g. "most people choose…") or comparative framing that steers the user. - EMOJIS: You may use sparingly: 💙 (compassion), 😊 (warmth), ☑️ (benefits), 💡 (tips), 🐾 (pets). Avoid off-palette hearts, over-expressive, or negative emojis.
View tool JSON
{
"name": "faq",
"kind": "answer",
"impl": "imperative",
"description": "Answer frequently asked questions about Lassie pet insurance. Use this when users ask about coverage, waiting periods, plans, pricing, cancellation, or other insurance-related questions. Pass the country parameter when the question is about a specific country's insurance.\n\nTONE GUIDE — \"Care from your pet's point of view\":\nWhen answering FAQ questions, embody Lassie's voice: compassionate, reliable, and inspirational.\n- Talk like a caring friend — warm, helpful, never stiff or clinical\n- Explain insurance concepts simply — avoid jargon, be relatable for someone new to pet insurance\n- Be frank and truthful — never hide things, but frame information positively\n- Keep answers short and concise — no walls of text\n- Express passion for pet health and preventative care\n- Do NOT sound sales-y or focus on price/being cheap — highlight Lassie's care-first qualities instead\n- Never be judgmental\n- COMPLIANCE: Lassie is an insurance broker — NEVER say Lassie is an insurance company. NEVER give recommendations or advice — only provide information. If the user asks what you recommend, firmly but warmly decline and redirect to factual information. NEVER use social proof (e.g. \"most people choose…\") or comparative framing that steers the user.\n- EMOJIS: You may use sparingly: 💙 (compassion), 😊 (warmth), ☑️ (benefits), 💡 (tips), 🐾 (pets). Avoid off-palette hearts, over-expressive, or negative emojis.",
"inputSchema": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The user's question"
},
"country": {
"description": "Filter results to a specific country's knowledge base. Use 'france' for French users, 'germany' for German users, 'sweden' for Swedish users.",
"type": "string",
"enum": [
"france",
"germany",
"sweden"
]
}
},
"required": [
"question"
],
"$schema": "http://json-schema.org/draft-07/schema#"
},
"page": "/"
}lassie-quoteAction
Get a pet insurance quote from Lassie. Use when a user wants to insure their dog or cat, get a price quote, or learn about Lassie insurance packages. This tool runs a multi-step flow. Each call returns the flow's current status, the data for that step, and a `nextStep` field describing what the following call contains.
View tool JSON
{
"name": "lassie-quote",
"kind": "act",
"impl": "imperative",
"description": "Get a pet insurance quote from Lassie. Use when a user wants to insure their dog or cat, get a price quote, or learn about Lassie insurance packages.\n\nThis tool runs a multi-step flow. Each call returns the flow's current status, the data for that step, and a `nextStep` field describing what the following call contains.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start",
"continue",
"reset"
],
"description": "\"start\" to begin the flow, \"continue\" to resume after a pause (interrupt or widget), \"reset\" to restart from the beginning with a correction to a previously-collected field"
},
"intent": {
"description": "Required when action is \"start\". A brief summary of the user's goal for this flow, taken from what the user said rather than inferred.",
"type": "string"
},
"context": {
"description": "Optional when action is \"start\". The situation that led the user here — the page they are on, what they were doing, or what triggered the request. Omitted when there is nothing genuinely relevant to report.",
"type": "string"
},
"stateUpdates": {
"description": "State field values to set before processing the next node: the user's answer keyed by the `field` from the response, plus any other values the user stated. Fields already filled here are skipped by the engine. For nested state fields, use dot-paths like \"driver.name\".",
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"sv",
"en",
"fr",
"de"
],
"description": "The user's language: sv for Swedish, en for English, fr for French, de for German. Must be filled in at the beginning of the conversation based on the language the user writes in. Defaults to English (en)."
},
"country": {
"type": "string",
"enum": [
"SWE",
"FRA",
"GER",
"OTHER"
],
"description": "The country where the pet owner lives. SWE=Sweden, FRA=France, GER=Germany, OTHER=unsupported country. Extract from context clues (e.g. Swedish city → SWE, German city → GER) or ask if unclear."
},
"insuranceType": {
"description": "The type of insurance: 'health' for pet health/surgery insurance, 'liability' for dog liability insurance. Only relevant for Germany.",
"type": "string",
"enum": [
"health",
"liability"
]
},
"isCurrentlyInsured": {
"type": "string",
"enum": [
"yes",
"no"
],
"description": "Whether the pet is currently insured"
},
"animalType": {
"type": "string",
"enum": [
"dog",
"cat"
],
"description": "Type of animal: dog or cat. Do a best effort to infer it from the breed if possible."
},
"petName": {
"type": "string",
"description": "The pet's name"
},
"isMixedBreed": {
"description": "Whether the pet is a mixed breed. Set to true when the user mentions a mix, crossbreed, or multiple breeds. IMPORTANT: when setting isMixedBreed to true, you MUST also set mixedBreed to {} (empty object) in the same stateUpdates — unless the user explicitly named breeds, in which case populate breed1/breed2 and set knowsBreeds: true.",
"type": "boolean"
},
"breed": {
"type": "string",
"description": "The pet's breed in the language the user used (e.g. \"Deutscher Schäferhund\" not \"German Shepherd\", \"Berger Allemand\" not \"German Shepherd\"). Leave empty when isMixedBreed is true."
},
"breedId": {
"type": "string",
"description": "The resolved breed ID from the Lassie API (e.g. DogBreed-labrador-retriever)"
},
"mixedBreed": {
"description": "MUST be set whenever isMixedBreed is true. If the user only said 'mixed breed' or 'mutt' without naming breeds, set mixedBreed to {} (empty object — do NOT set knowsBreeds). Only set knowsBreeds if the user explicitly named breeds (true) or explicitly said they don't know (false). Example: 'Golden Retriever / Lab mix' → { knowsBreeds: true, breed1: 'Golden Retriever', breed2: 'Labrador Retriever' }.",
"type": "object",
"properties": {
"knowsBreeds": {
"type": "boolean",
"description": "Set ONLY when explicitly answered: true if the user named at least one breed, false if they explicitly said they don't know the breeds. Do NOT infer this from absence of breed names — leave it unset if the user hasn't been asked yet."
},
"breed1": {
"description": "First breed name in the mix (e.g. 'Golden Retriever')",
"type": "string"
},
"breed1Id": {
"description": "First breed API ID in the mix — set by the system, not by the user",
"type": "string"
},
"breed2": {
"description": "Second breed name in the mix (e.g. 'Labrador Retriever') — optional, user may only know one breed",
"type": "string"
},
"breed2Id": {
"description": "Second breed API ID in the mix — set by the system, not by the user",
"type": "string"
},
"weight": {
"description": "Dog weight category (only for Germany, when breeds are unknown). weight_0_10 = 0-10 kg, weight_10_20 = 10-20 kg, weight_20_30 = 20-30 kg, weight_30_plus = 30+ kg",
"type": "string",
"enum": [
"weight_0_10",
"weight_10_20",
"weight_20_30",
"weight_30_plus"
]
},
"height": {
"description": "Dog shoulder height category (only for Germany, when breeds are unknown). height_0_45 = under 45 cm, height_45_plus = 45 cm or larger",
"type": "string",
"enum": [
"height_0_45",
"height_45_plus"
]
}
},
"required": [
"knowsBreeds"
]
},
"gender": {
"type": "string",
"enum": [
"male",
"female"
],
"description": "The pet's gender. IMPORTANT: Always infer from pronouns — \"he\", \"he's\", \"him\", \"his\" → male; \"she\", \"she's\", \"her\" → female. Also accept boy/girl."
},
"isNeutered": {
"type": "boolean",
"description": "Whether the pet is neutered/spayed"
},
"birthDate": {
"type": "string",
"description": "The pet's birth date in YYYY-MM-DD format"
},
"indoorOutdoor": {
"description": "CATS ONLY. Whether the cat lives indoors or goes outside. NEVER set this when animalType is 'dog' — leave it undefined. Only ask this question when animalType is 'cat'.",
"type": "string",
"enum": [
"indoor",
"outdoor"
]
},
"ownerBirthdate": {
"description": "The owner's birth date in YYYY-MM-DD format (required for German liability insurance)",
"type": "string"
},
"municipality": {
"type": "string",
"description": "The city or municipality where the owner lives (e.g. Stockholm, Paris, Berlin). This is the human-readable city name."
},
"municipalityCode": {
"description": "The postal/zip code where the owner lives. For France: code postal (e.g. 75001). For Germany: Postleitzahl (e.g. 10115). NOT needed for Sweden — skip it entirely if country is SWE.",
"type": "string"
},
"confirmed": {
"type": "boolean",
"description": "Whether the user confirmed their pet details"
},
"draftId": {
"type": "string",
"description": "The draft ID returned by the Lassie API after creating a quote"
},
"quoteUrl": {
"type": "string",
"description": "The customer-facing quote preview URL"
},
"copay": {
"description": "Variable deductible (copay) as a decimal. Sweden: 0.15 (15%) or 0.25 (25%), default 0.25. Germany: 0 (0%), 0.2 (20%), or 0.4 (40%), default 0.2.",
"type": "number"
},
"deductible": {
"description": "Fixed deductible in minor units. Sweden: 0, 190000 (1,900 SEK), or 350000 (3,500 SEK), default 350000. Germany: always 0.",
"type": "number"
},
"limit": {
"description": "Coverage limit in minor units. Sweden: Bronze 3000000, Silver 6000000/9000000/12000000, Gold 16000000, default 6000000. Germany: default 100000 (€1,000).",
"type": "number"
},
"pricingAction": {
"type": "string",
"enum": [
"adjust",
"done"
],
"description": "Set to 'adjust' when the user wants to change deductible or copay and see updated pricing. Set to 'done' when the user is satisfied with the pricing."
}
},
"additionalProperties": {}
},
"sessionId": {
"description": "Session identifier. If the response includes a `sessionId`, pass it back on every subsequent \"continue\" and \"reset\" call for this flow.",
"type": "string"
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
},
"page": "/"
}