From devproxy
This skill should be used when the user mentions "devproxy", "dev subdomain", "local HTTPS proxy", asks about HTTPS for Docker Compose, wants to route Docker services through HTTPS subdomains, needs to troubleshoot devproxy issues like certificate errors or daemon problems, or asks about devproxy commands like "devproxy up", "devproxy down", "devproxy ls", "devproxy status", "devproxy init", "devproxy open", "devproxy stop", "devproxy start", "devproxy restart", "devproxy daemon restart", or "devproxy update".
How this skill is triggered — by the user, by Claude, or both
Slash command
/devproxy:devproxyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Local HTTPS dev subdomains for Docker Compose projects. Single Rust binary — no Caddy, Traefik, nginx, or mkcert.
Local HTTPS dev subdomains for Docker Compose projects. Single Rust binary — no Caddy, Traefik, nginx, or mkcert.
Prerequisites: Docker and Docker Compose must be installed. For first-time setup, use the setup skill (/devproxy:setup).
| Command | What it does |
|---|---|
devproxy init --domain X | One-time: certs, CA trust, start daemon |
devproxy init --port 8443 | Use non-privileged port (avoids sudo on Linux) |
devproxy up | Assign slug, bind port, docker compose up -d |
devproxy up --slug NAME | Use custom slug prefix for predictable URLs |
devproxy down | docker compose down + remove override & slug |
devproxy stop | docker compose stop (preserves slug/override) |
devproxy start | docker compose start (reuses existing slug) |
devproxy restart | Restart app containers (stop + start) |
devproxy ls | List running projects with slugs and URLs |
devproxy get-url | Print this project's proxy URL (for scripting) |
devproxy open | Open this project's URL in browser |
devproxy daemon restart | Restart the background daemon process |
devproxy update | Check for updates and self-update the binary |
devproxy --version | Show installed version |
devproxy status | Daemon health + active route count |
Add one label to docker-compose.yml:
services:
web:
build: .
labels:
- devproxy.port=3000 # the container-side port to proxy
The port value is the container-side port the service listens on (e.g., 80 for nginx, 3000 for Node, 8080 for Spring). Only the service that serves HTTP needs the label. Database, cache, etc. stay private — no ports: needed.
Start from the project directory:
devproxy up
# => https://swift-penguin.mysite.dev
Add .devproxy-override.yml to .gitignore — it's a generated port-mapping file.
Verify:
devproxy status # daemon running?
devproxy ls # route registered?
devproxy open # opens URL in browser
Testing with curl on macOS: curl does not use /etc/resolver/ for DNS, so bare curl https://<slug>.<domain> will fail with exit code 6 even though browsers work fine. Use --resolve to bypass DNS:
curl --resolve <slug>.<domain>:443:127.0.0.1 https://<slug>.<domain>
devproxy up finds a free host port, writes .devproxy-override.yml, and runs docker compose -f docker-compose.yml -f .devproxy-override.yml --project-name <slug> up -dHost header, looks up the slug, and reverse-proxies to 127.0.0.1:<host-port>docker events --filter label=devproxy.port — container start inserts a route, container die removes itdocker ps~/.config/devproxy/ (certs, socket, config)devproxy init installs a LaunchAgent plist. launchd binds port 443 and passes the socket fd to the daemon running as the current user (no sudo).setcap cap_net_bind_service if systemd is unavailable.devproxy daemon restart restarts the daemon via launchctl kickstart -k (macOS) or systemctl --user restart (Linux).devproxy update replaces the binary and restarts the daemon.sudo is only needed for one-time DNS setup and CA trust — never for daemon startup.| Problem | Fix |
|---|---|
| "Connection refused" on HTTPS | Check daemon: devproxy status. Restart with devproxy daemon restart or re-init with devproxy init |
| Port 443 requires sudo (Linux) | Normally handled by systemd socket activation. Fallback: sudo setcap cap_net_bind_service=+ep $(which devproxy) or use devproxy init --port 8443 |
DNS not resolving *.mysite.dev | Add 127.0.0.1 slug.mysite.dev to /etc/hosts or configure dnsmasq |
curl fails but browser works (macOS) | curl doesn't use /etc/resolver/. Use curl --resolve <slug>.<domain>:443:127.0.0.1 https://<slug>.<domain> |
.devproxy-override.yml in git | Add it to .gitignore |
| Slug changed after restart | Use devproxy stop/start to preserve slug, or devproxy up --slug NAME for a predictable slug |
| Binary "killed" (exit code 137) on macOS | Gatekeeper quarantine. Re-run the install script or run: xattr -cr $(which devproxy) && codesign --force --sign - $(which devproxy) |
npx claudepluginhub foundra-build/devproxy --plugin devproxyGenerates Docker Compose and Dockerfile configs for local dev through interactive Q&A. Supports PHP, Node.js, Python stacks with live reload, databases, Redis, queues, and email testing.
Provides reference for docker-local Laravel dev environment including service credentials/ports, CLI commands (status/up/down/logs), file paths, project structure, and .env requirements. Use for setup, health checks, and troubleshooting.
Manages Portless local-dev HTTPS proxy: setup, custom TLD URLs, aliases, CA trust, monorepo orchestration, Tailscale sharing, and troubleshooting.