Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Start and manage tmux-backed dev servers exposed through Caddy at wildcard subdomains.
Start and manage tmux-backed dev servers exposed through Caddy at wildcard subdomains.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Start a dev server in a tmux session and expose it via Caddy at <project>.YOUR_DOMAIN. One command up, one command down.
Install the script: cp scripts/dev-serve.sh ~/.local/bin/dev-serve chmod +x ~/.local/bin/dev-serve Set your domain (one of): Export DEV_SERVE_DOMAIN in your shell profile Or edit the DOMAIN variable in the script Requirements: Caddy running with wildcard DNS + TLS (see caddy skill) tmux, jq, curl Caddy admin API on localhost:2019
dev-serve up <repo-path> [port] # Start dev server + add Caddy route dev-serve down <name> # Stop dev server + remove Caddy route dev-serve ls # List active dev servers dev-serve restart <name> # Restart dev server (keep Caddy route)
Derives subdomain from the repo folder name (~/projects/myapp โ myapp.YOUR_DOMAIN) Detects the dev command from package.json scripts.dev (supports vite, next, nuxt, sveltekit) Auto-patches Vite allowedHosts if a vite config file exists Starts the dev server in a tmux session named dev-<name> with --host 0.0.0.0 --port <port> Adds a Caddy route + dashboard link to the Caddyfile Reloads Caddy via admin API (no sudo, no restart) Verifies end-to-end: waits for the dev server to listen, then polls HTTPS until 2xx/3xx (up to 90s)
# Start with auto-assigned port (starts at 5200, skips used ports) dev-serve up ~/projects/myapp # โ https://myapp.YOUR_DOMAIN # Explicit port dev-serve up ~/projects/myapp 5200 # Override dev command DEV_CMD="bun dev" dev-serve up ~/projects/myapp 5300 # Stop and clean up dev-serve down myapp # List what's running dev-serve ls
VariableDefaultDescriptionDEV_SERVE_DOMAIN(must be set)Your wildcard domain (e.g. mini.example.com)DEV_SERVE_STATE_DIR~/.config/dev-serveWhere state JSON is storedCADDYFILE~/.config/caddy/CaddyfilePath to your CaddyfileCADDY_ADMINhttp://localhost:2019Caddy admin API addressDEV_CMD(auto-detected)Override the dev server command
Permanent services: 3100 range (managed in Caddyfile directly) Dev servers: 5200+ (managed by dev-serve, auto-assigned)
Vite blocks requests from unrecognized hostnames. dev-serve up automatically patches vite.config.ts (or .js/.mts/.mjs) to add the subdomain. If auto-patching fails, it prints the manual fix.
Browser (Tailscale / LAN / etc.) โ DNS: *.YOUR_DOMAIN โ your server IP โ Caddy (HTTPS with auto certs) โ reverse_proxy localhost:<port> โ Dev server (in tmux session)
caddy โ Required. Sets up the Caddy reverse proxy with wildcard TLS.
Dev server not starting: tmux attach -t dev-<name> # see what happened Cert not provisioning (curl exit 35): Wait 30-60s for DNS-01 challenge. Check tail -20 /var/log/caddy-error.log. Caddy reload failed: caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019 403 from Vite: The subdomain wasn't added to allowedHosts. Add it manually to your vite.config.ts: server: { allowedHosts: ['myapp.YOUR_DOMAIN'] }
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.