skills/home-assistant/SKILL.md
This skill should be used when helping with Home Assistant setup, including creating automations, modifying dashboards, checking entity states, debugging automations, and managing the smart home configuration. Use this for queries about HA entities, YAML automation/dashboard generation, or troubleshooting HA issues.
npx skillsauth add cullenmcdermott/nix-config home-assistantInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides tools and workflows for working with Home Assistant installations. It enables querying the live HA instance for entities, services, and configuration data, debugging automations, and generating YAML configurations for automations and dashboards.
Key Capabilities:
When helping with Home Assistant tasks, follow this general approach:
All scripts require the HA_TOKEN environment variable to be set, which contains the Home Assistant long-lived access token. The HA instance is available at https://ha.cullen.rocks.
Important: All scripts now use uv with inline PEP 723 dependency declarations and the homeassistant-api library for consistent, maintainable code. Dependencies are automatically installed by uv on first run.
ha_get_entities.py [domain]Retrieve all entities, optionally filtered by domain.
Usage:
uv run scripts/ha_get_entities.py # All entities
uv run scripts/ha_get_entities.py light # Just lights
uv run scripts/ha_get_entities.py sensor # Just sensors
When to use: To discover what entities are available, especially when building new automations.
ha_get_state.py <entity_id>Get the current state and attributes of a specific entity.
Usage:
uv run scripts/ha_get_state.py light.living_room
When to use: To check current state, available attributes, or confirm an entity exists.
ha_search_similar_entities.py <pattern>Search for entities matching a pattern in their entity_id or friendly_name.
Usage:
uv run scripts/ha_search_similar_entities.py "bedroom"
uv run scripts/ha_search_similar_entities.py "motion"
uv run scripts/ha_search_similar_entities.py "temperature"
When to use: To find entities related to what the user wants to automate. This is especially useful for finding examples before creating new automations.
ha_get_automations.py [search_term]Retrieve all automations, optionally filtered by search term.
Usage:
uv run scripts/ha_get_automations.py # All automations
uv run scripts/ha_get_automations.py motion # Automations with 'motion'
uv run scripts/ha_get_automations.py light # Automations with 'light'
When to use: To find existing automations that are similar to what the user wants to create. Use these as templates.
ha_list_traces.py [automation_id]List automation execution traces with timestamps and status.
Usage:
uv run scripts/ha_list_traces.py # All traces
uv run scripts/ha_list_traces.py 1761430536701 # Specific automation traces (using numeric ID)
Important: Use the numeric automation ID (e.g., 1761430536701), not the full entity_id (e.g., automation.bedroom_light). You can find the numeric ID in the automation's attributes from ha_get_automations.py output.
When to use: To see recent automation runs, their status, and timing. Use this to identify which run IDs to investigate further.
Output includes:
ha_get_trace.py)ha_get_trace.py <automation_id> <run_id>Get detailed step-by-step trace for a specific automation run.
Usage:
uv run scripts/ha_get_trace.py 1761430536701 1ceef6b2b6f63a8745eb5dba3fe12f71
Important: Use the numeric automation ID (e.g., 1761430536701), not the full entity_id.
When to use: To debug a specific automation run. Shows the complete execution path including:
Tip: Get the run_id from ha_list_traces.py output.
ha_trace_summary.py <automation_id>Get aggregated statistics for an automation's execution history.
Usage:
uv run scripts/ha_trace_summary.py 1761430536701
Important: Use the numeric automation ID (e.g., 1761430536701), not the full entity_id.
When to use: To understand automation reliability and performance over time.
Output includes:
ha_get_services.py [domain]Get all available services with descriptions and field information.
Usage:
uv run scripts/ha_get_services.py # All services
uv run scripts/ha_get_services.py light # Just light services
uv run scripts/ha_get_services.py climate # Just climate services
When to use: To discover what services are available and what parameters they accept.
ha_get_config.pyGet Home Assistant configuration including version, location, and components.
Usage:
uv run scripts/ha_get_config.py
When to use: To understand the HA setup, available integrations, or system information.
ha_get_config_entries.py [domain]Get Home Assistant config entries, optionally filtered by domain. This is essential for services that require a config_entry_id, such as telegram_bot.send_message.
Usage:
uv run scripts/ha_get_config_entries.py # All config entries
uv run scripts/ha_get_config_entries.py telegram_bot # Just Telegram bots
uv run scripts/ha_get_config_entries.py mqtt # Just MQTT entries
When to use: When you need to get config_entry_id for services like Telegram notifications, or to discover what integrations are configured.
ha_search_similar_entities.py to find relevant entitiesha_get_automations.py with search terms to find examplesuv run scripts/ha_get_state.py automation.automation_name to check:
uv run scripts/ha_trace_summary.py <numeric_id> - Get success rate and common issuesuv run scripts/ha_list_traces.py <numeric_id> - See recent runsuv run scripts/ha_get_trace.py <numeric_id> <run_id> - Detailed step-by-step traceuv run scripts/ha_get_state.py to verify trigger entities are in expected statesuv run scripts/ha_get_automations.py to see the full automation detailsTrace-based Debugging Workflow:
# Step 1: Get the automation details to find the numeric ID
uv run scripts/ha_get_automations.py problem_automation
# Step 2: Check if automation has been running and get stats (use numeric ID from step 1)
uv run scripts/ha_trace_summary.py 1761430536701
# Step 3: List recent runs to find failing ones (use numeric ID)
uv run scripts/ha_list_traces.py 1761430536701
# Step 4: Get detailed trace for a specific failed run (use numeric ID)
uv run scripts/ha_get_trace.py 1761430536701 <run_id_from_step_3>
# Step 5: Examine the trace to see exactly where and why it failed
Telegram notifications require using the telegram_bot.send_message service with a config_entry_id parameter (not the notify service pattern).
Workflow:
uv run scripts/ha_get_config_entries.py telegram_bot to find the config entry IDExample Automation with Telegram Notification:
alias: Example Telegram Alert
description: Send a Telegram notification when something happens
triggers:
- entity_id: binary_sensor.front_door
to: "on"
trigger: state
conditions: []
actions:
- action: telegram_bot.send_message
data:
message: "Front door opened at {{ now().strftime('%I:%M %p') }}"
config_entry_id: 01JZE11D7Y6B7C3WCARWVZRYNH # Get this from ha_get_config_entries.py
mode: single
Note: The config_entry_id is specific to your Telegram bot configuration. Always use uv run scripts/ha_get_config_entries.py telegram_bot to get the correct ID for your setup.
When generating YAML configurations, always:
The user must manually copy/paste generated YAML into Home Assistant. Make this clear and provide instructions:
If the user asks for screenshots of dashboards or wants to see the current UI state, the Playwright browser automation tools can be used to navigate to the HA instance and capture screenshots. The user will need to handle authentication.
All entities follow the pattern domain.object_id where common domains include:
light - Lightsswitch - Switchessensor - Sensors (read-only)binary_sensor - Binary sensors (on/off)climate - Thermostatsautomation - Automationsscript - Scriptsinput_boolean, input_number, input_select, input_text, input_datetime - Helper entitiesperson - Peopledevice_tracker - Device trackingcamera - Camerasmedia_player - Media playerscover - Covers (blinds, garage doors)fan - Fanslock - Locksstate - Entity state changesnumeric_state - Numeric value crosses thresholdsun - Sunrise/sunsettime - Specific timetime_pattern - Time pattern (every N minutes)event - HA event firedwebhook - Webhook triggerzone - Enter/leave zonedevice - Device-specific triggerstate - Entity state equals valuenumeric_state - Numeric comparisontime - Time windowsun - Before/after sunrise/sunsetzone - Person in zonetemplate - Template evaluationsingle - Don't start new run if already runningrestart - Restart automation if triggered while runningqueued - Queue runs if already runningparallel - Allow multiple simultaneous runstools
Multi-LLM orchestration utilities for discovering available CLI tools, assessing change complexity, and building structured prompts. Used by reviewer sub-agents and multi-model commands.
tools
Use this skill when helping manage Claude Code configuration, including settings, MCP servers, LSP servers, skills, hooks, permissions, plugins, or per-device overrides. Also use when the user asks about Claude Code features, marketplace skills, or wants to modify their setup.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------