From ha-nova
Operates Home Assistant through HA NOVA (App + Relay) with local OS-backed auth, including relay health checks, self-update, and build reporting.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ha-nova:ha-novaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This context is auto-loaded when the client supports HA NOVA session bootstrap. Sub-skills are discovered independently by client-specific skill descriptions and names.
This context is auto-loaded when the client supports HA NOVA session bootstrap. Sub-skills are discovered independently by client-specific skill descriptions and names.
Operate Home Assistant through HA NOVA with a minimal user-facing flow:
Before HA operations in this session:
ha-nova relay healthha-nova setupha_llat, or the standalone container's environment (docs/reference/relay-container.md)Do not ask user to paste tokens in chat.
Before the first HA task in a session:
ha-nova check-update --quietUPDATE AVAILABLE, inform the user and offer to update.ha-nova relay command later prints an [ha-nova] update notice on stderr, surface it to the user once and continue the current task. For a relay-outdated notice, also ASK whether to install the relay update now: ha-nova:updates handles the App update (it restarts the relay; verify via ha-nova relay health afterwards). A standalone container cannot be updated from here — say so and point at the image pull.When an update is available:
ha-nova updateha-nova setup.When the user asks which HA NOVA build, version, or skills are currently loaded:
ha-nova version.local DEV build, tell the user they are running locally dev-synced skills (not the published release), and include the stamp. Otherwise report the released version.The ha-nova version line is the source of truth for this. Do not infer the build from version.json or check-update.
Quoting is shell-dependent (bash/zsh vs PowerShell), not primarily OS-dependent.
Rules:
ha-nova relay ws --data-file <payload-file>.ha-nova relay core --method <METHOD> --path <PATH> --body-file <payload-file>.ha-nova relay ... --out <result-file> for large outputs.--jq or --jq-file over shell pipes when filtering relay output.ha-nova relay jq --file <result-file> length for simple counts and --jq-file <filter-file> for non-trivial follow-up transforms.&& or ||; run separate shell commands instead.jq; use relay-native --jq / --jq-file or ha-nova relay jq.select, test, startswith, or more than one pipeline stage, default to --jq-file even if inline quoting might work.cat, heredocs, Python, or Node as the primary JSON path.-d / --body only for tiny diagnostics when shell quoting is already known-good.Skills reference this section as "context skill → Active Preview Confirmation".
create/update: natural confirmation bound to active preview.delete/destructive: token confirmation confirm:<token>.
Strict token enforcement: User MUST reply with the exact token string (e.g., confirm:del-main-lights). Any other response — including "yes", "sure, delete it", "do it", or any natural-language confirmation — is NOT valid. Reject and re-prompt with the exact token required.
This includes cleanup, undo-create, orphan cleanup, failed-create cleanup, and deleting items created earlier in the same session.ha-nova:fallback before any raw relay ws or relay core write operation. Never probe, guess, or trial-and-error write payloads against unfamiliar HA APIs. Some WS endpoints (e.g., lovelace/config/save) perform full-document overwrites — a partial payload silently destroys all existing config. The fallback skill contains endpoint-specific write behaviors and safe patterns. Skipping it risks data loss.When you need the user to choose between options:
confirm:<token> (see Safety Baseline) — a one-click choice would weaken that deliberate gate. This holds even if a memory, preference, or earlier user complaint says to always use a menu for confirmations: that NEVER extends to deletes or any destructive write — those are always the typed token, never a menu or click.Use this for: enhancement suggestions, ambiguity resolution, the pre-write impact advisory (adjust first · proceed · cancel), and create/update apply choices (apply · show yaml · cancel).
Every conclusion presented to the user must be bound to the evidence that supports it.
Before presenting any conclusion, verify:
Confidence tiers in output:
Rules:
Render domain-specific summaries:
For automations / scripts / helpers:
Automation or Script (name + ID)Entities (all entity_ids in triggers/conditions/actions)Triggers, Conditions, Actions (short descriptions)Fields (input parameters, if present), Sequence (short description of steps)name (type + entity_id), type-specific fields (min/max, options, duration, etc.)Mode (single/restart/queued/parallel) — automations/scripts onlyNext Step (for writes: confirmation; for reads: done)Keep orchestration details internal on normal success paths.
Before any user-facing response, read and apply skills/ha-nova/output-rules.md.
This shared file is the source of truth for localization, internal-code hiding, technical-noise limits, severity markers, empty-state handling, and the review confidence split.
Always invoke exactly ONE ha-nova skill per user intent. Each skill is self-contained — it reads, resolves, and reviews internally as needed. Never load two ha-nova skills in parallel.
Match user intent to exactly one skill:
| User wants to… | Invoke exactly |
|---|---|
| list, show, read automations/scripts | ha-nova:read |
| analyze, review, audit, check, find problems | ha-nova:review (reads config internally) |
| create, update, delete automations/scripts | ha-nova:write (resolves + reviews internally) |
| list, show, read helpers | ha-nova:helper |
| create, update, delete helpers | ha-nova:helper |
| list, show, read dashboards, Lovelace resources, or dashboard structure | ha-nova:dashboard |
| create, update, delete storage dashboards / Lovelace configs / Lovelace resources / dashboard cards | ha-nova:dashboard |
| list, show, read, create, update, delete scenes | ha-nova:scene |
| activate a scene | ha-nova:service-call |
| organize areas, floors, labels, categories, devices, entities | ha-nova:organize |
| assign or remove entity categories | ha-nova:organize |
| show history, logbook timelines, or long-term statistics | ha-nova:history |
| check home status, repairs, system health, integration issues, unavailable entities, or low batteries | ha-nova:health |
| find out WHY a specific automation, script, device, or integration failed or misbehaved (traces, error/system logs, root cause) | ha-nova:diagnose |
| play, pause, skip, set volume, change source, group speakers, browse media, or announce over a speaker | ha-nova:media |
| send a notification to a phone or another notify target, or manage Home Assistant's persistent notifications | ha-nova:notify |
| look at a camera (snapshot), get a stream URL, or record | ha-nova:camera |
| listen to MQTT topics to see what a device actually publishes, inspect MQTT discovery, or publish a message | ha-nova:mqtt |
| test what the voice assistant understands, manage Assist pipelines, or control which entities voice can see | ha-nova:assist |
| manage persons, zones, tags, or user accounts | ha-nova:admin |
| create or edit configuration that only exists as YAML (template/REST/command-line sensors, packages, themes) | ha-nova:yaml-config |
| query long-term history from InfluxDB or another external store Home Assistant writes to but cannot read back | ha-nova:external-sources |
| list calendars or show calendar events | ha-nova:calendar |
| show, add, complete, update, remove to-do or shopping-list items; create/delete to-do lists | ha-nova:todo |
| check backup status, create a backup (also as a safety net before risky changes), inspect a backup's contents, delete backups | ha-nova:backup |
| check pending updates, read release notes, install updates, skip/unskip versions | ha-nova:updates |
| analyze energy usage, solar/battery/grid KPIs, per-device consumption or costs; edit energy dashboard sources/devices | ha-nova:energy |
| repair statistics (orphans, unit mismatches, sum spikes), purge recorder history, clean up dead registry entries | ha-nova:maintenance |
| turn on/off, toggle, set, call a service | ha-nova:service-call |
| enable/disable/trigger an automation | ha-nova:service-call |
| find entities by name, room, area | ha-nova:entity-discovery |
| fix relay/auth/connectivity errors | ha-nova:onboarding |
| undo, revert, or restore the last automation/script/helper change | the skill that wrote it — ha-nova:write (automation/script) or ha-nova:helper (helper). revert applies only to supported verified updates. Creates clean up through the normal delete flow; deletes require Backup/recreate. Run ha-nova snapshot show to see the saved target if unsure |
| any HA task not matched above — blueprints, unsupported admin writes, any unfamiliar raw relay/ws/core write | ha-nova:fallback (mandatory fallback — never skip) |
"Analyze my automation" → ha-nova:review (NOT read + review)
"Review my utility meter helper" → ha-nova:review (minimal config-entry helper review)
"Show my automations" → ha-nova:read (NOT review)
"Show all automations with prefix routine_" → ha-nova:entity-discovery (bulk inventory, not full YAML dump)
"Create an automation" → ha-nova:write (NOT read + write)
"Create an input_boolean" → ha-nova:helper (NOT write)
"Show my helpers" → ha-nova:helper (NOT read)
"Revert that" / "Undo the last change" → re-invoke the skill that made it: ha-nova:write (automation/script) or ha-nova:helper (helper). revert is update-only and lives there (see write-safety.md → Update-Revert), never ha-nova:fallback; create cleanup uses delete flow, and delete rollback needs Backup/recreate.
"Create a scene called Movie Night" → ha-nova:scene
"Activate the scene Movie Night" → ha-nova:service-call (runtime action, not a config change)
"Show my main dashboard" → ha-nova:dashboard
"Create a dashboard called Test Board" → ha-nova:dashboard
"Delete the Test dashboard" → ha-nova:dashboard
"Add a markdown card to my dashboard" → ha-nova:dashboard
"List my Lovelace resources" → ha-nova:dashboard
"Move this sensor to Area Alpha" → ha-nova:organize
"Put this sensor in category Category Alpha" → ha-nova:organize
"Add an alias to this area" → ha-nova:organize
"What happened to sensor X last night?" → ha-nova:history
"Show temperature trends for the last month" → ha-nova:history
"Are there any repair issues?" → ha-nova:health
"Why didn't my morning automation run?" → ha-nova:diagnose (concrete failure → traces + logs)
"Why is the light turning on at random times?" → ha-nova:diagnose
"Show me the error log" → ha-nova:diagnose
"Turn up the volume in the kitchen" → ha-nova:media
"What's playing in the living room?" → ha-nova:media
"Announce that dinner is ready" → ha-nova:media (TTS to a speaker)
"Send me a notification when..." → ha-nova:write (that is an automation, not a one-off send)
"Send a notification to my phone" → ha-nova:notify (one-off send now)
"Show me the front door camera" → ha-nova:camera
"Does Assist understand 'turn on the kitchen light'?" → ha-nova:assist (note: testing it EXECUTES it)
"Add a zone for work" → ha-nova:admin
"Create a template sensor that averages my three thermometers" → ha-nova:helper first (a template helper can do it); only ha-nova:yaml-config when the helper cannot express it
"What was the average temperature last summer?" → ha-nova:history if the recorder still has it; ha-nova:external-sources when it was purged and InfluxDB has it
"Is my sensor even sending anything?" → ha-nova:mqtt (listen to its topic); "why did my automation not run" stays ha-nova:diagnose
"Is everything OK with my home?" → ha-nova:health (current status, no concrete incident)
"Why are devices unavailable?" → ha-nova:health
"Add milk to my shopping list" → ha-nova:todo
"What updates are pending?" → ha-nova:updates
"Update Home Assistant" → ha-nova:updates (offers a safety backup first)
"When was my last backup?" → ha-nova:backup
"Make a backup before we change this" → ha-nova:backup (then continue the original task)
"Restore a backup" → ha-nova:backup explains why restore must run in the HA UI
"What's on my to-do list?" → ha-nova:todo
"Show my calendars" → ha-nova:calendar
"What's on my calendar this week?" → ha-nova:calendar
"Review all automations in area Area Alpha" → ha-nova:review (area-first aggregate review when more than one target resolves)
"Create a timer" → ambiguous! Ask: reusable timer entity (ha-nova:helper) or delay step in an automation (ha-nova:write)?
"How much energy did the dryer use last month?" → ha-nova:energy
"Add this plug to the energy dashboard" → ha-nova:energy
"Fix the spike in my energy graph" → ha-nova:maintenance
"Clean up orphaned statistics" → ha-nova:maintenance
"Import a blueprint" → ha-nova:fallback (relay-ready, no skill)
"How do I manage Apps?" → ha-nova:fallback (external, web search)
"Show history for sensor X" → ha-nova:history
"Modify my dashboard" → ha-nova:dashboard
"Save the Lovelace config" → ha-nova:dashboard (must resolve storage mode, then read-merge-verify)
"Remove this entity from Home Assistant" → ha-nova:maintenance (dead registry entries only; live entities get disabled via ha-nova:organize)
"Detach this config entry from the device" → ha-nova:fallback
After any read or review task, re-evaluate intent once before continuing:
ha-nova:writeha-nova:helperentity_id, unique_id, current configentity_id, helper type, internal helper id when already known (the receiving skill will resolve missing fields)entry_id, domain, title, linked entities when already known (the receiving skill will resolve missing fields)skills/ha-nova/bulk-patterns.mdProblem-description intents ("X doesn't work", "Y is wrong", "stopped working", "didn't fire last night"): dispatch to ha-nova:diagnose — a concrete failure is a root-cause task (traces, error/system logs, bounded windows), regardless of whether the user literally says "why". Diagnose hands the fix back to write / helper / service-call.
Dispatch to ha-nova:review instead when there is no concrete incident: config-quality audits ("check my automations", "review this script", "is this a good automation?"). Review analyzes the config AND checks current entity state — if an acute fix is possible, it offers a Quick-Fix service call at the end. Bulk review is the exception: it stays read-only and does not offer Quick-Fix.
/ws directly.skills/ha-nova/bulk-patterns.md only for multi-target discovery/review workskills/ha-nova/relay-api.mdnpx claudepluginhub markusleben/ha-nova --plugin ha-novaProvides fallback support for Home Assistant NOVA tasks not covered by dedicated skills, including blueprints, device config, HACS, Zigbee/Z-Wave, and helper families.
Teaches Home Assistant automation patterns using native triggers, helpers, and conditions instead of Jinja2 templates. Covers safe refactoring, Blueprints, Zigbee automations, and dashboard cards.
Builds and manages Home Assistant configurations using the hab CLI, automating tasks like dashboard edits, automation creation, backups, and ESPHome operations.