Tool tree
gradeNot graded
analyze_environmental_hazardAction
Analyze place+hazard. Call help first for demos. If unclear, ask and wait; season/place/goal alone implies none. First named-place call: pass as stated; set place_choice_id=null; never pre-qualify place. Use latest_completed unless dates given; never today. After the reply, copy selected choice_id to place_choice_id, preserve inputs, execute and finish. For unqualified storm/thunderstorm/severe weather: use wind_storm+related_context and copy question; single_hazard_only needs explicit wind/water. Answer with display_summary, display labels, and source_name; never expose internal IDs, source keys, field names, or enum names. Infer concern; else general.
View tool JSON
{
"name": "analyze_environmental_hazard",
"kind": "act",
"impl": "imperative",
"description": "Analyze place+hazard. Call help first for demos. If unclear, ask and wait; season/place/goal alone implies none. First named-place call: pass as stated; set place_choice_id=null; never pre-qualify place. Use latest_completed unless dates given; never today. After the reply, copy selected choice_id to place_choice_id, preserve inputs, execute and finish. For unqualified storm/thunderstorm/severe weather: use wind_storm+related_context and copy question; single_hazard_only needs explicit wind/water. Answer with display_summary, display labels, and source_name; never expose internal IDs, source keys, field names, or enum names. Infer concern; else general.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"required": [
"place",
"hazard",
"time"
],
"properties": {
"place": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Initial call: pass the named place as stated, even if ambiguous; do not qualify it first. Strip context: 'near my Houston home' becomes 'Houston'. After a choice, keep this original query."
},
"place_choice_id": {
"type": [
"string",
"null"
],
"pattern": "^place-[A-Za-z0-9._-]{3,120}$",
"description": "Initial call: use null. Only after needs_place_choice: copy the selected choice_id exactly. Never derive it from a place, label, demo, or coordinates; never invent or edit it."
},
"hazard": {
"type": "string",
"enum": [
"fire_smoke",
"flood_storm",
"wind_storm",
"extreme_heat",
"drought_land",
"air_quality",
"earth_volcanoes"
],
"description": "Choose a named/implied hazard; never infer from season/place/concern/generic conditions. Smoke + air uses fire_smoke/related_context. Volcano + air/heat uses earth_volcanoes/related_context. If none, ask and wait."
},
"analysis_scope": {
"type": "string",
"enum": [
"single_hazard_only",
"related_context"
],
"description": "For generic storm/severe weather, use related_context so separate wind and water chains run at any radius. Use single_hazard_only only for explicit wind/gust or rain/flood/gage asks; Wind without question widens."
},
"concern": {
"type": "string",
"enum": [
"general",
"home",
"health",
"pets",
"travel",
"power_internet",
"community"
],
"description": "Use pets for dog/cat/animal; health for person/family; home whenever home/roof/property/insurer appears; travel for travel. Never map pet symptoms to health. Otherwise general."
},
"radius_km": {
"type": "number",
"minimum": 1,
"maximum": 250,
"default": 25,
"description": "Analysis radius in kilometres; defaults to 25."
},
"time": {
"type": "string",
"pattern": "^(latest_completed|\\d{4}-\\d{2}-\\d{2}(?:/\\d{4}-\\d{2}-\\d{2})?)$",
"description": "After needs_place_choice, copy retry_with_original_arguments.time exactly. Otherwise use latest_completed unless the person stated dates; never invent a date or use today."
},
"question": {
"type": "string",
"maxLength": 500,
"description": "Optional, except MUST copy the person's wording for unqualified storm/thunderstorm/severe weather so deterministic routing can include separate wind and water chains. Shorten only to 500 characters."
}
}
}
}compare_environmental_evidenceAction
Compare two place/time/radius scenarios through the same validated evidence pipeline. Use when the person asks what changed, which place/time had stronger evidence, or to compare before/after. Preserve each stated radius. For generic storm use wind_storm + related_context so both Wind & Storm and Flood & Heavy Rain run in both scenarios. Report every scenario and every chain in plain English, then agreements, differences, unknowns, confidence, and what would change the conclusion. Use display labels and summaries; never expose internal IDs, source keys, field names, or enum names.
View tool JSON
{
"name": "compare_environmental_evidence",
"kind": "act",
"impl": "imperative",
"description": "Compare two place/time/radius scenarios through the same validated evidence pipeline. Use when the person asks what changed, which place/time had stronger evidence, or to compare before/after. Preserve each stated radius. For generic storm use wind_storm + related_context so both Wind & Storm and Flood & Heavy Rain run in both scenarios. Report every scenario and every chain in plain English, then agreements, differences, unknowns, confidence, and what would change the conclusion. Use display labels and summaries; never expose internal IDs, source keys, field names, or enum names.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"required": [
"baseline",
"comparison",
"hazard"
],
"properties": {
"baseline": {
"type": "object",
"additionalProperties": false,
"required": [
"place",
"time"
],
"properties": {
"place": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Initial call: pass the named place as stated, even if ambiguous; do not qualify it first. Strip context: 'near my Houston home' becomes 'Houston'. After a choice, keep this original query."
},
"place_choice_id": {
"type": [
"string",
"null"
],
"pattern": "^place-[A-Za-z0-9._-]{3,120}$",
"description": "Initial call: use null. Only after needs_place_choice: copy the selected choice_id exactly. Never derive it from a place, label, demo, or coordinates; never invent or edit it."
},
"radius_km": {
"type": "number",
"minimum": 1,
"maximum": 250,
"default": 25,
"description": "Analysis radius in kilometres; defaults to 25."
},
"time": {
"type": "string",
"pattern": "^(latest_completed|\\d{4}-\\d{2}-\\d{2}(?:/\\d{4}-\\d{2}-\\d{2})?)$",
"description": "After needs_place_choice, copy retry_with_original_arguments.time exactly. Otherwise use latest_completed unless the person stated dates; never invent a date or use today."
}
},
"description": "The first place/time/radius scenario. Preserve any radius the person supplied."
},
"comparison": {
"type": "object",
"additionalProperties": false,
"required": [
"place",
"time"
],
"properties": {
"place": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Initial call: pass the named place as stated, even if ambiguous; do not qualify it first. Strip context: 'near my Houston home' becomes 'Houston'. After a choice, keep this original query."
},
"place_choice_id": {
"type": [
"string",
"null"
],
"pattern": "^place-[A-Za-z0-9._-]{3,120}$",
"description": "Initial call: use null. Only after needs_place_choice: copy the selected choice_id exactly. Never derive it from a place, label, demo, or coordinates; never invent or edit it."
},
"radius_km": {
"type": "number",
"minimum": 1,
"maximum": 250,
"default": 25,
"description": "Analysis radius in kilometres; defaults to 25."
},
"time": {
"type": "string",
"pattern": "^(latest_completed|\\d{4}-\\d{2}-\\d{2}(?:/\\d{4}-\\d{2}-\\d{2})?)$",
"description": "After needs_place_choice, copy retry_with_original_arguments.time exactly. Otherwise use latest_completed unless the person stated dates; never invent a date or use today."
}
},
"description": "The second place/time/radius scenario. It may differ by place, time, radius, or several of those."
},
"hazard": {
"type": "string",
"enum": [
"fire_smoke",
"flood_storm",
"wind_storm",
"extreme_heat",
"drought_land",
"air_quality",
"earth_volcanoes"
],
"description": "Choose a named/implied hazard; never infer from season/place/concern/generic conditions. Smoke + air uses fire_smoke/related_context. Volcano + air/heat uses earth_volcanoes/related_context. If none, ask and wait."
},
"analysis_scope": {
"type": "string",
"enum": [
"single_hazard_only",
"related_context"
],
"description": "For generic storm/severe weather, use related_context so separate wind and water chains run at any radius. Use single_hazard_only only for explicit wind/gust or rain/flood/gage asks; Wind without question widens."
},
"concern": {
"type": "string",
"enum": [
"general",
"home",
"health",
"pets",
"travel",
"power_internet",
"community"
],
"description": "Use pets for dog/cat/animal; health for person/family; home whenever home/roof/property/insurer appears; travel for travel. Never map pet symptoms to health. Otherwise general."
},
"question": {
"type": "string",
"maxLength": 500,
"description": "Optional, except MUST copy the person's wording for unqualified storm/thunderstorm/severe weather so deterministic routing can include separate wind and water chains. Shorten only to 500 characters."
}
}
}
}get_sky_to_porch_help_and_demosAnswer
Use only when an environmental analysis request has no named/implied hazard, or the person explicitly asks for supported features or demos. For a missing hazard, return options, ask which one, and wait. Never use for concrete place+hazard, preflight, or unrelated tasks. Use display summaries and labels; never expose field names or enum names.
View tool JSON
{
"name": "get_sky_to_porch_help_and_demos",
"kind": "answer",
"impl": "imperative",
"description": "Use only when an environmental analysis request has no named/implied hazard, or the person explicitly asks for supported features or demos. For a missing hazard, return options, ask which one, and wait. Never use for concrete place+hazard, preflight, or unrelated tasks. Use display summaries and labels; never expose field names or enum names.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
}
}get_environmental_source_coverageAnswer
Use directly for source-region, time-range, or eligibility questions about one hazard; never preflight with the capabilities catalog. Returns checked-in hazard-wide coverage without live requests. Do not call before ordinary analysis. Coverage is eligibility, never proof of an observation. Answer with source_name, availability, and display labels; never expose source keys, field names, or enum names.
View tool JSON
{
"name": "get_environmental_source_coverage",
"kind": "answer",
"impl": "imperative",
"description": "Use directly for source-region, time-range, or eligibility questions about one hazard; never preflight with the capabilities catalog. Returns checked-in hazard-wide coverage without live requests. Do not call before ordinary analysis. Coverage is eligibility, never proof of an observation. Answer with source_name, availability, and display labels; never expose source keys, field names, or enum names.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"required": [
"hazard"
],
"properties": {
"hazard": {
"type": "string",
"enum": [
"fire_smoke",
"flood_storm",
"wind_storm",
"extreme_heat",
"drought_land",
"air_quality",
"earth_volcanoes"
],
"description": "Hazard whose checked-in source-coverage catalog should be inspected."
}
}
}
}look_up_place_locationAction
Find a place's standard name, coordinates, approximate area, and nearby region names. One clear result selects and frames that place on Sky to Porch's shared live map while keeping the current area size, date, and requested layers. If several places match, the page shows every checked option and asks the person to choose. If the search fails, the page explains what happened. These unfinished searches never move the map or clear existing results. Do not use this to assess environmental conditions, severity, impact, or safety.
View tool JSON
{
"name": "look_up_place_location",
"kind": "act",
"impl": "imperative",
"description": "Find a place's standard name, coordinates, approximate area, and nearby region names. One clear result selects and frames that place on Sky to Porch's shared live map while keeping the current area size, date, and requested layers. If several places match, the page shows every checked option and asks the person to choose. If the search fails, the page explains what happened. These unfinished searches never move the map or clear existing results. Do not use this to assess environmental conditions, severity, impact, or safety.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"required": [
"place"
],
"properties": {
"place": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "The place name exactly as the person stated it. Keep this original query unchanged when continuing after a place choice."
},
"place_choice_id": {
"type": [
"string",
"null"
],
"pattern": "^place-[A-Za-z0-9._-]{3,120}$",
"description": "Initial call: omit or use null. After an ambiguous result, copy only the person-selected choice_id exactly and keep place unchanged."
}
}
}
}set_environmental_map_layersAction
Show or hide Sky to Porch environmental map imagery for one place and one UTC date. Use for visual map requests involving rain imagery, land-surface heat imagery, recent FIRMS thermal-anomaly pixels, or 3-day flood-extent imagery. Inputs are desired-state patches: omitted layers remain unchanged and repeated identical calls are safe. Use place lookup for coordinates and bounds, environmental analysis for conditions or safety, and source coverage for eligibility. In the answer, use display_summary plus each layer_name, status_label, and source_name; never expose layer keys, product IDs, field names, or enum names. Imagery is visualization-only.
View tool JSON
{
"name": "set_environmental_map_layers",
"kind": "act",
"impl": "imperative",
"description": "Show or hide Sky to Porch environmental map imagery for one place and one UTC date. Use for visual map requests involving rain imagery, land-surface heat imagery, recent FIRMS thermal-anomaly pixels, or 3-day flood-extent imagery. Inputs are desired-state patches: omitted layers remain unchanged and repeated identical calls are safe. Use place lookup for coordinates and bounds, environmental analysis for conditions or safety, and source coverage for eligibility. In the answer, use display_summary plus each layer_name, status_label, and source_name; never expose layer keys, product IDs, field names, or enum names. Imagery is visualization-only.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"required": [
"layers"
],
"properties": {
"layers": {
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"properties": {
"rain_satellite": {
"type": "boolean",
"description": "Desired visibility for rain_satellite. Omit this field to leave that layer unchanged."
},
"surface_heat_satellite": {
"type": "boolean",
"description": "Desired visibility for surface_heat_satellite. Omit this field to leave that layer unchanged."
},
"thermal_anomalies_firms": {
"type": "boolean",
"description": "Desired visibility for thermal_anomalies_firms. Omit this field to leave that layer unchanged."
},
"flood_extent": {
"type": "boolean",
"description": "Desired visibility for flood_extent. Omit this field to leave that layer unchanged."
}
},
"description": "Desired-state patch. Omitted layers stay unchanged; true shows and false hides. Repeating the same patch is idempotent."
},
"place": {
"type": [
"string",
"null"
],
"minLength": 2,
"maxLength": 200,
"description": "Optional place to select and frame before updating layers. Omit to keep the current map place."
},
"place_choice_id": {
"type": [
"string",
"null"
],
"pattern": "^place-[A-Za-z0-9._-]{3,120}$",
"description": "After an ambiguous place result, copy the person-selected choice_id exactly while preserving the original place and other arguments."
},
"date": {
"type": [
"string",
"null"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Optional single UTC calendar date. Multi-day ranges are never silently collapsed to one map date."
},
"radius_km": {
"type": [
"number",
"null"
],
"minimum": 1,
"maximum": 250,
"description": "Optional analysis-area radius in kilometres. Omit to preserve the current radius, or use 25 km for a new place."
}
}
}
}inspect_current_environmental_evidenceAnswer
Use only after an environmental analysis. Read validated observations, confidence, and citations from the current primary and related evidence without re-querying or controlling the UI. If no result is active, this says so. Answer with display_summary, display labels, and source_name; never expose observation IDs, source keys, field names, or enum names. Explain supported relationships and label inference. Do not use for an insurer or property-record checklist; use the storm claim discussion tool when applicable.
View tool JSON
{
"name": "inspect_current_environmental_evidence",
"kind": "answer",
"impl": "imperative",
"description": "Use only after an environmental analysis. Read validated observations, confidence, and citations from the current primary and related evidence without re-querying or controlling the UI. If no result is active, this says so. Answer with display_summary, display labels, and source_name; never expose observation IDs, source keys, field names, or enum names. Explain supported relationships and label inference. Do not use for an insurer or property-record checklist; use the storm claim discussion tool when applicable.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"focus": {
"type": "string",
"enum": [
"summary",
"direct_observations",
"sources",
"limitations",
"evidence_needed"
],
"default": "summary",
"description": "Use a focused view for natural follow-ups such as what was observed, which source failed, why the result is inconclusive, or what evidence would change it."
},
"hazard": {
"type": "string",
"enum": [
"fire_smoke",
"flood_storm",
"wind_storm",
"extreme_heat",
"drought_land",
"air_quality",
"earth_volcanoes"
],
"description": "Optional: inspect only one hazard chain already present in the current Agent result. This never re-runs a query."
}
}
}
}prepare_storm_claim_discussionAction
Use only when the current completed result is Home + Wind & Storm and the person asks to open an insurer discussion or identify roof/property records. Otherwise this returns a non-applicable status. It opens the evidence-backed wind contribution kit, leads with supported regional findings, and shows records that could strengthen the discussion; the insurer decides coverage. Use display labels and summaries; never expose internal IDs, field names, or enum names.
View tool JSON
{
"name": "prepare_storm_claim_discussion",
"kind": "act",
"impl": "imperative",
"description": "Use only when the current completed result is Home + Wind & Storm and the person asks to open an insurer discussion or identify roof/property records. Otherwise this returns a non-applicable status. It opens the evidence-backed wind contribution kit, leads with supported regional findings, and shows records that could strengthen the discussion; the insurer decides coverage. Use display labels and summaries; never expose internal IDs, field names, or enum names.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
}
}