deploy — Codex command: ship your project to Vercel
A Codex slash command that runs preflight checks, deploys the current project to Vercel, and reads back the build and runtime logs.
~/.codex/prompts/deploy.mdWhat deploy does
deploy walks a project through a Vercel deployment step by step. Preflight comes first: it confirms vercel is on PATH, that the project is linked (.vercel/project.json in the current or nearest parent directory), and that there are no uncommitted changes. Missing CLI? It points you at npm i -g vercel, or the pnpm and bun equivalents. Not linked yet? Run vercel link, then /deploy again.
The default is a preview build: vercel spins up an isolated URL and leaves production alone. Pass prod or production and it switches to vercel --prod — but only after asking for explicit confirmation. No clear yes, no production deploy. In a monorepo it looks for turbo.json or pnpm-workspace.yaml at the root and asks which package you mean when that is ambiguous.
Once the build finishes, the command pulls the deployment URL from the output, records the short commit SHA, and checks state with vercel inspect. An ERROR state gets you the tail of the build logs. Production deploys also wait 60 seconds and scan for early runtime errors via vercel logs --level error --since 1h. Drain and error-monitoring checks are warnings, not blockers. One thing to know up front: uncommitted changes are not part of the deploy, and the command warns you before it starts.
What it helps with
- ship the current project to Vercel from one command
- get a preview URL before merging
- keep production deploys behind an explicit confirmation
- read build logs when a deploy fails with ERROR
- scan for runtime errors right after a production release
Example prompts for the agent
- /deploy
- /deploy prod
- run a preview deploy and show me the URL
How to install deploy
Manually: put the files in place
~/.codex/prompts/deploy.mdCall it with /prompts:deploy. Codex marks this format deprecated in favour of skills
Manually: put the files in place
.claude/commands/deploy.mdCall it with /deploy. For all projects use ~/.claude/commands/
Manually: put the files in place
.github/prompts/deploy.prompt.mdManually: put the files in place
.gemini/commands/deploy.tomlGemini stores commands as TOML: the prompt text goes into the prompt field
Questions about deploy
How do I install deploy in Claude?
Place the command file at ~/.codex/prompts/deploy.md. It then shows up as /deploy.
What does deploy do?
It checks the project is ready, deploys it to Vercel, and reports the result. No argument means preview; prod means production with confirmation.
What does deploy need to run?
The vercel CLI on PATH and a linked project (.vercel/project.json). If either is missing, the command tells you the install line or to run vercel link.
Source text
deploy.md · Apache-2.0
--- description: Deploy the current project to Vercel. Pass "prod" or "production" as argument to deploy to production. Default is preview deployment. --- # Deploy to Vercel Deploy the current project to Vercel using the CLI, with preflight safety checks, explicit production confirmation, and post-deploy verification. ## Preflight Run these checks before any deployment. Stop on failure and print actionable guidance. 1. **CLI available?** — Confirm `vercel` is on PATH. - If missing: `npm i -g vercel` (or `pnpm add -g vercel` / `bun add -g vercel`). 2. **Project linked?** — Check for `.vercel/project.json` in the current directory or nearest parent. - If not found: run `vercel link` interactively, then re-run `/deploy`. 3. **Monorepo detection** — Look for `turbo.json` or `pnpm-workspace.yaml` at the repo root. - If detected: confirm which package is targeted. If ambiguous, ask the user before proceeding. 4. **Uncommitted changes** — Run `git status --porcelain`. - If output is non-empty: warn the user that uncommitted changes will **not** be included in the deploy. Ask whether to continue or commit first. - If not a git repo, skip this check. 5. **Observability preflight** (production deploys only) — <!-- Sourced from observability skill: Drains > Deploy Preflight Observability --> Before promoting to production, verify observability readiness: - **Drains check**: Query configured drains via MCP `list_drains` or REST API. If no drains are configured on a Pro/Enterprise plan, warn: > ⚠️ No drains configured. Production errors won't be forwarded to external monitoring. > Configure drains via Dashboard or REST API before promoting. See `⤳ skill: observability`. - **Errored drains**: If any drain is in error state, warn and suggest remediation before deploying: > ⚠️ Drain "<url>" is errored. Fix or recreate before production deploy to avoid monitoring gaps. - **Error monitoring**: Check that at least one of these is in place: configured drains, an error tracking integration (e.g., Sentry, Datadog via `vercel integration ls`), or `@vercel/analytics` in the project. - These are warnings, not blockers — the user may proceed after acknowledgment. ## Plan State the intended action before executing: - **Preview deploy** (default): `vercel` — creates a preview deployment on a unique URL. - **Production deploy**: `vercel --prod` — deploys to production domains. If "$ARGUMENTS" contains "prod" or "production": > ⚠️ **Production deployment requested.** > This will deploy to your live production URL and affect real users. > **Ask the user for explicit confirmation before proceeding.** Do not deploy to production without a clear "yes." If "$ARGUMENTS" does not indicate production: > Deploying a **preview** build. This creates an isolated URL and does not affect production. ## Commands ### Preview Deployment <!-- Sourced from deployments-cicd skill: Deployment Commands > Preview Deployment --> ```bash # Deploy from project root (creates preview URL) vercel # Equivalent explicit form vercel deploy ``` Preview deployments are created automatically for every push to a non-production branch when using Git integration. They provide a unique URL for testing. ### Production Deployment (requires confirmation) <!-- Sourced from deployments-cicd skill: Deployment Commands > Production Deployment --> ```bash # Deploy directly to production vercel --prod vercel deploy --prod # Force a new deployment (skip cache) vercel --prod --force ``` Capture the full command output. Extract the **deployment URL** from the output (the line containing the `.vercel.app` URL or custom domain URL). Record the current git commit SHA for the summary: ```bash git rev-parse --short HEAD ``` ## Verification After deployment completes, verify the result: ### 1. Inspect the Deployment <!-- Sourced from deployments-cicd skill: Deployment Commands > Inspect Deployments --> ```bash # View deployment details (build info, functions, metadata) vercel inspect <deployment-url> # List recent deployments vercel ls # View logs for a deployment vercel logs <deployment-url> vercel logs <deployment-url> --follow ``` Extract: deployment state (READY / ERROR / QUEUED / BUILDING), build duration, framework, Node.js version, function count. ### 2. On Failure — Fetch Build Logs If the deployment state is **ERROR** or the deploy command exited non-zero: ```bash vercel logs <deployment-url> ``` Present the last 50 lines of build logs to help diagnose the failure. Highlight any lines containing `error`, `Error`, `ERR!`, or `FATAL`. ### 3. On Success — Quick Smoke Check If the deployment state is **READY**, note the URL is live and accessible. ### 4. Post-Deploy Error Scan (production deploys) <!-- Sourced from observability skill: Drains > Post-Deploy Error Scan --> For production deployments, wait 60 seconds after READY state, then scan for early runtime errors: ```bash vercel logs <deployment-url> --level error --since 1h ``` Or via MCP if available: use `get_runtime_logs` with level filter `error`. **Interpret results:** | Finding | Action | |---------|--------| | No errors | ✓ Clean deploy — no runtime errors in first hour | | Errors detected | List error count and first 5 unique error messages. Suggest: check drain payloads for correlated traces, review function logs in Dashboard | | 500 status codes in logs | Correlate timestamps with drain data (if configured) or `vercel logs <url> --json` for structured output. Flag for immediate investigation | | Timeout errors | Check function duration limits in `vercel.json` or project settings. Consider increasing `maxDuration` | **Fallback (no drains):** If no drains are configured, the error scan relies on CLI and Dashboard: ```bash # Stream live errors vercel logs <deployment-url> --level error --follow # JSON output for parsing vercel logs <deployment-url> --level error --since 1h --json ``` > For richer post-deploy monitoring, configure drains to forward logs/traces to an external platform. See `⤳ skill: observability`. ## Summary <!-- Sourced from deployments-cicd skill: Deploy Summary Format --> Present a structured deploy result block: ``` ## Deploy Result - **URL**: <deployment-url> - **Target**: production | preview - **Status**: READY | ERROR | BUILDING | QUEUED - **Commit**: <short-sha> - **Framework**: <detected-framework> - **Build Duration**: <duration> ``` If the deployment failed, append: ``` - **Error**: <summary of failure from logs> ``` For production deploys, also include: ``` ### Post-Deploy Observability - **Error scan**: <N errors found / clean> (scanned via vercel logs --level error --since 1h) - **Drains**: <N configured / none> - **Monitoring**: <active / gaps identified> ``` ## Next Steps <!-- Sourced from deployments-cicd skill: Deploy Next Steps --> Based on the deployment outcome: - **Success (preview)** → "Visit the preview URL to verify. When ready, run `/deploy prod` to promote to production." - **Success (production)** → "Your production site is live. Run `/status` to see the full project overview." - **Build error** → "Check the build logs above. Common fixes: verify `build` script in package.json, check for missing env vars with `/env list`, ensure dependencies are installed." - **Missing env vars** → "Run `/env pull` to sync environment variables locally, or `/env list` to review what's configured on Vercel." - **Monorepo issues** → "Ensure the correct project root is configured in Vercel project settings. Check `vercel.json` for `rootDirectory`." - **Post-deploy errors detected** → "Review errors above. Check `vercel logs <url> --level error` for details. If drains are configured, correlate with external monitoring." - **No monitoring configured** → "Set up drains or install an error tracking integration before the next production deploy. Run `/status` for a full observability diagnostic."
© Vercel Labs · Apache-2.0 · openai/plugins