Help us improve
Share bugs, ideas, or general feedback.
From ha-nova
Use when listing or reading Home Assistant automation and script configs through HA NOVA Relay. For analysis or review, use ha-nova:review instead.
npx claudepluginhub markusleben/ha-nova --plugin ha-novaHow this skill is triggered — by the user, by Claude, or both
Slash command
/ha-nova:readThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read only:
Use when creating, updating, or deleting Home Assistant automations or scripts through HA NOVA Relay. Self-contained — resolves entities and reviews internally.
Creates and manages Home Assistant automations including rules, triggers, conditions, actions, scripts, scenes, and blueprints. Covers device triggers and conditional logic.
Create and manage Home Assistant YAML configuration files including automations, scripts, templates, blueprints, Lovelace dashboards, and file organization. Use when working with Home Assistant configuration files (.yaml, .yml) or discussing HA automations, scripts, sensors, or dashboards.
Share bugs, ideas, or general feedback.
Read only:
automation.listautomation.readscript.listscript.readautomation.tracescript.traceNot for helpers — use ha-nova:helper for helper list/read.
Multi-target scope is inventory-only:
skills/ha-nova/bulk-patterns.md for prefix / domain / area / labelNo writes.
POST, PUT, PATCH, or DELETE relay requests.ha-nova:write with resolved IDs and current config.Verify relay CLI: ha-nova relay health
If this fails: ha-nova setup
Use file-based relay requests:
perl -0pi, sed -i, or similar rewrites.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 and --out <result-file> for large responses.Use the compact entity registry (abbreviated keys: ei=entity_id, en=name, ai=area_id):
Create <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 one of:
[.data.entities[] | select(.ei | startswith("automation.")) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:30]
[.data.entities[] | select(.ei | startswith("script.")) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:30]
For bulk inventory by prefix, domain, area, or label, reuse skills/ha-nova/bulk-patterns.md and return the compact table only. For area scope, use the search/related area projection rules, not compact-registry ai.
Use short keyword stems and always limit results.
ha-nova relay ws --data-file <payload-file> --jq-file <filter-file>
Write <filter-file> with:
[.data.entities[] | select(.ei | startswith("automation.")) | select((.ei + " " + (.en // "")) | test("KEYWORD";"i")) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:20]
If 0 results: try synonyms or shorter stems: test("kw1|kw2";"i").
For "automations in room X": stay inside read and follow the area-first search/related flow from skills/ha-nova/bulk-patterns.md.
Resolve the config key via entity registry first; UI-created items often use numeric unique_id values.
unique_id:
<payload-file> with {"type":"config/entity_registry/get","entity_id":"automation.{slug}"}ha-nova relay ws --data-file <payload-file> --out <registry-file>ha-nova relay jq -r --file <registry-file> '.data.unique_id' (POSIX example; on Windows/PowerShell pass the same filter with native argument quoting)entity_id value directly into <payload-file>; do not use placeholder tokens such as REPLACE_ENTITY_IDscript.{slug}<result-file>:
ha-nova relay core --method GET --path /api/config/automation/config/{unique_id} --jq-file <filter-file> --out <result-file>/api/config/script/config/{unique_id}skills/ha-nova/config-body-filter.jq to <filter-file><filter-file> with:
if .ok then .data.body else error("relay error: \(.error.message // "unknown")") end
<filter-file> with the canonical line before the first config read; do not create alternate config-filter filenamesha-nova relay jq --file <result-file> -e --jq-file <filter-file>type == "object"ha-nova relay jq --file <result-file> with length or --jq-file <filter-file>.Read the saved file with the native file-reading tool. Do not analyze configs from shell output.
Find automations/scripts that use a specific entity:
Create <payload-file> with:
{"type":"search/related","item_type":"entity","item_id":"{entity_id}"}
Then run:
ha-nova relay ws --data-file <payload-file>
If id is ambiguous, ask one clarifying question. Never use raw get_states.
After reading a config, present:
**{Automation|Script}: {alias}**
- **ID:** {id}
- **Entities:** {list all entity_ids used in triggers, conditions, and actions}
- **Triggers:** {short description of each trigger}
- **Conditions:** {short description or "none"}
- **Actions:** {short description of each action, grouped by trigger if applicable}
- **Mode:** {single|restart|queued|parallel}
Then show the full YAML config:
alias: ...
triggers: ...
actions: ...
For list operations, use a compact table:
| Entity ID | Name | Area |
|-----------|------|------|
Never show raw JSON to the user.
For trace queries:
unique_id (config key). item_id requires the unique_id, NOT the entity_id slug.
Create <payload-file> with the config/entity_registry/get request, then run:
ha-nova relay ws --data-file <payload-file> --out <registry-file>
ha-nova relay jq -r --file <registry-file> '.data.unique_id'
The jq filter quoting above is a POSIX example. On Windows/PowerShell pass the same filter with native argument quoting.unique_id:
Create <payload-file> with:
{"type":"trace/list","domain":"automation","item_id":"{unique_id}"}
ha-nova relay ws --data-file <payload-file>
For scripts: "domain":"script".trace/get to <result-file>:
Create <payload-file> with:
{"type":"trace/get","domain":"automation","item_id":"{unique_id}","run_id":"{run_id}"}
ha-nova relay ws --data-file <payload-file> --out <result-file>
ha-nova relay jq --file <result-file> empty
Read the file with your native file-reading tool.last_changed via /api/states/{entity_id}.item_id in trace data matches the target's unique_id. see skills/ha-nova/SKILL.md → Claim-Evidence Binding./health preflight