1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# Ship
Tell Claude to ship it.
Deploy apps and websites to your own server. Automatic HTTPS. No daemon. Just SSH, systemd, and Caddy doing their jobs.
## How it works
Ship is a set of Claude skills. Tell Claude what to deploy. Claude handles it. Server is source of truth — Claude checks the server directly, always current.
## Skills
| Skill | What it does |
|-------|-------------|
| `/ship-setup` | One-time VPS setup. Installs Caddy, saves host config |
| `/ship-status` | What's running, what port, how much disk. Asks server directly |
| `/ship-deploy` | Deploy something. Claude asks what it needs to know |
| `/ship-binary` | Upload binary, wire up systemd + Caddy, back up SQLite first |
| `/ship-static` | Rsync dist folder, Caddy serves it |
| `/ship-env` | Read/write env vars. Never wipes what's already there |
| `/ship-caddy` | Manage per-app Caddy config. Validates before reloading |
| `/ship-service` | Start, stop, restart, logs |
## Install
```bash
cp -r skills/ship-* ~/.claude/skills/
```
## Quick start
### 1. Set up VPS
```
/ship-setup
```
Claude asks for SSH host, domain, nickname. Done. Or skip Claude entirely:
```bash
bash ~/.claude/skills/ship-setup/setup.sh ubuntu@1.2.3.4 example.com prod --default
```
### 2. Deploy
```
/ship-deploy
```
Claude asks a few questions. Deploys. You go touch grass.
### 3. Check what's running
```
/ship-status
```
## Config
`~/.config/ship/config.json` — lives on your machine, created by `/ship-setup`.
```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"
}
}
}
```
Multiple hosts supported. "Deploy to staging" just works.
## Server layout
```
/usr/local/bin/<name> # binary
/var/lib/<name>/data/ # persistent data (SQLite lives here)
/var/lib/<name>/backups/ # SQLite backups before each deploy
/var/www/<name>/ # static site files
/etc/systemd/system/<name>.service # systemd unit
/etc/caddy/sites-enabled/<name>.caddy # Caddy config
/etc/ship/env/<name>.env # env vars
/etc/ship/ports/<name> # allocated port
```
## Requirements
- Ubuntu 20.04+ or Debian 11+
- SSH access
- Claude Code
## License
MIT
|