home-assistant-manager — Claude Code skill: how to install
Manage remote Home Assistant YAML configs, run validation via SSH, deploy updates, and verify automation state through logs or traces.
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a claude-codeWhat home-assistant-manager does
The skill treats your local repository as the Home Assistant /config directory. Edits stay local until deployed. It updates automations, scripts, scenes, templates, and Lovelace dashboards while strictly ignoring .env and secrets.yaml. Updates ship to the host either through git pull or rapid scp transfers.
Remote execution relies on SSH ha, REST calls via hass-cli, or Home Assistant MCP servers. It isolates safe reloads from full restarts. Running ha core check prevents broken restarts during core configuration edits. Without HASS_SERVER and HASS_TOKEN in your shell environment, hass-cli connects to localhost and errors immediately.
What it helps with
- edit automations and scripts without exposing sensitive keys in secrets.yaml
- validate configuration with ha core check prior to host restarts
- trigger automations manually and verify execution traces in core logs
- push config updates to the remote instance using git pull or scp
Example prompts for the agent
- Check automations.yaml syntax and reload the automation domain over SSH
- Deploy script changes with scp and verify the logs for errors
- Manually trigger automation.living_room_lights and fetch entity state
How to install home-assistant-manager
1Skills CLI (Vercel)
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a claude-code2Manually: put the files in place
~/.claude/skills/home-assistant-manager/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/home-assistant-manager/
1Skills CLI (Vercel)
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a codex2Manually: put the files in place
.agents/skills/home-assistant-manager/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a cursor2Manually: put the files in place
.cursor/skills/home-assistant-manager/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install komal-SkyNET/claude-skill-homeassistant home-assistant-manager2Manually: put the files in place
.github/skills/home-assistant-manager/SKILL.md1Skills CLI (Vercel)
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a gemini-cli2Platform CLI
gemini skills install https://github.com/komal-SkyNET/claude-skill-homeassistant --path skills/home-assistant-managerManually: put the files in place
.devin/skills/home-assistant-manager/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about home-assistant-manager
How to install home-assistant-manager in Claude Code?
Run npx skills add komal-SkyNET/claude-skill-homeassistant --skill home-assistant-manager -a claude-code in your terminal.
What does home-assistant-manager do?
It structures Home Assistant maintenance by editing YAML files, checking syntax with ha core check, managing reloads, and verifying live entity logs.
What is required for hass-cli remote access?
You must export HASS_SERVER and HASS_TOKEN into your shell environment before launching. Otherwise, hass-cli attempts to connect to localhost.
Source text
SKILL.md · MIT
--- name: home-assistant-manager description: Manage Home Assistant configuration safely and fast — edit and deploy YAML (automations, blueprints, scripts, scenes, templates, MQTT), validate with ha core check, deploy via git or rapid scp, reload-vs-restart correctly, verify changes from logs, traces and entity state, and build Lovelace dashboards. Use for any Home Assistant config, automation, template, or dashboard work over SSH/hass-cli/MCP. --- # Home Assistant Manager Operate a remote Home Assistant instance precisely: make a change, get it live, prove it worked. Optimize for the fewest safe round-trips. ## Assumptions - The repo you're editing **is** the HA `/config` dir, git-connected to the instance. Edits aren't live until pulled on the instance. - `[email protected]` in examples is a placeholder. Resolve the real user/host once (project CLAUDE.md, `~/.ssh/config`, or ask) and if it isn't recorded in the project CLAUDE.md yet, add it so future sessions skip this step. - Access via one or more of: `hass-cli` (REST), SSH `ha`, or an MCP server (see below). - Only edit `.yaml`/`.yml`/`.md`. Never read/write `.env` or `secrets.yaml`; use `!secret`. ## Remote access — pick the right tool - **SSH `ha`** — always works, needs no local env. Use for `ha core check|restart|logs|info`. - **`hass-cli`** (REST) — state/service calls, but needs `HASS_SERVER`/`HASS_TOKEN` in the shell *before* the session starts. If they're unset, hass-cli falls back to the wrong host (localhost) and errors — don't retry, check `[ -n "$HASS_TOKEN" ]` once, then use SSH or MCP instead. - **MCP** (preferred when available) — first-class tools for live state/control, no env juggling. Official `mcp_server` integration (HA core ≥2025.2) or community `ha-mcp` (richer, 80+ tools). Use it instead of shelling out when present. ## The deploy pipeline (the one canonical flow) Changes are not live until step 4. 1. Edit YAML locally. 2. Validate: `ssh [email protected] "ha core check"` (slow, ~30-60s — see "when to skip" below). 3. Commit + push: `git add … && git commit -m "…" && git push`. 4. **Make it live:** `ssh [email protected] "cd /config && git pull"`. 5. Apply: **reload** if possible, else **restart** (table below). 6. Verify (next section). **Rapid iteration:** skip git and `scp` straight to the instance, then reload — good for dashboards and tight test loops. Commit to git only once stable. `scp automations.yaml [email protected]:/config/` → reload. **When to skip `ha core check`:** it parses the whole config and is slow. For an isolated YAML edit you're confident in, a domain reload surfaces errors faster and the logs tell you immediately. Always run it before a *restart* or for `configuration.yaml` changes. ## Reload vs restart | Change | Action | |--------|--------| | automations, scripts, scenes, groups, template entities, themes | **reload** the domain (`hass-cli service call automation.reload`, etc.) | | `configuration.yaml` core, new integrations, platform sensors (min/max), MQTT sensor/binary_sensor platforms, dashboard registry (`lovelace_dashboards`) | **restart** (`ssh … "ha core restart"`, ~30s) | Prefer reload. Never restart without a passing `ha core check`. Before risky changes (core `configuration.yaml` surgery, removing an integration), snapshot first — it's cheap: `ssh [email protected] "ha backups new --name pre-<change>"`. ## Verify — don't assume it worked 1. Reload/restart the right domain. 2. For automations, **trigger manually** for instant feedback: `hass-cli service call automation.trigger --arguments entity_id=automation.<id>` (or call the service via MCP). This **bypasses `conditions` by default** — it proves the actions, not the gate. To test conditions too, pass `skip_condition: false` or exercise the real trigger, then read the automation's trace in the UI. 3. Read the logs filtered to your change: `ssh [email protected] "ha core logs | grep -iE '<name>|error' | tail -20"`. Good: `Running automation actions`, `Executing step …`. Bad: `Invalid data for call_service`, `TypeError`, `Template variable warning`, `Error executing script`. 4. Confirm the real outcome: device/sensor state (`hass-cli state get <entity>`), or ask the user for notification-type actions. 5. On error: fix → re-pull/scp → reload → re-check. Loop until clean. ## Automations — write modern syntax HA 2024.10 renamed the keys; legacy syntax still works but don't emit it in new code: top-level `triggers:/conditions:/actions:` (plural), `trigger:` not `platform:` inside a trigger, `action:` not `service:` for calls. Every automation gets a stable `id:` (traces and UI editing need it) plus an `alias`. **Full automation reference** (syntax table, `mode:` behavior, blueprints, trace debugging, pitfalls) → read [`reference/automations.md`](reference/automations.md) when writing or debugging automations. ## Templates — the precision rules - Always coerce types before comparing: `states('sensor.x') | int(0) < 7`. Bare states are strings; `'5' < 7` raises `TypeError`. Provide a default (`int(0)`) so startup `None` doesn't error. - Test in **Developer Tools → Template** before committing. - `state_attr(...)` returns `None` if the entity/attr is missing — guard it. ## Conventions - Surgical edits; preserve comments; 2-space indent. - Validate before restart; prefer reload; verify from logs. - Use context7 MCP for current HA docs before non-trivial or unfamiliar config. ## Dashboards Lovelace dashboards live in `.storage/lovelace.*` (JSON). UI edits show on a browser refresh; **direct file edits (scp/git) may not appear until a `ha core restart`** — HA caches the lovelace store in memory. Adding a *new* dashboard to `.storage/lovelace_dashboards` also needs a restart. `scp` + refresh is the fast loop; validate JSON first: `python3 -m json.tool .storage/lovelace.x > /dev/null`. After deploying, **validate the UI visually in the browser** (see the reference) — logs/state won't catch a broken card or a mis-sorted popup. **Full dashboard reference** (view types, card catalog, template cards, tablet layout, pitfalls, debugging) → read [`reference/dashboards.md`](reference/dashboards.md) when doing UI work. Modern HA: native **sections** view (drag-drop grid, badges, `heading` cards) and feature-rich **tile** cards now cover most needs without custom cards; reach for Mushroom only when you want its specific look. ## Quick reference ```bash # Validate / apply ssh [email protected] "ha core check" ssh [email protected] "ha core restart" ssh [email protected] "cd /config && git pull" # make pushed changes live # Logs ssh [email protected] "ha core logs | grep -iE 'error|<name>' | tail -20" # State / services (needs env loaded, or use MCP) hass-cli state get <entity> hass-cli service call <domain>.reload hass-cli service call automation.trigger --arguments entity_id=automation.<id> # Rapid deploy scp <file>.yaml [email protected]:/config/ && hass-cli service call automation.reload ```
© komal-SkyNET · MIT · komal-SkyNET/claude-skill-homeassistant