# Ship Deploy Go binaries and static sites to a VPS with automatic HTTPS. No agent on the server — just SSH, systemd, and Caddy. ## How it works Ship is a set of Claude skills. Instead of a rigid CLI that bakes in assumptions, Claude reasons about what to do using a family of narrow, composable skills. The server is the source of truth — no local state file that can go stale. ## Skills | Skill | What it does | |-------|-------------| | `/ship-setup` | One-time VPS config. Installs Caddy, creates directories, saves host to `~/.config/ship/config.json` | | `/ship-status` | Show all running apps, ports, domains, and disk usage — derived live from server | | `/ship-deploy` | Deploy a binary or static site — orchestrates the skills below | | `/ship-binary` | Upload a pre-built binary, configure systemd + Caddy, back up SQLite | | `/ship-static` | Rsync a dist folder, configure Caddy to serve it | | `/ship-env` | Read/write env vars with merge semantics — never wipes existing vars | | `/ship-caddy` | Manage per-app Caddyfile — validates before reloading | | `/ship-service` | systemd control: start, stop, restart, logs | ## Install Copy the `skills/` directory into `~/.claude/skills/`: ```bash cp -r skills/ship-* ~/.claude/skills/ ``` ## Quick start ### 1. Set up your VPS ``` /ship-setup ``` Claude asks for SSH host, domain, and nickname. Saves to `~/.config/ship/config.json`. Installs Caddy on the server. Or run the script directly: ```bash bash ~/.claude/skills/ship-setup/setup.sh ubuntu@1.2.3.4 example.com prod --default ``` ### 2. Deploy ``` /ship-deploy ``` Claude asks what you're deploying (binary or static site), where it is, what to call it, and any env vars. Handles the rest. ### 3. Check status ``` /ship-status ``` Shows all running apps, ports, URLs, and disk usage — no local state file, reads directly from server. ## Config `~/.config/ship/config.json` — created by `/ship-setup`. Supports multiple hosts: ```json { "default": "prod", "hosts": { "prod": { "host": "ubuntu@1.2.3.4", "domain": "example.com" }, "staging": { "host": "ubuntu@5.6.7.8", "domain": "staging.example.com" } } } ``` Deploy to a specific host: "deploy foodtracker to staging" ## Server layout ``` /usr/local/bin/ # binary /var/lib// # work directory /var/lib//data/ # persistent data (SQLite lives here) /var/lib//backups/ # SQLite backups (made before each binary swap) /var/www// # static site files /etc/systemd/system/.service # systemd unit /etc/caddy/sites-enabled/.caddy # per-app Caddy config /etc/ship/env/.env # environment variables /etc/ship/ports/ # allocated port number ``` ## Requirements - VPS running Ubuntu 20.04+ or Debian 11+ - SSH access - Claude Code with skills support ## License MIT