SKILL.md
Home Assistant Expert Developer
Assists with all Home Assistant development using 2024–2026 best practices. Always uses modern syntax. Always thinks mobile-first and family-friendly. Prefers local-first solutions.
Core Principles
- Modern syntax always:
triggers:/actions:/action:(notservice:/platform:) - Local-first: prefer Ollama + home-llm over cloud LLMs where possible
- Family UX: every dashboard works on all ages, on desktop + mobile
- MCP-first AI: connect AI agents via official MCP Server (
/api/mcp) - HACS for UI: custom cards and themes via HACS, not manual installs
Quick Orientation
| Task | Where to look |
|---|---|
| MCP Server, AI integration, Assist pipeline | [reference/mcp.md](reference/mcp.md) |
| Automations, Blueprints, templates, API | [reference/automations.md](reference/automations.md) |
| Dashboards, cards, themes, mobile | [reference/dashboards.md](reference/dashboards.md) |
| Custom integrations, add-ons | [reference/integrations.md](reference/integrations.md) |
| Helper entities, reload vs restart, safe refactoring | [reference/helpers-and-ops.md](reference/helpers-and-ops.md) |
Critical Gotchas (Read Before Generating Code)
- Old syntax trap: AI often generates old HA syntax. Always convert:
service: → action: | trigger: (top) → triggers: | platform: → trigger: (inside block)
- Blueprint
!inputin templates: expose asvariables:first —{{ !input x }}never works in templates:
``yaml variables: delay: !input delay_minutes # then use {{ delay }} in templates ``
- Bubble Card pop-ups: MUST be placed LAST in the view YAML or they break
- MCP entity visibility: only entities "Exposed" in
Settings → Voice Assistants → Exposed Entitiesappear as MCP tools
- Automation mode for motion lights: use
restart(notsingle) so new motion resets the timer
- Unavailable guard: always guard sensor templates:
{{ states('sensor.temp') not in ['unavailable','unknown'] and ... }}
- MCP + stdio clients (Cursor): requires
mcp-proxybridge — official HA MCP is Streamable HTTP only
- card-mod Shadow DOM: use
$to pierce shadow boundaries:
``yaml card_mod: style: .: | ha-card { border-radius: 20px; } ha-tile-icon$: | div { color: red; } ``
- Presence detection: use
personentity +zone, not rawdevice_tracker
- HA version gates: MCP from 2025.2+ | Sections dashboard from 2024.3+ | AI Tasks from 2025.8+
Always check user's HA version for version-gated features.
Core Architecture (Quick Reference)
homeassistant.core.HomeAssistant (hass)
├── hass.bus — Event Bus (pub/sub, fires state_changed, call_service, ...)
├── hass.states — State Machine (all entity states + attributes)
├── hass.services — Service Registry
└── Timer — fires time_changed every second (asyncio single-threaded loop)
Entity ID: <domain>.<object_id> e.g. light.living_room, sensor.temp_bedroom
Key domains: light, switch, sensor, binarysensor, climate, mediaplayer, cover, person, zone, automation, script, scene, input_*, timer, counter, calendar, todo
Essential Automation Template (Always Start Here)
automation:
- id: "unique_snake_case_id"
alias: "Human Readable Name"
description: "Why this exists"
mode: single # single|restart|queued|parallel
triggers:
- trigger: state
entity_id: binary_sensor.motion_living
to: "on"
conditions:
- condition: time
after: "07:00:00"
before: "23:00:00"
actions:
- action: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 80
Essential Dashboard Stack
Install via HACS in this order: card-mod → lovelace-mushroom → Bubble-Card → lovelace-auto-entities → apexcharts-card
Recommended per use case:
- Family: Sections + Tile + Mushroom + Material Rounded theme
- Power user: Sections + Mushroom + card-mod + Catppuccin theme
- Tablet wall: Bubble Card bottom nav + pop-ups + Fully Kiosk Browser
Connect AI Agent to Home Assistant (MCP)
# AI Code CLI
claude mcp add --transport http --url https://<your-ha>/api/mcp home-assistant
For full MCP setup, auth, available tools, and third-party implementations → [reference/mcp.md](reference/mcp.md)
Key Resources
- Developer docs: https://developers.home-assistant.io/
- MCP Server docs: https://www.home-assistant.io/integrations/mcp_server/
- Blueprint Exchange: https://community.home-assistant.io/c/blueprints-exchange/
- Awesome HA: https://github.com/frenck/awesome-home-assistant
- Top repos: mushroom (4.8K★), Bubble-Card (4K★), ha-mcp (902★), home-llm (1.2K★), HACS (7K★)