# Env Vars > Vercel environment variable expert guidance. Use when working with .env files, vercel env commands, OIDC tokens, or managing environment-specific configuration. Fuente: https://skillsagentes.com/skills/vercel/vercel-plugin/env-vars Markdown: https://skillsagentes.com/skills/vercel/vercel-plugin/env-vars.md Repositorio: https://github.com/vercel/vercel-plugin Autor: vercel Licencia: NOASSERTION Actualizado: hace 5 meses Coste de contexto: 40 tok instalada, 2.4k tok al activarse, 2.4k tok con todos los archivos del bundle Bundle: 1 archivo, 9 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add vercel/vercel-plugin --skill env-vars --agent claude-code # Cursor npx -y skills add vercel/vercel-plugin --skill env-vars --agent cursor # Codex npx -y skills add vercel/vercel-plugin --skill env-vars --agent codex # Gemini CLI npx -y skills add vercel/vercel-plugin --skill env-vars --agent gemini # Windsurf npx -y skills add vercel/vercel-plugin --skill env-vars --agent windsurf # Cline npx -y skills add vercel/vercel-plugin --skill env-vars --agent cline ``` ## Antes de instalar - Necesita en el PATH: node, npm, npx, sed ## Archivos - SKILL.md — 9 KB ## SKILL.md Reproducido tal cual desde vercel/vercel-plugin bajo NOASSERTION. Esta sección es el documento original y está en inglés. # Vercel Environment Variables You are an expert in Vercel environment variable management — `.env` file conventions, the `vercel env` CLI, OIDC token lifecycle, and environment-specific configuration. ## .env File Hierarchy Vercel and Next.js load environment variables in a specific order. Later files override earlier ones: | File | Purpose | Git-tracked? | |------|---------|-------------| | `.env` | Default values for all environments | Yes | | `.env.local` | Local overrides and secrets | **No** (gitignored) | | `.env.development` | Development-specific defaults | Yes | | `.env.development.local` | Local dev overrides | **No** | | `.env.production` | Production-specific defaults | Yes | | `.env.production.local` | Local prod overrides | **No** | | `.env.test` | Test-specific defaults | Yes | | `.env.test.local` | Local test overrides | **No** | ### Load Order (Next.js) 1. `.env` (lowest priority) 2. `.env.[environment]` (development, production, or test) 3. `.env.local` (skipped in test environment) 4. `.env.[environment].local` (highest priority, skipped in test) ### Critical Rules - **Never commit secrets** to `.env`, `.env.development`, or `.env.production` — use `.local` variants or Vercel environment variables - `.env.local` is always gitignored by Next.js — this is where `vercel env pull` writes secrets - Variables prefixed with `NEXT_PUBLIC_` are exposed to the browser bundle — never put secrets in `NEXT_PUBLIC_` vars - All other variables are server-only (API routes, Server Components, middleware) ## vercel env CLI ### Pull Environment Variables ```bash # Pull all env vars for the current environment into .env.local vercel env pull .env.local # Pull for a specific environment vercel env pull .env.local --environment=production vercel env pull .env.local --environment=preview vercel env pull .env.local --environment=development # Overwrite existing file without prompting vercel env pull .env.local --yes # Pull to a custom file vercel env pull .env.production.local --environment=production ``` ### Add Environment Variables ```bash # Interactive — prompts for value and environments vercel env add MY_SECRET # Non-interactive echo "secret-value" | vercel env add MY_SECRET production # Add to multiple environments echo "secret-value" | vercel env add MY_SECRET production preview development # Add a sensitive variable (encrypted, not shown in logs) vercel env add MY_SECRET --sensitive ``` ### List Environment Variables ```bash # List all environment variables vercel env ls # Filter by environment vercel env ls production ``` ### Remove Environment Variables ```bash # Remove from specific environment vercel env rm MY_SECRET production # Remove from all environments vercel env rm MY_SECRET ``` ## Bootstrap Flow (Fresh Clone / New Machine) Use this sequence when setting up a project from scratch: ```bash # 1) Link first so pulls target the correct Vercel project vercel link --yes --project --scope # 2) Pull env vars into .env.local vercel env pull .env.local --yes # 3) Verify required keys from .env.example exist in .env.local while IFS='=' read -r key _; do [[ -z "$key" || "$key" == \#* ]] && continue grep -q "^${key}=" .env.local || echo "Missing in .env.local: $key" done < .env.example ``` ### Temporary Path: Run With Vercel Envs Without Writing a File If you need Vercel environment variables immediately but do not want to write `.env.local` yet: ```bash vercel env run -- npm run dev ``` This is useful for quick validation during bootstrap, but still pull `.env.local` for a normal local workflow. ### Re-pull After Secret or Provisioning Changes After creating/updating secrets (`vercel env add`, dashboard changes) or provisioning integrations that add env vars (for example Neon/Upstash), re-run: ```bash vercel env pull .env.local --yes ``` ## OIDC Token Lifecycle Vercel uses **OIDC (OpenID Connect)** tokens for secure, keyless authentication between your app and Vercel services (AI Gateway, storage, etc.). ### How It Works 1. **On Vercel deployments**: `VERCEL_OIDC_TOKEN` is automatically injected as a short-lived JWT and auto-refreshed — zero configuration needed 2. **Local development**: `vercel env pull .env.local` provisions a `VERCEL_OIDC_TOKEN` valid for ~12 hours 3. **Token expiry**: When the local OIDC token expires, re-run `vercel env pull .env.local --yes` to get a fresh one. Consider re-pulling at the start of each dev session to avoid mid-session auth failures ### Common OIDC Patterns ```ts // The @vercel/oidc package reads VERCEL_OIDC_TOKEN automatically import { getVercelOidcToken } from '@vercel/oidc' // AI Gateway uses OIDC by default — no manual token handling needed import { gateway } from 'ai' const result = await generateText({ model: gateway('openai/gpt-5.2'), prompt: 'Hello', }) ``` ### Troubleshooting OIDC | Symptom | Cause | Fix | |---------|-------|-----| | `VERCEL_OIDC_TOKEN` missing locally | Haven't pulled env vars | `vercel env pull .env.local` | | Auth errors after ~12h locally | Token expired | `vercel env pull .env.local --yes` | | Works on Vercel, fails locally | Token not in `.env.local` | `vercel env pull .env.local` | | `AI_GATEWAY_API_KEY` vs OIDC | Both set, key takes priority | Remove `AI_GATEWAY_API_KEY` to use OIDC | ## Environment-Specific Configuration ### Vercel Dashboard vs .env Files | Use Case | Where to Set | |----------|-------------| | Secrets (API keys, tokens) | Vercel Dashboard (`https://vercel.com/{team}/{project}/settings/environment-variables`) or `vercel env add` | | Public config (site URL, feature flags) | `.env` or `.env.[environment]` files | | Local-only overrides | `.env.local` | | CI/CD secrets | Vercel Dashboard (`https://vercel.com/{team}/{project}/settings/environment-variables`) with environment scoping | ### Environment Scoping on Vercel Variables set in the Vercel Dashboard at `https://vercel.com/{team}/{project}/settings/environment-variables` can be scoped to: - **Production** — only `vercel.app` production deployments - **Preview** — branch/PR deployments - **Development** — `vercel dev` and `vercel env pull` A variable can be assigned to one, two, or all three environments. ### Git Branch Overrides Preview environment variables can be scoped to specific Git branches: ```bash # Add a variable only for the "staging" branch echo "staging-value" | vercel env add DATABASE_URL preview --git-branch=staging ``` ## Gotchas ### `vercel env pull` Overwrites Custom Variables `vercel env pull .env.local` **replaces the entire file** — any manually added variables (custom secrets, local overrides, debug flags) are lost. Always back up or re-add custom vars after pulling: ```bash # Save custom vars before pulling grep -v '^#' .env.local | grep -v '^VERCEL_\|^POSTGRES_\|^NEXT_PUBLIC_' > .env.custom.bak vercel env pull .env.local --yes cat .env.custom.bak >> .env.local # Re-append custom vars ``` Or maintain custom vars in a separate `.env.development.local` file (loaded after `.env.local` by Next.js). ### Scripts Don't Auto-Load `.env.local` Only Next.js auto-loads `.env.local`. Standalone scripts (`drizzle-kit`, `tsx`, custom Node scripts) need explicit loading: ```bash # Use dotenv-cli npm install -D dotenv-cli npx dotenv -e .env.local -- npx drizzle-kit push npx dotenv -e .env.local -- npx tsx scripts/seed.ts # Or source manually source <(grep -v '^#' .env.local | sed 's/^/export /') && node scripts/migrate.js ``` ## Best Practices 1. **Use `vercel env pull` as part of your setup workflow** — document it in your README 2. **Never hardcode secrets** — always use environment variables 3. **Scope narrowly** — don't give preview deployments production database access 4. **Rotate OIDC tokens regularly in local dev** — re-pull when you see auth errors 5. **Use `.env.example`** — commit a template with empty values so teammates know which vars are needed 6. **Prefix client-side vars with `NEXT_PUBLIC_`** — and never put secrets in them 7. **Keep custom vars in `.env.development.local`** — protects them from `vercel env pull` overwrites ## Official Documentation - [Environment Variables](https://vercel.com/docs/environment-variables) - [Vercel CLI: env](https://vercel.com/docs/cli/env) - [Next.js Environment Variables](https://nextjs.org/docs/app/building-your-application/configuring/environment-variables) ## Dónde encaja - Categoría: [Herramientas para desarrolladores](https://skillsagentes.com/categorias/herramientas-desarrollo.md) — Skills que cambian cómo tu agente escribe, revisa y despliega código. - Creador: [vercel](https://skillsagentes.com/creators/vercel.md) — 79 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Knowledge Update](https://skillsagentes.com/skills/vercel/vercel-plugin/knowledge-update.md): Corrects outdated LLM knowledge about the Vercel platform and introduces new products. Injected at session start. - [Vercel Connect](https://skillsagentes.com/skills/vercel/vercel-plugin/vercel-connect.md): Vercel Connect expert guidance — securely obtain scoped OAuth tokens for third-party services (Slack, GitHub, MCP servers, OAuth, Snowflake) on behalf of apps or users via Vercel OIDC. Use when wiring up third-party API access, connecting to MCP servers, sending Slack messages, accessing GitHub APIs, receiving webhook events from Slack/Linear/GitHub and forwarding them to your agents and apps, or building eve agent connections. - [Vercel Functions](https://skillsagentes.com/skills/vercel/vercel-plugin/vercel-functions.md): Vercel Functions expert guidance — Serverless Functions, Edge Functions, Fluid Compute, streaming, Cron Jobs, and runtime configuration. Use when configuring, debugging, or optimizing server-side code running on Vercel. - [Cdn Caching](https://skillsagentes.com/skills/vercel/vercel-plugin/cdn-caching.md): Debug Vercel CDN caching — cache hit rate, stale content, revalidation behavior, ISR + PPR, per-request cache reasons (cacheReason) and PPR state (ppr_state), and costs. - [Eve](https://skillsagentes.com/skills/vercel/vercel-plugin/eve.md): eve framework guidance for durable AI agents and agent-powered applications. Use when creating, editing, or debugging an eve project, when the user explicitly asks for eve, or when the build-agents skill has selected eve as the default framework. Covers eve's filesystem-first runtime, durable sessions, tools, skills, connections, channels, sandboxes, subagents, schedules, evals, frontend clients, and Agent Runs observability. Do not use for incidental agent mentions, generic agent-building prompts, or established non-eve stacks unless the user asks for comparison or migration. ## Skills relacionadas - [Benchmark Sandbox](https://skillsagentes.com/skills/vercel/vercel-plugin/benchmark-sandbox.md): Run vercel-plugin eval scenarios in Vercel Sandboxes instead of local WezTerm panels. Provisions ephemeral microVMs with Claude Code + plugin pre-installed, runs benchmark prompts, extracts hook artifacts, and produces coverage reports. - [Release](https://skillsagentes.com/skills/vercel/vercel-plugin/release.md): Release vercel-plugin — run gates, bump version, generate artifacts, commit, and push. Use when asked to "release", "ship", "bump and push", or "cut a release". - [Access Protected Vercel Deployment](https://skillsagentes.com/skills/vercel/vercel-plugin/access-protected-vercel-deployment.md): Access and test Vercel deployments protected by Vercel Authentication, SSO, or Deployment Protection. Use when curl, agent-browser, Playwright, or another automated request reaches a Vercel login or protection page; when a protected preview or production URL returns 401 or 403; when TRUSTED_SOURCES_ENVIRONMENT_MISMATCH appears; or when choosing between `vercel curl` and the `x-vercel-trusted-oidc-idp-token` header. - [Ai Gateway](https://skillsagentes.com/skills/vercel/vercel-plugin/ai-gateway.md): Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API. - [Ai Sdk](https://skillsagentes.com/skills/vercel/vercel-plugin/ai-sdk.md): Vercel AI SDK expert guidance. Use when building AI-powered features — chat interfaces, text generation, structured output, tool calling, agents, MCP integration, streaming, embeddings, reranking, image generation, or working with any LLM provider. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)