ha-automation-diff · git:20260626.9a370db · 2026-06-26 · sha256 c59c4b924817b88b

ha-automation-diff git:20260626.9a370dbA

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

---
name: ha-automation-diff
description: Report which Home Assistant automations were added, removed, edited, enabled, or disabled since the last snapshot — change memory across sessions, including UI edits that bypass this plugin. Read-only. Use when the operator asks "what changed", "what moved since last time", or to explain a regression.
allowed-tools:
  - Bash
  - Read
---

# HA Automation Diff

## Purpose

`ha-safety-audit` catches POLICY drift at a point in time. This skill catches CHANGE drift: which automations were added, removed, edited, enabled, or disabled since the last snapshot — including edits made directly in the HA UI that bypass `ha-build-automation`. It gives the hermit a memory of "what moved" between sessions, which is what explains regressions and keeps the estate legible.

It is read-only against Home Assistant: it enumerates automations, hashes each stored config, and diffs against the previous snapshot.

## Steps

1. Run `${CLAUDE_PLUGIN_ROOT}/bin/ha-agent-lab ha automation-diff`.
2. The command writes a JSON snapshot to `.claude-code-hermit/raw/snapshot-ha-automations-latest.json` (the baseline for the next run) and a markdown findings artifact under `.claude-code-hermit/raw/audit-ha-automation-diff-*`, and prints a stdout findings block.
3. Pass the stdout block through unchanged.

## Output contract

```
ha-automation-diff findings — YYYY-MM-DD
Changes since last snapshot: K
- added: <name> (`<id>`)
- removed: <name> (`<id>`)
- edited: <name> (`<id>`)
- disabled: <name> (`<id>`)
- enabled: <name> (`<id>`)
Untracked (YAML-packaged, config not diffable): M
```

First run (no prior snapshot): `Baseline established. (N automations tracked)`.

No changes: `No changes since last snapshot. (N automations tracked)`.

## Failure modes

- HA unreachable → CLI exits non-zero with an error message. Treat as "skipped, cannot diff"; do not retry automatically.
- YAML-packaged automations have no numeric id and are not REST-retrievable, so their config is not diffable. They are counted under "Untracked" rather than silently dropped — the diff is honest about what it does not cover.