I tried the usual stuff—MCPs, random HA skills on clawhub, REST snippets. Simple commands were okay. Anything messy (a few devices at once, “fix this automation,” “why is this wrong”) and the agent would stall or get confused.
What it felt like in practice:
-
Too much noise — every tool threw different blobs of JSON at the thread. The model burned context trying to line them up instead of doing one clear step.
-
No obvious “do this next” — lots of information, not a tight loop of: real entities → exact commands → run them. So it looked smart and still picked the wrong id or the wrong call.
Tried to fix this by building ez-ha skill.
It’s deliberately boring on purpose:
- discover
- then act
You (or the agent) run something like ha search bedroom and get back real entity ids plus copy-pasteable commands for that domain—lights, fans, covers, climate, scenes, scripts, etc. Then you run those commands, e.g. ha light on … --brightness 50 , ha scene movie (it can fuzzy-match names so you’re not typing full slugs).
Output stays small on purpose so the model isn’t drowning in state dumps.
Part 2 — Closing the loop
The agent could flip switches, but it couldn’t build anything. If an automation was broken it couldn’t read the YAML, couldn’t check the logs, couldn’t look at a dashboard and see what was wrong. It still needed me to paste snippets and relay what was on screen.
- ez-ssh — lets the agent SSH into the HA host. Now it can read and edit
automations.yaml,configuration.yaml, tail logs, run host commands—actually debug instead of guessing from the API alone. - ez-ui — gives the agent a headless browser pointed at HA. It can screenshot dashboards, verify that a Lovelace change looks right, interact with the UI. “Does this card render?” stops being a question you relay.
With all three (ez-ha + ez-ssh + ez-ui) the agent can control devices, edit config, and see the result—full loop from a laptop.
Part 3 — Why even need my laptop?
That setup works, but you’re still wiring tokens, SSH keys, browser profiles on whatever machine you’re running Claude Code or Cursor from. I kept thinking: everything the agent talks to is already on the HA box—why am I bridging from my laptop?
So I packaged it as a Home Assistant add-on. Claude Code in a web terminal in the sidebar, with config access, Supervisor helpers, and the browser stack already there. Open it, type claude, talk to it. No local setup, no env vars, no “which machine has the right SSH key.” Same three layers, just running where HA already lives.
Repo (skills + add-on): github.com/araa47/ez-ha
Install the skill: npx skills add araa47/ez-ha