Help us improve
Share bugs, ideas, or general feedback.
From ha-nova
Use when creating, updating, deleting, or listing Home Assistant helpers (storage-based helpers plus the supported config-entry helper family) 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:helperThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`ha-nova:helper` has two helper families:
Mandatory fallback for any HA NOVA task without a dedicated subskill. Must be invoked before any raw relay write operation. Covers blueprints, energy, calendars, zones/persons/tags, destructive registry admin, system health, Apps, HACS, Zigbee/Z-Wave, and unsupported config-entry helper families.
Provides best practices for Home Assistant automations, helpers, scripts, and dashboards. Guides on avoiding templates, using native constructs, and safe refactoring.
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.
ha-nova:helper has two helper families:
input_boolean, input_number, input_text, input_select, input_datetime, input_button, counter, timer, scheduleutility_meter, derivative, integration, min_max, threshold, tod, statistics, history_statsgroup through the live menu-driven flow; end-to-end support is verified for the sensor subtype, and other subtypes must stay anchored to the live step schema instead of guessed fieldsNot handled here:
template, trend, random, filter, generic_thermostat, switch_as_x, generic_hygrostatha-nova:write)Verify relay CLI: ha-nova relay health
If this fails: ha-nova setup
Write payloads with the client's native file-writing tool, then use:
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 larger read/verify output--jq-file <filter-file> for non-trivial filters; keep inline --jq for short selectors onlyFamily-specific transport:
config_entries/get + WS entity-registry joins for list/read; relay /core config-entry flow, options-flow, and delete writesUse 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:
[.data.entities[] | (.ei | split(".")[0]) as $domain | select(["input_boolean","input_number","input_text","input_select","input_datetime","input_button","counter","timer","schedule"] | index($domain)) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:30]
If user filters by type, narrow the domain filter to that single storage-based domain.
ha-nova relay ws --data-file <payload-file> --jq-file <filter-file>
Write <filter-file> with:
[.data.entities[] | (.ei | split(".")[0]) as $domain | select(["input_boolean","input_number","input_text","input_select","input_datetime","input_button","counter","timer","schedule"] | index($domain)) | select((.ei + " " + (.en // "")) | test("KEYWORD";"i")) | {entity_id: .ei, name: .en, area_id: .ai}] | .[0:20]
If 0 results: try synonyms or shorter stems. Never dump entire domains.
ha-nova relay ws --data-file <payload-file> --jq-file <filter-file>
Write <filter-file> with:
[.data[] | select(.name | test("KEYWORD";"i"))]
{type}/list + filter.skills/ha-nova/helper-schemas.md for required/optional fields.skills/ha-nova/helper-schemas.md → Suggested Defaults for principles and field name reminders.Suggested defaults for "{name}" ({type}):
1. min: 16, max: 30, step: 0.5
2. unit_of_measurement: "°C"
3. mode: slider
4. icon: mdi:thermometer
Accept all, pick by number (e.g. "1 and 3"), or "skip".
group subtypes, this first confirmation authorizes only the non-persisting menu-step submit, not the final subtype-specific payloadha-nova relay ws --data-file <payload-file>
{type}/list by name or internal id.id from the list response (this is the {type}_id for the update command).ha-nova relay ws --data-file <payload-file>
{type}/list.idconfirm:<token> (strict: only exact token accepted; see context skill → Safety Baseline).ha-nova relay ws --data-file <payload-file>
{type}/list.Canonical config-entry helper item:
entry_iddomaintitlestatelinked_entities[]supports_optionsentry_id is the canonical identity for config-entry helper writes.
If the user gives only a linked entity_id, resolve it back to config_entry_id through the full entity registry before continuing.
utility_meterderivativeintegrationmin_maxthresholdtodstatisticsgrouphistory_statsha-nova relay ws --data-file <payload-file> --out <entries-file>
with {"type":"config_entries/get"}.ha-nova relay ws --data-file <payload-file> --out <registry-file>
with {"type":"config/entity_registry/list"}.config_entry_id.entry_idsupports_optionsSearch against:
titledomainentity_idIf multiple matches remain, present max 5 candidates and ask one blocking question.
entry_identity_idconfig_entries/get.linked_entities[].supports_options: true, start an options flow:
ha-nova relay core --method POST --path /api/config/config_entries/options/flow --body-file <start-payload-file>
with <start-payload-file> containing {"handler":"<entry_id>","show_advanced_options":false}.step_iddescription.suggested_value when presentdescription.suggested_value, mark its value as unavailable instead of guessing**Helper: {title}** (config-entry `{domain}`)
- **Entry ID:** {entry_id}
- **Config-entry state:** {state}
- **Linked entities:** {linked_entities summary}
- **Supports options-flow editing:** {yes/no}
- **Current flow step:** {step_id or "metadata-only fallback"}
- **Current editable fields:** {field summary from the current options step when available}
skills/ha-nova/helper-flow-schemas.md.
skills/ha-nova/helper-flow-schemas.md:
group with subtype sensor, include the required next_step_id menu choice and the observed final formgroup subtype, plan only the menu choice before the flow starts; inspect the live subtype form before promising the final field setstatistics and history_stats, prepare every later step body before previewgroup subtypes, say that the final subtype form will be previewed after the menu step returns live fieldsha-nova relay ws --data-file <entries-request-file> --out <entries-before-file>
with <entries-request-file> containing {"type":"config_entries/get"}.ha-nova relay core --method POST --path /api/config/config_entries/flow --body-file <start-payload-file>
<start-payload-file> must contain the handler-start body only.flow_id before continuing.
flow_idnext_step_idgroup subtype form, stop and preview the live subtype fields before the terminal submitconfig_entries/get into <entries-after-file>entry_id, passed=true only when that same entry_id is present in <entries-after-file>entry_id, diff config_entries/get before vs after by entry_identry_id values that were absent before and present afterpassed=true only when exactly one new entry_id appeared and its metadata is consistent with the requested createentry_id values, or the new entry metadata is inconsistent with the request, fail loud as ambiguous create verificationdomain/title are fallback tie-breakers only; they never override a terminal-flow entry_idlinked_entities[] through the entity registry as secondary evidence only.supports_options: true, reopen the options flow and store the current editable options snapshot for the post-write response.entry_iddomaintitlelinked_entities[]supports_optionssupports_options is false for this entry:
update unsupported for this helper on this HA versionha-nova relay core --method POST --path /api/config/config_entries/options/flow --body-file <start-payload-file>
with <start-payload-file> containing {"handler":"<entry_id>","show_advanced_options":false}.flow_id before continuing.
update unsupported for this helper on this HA versionflow_iddescription.suggested_value as the current value sourcedescription.suggested_value, fail loud instead of guessing its current valuehistory_stats, preserve HA's two-key window invariant across start, end, and durationhistory_stats, if the requested change switches to a different valid window pair, drop the old third key explicitly so the submit body still contains exactly two of start, end, and durationha-nova relay core --method POST --path /api/config/config_entries/options/flow/{flow_id} --body-file <submit-payload-file>
create_entry or explicit failure.config_entries/getpassed=true only when the same entry_id still existspassed=true only when the changed fields now appear in description.suggested_value as requesteddescription.suggested_value, fail loud as unverifiable update on this HA versionlinked_entities[] again as secondary evidence only.entry_iddomaintitlelinked_entities[] when availableutility_meter, derivative, integration, min_max, threshold, tod, statistics, group, history_statsdomain is outside that allowlist, stopDELETE /api/config/config_entries/entry/{entry_id} for out-of-scope domainsha-nova:fallback for any other config-entry domainentry_idsearch/related against up to 3 linked entities before confirmationconfirm:<token> (strict exact-token rule).ha-nova relay core --method DELETE --path /api/config/config_entries/entry/{entry_id}
config_entries/getpassed=true only when the entry_id is absentDo NOT report results to user until complete.
skills/review/SKILL.md Step 1.skills/review/checks.md.search/related for the helper entity, max 3 related automations/scripts.Do not pretend H-01..H-10 apply here. Instead, run the minimal config-entry post-write contract:
entry_id/diff verification passedentry_id still exists and the reopened options-flow snapshot reflects the requested field changessearch/related against up to 3 linked entitiesResponse MUST still include a localized Post-Write Review section with:
After reading a helper config, present:
**Helper: {name}** ({type})
- **Entity ID:** {entity_id}
- **Unique ID:** {id}
- **Icon:** {icon}
- {type-specific fields}
For list operations, use:
| Entity ID | Name | Type | Area |
|-----------|------|------|------|
After reading a helper config, present:
**Helper: {title}** (config-entry `{domain}`)
- **Entry ID:** {entry_id}
- **Config-entry state:** {state}
- **Linked entities:** {linked_entities}
- **Supports options-flow editing:** {yes/no}
- **Current flow step:** {step_id or "metadata-only fallback"}
- **Current editable fields:** {field summary from the current options step when available}
For list operations, use:
| Title | Domain | Entry ID | State | Supports Options-Flow Editing | Linked Entities |
|-------|--------|----------|-------|--------------------------------|-----------------|
Never show raw JSON to the user.
entry_id is the canonical write identity for the config-entry familyha-nova relay only## Post-Write Reviewget_statesskills/ha-nova/relay-api.mdskills/ha-nova/helper-schemas.mdskills/ha-nova/helper-flow-schemas.mdskills/review/SKILL.md (entrypoint) + skills/review/checks.md (storage helper catalog)