
Vercel Deploy
- 58 installs
- 3 repo stars
- Updated January 30, 2026
- vercel-labs/vercel-deploy-codex-skill
vercel-deploy is an agent skill that deploys projects to Vercel with claimable preview URLs requiring no authentication.
About
The vercel-deploy skill deploys any project to Vercel instantly without authentication by packaging the directory into a tar.gz excluding node_modules and .git, auto-detecting the framework from package.json, uploading to the deployment service, and returning both a live Preview URL and a Claim URL to transfer ownership to the user's Vercel account. Usage runs bash scripts/deploy.sh with an optional path argument for a directory or existing tgz archive. Framework detection covers React stacks like Next.js and Remix, Vue frameworks, SvelteKit, Astro, backend frameworks including Express and NestJS, and many others, while static HTML projects without package.json set framework to null and rename a single HTML file to index.html for root serving. Output includes human-readable success messages plus JSON with previewUrl, claimUrl, deploymentId, and projectId for programmatic consumption. Present results must always show both URLs so users can view the preview immediately and claim the deployment later. Troubleshooting covers network egress errors by advising outbound access to vercel.com domains.
- Deploys without Vercel authentication via scripts/deploy.sh.
- Returns live Preview URL and account Claim URL for transfer.
- Auto-detects frameworks from package.json across major stacks.
- Packages projects excluding node_modules and .git automatically.
- Outputs JSON with previewUrl, claimUrl, deploymentId, and projectId.
Vercel Deploy by the numbers
- 58 all-time installs (skills.sh)
- +3 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #664 of 1,453 DevOps & CI/CD skills by installs in the Skillselion catalog
- Security screen: CRITICAL risk (skills.sh audit)
- Data as of Jul 27, 2026 (Skillselion catalog sync)
vercel-deploy capabilities & compatibility
- Capabilities
- tar.gz packaging excluding node_modules and git · framework auto detection from package.json · preview and claim url generation · static html index.html rename handling · json programmatic deployment output
- Works with
- vercel
- Use cases
- devops · ci cd
What vercel-deploy says it does
Deploy any project to Vercel instantly. No authentication required.
npx skills add https://github.com/vercel-labs/vercel-deploy-codex-skill --skill vercel-deployAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 58 |
|---|---|
| repo stars | ★ 3 |
| Security audit | 2 / 3 scanners passed |
| Last updated | January 30, 2026 |
| Repository | vercel-labs/vercel-deploy-codex-skill ↗ |
How do I deploy my app to Vercel and get a live preview link without setting up auth first?
Deploy applications and websites to Vercel with a claimable preview URL and no authentication required.
Who is it for?
Developers who need instant Vercel preview deployments with framework auto-detection and claimable transfer.
Skip if: Skip when you need production account-linked deploys with existing Vercel project configuration and secrets.
When should I use this skill?
User asks to deploy my app, push this live, create a preview deployment, or deploy and give me the link.
What you get
A live Vercel preview URL plus a claim URL to transfer the deployment to your account.
Files
Vercel Deploy
Deploy any project to Vercel instantly. No authentication required.
How It Works
1. Packages your project into a .tar.gz (excludes node_modules and .git) 2. Auto-detects framework from package.json 3. Uploads to deployment service 4. Returns Preview URL (live site) and Claim URL (transfer to your Vercel account)
Usage
bash scripts/deploy.sh [path]Arguments:
path- Directory to deploy, or a.tgzfile (defaults to current directory)
If you pass a directory, the script will create a .tar.gz before upload.
Examples:
# Deploy current directory
bash scripts/deploy.sh
# Deploy specific project
bash scripts/deploy.sh /path/to/project
# Deploy existing tarball
bash scripts/deploy.sh /path/to/project.tgzPackaging Rules
- Exclude
node_modulesand.git - If no
package.json, keepframeworkasnull - For static HTML with a single
.htmlfile, rename it toindex.htmlbefore packaging
Output
Preparing deployment...
Creating deployment package...
Deploying...
✓ Deployment successful!
Preview URL: https://skill-deploy-abc123.vercel.app
Claim URL: https://vercel.com/claim-deployment?code=...The script also outputs JSON to stdout for programmatic use.
{
"previewUrl": "https://skill-deploy-abc123.vercel.app",
"claimUrl": "https://vercel.com/claim-deployment?code=...",
"deploymentId": "dpl_...",
"projectId": "prj_..."
}Framework Detection
The script auto-detects frameworks from package.json. Supported frameworks include:
- React: Next.js, Gatsby, Create React App, Remix, React Router
- Vue: Nuxt, Vitepress, Vuepress, Gridsome
- Svelte: SvelteKit, Svelte, Sapper
- Other Frontend: Astro, Solid Start, Angular, Ember, Preact, Docusaurus
- Backend: Express, Hono, Fastify, NestJS, Elysia, h3, Nitro
- Build Tools: Vite, Parcel
- And more: Blitz, Hydrogen, RedwoodJS, Storybook, Sanity, etc.
For static HTML projects (no package.json), framework is set to null.
Static HTML Projects
For projects without a package.json:
- If there's a single
.htmlfile not namedindex.html, it gets renamed automatically - This ensures the page is served at the root URL (
/)
Present Results to User
Always show both URLs:
✓ Deployment successful!
Preview URL: https://skill-deploy-abc123.vercel.app
Claim URL: https://vercel.com/claim-deployment?code=...
View your site at the Preview URL.
To transfer this deployment to your Vercel account, visit the Claim URL.Troubleshooting
Network Egress Error
If deployment fails due to network restrictions, tell the user:
Deployment failed due to network restrictions. To fix this:
1. Allow outbound access to *.vercel.com
2. Try deploying again<svg aria-label="Vercel logomark" height="64" role="img" viewBox="0 0 74 64" style="width: auto; overflow: visible;"><path d="M37.5896 0.25L74.5396 64.25H0.639648L37.5896 0.25Z" fill="black"></path></svg>
interface:
display_name: Vercel Deploy
short_description: Deploy applications and websites to Vercel with a claimable preview.
icon_small: assets/vercel.svg
icon_large: assets/vercel.svg
ownership:
name: Vercel
url: https://vercel.com
#!/bin/bash
# Vercel Deployment Script (via claimable deploy endpoint)
# Usage: ./deploy.sh [project-path]
# Returns: JSON with previewUrl, claimUrl, deploymentId, projectId
set -e
DEPLOY_ENDPOINT="https://codex-deploy-skills.vercel.sh/api/deploy"
# Detect framework from package.json
detect_framework() {
local pkg_json="$1"
if [ ! -f "$pkg_json" ]; then
echo "null"
return
fi
local content=$(cat "$pkg_json")
# Helper to check if a package exists in dependencies or devDependencies
has_dep() {
echo "$content" | grep -q "\"$1\""
}
# Order matters - check more specific frameworks first
# Blitz
if has_dep "blitz"; then echo "blitzjs"; return; fi
# Next.js
if has_dep "next"; then echo "nextjs"; return; fi
# Gatsby
if has_dep "gatsby"; then echo "gatsby"; return; fi
# Remix
if has_dep "@remix-run/"; then echo "remix"; return; fi
# React Router (v7 framework mode)
if has_dep "@react-router/"; then echo "react-router"; return; fi
# TanStack Start
if has_dep "@tanstack/start"; then echo "tanstack-start"; return; fi
# Astro
if has_dep "astro"; then echo "astro"; return; fi
# Hydrogen (Shopify)
if has_dep "@shopify/hydrogen"; then echo "hydrogen"; return; fi
# SvelteKit
if has_dep "@sveltejs/kit"; then echo "sveltekit-1"; return; fi
# Svelte (standalone)
if has_dep "svelte"; then echo "svelte"; return; fi
# Nuxt
if has_dep "nuxt"; then echo "nuxtjs"; return; fi
# Vue with Vitepress
if has_dep "vitepress"; then echo "vitepress"; return; fi
# Vue with Vuepress
if has_dep "vuepress"; then echo "vuepress"; return; fi
# Gridsome
if has_dep "gridsome"; then echo "gridsome"; return; fi
# SolidStart
if has_dep "@solidjs/start"; then echo "solidstart-1"; return; fi
# Docusaurus
if has_dep "@docusaurus/core"; then echo "docusaurus-2"; return; fi
# RedwoodJS
if has_dep "@redwoodjs/"; then echo "redwoodjs"; return; fi
# Hexo
if has_dep "hexo"; then echo "hexo"; return; fi
# Eleventy
if has_dep "@11ty/eleventy"; then echo "eleventy"; return; fi
# Angular / Ionic Angular
if has_dep "@ionic/angular"; then echo "ionic-angular"; return; fi
if has_dep "@angular/core"; then echo "angular"; return; fi
# Ionic React
if has_dep "@ionic/react"; then echo "ionic-react"; return; fi
# Create React App
if has_dep "react-scripts"; then echo "create-react-app"; return; fi
# Ember
if has_dep "ember-cli" || has_dep "ember-source"; then echo "ember"; return; fi
# Dojo
if has_dep "@dojo/framework"; then echo "dojo"; return; fi
# Polymer
if has_dep "@polymer/"; then echo "polymer"; return; fi
# Preact
if has_dep "preact"; then echo "preact"; return; fi
# Stencil
if has_dep "@stencil/core"; then echo "stencil"; return; fi
# UmiJS
if has_dep "umi"; then echo "umijs"; return; fi
# Sapper (legacy Svelte)
if has_dep "sapper"; then echo "sapper"; return; fi
# Saber
if has_dep "saber"; then echo "saber"; return; fi
# Sanity
if has_dep "sanity"; then echo "sanity-v3"; return; fi
if has_dep "@sanity/"; then echo "sanity"; return; fi
# Storybook
if has_dep "@storybook/"; then echo "storybook"; return; fi
# NestJS
if has_dep "@nestjs/core"; then echo "nestjs"; return; fi
# Elysia
if has_dep "elysia"; then echo "elysia"; return; fi
# Hono
if has_dep "hono"; then echo "hono"; return; fi
# Fastify
if has_dep "fastify"; then echo "fastify"; return; fi
# h3
if has_dep "h3"; then echo "h3"; return; fi
# Nitro
if has_dep "nitropack"; then echo "nitro"; return; fi
# Express
if has_dep "express"; then echo "express"; return; fi
# Vite (generic - check last among JS frameworks)
if has_dep "vite"; then echo "vite"; return; fi
# Parcel
if has_dep "parcel"; then echo "parcel"; return; fi
# No framework detected
echo "null"
}
# Parse arguments
INPUT_PATH="${1:-.}"
# Create temp directory for packaging
TEMP_DIR=$(mktemp -d)
TARBALL="$TEMP_DIR/project.tgz"
CLEANUP_TEMP=true
cleanup() {
if [ "$CLEANUP_TEMP" = true ]; then
rm -rf "$TEMP_DIR"
fi
}
trap cleanup EXIT
echo "Preparing deployment..." >&2
# Check if input is a .tgz file or a directory
FRAMEWORK="null"
if [ -f "$INPUT_PATH" ] && [[ "$INPUT_PATH" == *.tgz ]]; then
# Input is already a tarball, use it directly
echo "Using provided tarball..." >&2
TARBALL="$INPUT_PATH"
CLEANUP_TEMP=false
# Can't detect framework from tarball, leave as null
elif [ -d "$INPUT_PATH" ]; then
# Input is a directory, need to tar it
PROJECT_PATH=$(cd "$INPUT_PATH" && pwd)
# Detect framework from package.json
FRAMEWORK=$(detect_framework "$PROJECT_PATH/package.json")
# Check if this is a static HTML project (no package.json)
if [ ! -f "$PROJECT_PATH/package.json" ]; then
# Find HTML files in root
HTML_FILES=$(find "$PROJECT_PATH" -maxdepth 1 -name "*.html" -type f)
HTML_COUNT=$(echo "$HTML_FILES" | grep -c . || echo 0)
# If there's exactly one HTML file and it's not index.html, rename it
if [ "$HTML_COUNT" -eq 1 ]; then
HTML_FILE=$(echo "$HTML_FILES" | head -1)
BASENAME=$(basename "$HTML_FILE")
if [ "$BASENAME" != "index.html" ]; then
echo "Renaming $BASENAME to index.html..." >&2
mv "$HTML_FILE" "$PROJECT_PATH/index.html"
fi
fi
fi
# Create tarball of the project (excluding node_modules and .git)
echo "Creating deployment package..." >&2
tar -czf "$TARBALL" -C "$PROJECT_PATH" --exclude='node_modules' --exclude='.git' .
else
echo "Error: Input must be a directory or a .tgz file" >&2
exit 1
fi
if [ "$FRAMEWORK" != "null" ]; then
echo "Detected framework: $FRAMEWORK" >&2
fi
# Deploy
echo "Deploying..." >&2
RESPONSE=$(curl -s -X POST "$DEPLOY_ENDPOINT" -F "file=@$TARBALL" -F "framework=$FRAMEWORK")
echo "Your deployment is building." >&2
# Check for error in response
if echo "$RESPONSE" | grep -q '"error"'; then
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
echo "Error: $ERROR_MSG" >&2
exit 1
fi
# Extract URLs from response
PREVIEW_URL=$(echo "$RESPONSE" | grep -o '"previewUrl":"[^"]*"' | cut -d'"' -f4)
CLAIM_URL=$(echo "$RESPONSE" | grep -o '"claimUrl":"[^"]*"' | cut -d'"' -f4)
if [ -z "$PREVIEW_URL" ]; then
echo "Error: Could not extract preview URL from response" >&2
echo "$RESPONSE" >&2
exit 1
fi
echo "" >&2
echo "Deployment successful!" >&2
echo "" >&2
echo "Preview URL: $PREVIEW_URL" >&2
echo "Claim URL: $CLAIM_URL" >&2
echo "" >&2
# Output JSON for programmatic use
echo "$RESPONSE"
Related skills
FAQ
What does vercel-deploy produce?
A live Preview URL, a Claim URL for account transfer, and JSON with deployment and project identifiers.
When should I use vercel-deploy?
When you want an instant Vercel preview deployment without authentication setup.
Is vercel-deploy safe to install?
Review the Security Audits panel on this page before installing in production.