home / skills / laurigates / claude-plugins / ha-validate

This skill validates Home Assistant YAML configuration files for syntax errors and common issues to ensure reliable setups.

npx playbooks add skill laurigates/claude-plugins --skill ha-validate

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.3 KB
---
model: haiku
description: Validate Home Assistant YAML configuration files for syntax and structure errors
args: "[path]"
allowed-tools: Bash(python3 *), Bash(docker exec *), Bash(ha *), Read, Grep, Glob
argument-hint: "Optional path to config directory (defaults to current directory)"
created: 2025-02-01
modified: 2026-02-03
reviewed: 2025-02-01
name: 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 2>/dev/null`

## Validation Steps

### 1. YAML Syntax Validation

Validate all YAML files for proper syntax:

```bash
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
```

### 2. Check for Common Issues

**Check for undefined secrets:**
```bash
# 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:**
```bash
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
```

### 3. Docker-based Full Validation (if available)

If Home Assistant is running in Docker:

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

### 4. Home Assistant OS Validation (if available)

```bash
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 |

Overview

This skill validates Home Assistant YAML configuration files for syntax and common structural issues. It scans a project path for .yaml files, checks YAML parsing, finds duplicate keys and undefined !secret references, and can run Home Assistant’s built-in config checks if a Docker or HA OS environment is available. Results highlight file/line errors and suggest fixes for frequent mistakes.

How this skill works

It finds all *.yaml files under the specified path and runs a YAML parser to detect syntax errors, reporting file names and snippets of the error. It extracts !secret references and compares them to entries in secrets.yaml to list undefined secrets. It parses key collections to detect duplicate keys in main YAML files. Optionally it calls docker exec homeassistant hass --script check_config or ha core check when those environments exist to perform a full Home Assistant validation.

When to use it

  • Before committing or deploying Home Assistant configuration changes
  • When troubleshooting startup failures or config reload errors
  • As part of CI pipelines to prevent invalid YAML from reaching production
  • After bulk edits, merges, or automated configuration generation
  • When adding or changing secrets to ensure references are defined

Best practices

  • Point the skill at your repository root or the Home Assistant config directory to scan all YAML files
  • Run the Docker or HA OS checks when Home Assistant is available to get platform-level validation
  • Keep secrets.yaml under secure source control or encrypted storage and run the undefined-secret check regularly
  • Treat duplicate-key warnings as high priority because they can silently override configuration
  • Address the first reported YAML error first; many parse errors mask subsequent issues

Example use cases

  • Pre-commit CI job that rejects pushes with YAML parse errors or undefined secrets
  • Local development check before restarting Home Assistant to avoid service downtime
  • Audit an inherited configuration to find duplicate keys and missing secret definitions
  • Integrate into a deployment pipeline that runs docker/ha core checks when the target is available
  • Quick scan after bulk templating or automated edits to catch indentation and mapping mistakes

FAQ

What path should I scan?

Point the tool at your config directory or repository root (default is the current directory). It will search recursively for *.yaml files.

Will this fix problems automatically?

No. The skill reports syntax errors, undefined secrets, and duplicate keys and provides suggested fixes; you must apply the corrections manually.