You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: site/src/data/tools.json
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -2910,7 +2910,7 @@
2910
2910
{
2911
2911
"name": "ha_search",
2912
2912
"title": "Search",
2913
-
"description": "Search for entities (lights, sensors, switches, climate, etc.) by name, domain, or area — AND inside automation/script/scene/helper/dashboard configurations — in one call.\n\nTwo surfaces run in parallel and return tagged results:\n - **entities**: entity-registry matches (entity_id, friendly name,\n area). Filter with `domain_filter`/`area_filter`/`state_filter`;\n omit `query` to enumerate a domain, area, or state.\n - **automations / scripts / scenes / helpers / dashboards**: matches\n *inside* config definitions — triggers, actions, sequences, scene\n entity-sets, helper bodies, dashboard cards. Driven by `query`;\n narrow with `search_types`.\n\nUse this whenever you need to find something in HA without deciding\nentity-name vs config-body search up front.\n\nWhen NOT to use:\n - To read a known entity_id's state: use `ha_get_state` (cheaper).\n - To inspect one automation/script/scene config by id: use the\n matching `ha_config_get_*`.\n - To list installed Apps (add-ons): use `ha_get_app`.\n\nConfig-body search is skipped when `domain_filter`/`area_filter`/\n`state_filter` signal entity-only intent (keeping name lookups off the\nexpensive backend); a `warnings[]` entry names the skip. Pass\n`search_types=[...]` to force config search.\n\nCaveats:\n - `partial: True` means results are NOT exhaustive — a surface raised,\n or the config-body branch lost data (per-id time budget exhausted,\n an individual fetch failed, or a helper-type list fetch failed).\n Empty buckets with `partial: True` mean \"search failed\", not \"no\n results\". The cause is in `partial_reason`, also mirrored into\n `warnings[]` with an \"incomplete results: \" prefix. Do not treat a\n partial response as complete.\n - `count` is items in this response (post-pagination), not corpus\n totals — use `entity_total_matches` + `config_total_matches`.\n - `limit`/`offset` apply per-surface. Flat `has_more`/`next_offset`\n page the next call (iterate `offset = next_offset`); per-surface\n `entity_*`/`config_*` variants show which surface still has results.\n\nFor parameters, schema, and worked examples, see ha_get_skill_guide.\n\nExamples:\n - List sensors in an area: ha_search(domain_filter=\"sensor\", area_filter=\"Living Room\")\n - Find a light by name: ha_search(\"kitchen\", domain_filter=\"light\")\n - Which automations use an entity: ha_search(\"light.bed_light\")\n - Scenes touching a light: ha_search(\"light.kitchen\", search_types=[\"scene\"])\n - Narrow the response to the entity bucket: ha_search(\"kitchen\", fields=[\"entities\"])\n - All unavailable entities: ha_search(state_filter=\"unavailable\")",
2913
+
"description": "Search for entities (lights, sensors, switches, climate, etc.) by name, domain, or area — AND inside automation/script/scene/helper/dashboard configurations — in one call.\n\nTwo surfaces run in parallel and return tagged results:\n - **entities**: entity-registry matches (entity_id, friendly name,\n area). Filter with `domain_filter`/`area_filter`/`state_filter`;\n omit `query` to enumerate a domain, area, or state.\n - **automations / scripts / scenes / helpers / dashboards**: matches\n *inside* config definitions — triggers, actions, sequences, scene\n entity-sets, helper bodies, dashboard cards. Driven by `query`;\n narrow with `search_types`.\n\nUse this whenever you need to find something in HA without deciding\nentity-name vs config-body search up front.\n\nFor control requests with exclusions such as \"except\", \"excluding\", or\n\"but not\", include `is_group` and `member_entity_ids` in `result_fields`.\nDo not control an aggregate whose members include an excluded entity;\nprefer leaf entities when the exception cannot be verified safely.\nA withheld member list still returns is_group=true; absence of\nmember_entity_ids must not be interpreted as a leaf entity.\n\nWhen NOT to use:\n - To read a known entity_id's state: use `ha_get_state` (cheaper).\n - To inspect one automation/script/scene config by id: use the\n matching `ha_config_get_*`.\n - To list installed Apps (add-ons): use `ha_get_app`.\n\nConfig-body search is skipped when `domain_filter`/`area_filter`/\n`state_filter` signal entity-only intent (keeping name lookups off the\nexpensive backend); a `warnings[]` entry names the skip. Pass\n`search_types=[...]` to force config search.\n\nCaveats:\n - `partial: True` means results are NOT exhaustive — a surface raised,\n or the config-body branch lost data (per-id time budget exhausted,\n an individual fetch failed, or a helper-type list fetch failed).\n Empty buckets with `partial: True` mean \"search failed\", not \"no\n results\". The cause is in `partial_reason`, also mirrored into\n `warnings[]` with an \"incomplete results: \" prefix. Do not treat a\n partial response as complete.\n - `count` is items in this response (post-pagination), not corpus\n totals — use `entity_total_matches` + `config_total_matches`.\n - `limit`/`offset` apply per-surface. Flat `has_more`/`next_offset`\n page the next call (iterate `offset = next_offset`); per-surface\n `entity_*`/`config_*` variants show which surface still has results.\n\nFor parameters, schema, and worked examples, see ha_get_skill_guide.\n\nExamples:\n - List sensors in an area: ha_search(domain_filter=\"sensor\", area_filter=\"Living Room\")\n - Find a light by name: ha_search(\"kitchen\", domain_filter=\"light\")\n - Find lights safely before an \"all except one\" control request:\n ha_search(\"living room\", domain_filter=\"light\",\n result_fields=[\"entity_id\", \"friendly_name\", \"is_group\",\n \"member_entity_ids\"])\n - Which automations use an entity: ha_search(\"light.bed_light\")\n - Scenes touching a light: ha_search(\"light.kitchen\", search_types=[\"scene\"])\n - Narrow the response to the entity bucket: ha_search(\"kitchen\", fields=[\"entities\"])\n - All unavailable entities: ha_search(state_filter=\"unavailable\")",
2914
2914
"inputSchema": {
2915
2915
"properties": {
2916
2916
"query": {
@@ -2962,7 +2962,7 @@
2962
2962
"default": null
2963
2963
},
2964
2964
"result_fields": {
2965
-
"type": "Annotated[str | list[str] | None, JSON_STRING_COERCION, Field(default=None, description='Project each entity-registry record to only the specified keys (e.g. [\"entity_id\", \"state\"]). None = full records. Base keys: entity_id, friendly_name, domain, state, score, match_type. Opt-in enrichment keys (joined on request): area, floor, labels, aliases. An unknown key is rejected.')]",
2965
+
"type": "Annotated[str | list[str] | None, JSON_STRING_COERCION, Field(default=None, description='Project each entity-registry record to only the specified keys (e.g. [\"entity_id\", \"state\"]). None = full records. Base keys: entity_id, friendly_name, domain, state, score, match_type. Opt-in enrichment/membership keys (computed on request): area, floor, labels, aliases, is_group, member_entity_ids. Membership is recognized only when HA explicitly exposes a valid group_entities or legacy entity_id collection; member IDs are sorted, direct (not recursively expanded), and omitted if visibility/include_hidden excludes a member. is_group remains true when member IDs are withheld; requesting member_entity_ids also retains is_group. An unknown key is rejected.')]",
0 commit comments