ha-validate

Validate Home Assistant configuration files for YAML syntax errors and common issues.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "ha-validate" with this command: npx skills add laurigates/claude-plugins/laurigates-claude-plugins-ha-validate

/ha:validate

Validate Home Assistant configuration files for YAML syntax errors and common issues.

Context

  • Config path: {{ path or '.' }}

  • YAML files: !find {{ path or '.' }} -name "*.yaml" -type f

Validation Steps

  1. YAML Syntax Validation

Validate 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

  1. Check for Common Issues

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

  1. Docker-based Full Validation (if available)

If Home Assistant is running in Docker:

docker exec homeassistant hass --script check_config 2>&1 | head -100 || echo "Docker validation not available"

  1. Home Assistant OS Validation (if available)

ha core check 2>&1 || echo "HA OS validation not available"

Post-Validation

Report validation results:

  • List any YAML syntax errors with file and line numbers

  • List any undefined secret references

  • List any duplicate keys

  • Suggest fixes for common issues

Common Fixes

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ruff linting

No summary provided by upstream source.

Repository SourceNeeds Review
General

imagemagick-conversion

No summary provided by upstream source.

Repository SourceNeeds Review
General

jq json processing

No summary provided by upstream source.

Repository SourceNeeds Review
General

api-testing

No summary provided by upstream source.

Repository SourceNeeds Review