From claude-code-homeassistant-hermit
Browse 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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-homeassistant-hermit:ha-automation-explorerThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read-only. No writes, no proposals, no actuation.
Read-only. No writes, no proposals, no actuation.
## HA hermit section). Use this locale for all output..claude-code-hermit/raw/snapshot-ha-normalized-latest.json. Check the file's mtime with stat. If missing or older than 24 hours, append this warning to all output:
"Context snapshot is stale — run
/claude-code-homeassistant-hermit:ha-refresh-contextfor accurate entity data."
entity_index and silence_summary from the snapshot. Build the automation list: all entries in entity_index whose key starts with automation..Invoked as /claude-code-homeassistant-hermit:ha-automation-explorer (no args).
friendly_name (from attributes.friendly_name) and entity_id. Buckets (best-effort — no area registry exists):
friendly_name for each automation. Do not fetch configs here.silence_summary.dead_automations with ⚠ dead (N days). For never_fired: true entries, use ⚠ never fired.**Security**
- automation.alarm_away — "Arm alarm when everyone leaves" ⚠ dead (12 days)
**Comfort**
- automation.morning_blinds — "Open blinds at sunrise"
Invoked as /claude-code-homeassistant-hermit:ha-automation-explorer <keyword>.
keyword appears (case-insensitive) in friendly_name or entity_id.entity_id + friendly_name pairs and ask the operator to narrow the keyword. Do not fetch any configs. Stop.attributes.id. If null (YAML-packaged automation, not retrievable via REST), note: "Config not retrievable — automation is YAML-packaged." Skip the config fetch for that entry.id, fetch its config:
${CLAUDE_PLUGIN_ROOT}/bin/ha-agent-lab ha get-automation-config <id>
⚠ dead if in silence_summary.dead_automationsInvoked as /claude-code-homeassistant-hermit:ha-automation-explorer --last-fired.
mcp__homeassistant__GetDateTime for the current UTC timestamp.entity_index[entity_id].attributes.last_triggered descending (most recently fired first). Automations with null last_triggered go at the bottom.last_triggered: show "never fired."silence_summary.dead_automations to mark stale entries — do NOT call fetch-history. An automation is dead if it appears in silence_summary.dead_automations (30+ days silent while enabled, or never fired).1. automation.morning_blinds — "Open blinds at sunrise" — fired 2 days ago
2. automation.alarm_away — "Arm alarm when everyone leaves" — fired 14 days ago ⚠ dead
...
N. automation.old_routine — "Old routine" — never fired ⚠ dead
ha-analyze-patterns is the scheduled, proposal-generating silence audit — it remains authoritative for surfacing dead automations via the proposal pipeline.silence_summary.dead_automations, which only lists a never-fired automation once it is 30+ days old — so a recently-created automation that has never fired is not flagged in Mode 1. Mode 3 reads attributes.last_triggered directly, so it shows "never fired" immediately regardless of age./claude-code-homeassistant-hermit:ha-analyze-patterns./claude-code-homeassistant-hermit:ha-build-automation.npx claudepluginhub p/gtapps-claude-code-homeassistant-hermit-plugins-claude-code-homeassistant-hermitCreates and manages Home Assistant automations including rules, triggers, conditions, actions, scripts, scenes, and blueprints. Covers device triggers and conditional logic.
Reports additions, removals, edits, enables/disables of Home Assistant automations since last snapshot; useful for explaining regressions and tracking changes across sessions.