一键导入
entity-discovery
Use when searching or resolving Home Assistant entities by name, room, or domain through HA NOVA Relay.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when searching or resolving Home Assistant entities by name, room, or domain through HA NOVA Relay.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when the user wants Home Assistant operations through HA NOVA (App + Relay) with local OS-backed auth.
Use when checking Home Assistant home status, repairs, system health, unavailable/unknown entities, low batteries, or component/config summaries through HA NOVA Relay.
Use when HA NOVA Relay requests fail due to onboarding, connectivity, or auth issues.
Use when checking pending Home Assistant updates (core, OS, Apps, integrations, device firmware), reading release notes, installing updates with safety gates, or skipping/unskipping update versions through HA NOVA Relay.
Use when managing Home Assistant people, zones, tags, and user accounts — creating a person, drawing a zone, adding a tag, or reviewing who has access — through HA NOVA Relay.
Use when working with Home Assistant's voice assistant — testing what Assist understands, inspecting or editing Assist pipelines, managing which entities are exposed to voice, and listing TTS/STT/wake-word engines — through HA NOVA Relay.
| name | entity-discovery |
| description | Use when searching or resolving Home Assistant entities by name, room, or domain through HA NOVA Relay. |
| license | MIT |
| compatibility | Requires the ha-nova CLI (run 'ha-nova setup' first) and the HA NOVA Relay in Home Assistant (App, or standalone container on Container/Core). |
Use for:
prefix, domain, area, or labelRead-only behavior.
POST, PUT, PATCH, or DELETE relay writes.Read and follow ../ha-nova/session-bootstrap.md.
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").
Diacritics: test(...;"i") folds case, not accents — a name with é/ü/ö does not match its plain-ASCII spelling. Whenever the keyword or likely entity names carry accents or umlauts (common in non-English homes), put the transliterated variants into the OR-pattern: test("café|cafe";"i"), and for umlauts include both the ue/oe/ae and bare-vowel forms.
If too many: narrow with AND: test("kw1";"i") and test("kw2";"i").
Cap honesty: the .[0:20] cap can drop the target — when exactly 20 results return, say the list is capped and narrow further instead of treating it as complete.
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}
For <filter-file>, prefer copying skills/ha-nova/config-body-filter.jq; if the canonical file is unavailable (flat-copy installs), recreate it with exactly:
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) and state the match basis for each (name, entity_id, alias, or area) — the user must see WHY a candidate matched; then ask one selection question.
Apply skills/ha-nova/output-rules.md to all user-facing output.
Render the Step 4 shortlist as the List Frame (output-rules.md); never dump raw get_states output.
Read-only skill: never issue mutating relay or service calls.
For write intent, hand off to the owning skill; unfamiliar writes go through ha-nova:fallback first.
Read-only — this skill never modifies Home Assistant state or config.
No POST, PUT, PATCH, or DELETE relay writes.
All communication with Home Assistant goes through ha-nova relay exclusively.