bootstrap
Bootstrap a repository with Vercel-linked resources by running preflight checks, provisioning…
Show the status of the current Vercel project — recent deployments, linked project info, and environment overview.
> /plugin marketplace add vercel/vercel-plugin > /plugin install vercel-plugin@vercel
How it fires
How this command gets triggered: by you, by Claude, or both.
/statusContext preview
What this command does when you run it.
Show the status of the current Vercel project — recent deployments, linked project info, and environment overview.
description: Show the status of the current Vercel project — recent deployments, linked project info, and environment overview.
Comprehensive project health check. Diagnoses deployment state, environment configuration, domains, and build status.
1. Check for `.vercel/project.json` in the current directory (or nearest parent).
> This project is not linked to Vercel. Run `vercel link` to connect it, then re-run `/status`. Stop here — remaining steps require a linked project. **Do NOT fall back to GitHub Actions (`gh run list`) or any other CI system.** The Vercel CLI is the only authoritative source for this command. 2. Verify `vercel` CLI is available on PATH. If missing, suggest `npm i -g vercel`. 3. Detect monorepo markers (`turbo.json`, `pnpm-workspace.yaml`). If present, note which package scope is active.
Gather project diagnostics using MCP reads where available, CLI as fallback:
1. Fetch recent deployments (last 5). 2. Inspect the latest deployment for build status and metadata. 3. List environment variables per environment (counts only — never print values). 4. Check domain configuration and status. 5. Read `vercel.json` for configuration highlights.
No destructive operations — this command is read-only.
vercel ls
> **Note:** `vercel ls` does not support `--limit`. It returns recent deployments by default.
Extract: deployment URL, state (READY / ERROR / BUILDING), target (production / preview), created timestamp.
vercel inspect <latest-deployment-url>
Extract: build duration, function count, region, framework detected, Node.js version.
vercel env ls
Count variables per environment (Production, Preview, Development). **Never echo variable values.**
Present as:
| Environment | Count | |-------------|-------| | Production | N | | Preview | N | | Development | N |
vercel domains ls
For each domain: name, DNS configured (yes/no), SSL valid (yes/no).
Read `vercel.json` (if present) and summarize:
If `vercel.json` does not exist, note "No vercel.json found — using framework defaults."
Check the project's observability posture — drains, error monitoring, analytics instrumentation, and drain security.
Use MCP `list_drains` if available, or the REST API:
curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \ "https://api.vercel.com/v1/drains?teamId=$TEAM_ID" | jq '.drains | length'
For each drain returned, check the status field. If any drain shows an error or disabled state:
⚠️ Drain "<drain-url>" is in error state. Remediation: 1. Verify the endpoint URL is reachable and returns 2xx. 2. Check that the endpoint accepts the configured format (JSON/NDJSON/Syslog). 3. Test the drain: POST /v1/drains/<drain-id>/test 4. If unrecoverable, delete and recreate the drain.
Scan the project source for `@vercel/analytics` and `@vercel/speed-insights` imports:
> Analytics/Speed Insights not detected. Install `@vercel/analytics` and `@vercel/speed-insights` and add the components to your root layout.
Vercel signs every drain payload with an HMAC-SHA1 signature in the `x-vercel-signature` header. **Always verify signatures in production** to prevent spoofed data.
> **Critical:** You must verify against the **raw request body** (not a parsed/re-serialized version). JSON parsing and re-stringifying can change key order or whitespace, breaking the signature match.
import { createHmac, timingSafeEqual } from 'crypto'
function verifyDrainSignature(rawBody: string, signature: string, secret: string): boolean {
const expected = createHmac('sha1', secret).update(rawBody).digest('hex')
// Use timing-safe comparison to prevent timing attacks
if (expected.length !== signature.length) return false
return timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
}Usage in a drain endpoint:
// app/api/drain/route.ts
export async function POST(req: Request) {
const rawBody = await req.text()
const signature = req.headers.get('x-vercel-signature')
const secret = process.env.DRAIN_SECRET!
if (!signature || !verifyDrainSignature(rawBody, signature, secret)) {
return new Response('Unauthorized', { status: 401 })
}
const events = JSON.parse(rawBody)
// Process verified events...
return new Response('OK', { status: 200 })
}> **Secret management:** The drain signing secret is shown once when you create the drain. Store it in an environment variable (e.g., `DRAIN_SECRET`). If lost, delete and recreate the drain.
Check whether the project has a `DRAIN_SECRET` env var set via `vercel env ls`. If drains are configured but no signature secret is found, flag as a security gap.
If drains are unavailable (Hobby plan or not yet configured), use these alternatives:
| Need | Alternative | How | |------|-------------|-----| | View runtime logs | **Vercel Dashboard** | `https://vercel.com/{team}/{project}/deployments`
Comprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.
Repo: vercel-labs/vercel-plugin
Bootstrap a repository with Vercel-linked resources by running preflight checks, provisioning…
Deploy the current project to Vercel. Pass "prod" or "production" as argument to deploy to…
Manage Vercel environment variables. Commands include list, pull, add, remove, and diff. Use…