ha-update-check · git:20260712.724ab9d · 2026-07-12 · sha256 fc8f5782aa3bd571

ha-update-check git:20260712.724ab9dA

Immutable. This exact content is served forever at /api/v1/blob/fc8f5782aa3bd571.

---
name: ha-update-check
description: Detect pending Home Assistant updates (Core, OS, Supervisor, add-ons, HACS) from the update.* domain and surface them as actionable proposals. Runs daily as a scheduled check via reflect --scheduled-checks.
allowed-tools:
  - Bash
---

# HA Update Check

## Purpose

Home Assistant surfaces pending updates as `update.*` entities — one domain covering Core, OS/Supervisor, add-ons, and HACS integrations, each carrying `installed_version`/`latest_version`/`release_summary`/`release_url`. This skill lists what's pending and reports it in a fixed format the proposal pipeline can fan out into per-update proposals.

Native fields only — no web fetch for breaking-change detail (keeps this check cheap; fetch on accept if that's ever needed). HA-native `skipped_version` is honored: an update the operator skipped in the HA UI stays quiet here too.

## Steps

Run the update check via the CLI:

```bash
${CLAUDE_PLUGIN_ROOT}/bin/ha-agent-lab ha updates
```

The CLI:
- Fetches live entity states and filters to `update.*` entities where `state == "on"` (an update is pending) and the pending version hasn't been skipped in HA.
- Classifies each into a tier: `core` (HA Core), `os` (Operating System), `supervisor`, `addon`, or `hacs`. Core/OS/Supervisor are recognized by their well-known entity_ids; anything not confidently classified as an add-on defaults to the `hacs` bucket rather than risking noise.
- Prints the findings block to stdout in the documented format below.

## Output contract

`reflect --scheduled-checks` routes the findings block through the proposal pipeline. The stdout shape is fixed:

```
ha-update-check findings — <date>
Updates pending: N
- [core] Home Assistant Core: 2026.6.3 → 2026.7.1 — <release_url>
- [addon] Mosquitto broker: 6.4 → 6.5 — <release_url>
- [hacs] 7 HACS updates pending
```

If nothing is pending: `No actionable findings. (no updates pending)`.
If HA is unreachable: `No actionable findings. (skipped: <error>)`.

Keep stdout to this shape — no prose, no extra sections. Each proposal title should carry the concrete target version (e.g. `[ha-update] HA Core → 2026.7.1`) — that keeps same-version re-emits byte-identical so proposal-triage reliably suppresses repeats; Core/OS/Supervisor and each add-on become individual proposals, all pending HACS updates aggregate into one.

## On accept

If `ha_update_auto_apply` is enabled in `.claude-code-hermit/config.json`, route acceptance through `/claude-code-homeassistant-hermit:ha-apply-update` rather than applying directly — it enforces the tier rule (add-ons/HACS may auto-apply; Core/OS/Supervisor always wait for an explicit operator go-ahead). If the flag is absent or false, the proposal is purely advisory: resolve it once the operator has applied the update themselves in the HA UI.