plugins/claude-code-homeassistant-hermit/skills/ha-automation-explorer/SKILL.md
Browse and explain the hermit's 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 do I have / what does this one do / which haven't fired."
npx skillsauth add gtapps/claude-code-hermit ha-automation-explorerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.tools
Presence history & tracker-health report — current home/away state, reliability, recent arrival/departure transitions, and activity patterns for person/device_tracker entities. Use when the operator asks about presence history or when a presence-dependent automation (locks, alarm, vacuum, climate) misbehaves.
development
Evening house brief — end-of-day security check, device status, and energy snapshot. Runs as a daily routine at 22:30 or on demand.
tools
On-demand HA-voice brainstorm — reads entity inventory, automation/script listings, and operator intent to surface at most 2 capability-gap ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator asks "what automations am I missing?", "any coverage gaps?", or "brainstorm improvements". Never runs autonomously.
development
On-demand fitness-voice brainstorm — reads Strava history and training-goal signals to surface at most 2 coverage-gap or imbalance ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator asks "what am I neglecting?", "anything off with my training?", or "brainstorm training gaps". Never runs autonomously.