bump-core-req
Updates the minimum core version requirement for a fleet plugin in all three canonical places: `required_core_version` and `requires["claude-code-hermit"]` in…
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 -y skills add gtapps/claude-code-hermit --skill ha-automation-explorer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ha-automation-explorerContext preview
The summary Claude sees to decide when to auto-load this skill.
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.
name: ha-automation-explorer description: 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." allowed-tools: - Bash - Read - mcp__homeassistant__GetDateTime
Read-only. No writes, no proposals, no actuation.
1. Read operator language from OPERATOR.md (`## HA hermit` section). Use this locale for all output. 2. Read `.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-context` for accurate entity data." 3. Extract `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).
1. If the automation list is empty, output: "No automations found in the context snapshot." Stop. 2. Group automations by topic, inferring from `friendly_name` (from `attributes.friendly_name`) and `entity_id`. Buckets (best-effort — no area registry exists):
3. Derive a one-line description from `friendly_name` for each automation. Do not fetch configs here. 4. Mark automations that appear in `silence_summary.dead_automations` with `⚠ dead (N days)`. For `never_fired: true` entries, use `⚠ never fired`. 5. Output the catalog grouped by topic:
**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>`.
1. Filter the automation list: keep entries where `keyword` appears (case-insensitive) in `friendly_name` or `entity_id`. 2. If no matches: output "No automations matching '<keyword>'." Stop. 3. If more than 8 matches, the keyword is too broad to explain at once. List the matching `entity_id` + `friendly_name` pairs and ask the operator to narrow the keyword. Do not fetch any configs. Stop. 4. For each match, check `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. 5. For each match with a numeric `id`, fetch its config:
${CLAUDE_PLUGIN_ROOT}/bin/ha-agent-lab ha get-automation-config <id>6. Explain the fetched YAML in plain language in the operator's locale:
Invoked as `/claude-code-homeassistant-hermit:ha-automation-explorer --last-fired`.
1. Call `mcp__homeassistant__GetDateTime` for the current UTC timestamp. 2. Sort all automations by `entity_index[entity_id].attributes.last_triggered` descending (most recently fired first). Automations with null `last_triggered` go at the bottom. 3. Compute human-readable "N days ago" using the timestamp from Step 1. For null `last_triggered`: show "never fired." 4. Enrich with `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). 5. Output the sorted roster, one automation per line:
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
6. End with: "X automations total. Y dead or never fired."
If you know Claude Tag, the idea will feel familiar: hand Claude work through a channel, such as Discord, Telegram, or your custom integration, and get results back there.
Repo: gtapps/claude-code-hermit
Updates the minimum core version requirement for a fleet plugin in all three canonical places: `required_core_version` and `requires["claude-code-hermit"]` in…
Changelog and commit — lightweight motion for day-to-day plugin dev work in the monorepo. One commit per plugin scope; CHANGELOG and staging routed by detected…
Documentation-drift audit for the plugin monorepo. Audits either each scoped plugin's unreleased changelog claims or its latest shipped release from the…
Explain in plain language what a fix, feature, PR, or plan will actually change for downstream hermits and the operators chatting with them — a before/after…
Use this skill whenever the user wants to release, ship, prep, or cut versions for two or more plugins together on the current branch. Trigger on phrasings…
Daily release-pipeline digest with a change gate — reports which plugins are pending release, whether main's CI is green, which branches went stale, and GitHub…