plugins/home-assistant-dev/skills/ha-quality-review/SKILL.md
Review a Home Assistant integration against the Integration Quality Scale (IQS). Covers all 52 official rules across Bronze, Silver, Gold, and Platinum tiers. Use when asked to review, quality check, assess for core PR, HACS submission, or IQS compliance.
npx skillsauth add l3digital-net/claude-code-plugins ha-quality-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Run with /home-assistant-dev:ha-quality-review to perform a systematic review against all official IQS rules.
The Integration Quality Scale has 4 tiers and 52 rules:
custom_components/{domain}/ or homeassistant/components/{domain}/async_setup, not async_setup_entryrequirementsentry.runtime_data not hass.data[DOMAIN]config_flow: true in manifest
data_description in strings.json for field contextConfigEntry.data for connection info, ConfigEntry.options for settingsasync_set_unique_idunique_id_attr_has_entity_name = Trueasync_added_to_hass, cleanup in async_will_remove_from_hassasync_setup_entry, raises ConfigEntryNotReady on failureServiceValidationError or HomeAssistantError on failureasync_unload_entry properlyasync_step_reauth for credential refreshPARALLEL_UPDATES constant to limit concurrent entity updatesDeviceInfoEntityCategory.CONFIG or EntityCategory.DIAGNOSTIC appropriatelytranslation_keyasync_step_reconfigure for changing settingsdiagnostics.py with sensitive data redactionicons.jsonmypy --strict# Validate JSON files
python3 -c "import json; json.load(open('manifest.json'))"
python3 -c "import json; json.load(open('strings.json'))"
# Check for common issues
grep -r "hass.data\[DOMAIN\]" . # Should use runtime_data
grep -r "requests\." . # Should use aiohttp
grep -r "time.sleep" . # Should use asyncio.sleep
# Run linters
ruff check .
mypy .
## Integration Quality Review: {domain}
### Tier Assessment
- Bronze: {X}/18 ✓/✗
- Silver: {X}/10 ✓/✗
- Gold: {X}/21 ✓/✗
- Platinum: {X}/3 ✓/✗
**Current Tier:** {highest fully passing tier}
### Critical Issues (Must Fix for Bronze)
1. [Rule]: [Issue] — [File:line] Fix: [code example]
### Warnings (Should Fix)
1. [Rule]: [Issue]
### Recommendations for Next Tier
1. [Prioritized improvements]
### Positive Findings
- [What's done well]
ha-config-flowha-coordinatorha-entity-platformsha-async-patternsha-diagnosticsha-hacstools
Configures Python projects to the Python Tooling SSOT Standard (uv, Ruff, BasedPyright strict, pytest+coverage, pip-audit). Use when creating projects, writing standalone scripts, configuring pyproject.toml, migrating from pip/Poetry/mypy/black/flake8, or auditing a project for conformance to the standard.
development
Use when you're stuck or missing current information mid-task - the same command/API/approach failed twice, an error looks like a changed or deprecated API, or you need the current version of something, a fact from after your training cutoff, or to verify something you cannot confirm from the code in context. Starts with a cheap inline lookup and only escalates to a full research sweep if that fails. Do not use for routine pre-emptive checks before ordinary library work - for deliberate research, use /qdev:research.
documentation
Update the llm-wiki knowledge base (remote LXC CT 103, /srv/workspaces/llm-wiki, over SSH) with implementation-level details from the current session by dispatching the up-docs-propagate-wiki sub-agent. This skill should be used when the user runs /up-docs:wiki.
documentation
Update repository documentation (README.md, docs/, CLAUDE.md) based on session changes by dispatching the up-docs-propagate-repo sub-agent. This skill should be used when the user runs /up-docs:repo.