verisure-deploy
Full deploy pipeline โ test, typecheck, deploy to HAOS, smoke test
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Full deploy pipeline โ test, typecheck, deploy to HAOS, smoke test
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
End-of-session protocol โ push, checkpoint, CHANGELOG, docs, todo
Session start protocol โ workflow gates, pending work, status report
Structured investigation โ HA logs, API trace, code trace. No code changes until approved.
Bump version, publish to PyPI, create GitHub release, update HACS manifest
Dispatch 8 parallel agents for full codebase review (line-level + architecture)
Based on SOC occupation classification
| 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.
pytest tests/ -x -q โ abort if any test fails.pyright verisure_italy/ custom_components/ โ abort if any new errors.ruff check verisure_italy/ tests/ custom_components/ โ abort on errors.manifest.json to 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
verisure_italy/ package is pip-installed inside the HA
Docker container. Must deploy it separately โ the integration imports it at runtime:
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"
done
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:
ssh root@homeassistant -p 22222 "docker exec homeassistant python3 -c \"import verisure_italy; print(verisure_italy.__file__)\""ssh root@homeassistant -p 22222 "ha core restart" โ returns immediately once the restart is scheduled; core takes ~30-60s to come back up.sleep N commands. ha core info returns info even while core is restarting, so poll the HTTP API instead โ it only answers 200 once HA is fully booted:
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
Use this inside a plain Bash call (not Monitor) โ it exits as soon as the API responds. You'll get a completion notification automatically../scripts/smoke_test.sh โ abort if any entity/service missing.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.
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:
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"
project_ha_automations.md.INITIAL == armed_away, the last
transition must be alarm_arm_away, not alarm_disarm. Never
end the cycle on a different state than where you started.alarm_control_panel.verisure_alarm state equals
INITIAL, and every paused automation is back to on.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.