Agent skill
homeassistant-ops
Operate a Home Assistant instance via the official REST/WebSocket APIs and backups, with safe plan/apply workflows for bulk, reviewable changes.
Install this agent skill to your Project
npx add-skill https://github.com/goncalossilva/.agents/tree/main/skills/homeassistant-ops
SKILL.md
Home Assistant Ops
Use this skill as the operator's playbook for making bulk, reviewable changes to a Home Assistant instance without SSHing into the host.
Requires Node.js 22+ (uses built-in fetch + WebSocket; no npm deps).
Default workflow (plan -> apply -> validate)
- Inventory the current state (API) and/or registries (backup).
- Propose an explicit change set (entity_ids, names, automation ids, etc).
- Apply via API with validation (small batches, dry-run first).
- Smoke-test the specific behavior (traces + event tail).
- Record a timestamped log + a rollback mapping.
- (Optional) Snapshot before/after for diff/rollback.
Setup
Set environment variables (never pass tokens on the command line):
export HA_URL="http://<home-assistant-host>:8123"
export HA_TOKEN="<long-lived-access-token>"
Run scripts using node:
node scripts/ha_ops.js --help
Keep logs in a working folder (scripts write timestamped .md files by default).
First questions (to avoid rework)
- What's the HA version and deployment type (OS / Container / Core)?
- Which Zigbee stack is used (ZHA vs Zigbee2MQTT) and which devices are affected?
- Which parts are YAML-managed vs UI-managed (automations, scripts, scenes, dashboards)?
- Do we have a recent backup to inspect before making bulk changes?
- Is the goal UI clarity, automation correctness, performance/latency, or all of the above?
Core concepts (what to change where)
- Entity registry: source of truth for friendly-name overrides, entity_id renames, hidden/disabled, and some area assignment.
- Device registry: best place to assign areas for physical devices (entity area often inherits).
- Blueprint inputs: not templatable; state triggers need a static entity list at config-load time.
- HA "group helpers": great for UI/targeting/maintenance, but they don't make Zigbee unicast faster (they expand to member calls).
Scripts
All scripts read HA_URL and HA_TOKEN from environment variables.
ha_ops.js - Single CLI with subcommands
All operations are available under a single CLI:
# List commands
node scripts/ha_ops.js --help
# Command help
node scripts/ha_ops.js cleanup --help
ha_ops.js cleanup - Bulk cleanup (dry-run by default)
# Dry-run all default steps (default)
node scripts/ha_ops.js cleanup
# Apply specific steps
node scripts/ha_ops.js cleanup --apply \
--steps rename-switch-suffix,prefix-lights-cove
# Prefix custom patterns with area names
node scripts/ha_ops.js cleanup --apply \
--steps prefix-generic \
--pattern "Thermometer:^Thermometer" \
--pattern "Blinds:^Blinds"
# Output proposed changes as JSON
node scripts/ha_ops.js cleanup --json
Available steps:
rename-switch-suffix: Rename "Lights ... Switch" to "Lights ..."create-groups: Create/update switch groups for sync automationsprefix-lights-cove: Prefix Lights/Cove names with areaprefix-generic: Prefix entities matching--patternwith area
ha_ops.js snapshot - Capture state for diffing
# Full snapshot
node scripts/ha_ops.js snapshot
# Skip noisy sections
node scripts/ha_ops.js snapshot \
--no-lovelace --no-scenes
# Include runtime states (noisy for diffs)
node scripts/ha_ops.js snapshot --include-states
ha_ops.js rollback - Revert registry changes from a snapshot
# Preview what would be rolled back
node scripts/ha_ops.js rollback \
snapshot_before.json --dry-run
# Apply rollback
node scripts/ha_ops.js rollback \
snapshot_before.json --yes
ha_ops.js find-references - Find entity_id usage
# Search for entity references before renaming
node scripts/ha_ops.js find-references \
--needle "switch.bedroom_lights"
# Search from a rename mapping file
node scripts/ha_ops.js find-references \
--map-json rename_map.json --backup-root /path/to/backup
ha_ops.js update-groups - Update group memberships after renames
Entity ID renames (via the entity registry) do not propagate to config entry–based group helpers. This command rewrites group member lists using a rename map.
# Preview which groups would be updated
node scripts/ha_ops.js update-groups \
--map-json rename_map.json
# Apply changes
node scripts/ha_ops.js update-groups \
--map-json rename_map.json --apply
# Output plan as JSON
node scripts/ha_ops.js update-groups \
--map-json rename_map.json --json
ha_ops.js tail-events - Monitor events in real-time
# Tail state changes
node scripts/ha_ops.js tail-events
# Filter to specific entities
node scripts/ha_ops.js tail-events \
--entity switch.bedroom_lights --entity switch.bedroom_lights_2
# Include ZHA events
node scripts/ha_ops.js tail-events \
--event-type state_changed --event-type zha_event
ha_ops.js name-review-from-backup - Offline naming analysis
# Analyze backup for naming candidates
node scripts/ha_ops.js name-review-from-backup \
--backup-root /path/to/backup
Error recovery
If a script fails mid-way:
- Check the log file for what was applied before the failure.
- Use
ha_ops.js rollbackwith your before-snapshot to revert registry changes. - Fix the underlying issue (network, permissions, entity conflicts).
- Re-run the script (operations are generally idempotent).
Resources
- API reference:
references/api.md - Ops playbook:
references/playbook.md - Entity ID conventions:
references/id_conventions.md
Logging convention
Prefer one markdown log per run (timestamped), listing every entity/automation changed and the before/after values.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
update-changelog
Update CHANGELOG.md following Keep a Changelog (https://keepachangelog.com/en/1.1.0/)
git-commit
Commit changes with an emphasis on tidiness and reviewability: small, focused commits, with clear rationale in messages.
browser-tools
Interactive browser automation via Chrome DevTools Protocol. Use when you need to interact with web pages, test frontends, or when user interaction with a visible browser is required.
oracle
Get a second opinion by bundling a prompt + a curated file set, then asking another powerful LLM for debugging, refactor advice, design checks, or code reviews.
git-clean-history
Reimplement the current Git branch on a fresh branch off `main` with a clean, narrative-quality commit history.
sentry
Fetch and analyze Sentry issues, events, transactions, and logs. Helps agents debug errors, find root causes, and understand what happened at specific times.
Didn't find tool you were looking for?