with one click
ha-automation
Automation YAML patterns, triggers, conditions, actions, and best practices for Home Assistant.
Menu
Automation YAML patterns, triggers, conditions, actions, and best practices for Home Assistant.
Knowledge for launching, managing, and monitoring cowork sessions that orchestrate multiple plugin agents in parallel
Syncfusion Blazor component library with DataGrid, Charts, Scheduler, PDF, and 80+ components
Enhanced plan-authoring skill with Pre-Writing context gathering, task metadata, non-TDD templates, Red Flags, telemetry, and an automated plan linter. Use when you have a spec or requirements for a multi-step task, before touching code.
Select and coordinate multi-agent teams (topology kits, role-based squads, lifecycle, worktree isolation). Use this skill whenever launching parallel agents, designing a review board, running a debug council, scheduling an orchestrator-workers team, configuring agent tool restrictions, or deciding between solo and team execution. Triggers on: "launch a team", "parallel agents", "review board", "debug council", "architect-implementer-reviewer", "swarm", "multi-agent", "subagents for X", "team topology", "agent lifecycle".
Design, install, and debug Claude Code hooks across the full lifecycle (PreToolUse, PostToolUse, PostToolUseFailure, UserPromptSubmit, Notification, Stop, SessionStart, SessionEnd, PreCompact, SubagentStart, SubagentStop, TeammateIdle, PermissionRequest, Setup). Use this skill whenever a user asks to "install hooks", "add a pre-tool hook", "format on save", "block dangerous commands", "protect sensitive files", "restore context after compact", "enforce tests before stop", capture subagent telemetry, or runs /cc-hooks. Also triggers on "hooks not firing", "hook keeps blocking", or any configuration of .claude/settings.json hook sections.
Configure MCP servers for Claude Code — stdio vs HTTP, authentication, Tools/Resources/Prompts distinction, channels (CI webhook, mobile relay, Discord bridge, fakechat), and cost of always-loaded tools. Use this skill whenever adding an MCP server, debugging connection issues, choosing between MCP Tools vs Prompts vs Resources, installing channel servers, or managing .mcp.json. Triggers on: "MCP server", "mcp config", "add Obsidian MCP", "install context7", "channels", "webhook receiver", "mobile approval", "Discord bridge", "mcp not connecting".
| name | ha-automation |
| description | Automation YAML patterns, triggers, conditions, actions, and best practices for Home Assistant. |
Automation YAML patterns, triggers, conditions, actions, and best practices for Home Assistant.
Activate this skill when:
# Complete automation template
alias: "Descriptive Name"
id: unique_automation_id # Optional but recommended
description: "What this automation does and why"
mode: single # single, restart, queued, parallel
# Variables available throughout
variables:
room: "living_room"
default_brightness: 80
trigger:
- platform: state
entity_id: binary_sensor.motion
to: "on"
id: motion_detected # For use in choose
condition:
- condition: sun
after: sunset
action:
- service: light.turn_on
target:
entity_id: "light.{{ room }}"
data:
brightness_pct: "{{ default_brightness }}"
trigger:
- platform: state
entity_id: binary_sensor.door
from: "off"
to: "on"
for:
seconds: 30
attribute: any # Optional: trigger on attribute change
trigger:
- platform: time
at: "06:30:00"
# Multiple times
- platform: time
at:
- "07:00:00"
- "12:00:00"
- "18:00:00"
# Input datetime
- platform: time
at: input_datetime.wake_up_time
trigger:
- platform: time_pattern
hours: "/2" # Every 2 hours
minutes: "30"
- platform: time_pattern
minutes: "/5" # Every 5 minutes
trigger:
- platform: sun
event: sunset
offset: "-01:00:00" # 1 hour before sunset
trigger:
- platform: numeric_state
entity_id: sensor.temperature
above: 75
below: 85
for:
minutes: 5
trigger:
- platform: template
value_template: >
{{ states('sensor.power') | float > 1000 and
is_state('input_boolean.high_power_alert', 'on') }}
for:
minutes: 5
trigger:
- platform: event
event_type: mobile_app_notification_action
event_data:
action: "TURN_OFF_LIGHTS"
trigger:
- platform: device
type: turned_on
device_id: abc123def456
entity_id: switch.smart_plug
domain: switch
trigger:
- platform: webhook
webhook_id: my_custom_webhook
allowed_methods:
- POST
local_only: true
trigger:
- platform: mqtt
topic: "home/doorbell/status"
payload: "pressed"
condition:
- condition: state
entity_id: input_boolean.guest_mode
state: "off"
# Multiple states (OR)
- condition: state
entity_id: alarm_control_panel.home
state:
- "armed_home"
- "armed_away"
condition:
- condition: numeric_state
entity_id: sensor.battery
above: 20
condition:
- condition: time
after: "22:00:00"
before: "06:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri
condition:
- condition: sun
after: sunset
before: sunrise
after_offset: "-00:30:00"
condition:
- condition: zone
entity_id: device_tracker.phone
zone: zone.home
condition:
- condition: template
value_template: >
{{ now().month in [6, 7, 8] }} # Summer months
condition:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.vacation
state: "off"
- condition: or
conditions:
- condition: state
entity_id: person.john
state: "home"
- condition: state
entity_id: person.jane
state: "home"
action:
- service: light.turn_on
target:
entity_id: light.kitchen
data:
brightness_pct: 100
transition: 2
action:
- service: light.turn_on
target:
entity_id: >
{{ expand('group.all_lights')
| selectattr('state', 'eq', 'on')
| map(attribute='entity_id')
| list }}
action:
- delay:
seconds: 30
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.door
to: "off"
timeout:
minutes: 5
continue_on_timeout: true
- wait_template: "{{ is_state('lock.front', 'locked') }}"
timeout: "00:01:00"
action:
- choose:
- conditions:
- condition: state
entity_id: sun.sun
state: "below_horizon"
sequence:
- service: light.turn_on
target:
entity_id: light.porch
data:
brightness_pct: 100
- conditions:
- condition: numeric_state
entity_id: sensor.illuminance
below: 100
sequence:
- service: light.turn_on
target:
entity_id: light.porch
data:
brightness_pct: 50
default:
- service: light.turn_off
target:
entity_id: light.porch
action:
- if:
- condition: state
entity_id: input_boolean.notify
state: "on"
then:
- service: notify.mobile_app
data:
message: "Alert!"
else:
- service: persistent_notification.create
data:
message: "Alert logged"
action:
# Repeat count
- repeat:
count: 3
sequence:
- service: light.toggle
target:
entity_id: light.alert
- delay:
milliseconds: 500
# While loop
- repeat:
while:
- condition: state
entity_id: binary_sensor.motion
state: "on"
sequence:
- delay:
seconds: 10
# For each
- repeat:
for_each:
- light.bedroom
- light.office
- light.kitchen
sequence:
- service: light.turn_off
target:
entity_id: "{{ repeat.item }}"
- delay:
seconds: 1
action:
- parallel:
- service: light.turn_on
target:
entity_id: light.living_room
- service: media_player.play_media
target:
entity_id: media_player.speaker
data:
media_content_id: "welcome_home.mp3"
media_content_type: "music"
action:
- service: weather.get_forecasts
target:
entity_id: weather.home
data:
type: daily
response_variable: forecast
- service: notify.mobile_app
data:
message: >
Tomorrow's forecast: {{ forecast['weather.home'].forecast[0].condition }}
# Current time
"{{ now().strftime('%H:%M') }}"
# Entity state
"{{ states('sensor.temperature') }}"
# State with default
"{{ states('sensor.battery') | float(100) }}"
# Attribute
"{{ state_attr('climate.thermostat', 'current_temperature') }}"
# Time since last change
"{{ (now() - states.sensor.motion.last_changed).seconds }}"
# Entity count
"{{ states.light | selectattr('state', 'eq', 'on') | list | count }}"
# Area entities
"{{ area_entities('Living Room') }}"
# Device entities
"{{ device_entities('device_id') }}"
single: Default, ignores new triggers while runningrestart: Stops current run, starts newqueued: Queues new triggersparallel: Runs multiple instancesaction:
- service: system_log.write
data:
message: "Automation triggered: {{ trigger.entity_id }}"
level: info