Help us improve
Share bugs, ideas, or general feedback.
Validates Home Assistant YAML configs for syntax errors, undefined secrets, duplicate keys, and full checks via Docker or HA CLI if available.
npx claudepluginhub laurigates/claude-plugins --plugin home-assistant-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/home-assistant-plugin:ha-validatehaikuThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Validate Home Assistant configuration files for YAML syntax errors and common issues.
Manages Home Assistant YAML configurations: editing configuration.yaml, integrations setup, secrets management, packages organization, and troubleshooting errors.
Create and manage Home Assistant YAML configuration files including automations, scripts, templates, blueprints, Lovelace dashboards, and file organization. Use when working with Home Assistant configuration files (.yaml, .yml) or discussing HA automations, scripts, sensors, or dashboards.
Validates YAML syntax, normalizes formatting, schema-checks for Kubernetes/GitHub Actions/Docker Compose. Outputs minimal patches, issues, and validation commands.
Share bugs, ideas, or general feedback.
Validate Home Assistant configuration files for YAML syntax errors and common issues.
{{ path or '.' }}find {{ path or '.' }} -name "*.yaml" -type fValidate all YAML files for proper syntax:
find {{ path or '.' }} -name "*.yaml" -type f -exec python3 -c "
import yaml
import sys
try:
with open('{}', 'r') as f:
yaml.safe_load(f)
print('OK: {}')
except yaml.YAMLError as e:
print('ERROR: {}')
print(str(e)[:200])
sys.exit(1)
" \; 2>&1 | head -50
Check for undefined secrets:
# Find secret references
grep -rh "!secret [a-z_]*" {{ path or '.' }} --include="*.yaml" 2>/dev/null | \
sed 's/.*!secret //' | sort -u > /tmp/used_secrets.txt
# Check if secrets.yaml exists
if [ -f "{{ path or '.' }}/secrets.yaml" ]; then
echo "secrets.yaml found"
# List defined secrets
grep "^[a-z_]*:" {{ path or '.' }}/secrets.yaml | sed 's/:.*//' | sort -u > /tmp/defined_secrets.txt
echo "Undefined secrets:"
comm -23 /tmp/used_secrets.txt /tmp/defined_secrets.txt
else
echo "WARNING: secrets.yaml not found"
fi
Check for duplicate keys:
python3 -c "
import yaml
import sys
from collections import Counter
class DuplicateKeyChecker(yaml.SafeLoader):
def construct_mapping(self, node, deep=False):
keys = [k.value for k, v in node.value if isinstance(k, yaml.ScalarNode)]
duplicates = [k for k, count in Counter(keys).items() if count > 1]
if duplicates:
print(f'Duplicate keys in {node.start_mark}: {duplicates}')
return super().construct_mapping(node, deep)
for f in ['configuration.yaml', 'automations.yaml', 'scripts.yaml', 'scenes.yaml']:
path = '{{ path or '.' }}/' + f
try:
with open(path) as file:
yaml.load(file, Loader=DuplicateKeyChecker)
print(f'OK: {f}')
except FileNotFoundError:
pass
except yaml.YAMLError as e:
print(f'ERROR in {f}: {e}')
" 2>&1
If Home Assistant is running in Docker:
docker exec homeassistant hass --script check_config 2>&1 | head -100 || echo "Docker validation not available"
ha core check 2>&1 || echo "HA OS validation not available"
Report validation results:
| Issue | Fix |
|---|---|
found undefined alias | Add missing entry to secrets.yaml |
could not determine a constructor | Check YAML indentation |
duplicate key | Remove or rename duplicate key |
expected <block end> | Fix indentation alignment |
mapping values are not allowed | Add space after colon |