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
Composes and delivers the daily fitness brief — a forward-looking morning read (readiness + today's plan) or a backward-looking evening read (today's training, or an earned-rest note, + tomorrow's setup) — in the operator's configured voice. Invoke with /claude-code-fitness-hermit:fitness-brief --morning|--evening|--slot <name>. Becomes the plugin's two daily beats — the morning Strava connectivity check and the evening activity sync, RPE binding, and Run deep-dive.
development
Renew the hermit's long-lived Claude login token over the channel, before it expires. Relays a one-time sign-in link to the operator, takes the code back, installs the new token, and restarts. Activates on messages like 'relogin', 'renew my login', 'reauth', 'the login is expiring', or when doctor's credential-expiry check flags setup-token.
development
Synthesizes the past 7 days of archived briefs into a weekly digest — top stories, emerging vs faded themes, category activity, and per-source performance built from archive frontmatter. Delivers to the operator's configured channel and archives a weekly note. Designed as a weekly routine. Invoke with /feed-hermit:weekly-digest.
development
Manage developing story arcs tracked across briefs — add, resolve, and list active arcs in compiled/story-arcs-*.md. Arc Watch keywords drive the feed-brief arc-tagging enrichment. Invoke with /feed-hermit:story-arcs add|resolve|list.