Synthèse automatique
Automatise le pipeline de déploiement complet d'une intégration Home Assistant Verisure Italie : tests, typecheck, lint, copie des fichiers vers HAOS par SSH, redémarrage et vérifications post-déploiement.
Points forts
- Enchaîne des portes de qualité bloquantes (pytest, pyright, ruff) avant toute mise en production
- Couvre les deux cibles de déploiement distinctes : fichiers d'intégration sur HAOS et bibliothèque cliente pip-installée dans le conteneur Docker
- Attend la disponibilité réelle de l'API Home Assistant par polling HTTP plutôt qu'un sleep arbitraire
- Impose un protocole de sauvegarde/restauration de l'état de l'alarme et des automatisations lors des cycles E2E sur le panneau réel
Limites
- Fortement couplé à une infrastructure personnelle précise (hôte homeassistant, port 22222, HA_TOKEN) et non réutilisable tel quel
- Le chemin site-packages/python3.14 est fragile et casse à chaque mise à jour de Home Assistant
- Ne couvre pas la publication (PyPI, tag GitHub), laissée explicitement manuelle
- Suppose une connaissance externe du projet (auto-memory project_ha_automations.md, scripts/smoke_test.sh) non fournie dans le skill
À utiliser lorsqu'on doit déployer une nouvelle version de l'intégration verisure_italy sur une instance Home Assistant réelle et vérifier qu'elle démarre correctement.
Ne pas l'utiliser pour publier une release, pour travailler sur une autre intégration, ou sans accès SSH à l'instance HAOS cible.
Analyse de sécurité
PrudenceNo exfiltration, obfuscated payloads, or destructive host-wide commands; every action targets the author's own HA instance for a legitimate deploy purpose. However the skill runs as root over SSH, overwrites files in place without backup, handles an HA bearer token, restarts a live system, and can leave a real alarm panel in the wrong armed state — powerful, blast-radius-heavy tooling that warrants a caution rating rather than safe.
- •Uses SSH as root to the Home Assistant host (root@homeassistant -p 22222) and `docker exec` into the HA container to overwrite live integration and site-packages files with `cat >` — no backup or rollback path if a deploy is interrupted mid-way
- •Overwrites a hardcoded interpreter path (/usr/local/lib/python3.14/site-packages/verisure_italy/) which can clobber or misplace files if the HA Python version changes
- •`source .env` executes whatever shell content that file contains and pulls HA_TOKEN into the environment; the token is later passed on a command line and could be exposed via process listing/logs
- •Restarts HA core (`ha core restart`) on a live home-automation system — disruptive to automations and any dependent services during the 30-60s window
- •Directly mutates a real home alarm panel state (arm/disarm) against a live security system; a failure between capture and restore could leave the house disarmed
- •Step 2 of the E2E protocol depends on an external auto-memory file (project_ha_automations.md) to know which automations to pause — if stale or missing, interfering automations may remain active
Exemples
Deploy the current verisure_italy integration to HAOS and run the full pipeline.I fixed the arm/disarm bug — run the deploy pipeline with smoke test and check the logs for verisure_italy errors.Run an end-to-end arm/disarm cycle against the live panel to verify the change, and restore the initial alarm state and my automations afterwards.name: verisure-deploy description: Full deploy pipeline — test, typecheck, deploy to HAOS, smoke test
Run the full deployment pipeline. Abort on any failure — never continue past a red gate.
Steps
- Test suite:
pytest tests/ -x -q— abort if any test fails. - Type check:
pyright verisure_italy/ custom_components/— abort if any new errors. - Lint:
ruff check verisure_italy/ tests/ custom_components/— abort on errors. - Deploy integration files: push all integration Python files +
manifest.jsonto HAOS via SSH pipe. Manifest is load-bearing — it carries the integration version + client library pin, so HACS and HA Dev Tools both show the deployed version correctly:for f in custom_components/verisure_italy/*.py custom_components/verisure_italy/manifest.json; do ssh root@homeassistant -p 22222 \ "cat > /mnt/data/supervisor/homeassistant/custom_components/verisure_italy/$(basename $f)" \ < "$f" done - Deploy client library: the
verisure_italy/package is pip-installed inside the HA Docker container. Must deploy it separately — the integration imports it at runtime:Note: The Python version path (3.14) may change with HA updates. If deploy fails with "No such file or directory", check the actual path with:for f in verisure_italy/*.py; do ssh root@homeassistant -p 22222 \ "docker exec -i homeassistant sh -c 'cat > /usr/local/lib/python3.14/site-packages/verisure_italy/$(basename $f)'" \ < "$f" donessh root@homeassistant -p 22222 "docker exec homeassistant python3 -c \"import verisure_italy; print(verisure_italy.__file__)\"" - Restart HA:
ssh root@homeassistant -p 22222 "ha core restart"— returns immediately once the restart is scheduled; core takes ~30-60s to come back up. - Wait until HA is up: do NOT hard-sleep. The Bash tool blocks long leading
sleep Ncommands.ha core inforeturns info even while core is restarting, so poll the HTTP API instead — it only answers 200 once HA is fully booted:Use this inside a plain Bash call (not Monitor) — it exits as soon as the API responds. You'll get a completion notification automatically.source .env until [ "$(curl -sf -o /dev/null -w '%{http_code}' \ http://homeassistant:8123/api/ -H "Authorization: Bearer $HA_TOKEN")" = "200" ]; do sleep 3 done - Smoke test:
./scripts/smoke_test.sh— abort if any entity/service missing. - Log check:
ssh root@homeassistant -p 22222 "docker logs homeassistant 2>&1 | grep -i verisure_italy | tail -20"— look for ERROR/WARNING.
On failure at any step: stop, show full error, do NOT proceed or auto-fix. On success: report all gates passed.
Deploy does NOT release. Releasing (PyPI + GitHub tag) is a separate manual step.
Live E2E cycle — state and automation restoration (MANDATORY)
If an end-to-end arm/disarm cycle is run against the live panel as
part of verification (either within this skill or downstream in a plan
like docs/plans/*.md), the panel's initial state and the user's
automations must be restored afterwards. This is a real home
alarm — leaving it in the wrong state is a security failure.
Protocol:
- Capture initial state before the first transition.
source .env INITIAL=$(curl -s http://homeassistant:8123/api/states/alarm_control_panel.verisure_alarm \ -H "Authorization: Bearer $HA_TOKEN" | python3 -c "import sys,json;print(json.load(sys.stdin)['state'])") echo "initial: $INITIAL" - Pause automations that would interfere with deliberate
mutations (auto-disarm, morning-disarm, actionable-disarm notification, etc.). List is in auto-memory
project_ha_automations.md. - Cycle through the planned transitions.
- Restore initial state. If
INITIAL == armed_away, the last transition must bealarm_arm_away, notalarm_disarm. Never end the cycle on a different state than where you started. - Re-enable automations paused in step 2.
- Verify:
alarm_control_panel.verisure_alarmstate equalsINITIAL, and every paused automation is back toon.
Do not rely on a plan's default "cycle ends disarmed" template — patch the last transition to restore. If unsure what the initial state was, ASK the user before running the cycle.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/verisure-deploy-pipeline-mrx3y00n' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/verisure-deploy-pipeline-mrx3y00n/download' --output '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md.part' && mv '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md.part' '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md' && test -s '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/verisure-deploy' && cp -R '.skill-downloads/verisure-deploy-pipeline-mrx3y00n' '.claude/skills/verisure-deploy'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/verisure-deploy-pipeline-mrx3y00n'openskills read 'verisure-deploy-pipeline-mrx3y00n'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Configurer un canal de discussion avec SecretRefs
DevOps
Configurez des canaux de discussion avec des commandes non interactives, les secrets étant uniquement des SecretRefs. Couvre les étapes de collecte, modification, réparation et vérification.
Enquêter sur les échecs CI de ClickHouse
DevOps
Investigue un échec CI de ClickHouse de bout en bout à partir d'une URL de PR ou de rapport S3. Récupère les tests échoués, classe flaky vs vraie régression, et cherche des issues/fixes existants.
Revue de PR Ansible
DevOps
Examine une PR Ansible selon le processus standardisé du projet, incluant la validation des changelogs, la couverture de tests et le suivi des commentaires.