Help us improve
Share bugs, ideas, or general feedback.
From ha-nova
Use when searching or resolving Home Assistant entities by name, room, or domain through HA NOVA Relay.
npx claudepluginhub markusleben/ha-nova --plugin ha-novaHow this skill is triggered — by the user, by Claude, or both
Slash command
/ha-nova:entity-discoveryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use for:
References Home Assistant entity structure, common domains, IDs, device classes, customizations, template entities, groups, and naming conventions.
Provides best practices for Home Assistant automations, helpers, scripts, and dashboards. Guides on avoiding templates, using native constructs, and safe refactoring.
Share bugs, ideas, or general feedback.
Use for:
prefix, domain, area, or labelRead-only behavior.
POST, PUT, PATCH, or DELETE relay writes.Verify relay CLI: ha-nova relay health
If this fails: ha-nova setup
Use file-based relay requests by default:
ha-nova relay ws --data-file <payload-file>ha-nova relay core --method <METHOD> --path <PATH> --body-file <payload-file> when a body is needed--jq-file <filter-file> for non-trivial filters; keep inline --jq for short selectors only--out <result-file> for large reads&& or ||; run separate shell commands instead.jq; use relay-native filters or ha-nova relay jq --file <result-file> ....Entity registry uses compact abbreviated keys: ei=entity_id, en=name, ai=area_id.
Search both entity_id and name. Use short keyword stems to handle spelling variants. Always limit to 20 results.
For bulk selectors, follow skills/ha-nova/bulk-patterns.md.
prefix: case-insensitive prefix match on the entity_id suffix and display namedomain: exact domain filterarea: resolve the area, then use search/related as the primary shortlist source; use ai only as optional extra evidence when presentlabel: escalate to the full registry only when label evidence is required; config/entity_registry/list returns the entity array directly in .datahelper + area: not a first-class bulk selector contract; do not imply room-owned helper discovery unless live helper-area semantics are explicitly definedFor domain counts or domain shortlists:
--jq-file <filter-file> for the count filterha-nova relay jq --file <result-file> lengthCreate <payload-file> with {"type":"config/entity_registry/list_for_display"}, then run:
ha-nova relay ws --data-file <payload-file> --jq-file <filter-file>
Write <filter-file> with:
[.data.entities[] | select((.ei + " " + (.en // "")) | test("KEYWORD";"i")) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:20]
This generic test("KEYWORD";"i") example is for free-text search, not explicit prefix matching.
For an explicit prefix selector, match the suffix and display name with startswith(...), not loose substring search.
If 0 results: try synonyms, alternative terms, or shorter keyword stems. Use OR for multiple variants: test("kw1|kw2|kw3";"i").
If too many: narrow with AND: test("kw1";"i") and test("kw2";"i").
Never dump entire domains without a user-intent keyword.
When the task is multi-target inventory:
--out <result-file># State
ha-nova relay core --method GET --path /api/states/{entity_id}
# Automation/script config — always resolve unique_id first (see relay-api.md → ID Types)
ha-nova relay ws --data-file <payload-file> --out <registry-file>
ha-nova relay jq -r --file <registry-file> '.data.unique_id'
ha-nova relay core --method GET --path /api/config/automation/config/{unique_id} --jq-file <filter-file> --out <result-file>
# For scripts: use script.{slug} and /api/config/script/config/{unique_id}
Write <filter-file> with:
if .ok then .data.body else error("relay error: \(.error.message // "unknown")") end
Automations rarely have reliable direct area_id data in the compact registry. When user asks "automations for X in room Y":
ha-nova relay ws --data-file <payload-file> then filter by name with --jq{"type":"search/related","item_type":"area","item_id":"<area_id>"}.data.automation.data.script.data.entitysearch/related on those entities to derive the automation/script shortlist:
ha-nova relay ws --data-file <payload-file>
This is more reliable than keyword search or assuming .ai is populated for room-based queries.
entity_id, friendly_name, state (if fetched), short relevance reasonIMPORTANT: Never dump raw get_states — it returns thousands of entities with full attributes.
search/related on the resolved area before keyword heuristicsentity_id match winsIf ambiguity remains: present top candidates (max 10), ask one selection question.
POST, PUT, PATCH, or DELETE relay writes.ha-nova relay exclusively.