# Send Dev Serve to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "dev-serve",
    "name": "Dev Serve",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/BrennerSpear/dev-serve",
    "canonicalUrl": "https://clawhub.ai/BrennerSpear/dev-serve",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/dev-serve",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dev-serve",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "scripts/dev-serve.sh"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "dev-serve",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-02T12:00:59.040Z",
      "expiresAt": "2026-05-09T12:00:59.040Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dev-serve",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dev-serve",
        "contentDisposition": "attachment; filename=\"dev-serve-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "dev-serve"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/dev-serve"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/dev-serve",
    "downloadUrl": "https://openagent3.xyz/downloads/dev-serve",
    "agentUrl": "https://openagent3.xyz/skills/dev-serve/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dev-serve/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dev-serve/agent.md"
  }
}
```
## Documentation

### dev-serve — One-Command Dev Server Hosting

Start a dev server in a tmux session and expose it via Caddy at <project>.YOUR_DOMAIN. One command up, one command down.

### Setup

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

### CLI

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)

### How It Works

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)

### Examples

# 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

### Configuration

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

### Port Convention

Permanent services: 3100 range (managed in Caddyfile directly)
Dev servers: 5200+ (managed by dev-serve, auto-assigned)

### Vite allowedHosts

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.

### Architecture

Browser (Tailscale / LAN / etc.)
  → DNS: *.YOUR_DOMAIN → your server IP
    → Caddy (HTTPS with auto certs)
      → reverse_proxy localhost:<port>
        → Dev server (in tmux session)

### Companion Skills

caddy — Required. Sets up the Caddy reverse proxy with wildcard TLS.

### Troubleshooting

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'] }
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: BrennerSpear
- Version: 1.0.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-02T12:00:59.040Z
- Expires at: 2026-05-09T12:00:59.040Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/dev-serve)
- [Send to Agent page](https://openagent3.xyz/skills/dev-serve/agent)
- [JSON manifest](https://openagent3.xyz/skills/dev-serve/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/dev-serve/agent.md)
- [Download page](https://openagent3.xyz/downloads/dev-serve)