Skip to content
Back to skills

Ha Validate

ASecurity

Validate Home Assistant YAML configuration files for syntax and structure errors

  • 58 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
toolspythonbashnodedocker

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add laurigates/claude-plugins --skill ha-validate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ha Validate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ha Validate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/laurigates-ha-validate/badge)](https://www.skillsdirectory.com/skills/laurigates-ha-validate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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 |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…