---
name: vibedrop
description: Deploy any static site or build output to a public URL via the VibeDrop hosting service. Use when the user asks to share, deploy, publish, host, or preview a web page, landing page, static site, or HTML/CSS/JS bundle — including "give me a URL", "send this to a friend", or "put this on the internet". Also handles redeploys and surfacing existing site URLs.
license: MIT-0
metadata:
  author: VibeDrop
  homepage: https://vibedrop.cc
  version: "1.0.0"
  released: "2026-04-23"
  canonicalUrl: https://vibedrop.cc/skill.md
compatibility: Requires Node.js 18+ and network access to https://api.vibedrop.cc. Anonymous usage is free (25 MB per site, 3 concurrent sites, 7-day TTL; 30-day TTL once the key is claimed by an account). Pro plan removes limits.
---

# VibeDrop — agent-native static hosting

> **Skill v1.0.0 · released 2026-04-23.** If today is more than 7 days after that date, refetch <https://vibedrop.cc/skill.md> before continuing — your cached copy may be stale.

VibeDrop hosts a static site (HTML/CSS/JS/assets) at a public URL in seconds. No account, no credit card, no config file. The free tier gives every caller an anonymous API key automatically; accounts + Pro are optional.

Use this skill whenever the user asks to **share, deploy, publish, or preview** a web page or build output.

## Install the CLI once

The CLI wraps everything — auth, provisioning, uploads, redeploys. Install it globally (one time per machine):

```bash
npm install -g @vibedrop/cli
```

Or run without installing:

```bash
npx @vibedrop/cli <command>
```

Confirm it works:

```bash
vibedrop --version
```

If npm/Node is missing, stop and tell the user to install Node.js 18+ first.

## Deploying

**Always deploy the built output**, not source. Build first when a bundler is involved:

| Stack | Build output |
|-------|--------------|
| Vite / Astro / SvelteKit static | `dist/` |
| Next.js (`next export`) | `out/` |
| Create React App | `build/` |
| Plain HTML | the folder with `index.html` |

The deploy command:

```bash
vibedrop deploy ./dist
```

On first run, the CLI provisions an anonymous API key and writes it to `~/.vibedrop/config.json`. Subsequent deploys reuse that key silently.

Example output:

```
✔ Deployed
  → https://k9m2p8x7.vibedrop.site
  expires 2026-04-24T14:00:00Z
  claim this site for your account (1h link):
  → https://app.vibedrop.cc/claim?token=…
```

Surface the **site URL** back to the user — that is the point of the deploy.

When the response includes a **claim URL**, also surface it. This is a one-time link (valid for 1 hour) that lets the user attach the key + all sites deployed with it to their VibeDrop account in one click, without pasting any secret. Tell the user the link expires in 1 hour. If they need a fresh link later, they can regenerate one.

## Redeploying after edits

After changing the source, run `vibedrop deploy ./dist` again. By default each run creates a new site with a new random slug.

To **keep the same URL** across redeploys, pass the previous slug. This works on any tier as long as the caller's API key owns that slug:

```bash
vibedrop deploy ./dist --slug k9m2p8x7
```

Slugs are server-generated only — you cannot pick an arbitrary name. The `--slug` flag exists to point at a site you already deployed.

## Rules the agent must follow

- **Never deploy source directories** like `src/`, `app/`, or `pages/`. Deploy the built output.
- If the target directory has no `index.html`, stop and ask the user which file is the entry point. VibeDrop serves static files — there must be an `index.html`.
- **Never write API keys to the repo, commit messages, or chat.** Keys live in `~/.vibedrop/config.json` only.
- If a deploy fails with a size error (> 25 MB on free tier, > 50 MB on Pro), run `du -sh <dir>/*` to list large files and ask the user what to drop or whether to minify. Do not silently strip files.
- If the user wants the site to persist permanently or wants a custom domain, tell them Pro is $5/month and point them at https://vibedrop.cc/#pricing. Claiming the anonymous key against an account extends the free TTL to 30 days without paying.
- Prefer one deploy with the full site over many partial deploys.

## Worked examples

### Vite app

```bash
cd my-vite-app
npm run build
vibedrop deploy ./dist
```

### Plain HTML folder

```bash
vibedrop deploy ./marketing-page
```

### Redeploy after edits

```bash
# new URL each time
vibedrop deploy ./dist

# or keep the previous URL by passing its slug
vibedrop deploy ./dist --slug k9m2p8x7
```

### Claim sites into a user account

The deploy response includes a one-time **claim URL** (valid 1h) whenever the caller is using an unclaimed anonymous key. Surface that URL — the user opens it, signs in with email, and the anonymous key plus every site deployed with it lands in their dashboard (https://app.vibedrop.cc/sites). Free sites then jump from the 7-day TTL to 30 days.

If the claim URL expired before the user got to it, the CLI / MCP can mint a new one at any time. That's the preferred path — users should never need to see or paste the raw `vd_anon_…` key.

## When to use the MCP server instead

If the user prefers tool-call integration (the agent calls `deploy` as a native tool rather than shelling out to the CLI), install the MCP server:

```bash
claude mcp add vibedrop -- npx @vibedrop/mcp
```

Both paths hit the same backend. Skill + CLI is the recommended default because it works in any agent that can run shell commands.

## Troubleshooting

- **`ENOTFOUND api.vibedrop.cc`** — network is blocked. Check the user's firewall/VPN.
- **`401 Unauthorized`** — the key in `~/.vibedrop/config.json` was revoked. Delete the file and re-run `vibedrop deploy` to reprovision.
- **Deploy succeeds but page is blank** — the directory probably missed a bundler step. Rebuild and redeploy.

Docs and support: https://vibedrop.cc · hello@vibedrop.cc
