skills/post-deploy-verification/SKILL.md
Verify a deployment is healthy after it completes — HTTP probes, healthcheck endpoints, container stability, log scanning, and port alignment. Use after any deployment to confirm the app is running and reachable.
npx skillsauth add nixopus/agent post-deploy-verificationInstall 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 these checks in order after a deployment completes. Report all results — do not stop at the first failure.
list_containers to find the app's containerrunning (not exited, restarting, created)container_inspect → check restart_countrestart_count > 0 within 60 seconds of deployment: container is crash-loopingoom_killed — if true, the container exceeded its memory limitFour values must agree:
| Layer | How to check |
|---|---|
| App listen port | container_exec ["ss", "-tlnp"] or grep source for .listen( |
| Dockerfile EXPOSE | container_inspect → ports |
| App config port | get_application → port field |
| Proxy upstream | proxy_config → upstream |
If any disagree, the app will be unreachable even though the container is running.
container_exec ["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}", "localhost:PORT"]http_probe the public URLIf the app has a healthcheck endpoint (/health, /healthz, /api/health, /ready):
container_exec ["curl", "-s", "localhost:PORT/health"]"status": "ok" or "healthy" or HTTP 200get_container_logs — last 50 lines| Pattern | Meaning |
|---|---|
| ECONNREFUSED | Database or service not reachable |
| EADDRINUSE | Port conflict |
| Error: or FATAL | Application error during startup |
| TypeError / ReferenceError (Node) | Code error |
| ModuleNotFoundError (Python) | Missing dependency |
| panic: (Go) | Runtime panic |
For docker-compose deployments:
get_compose_services to list all services| Check | Status | Details | |-------|--------|---------| | Container running | PASS/FAIL | Container ID and status | | No restart loop | PASS/FAIL | restart_count, oom_killed | | Port alignment | PASS/FAIL | Expected vs actual | | Internal reachable | PASS/FAIL | HTTP status code | | External reachable | PASS/FAIL | HTTP status code | | Healthcheck | PASS/WARN/N/A | Endpoint and response | | Log scan | PASS/FAIL | Error patterns found | | Compose services | PASS/FAIL/N/A | Service health summary |
Healthy: All checks PASS (or WARN/N/A for optional checks). Unhealthy: Any FAIL — report the first failing check as the likely root cause.
failure-diagnosis — If verification fails, use failure diagnosis for deeper investigationdomain-tls-routing — If internal reachability passes but external failstools
Compressed catalog of all Nixopus API operations for the nixopus_api() tool
development
Deploy static file sites — Caddy/nginx serving, Staticfile config, and Dockerfile patterns. Use when deploying a static HTML site with no server-side runtime, or when index.html or a Staticfile is detected at the project root.
devops
Deploy shell script applications — interpreter detection, setup scripts, and Dockerfile patterns. Use when deploying a shell script project, or when start.sh is detected.
development
Self-healing loop for failed deployments — diagnose, fix, redeploy up to 3 attempts, then escalate or rollback. Load when a deployment fails or build errors occur.