From ha-nova
Lists and reads Home Assistant automation and script configs via HA NOVA Relay. Includes listing, keyword search, and single config retrieval.
How 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:
Read only:
automation.listautomation.readscript.listscript.readautomation.tracescript.traceNot for helpers — use ha-nova:helper.
Multi-target 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 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>.--jq-file <filter-file> for complex filters and --out <result-file> for large responses. ha-nova relay jq is single-input; compare files natively.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 stems; 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/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>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.
Apply skills/ha-nova/output-rules.md to all user-facing output.
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:
Prefer CLI helpers: ha-nova trace latest <entity> --json, ha-nova trace list <entity> --json, ha-nova trace get <entity> <run_id> --json. They resolve unique_id and normalize trace shapes. If none exist, explain that Home Assistant keeps only recent traces and YAML automations/scripts need an id.
Manual relay path:
unique_id. 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'
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 lists may be .data array or .data.traces; inspect first.
Pick the newest real run_id. Do not use a list index such as "0" or "4".ha-nova trace get; otherwise save 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 preflightRead-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.
never guess ids
if multiple close matches, ask one selection question
npx claudepluginhub markusleben/ha-nova --plugin ha-novaBrowse and explain Home Assistant automations: list by topic, filter by keyword with plain-language YAML explanations, or sort by last-fired. Read-only. Use when the operator asks what automations exist, what a specific one does, or which haven't fired.
Operates Home Assistant through HA NOVA (App + Relay) with local OS-backed auth, including relay health checks, self-update, and build reporting.
Creates and manages Home Assistant automations including rules, triggers, conditions, actions, scripts, scenes, and blueprints. Covers device triggers and conditional logic.