kamallisted
Install: claude install-skill eagerworks/skills
# Kamal Deployment Skill
Kamal is an open-source tool (by Basecamp/37signals) that deploys any Dockerized app to bare-metal servers or cloud VMs with zero downtime. It builds a Docker image, pushes it to a registry, pulls it on your servers, and hot-swaps traffic via a built-in proxy — no Kubernetes, no complex PaaS needed.
## Version Detection — Do This First
Before generating any config or running any command, determine which version is in play:
```bash
kamal version # prints e.g. "2.10.1" or "1.9.2"
```
If Kamal isn't installed yet, infer from the repo:
- `traefik:` key in `config/deploy.yml` + `.env`/`.env.erb` file → **Kamal 1.x** → read `references/kamal-v1.md`
- `proxy:` key in `config/deploy.yml` + `.kamal/secrets` file → **Kamal 2.x**
- No existing config → **default to Kamal 2.x** (current; install with `gem install kamal`)
**Key v1 → v2 differences at a glance:**
| Area | Kamal 1.9.x | Kamal 2.x |
|---|---|---|
| Proxy | Traefik (`traefik:` block, raw labels/args) | kamal-proxy (`proxy:` block, `host`/`ssl`/`app_port`) |
| SSL | Manual Traefik ACME config or Cloudflare | Native Let's Encrypt (`ssl: true`) |
| Secrets/env | `.env` / `.env.erb` + `kamal env push` | `.kamal/secrets` + pushed on every deploy |
| Apps per host | Single-app oriented | Multiple apps on one server |
| Networking | Host network | Isolated custom Docker network |
| Default app port | `3000` | `80` |
| Hooks | `pre/post-traefik-reboot` | `pre/post-proxy-reboot` + `pre/post-app-boot`