[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-env-vars":3,"mdc-69wh7g-key":36,"related-repo-openai-env-vars":2884,"related-org-openai-env-vars":3006},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"env-vars","manage Vercel environment variables","Vercel environment variable expert guidance. Use when working with .env files, vercel env commands, OIDC tokens, or managing environment-specific configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Security","security","tag",{"name":17,"slug":18,"type":15},"Vercel","vercel",{"name":20,"slug":21,"type":15},"Deployment","deployment",{"name":23,"slug":24,"type":15},"Environment Variables","environment-variables",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-04-06T18:40:35.563336",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fvercel\u002Fskills\u002Fenv-vars","---\nname: env-vars\ndescription: Vercel environment variable expert guidance. Use when working with .env files, vercel env commands, OIDC tokens, or managing environment-specific configuration.\nmetadata:\n  priority: 7\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fenvironment-variables\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns:\n    - '.env'\n    - '.env.*'\n    - '.env.local'\n    - '.env.production'\n    - '.env.development'\n    - '.env.test'\n    - '.env.production.local'\n    - '.env.development.local'\n    - '.env.test.local'\n    - '.env.example'\n  bashPatterns:\n    - '\\bvercel\\s+env\\s+pull\\b'\n    - '\\bvercel\\s+env\\s+add\\b'\n    - '\\bvercel\\s+env\\s+rm\\b'\n    - '\\bvercel\\s+env\\s+ls\\b'\n---\n\n# Vercel Environment Variables\n\nYou are an expert in Vercel environment variable management — `.env` file conventions, the `vercel env` CLI, OIDC token lifecycle, and environment-specific configuration.\n\n## .env File Hierarchy\n\nVercel and Next.js load environment variables in a specific order. Later files override earlier ones:\n\n| File | Purpose | Git-tracked? |\n|------|---------|-------------|\n| `.env` | Default values for all environments | Yes |\n| `.env.local` | Local overrides and secrets | **No** (gitignored) |\n| `.env.development` | Development-specific defaults | Yes |\n| `.env.development.local` | Local dev overrides | **No** |\n| `.env.production` | Production-specific defaults | Yes |\n| `.env.production.local` | Local prod overrides | **No** |\n| `.env.test` | Test-specific defaults | Yes |\n| `.env.test.local` | Local test overrides | **No** |\n\n### Load Order (Next.js)\n\n1. `.env` (lowest priority)\n2. `.env.[environment]` (development, production, or test)\n3. `.env.local` (skipped in test environment)\n4. `.env.[environment].local` (highest priority, skipped in test)\n\n### Critical Rules\n\n- **Never commit secrets** to `.env`, `.env.development`, or `.env.production` — use `.local` variants or Vercel environment variables\n- `.env.local` is always gitignored by Next.js — this is where `vercel env pull` writes secrets\n- Variables prefixed with `NEXT_PUBLIC_` are exposed to the browser bundle — never put secrets in `NEXT_PUBLIC_` vars\n- All other variables are server-only (API routes, Server Components, middleware)\n\n## vercel env CLI\n\n### Pull Environment Variables\n\n```bash\n# Pull all env vars for the current environment into .env.local\nvercel env pull .env.local\n\n# Pull for a specific environment\nvercel env pull .env.local --environment=production\nvercel env pull .env.local --environment=preview\nvercel env pull .env.local --environment=development\n\n# Overwrite existing file without prompting\nvercel env pull .env.local --yes\n\n# Pull to a custom file\nvercel env pull .env.production.local --environment=production\n```\n\n### Add Environment Variables\n\n```bash\n# Interactive — prompts for value and environments\nvercel env add MY_SECRET\n\n# Non-interactive\necho \"secret-value\" | vercel env add MY_SECRET production\n\n# Add to multiple environments\necho \"secret-value\" | vercel env add MY_SECRET production preview development\n\n# Add a sensitive variable (encrypted, not shown in logs)\nvercel env add MY_SECRET --sensitive\n```\n\n### List Environment Variables\n\n```bash\n# List all environment variables\nvercel env ls\n\n# Filter by environment\nvercel env ls production\n```\n\n### Remove Environment Variables\n\n```bash\n# Remove from specific environment\nvercel env rm MY_SECRET production\n\n# Remove from all environments\nvercel env rm MY_SECRET\n```\n\n## Bootstrap Flow (Fresh Clone \u002F New Machine)\n\nUse this sequence when setting up a project from scratch:\n\n```bash\n# 1) Link first so pulls target the correct Vercel project\nvercel link --yes --project \u003Cname-or-id> --scope \u003Cteam>\n\n# 2) Pull env vars into .env.local\nvercel env pull .env.local --yes\n\n# 3) Verify required keys from .env.example exist in .env.local\nwhile IFS='=' read -r key _; do\n  [[ -z \"$key\" || \"$key\" == \\#* ]] && continue\n  grep -q \"^${key}=\" .env.local || echo \"Missing in .env.local: $key\"\ndone \u003C .env.example\n```\n\n### Temporary Path: Run With Vercel Envs Without Writing a File\n\nIf you need Vercel environment variables immediately but do not want to write `.env.local` yet:\n\n```bash\nvercel env run -- npm run dev\n```\n\nThis is useful for quick validation during bootstrap, but still pull `.env.local` for a normal local workflow.\n\n### Re-pull After Secret or Provisioning Changes\n\nAfter creating\u002Fupdating secrets (`vercel env add`, dashboard changes) or provisioning integrations that add env vars (for example Neon\u002FUpstash), re-run:\n\n```bash\nvercel env pull .env.local --yes\n```\n\n## OIDC Token Lifecycle\n\nVercel uses **OIDC (OpenID Connect)** tokens for secure, keyless authentication between your app and Vercel services (AI Gateway, storage, etc.).\n\n### How It Works\n\n1. **On Vercel deployments**: `VERCEL_OIDC_TOKEN` is automatically injected as a short-lived JWT and auto-refreshed — zero configuration needed\n2. **Local development**: `vercel env pull .env.local` provisions a `VERCEL_OIDC_TOKEN` valid for ~12 hours\n3. **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\n\n### Common OIDC Patterns\n\n```ts\n\u002F\u002F The @vercel\u002Foidc package reads VERCEL_OIDC_TOKEN automatically\nimport { getVercelOidcToken } from '@vercel\u002Foidc'\n\n\u002F\u002F AI Gateway uses OIDC by default — no manual token handling needed\nimport { gateway } from 'ai'\nconst result = await generateText({\n  model: gateway('openai\u002Fgpt-5.2'),\n  prompt: 'Hello',\n})\n```\n\n### Troubleshooting OIDC\n\n| Symptom | Cause | Fix |\n|---------|-------|-----|\n| `VERCEL_OIDC_TOKEN` missing locally | Haven't pulled env vars | `vercel env pull .env.local` |\n| Auth errors after ~12h locally | Token expired | `vercel env pull .env.local --yes` |\n| Works on Vercel, fails locally | Token not in `.env.local` | `vercel env pull .env.local` |\n| `AI_GATEWAY_API_KEY` vs OIDC | Both set, key takes priority | Remove `AI_GATEWAY_API_KEY` to use OIDC |\n\n## Environment-Specific Configuration\n\n### Vercel Dashboard vs .env Files\n\n| Use Case | Where to Set |\n|----------|-------------|\n| Secrets (API keys, tokens) | Vercel Dashboard (`https:\u002F\u002Fvercel.com\u002F{team}\u002F{project}\u002Fsettings\u002Fenvironment-variables`) or `vercel env add` |\n| Public config (site URL, feature flags) | `.env` or `.env.[environment]` files |\n| Local-only overrides | `.env.local` |\n| CI\u002FCD secrets | Vercel Dashboard (`https:\u002F\u002Fvercel.com\u002F{team}\u002F{project}\u002Fsettings\u002Fenvironment-variables`) with environment scoping |\n\n### Environment Scoping on Vercel\n\nVariables set in the Vercel Dashboard at `https:\u002F\u002Fvercel.com\u002F{team}\u002F{project}\u002Fsettings\u002Fenvironment-variables` can be scoped to:\n\n- **Production** — only `vercel.app` production deployments\n- **Preview** — branch\u002FPR deployments\n- **Development** — `vercel dev` and `vercel env pull`\n\nA variable can be assigned to one, two, or all three environments.\n\n### Git Branch Overrides\n\nPreview environment variables can be scoped to specific Git branches:\n\n```bash\n# Add a variable only for the \"staging\" branch\necho \"staging-value\" | vercel env add DATABASE_URL preview --git-branch=staging\n```\n\n## Gotchas\n\n### `vercel env pull` Overwrites Custom Variables\n\n`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:\n\n```bash\n# Save custom vars before pulling\ngrep -v '^#' .env.local | grep -v '^VERCEL_\\|^POSTGRES_\\|^NEXT_PUBLIC_' > .env.custom.bak\nvercel env pull .env.local --yes\ncat .env.custom.bak >> .env.local  # Re-append custom vars\n```\n\nOr maintain custom vars in a separate `.env.development.local` file (loaded after `.env.local` by Next.js).\n\n### Scripts Don't Auto-Load `.env.local`\n\nOnly Next.js auto-loads `.env.local`. Standalone scripts (`drizzle-kit`, `tsx`, custom Node scripts) need explicit loading:\n\n```bash\n# Use dotenv-cli\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n\n# Or source manually\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && node scripts\u002Fmigrate.js\n```\n\n## Best Practices\n\n1. **Use `vercel env pull` as part of your setup workflow** — document it in your README\n2. **Never hardcode secrets** — always use environment variables\n3. **Scope narrowly** — don't give preview deployments production database access\n4. **Rotate OIDC tokens regularly in local dev** — re-pull when you see auth errors\n5. **Use `.env.example`** — commit a template with empty values so teammates know which vars are needed\n6. **Prefix client-side vars with `NEXT_PUBLIC_`** — and never put secrets in them\n7. **Keep custom vars in `.env.development.local`** — protects them from `vercel env pull` overwrites\n\n## Official Documentation\n\n- [Environment Variables](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fenvironment-variables)\n- [Vercel CLI: env](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\u002Fenv)\n- [Next.js Environment Variables](https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fbuilding-your-application\u002Fconfiguring\u002Fenvironment-variables)\n",{"data":37,"body":59},{"name":4,"description":6,"metadata":38},{"priority":39,"docs":40,"sitemap":42,"pathPatterns":43,"bashPatterns":54},7,[41],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fenvironment-variables","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",[44,45,46,47,48,49,50,51,52,53],".env",".env.*",".env.local",".env.production",".env.development",".env.test",".env.production.local",".env.development.local",".env.test.local",".env.example",[55,56,57,58],"\\bvercel\\s+env\\s+pull\\b","\\bvercel\\s+env\\s+add\\b","\\bvercel\\s+env\\s+rm\\b","\\bvercel\\s+env\\s+ls\\b",{"type":60,"children":61},"root",[62,71,93,100,105,315,322,369,375,461,467,473,699,705,917,923,989,995,1068,1074,1079,1442,1448,1460,1502,1514,1520,1533,1563,1569,1581,1587,1650,1656,1892,1898,2029,2035,2041,2149,2155,2167,2221,2226,2232,2237,2302,2308,2319,2336,2467,2486,2497,2524,2732,2738,2839,2845,2878],{"type":63,"tag":64,"props":65,"children":67},"element","h1",{"id":66},"vercel-environment-variables",[68],{"type":69,"value":70},"text","Vercel Environment Variables",{"type":63,"tag":72,"props":73,"children":74},"p",{},[75,77,83,85,91],{"type":69,"value":76},"You are an expert in Vercel environment variable management — ",{"type":63,"tag":78,"props":79,"children":81},"code",{"className":80},[],[82],{"type":69,"value":44},{"type":69,"value":84}," file conventions, the ",{"type":63,"tag":78,"props":86,"children":88},{"className":87},[],[89],{"type":69,"value":90},"vercel env",{"type":69,"value":92}," CLI, OIDC token lifecycle, and environment-specific configuration.",{"type":63,"tag":94,"props":95,"children":97},"h2",{"id":96},"env-file-hierarchy",[98],{"type":69,"value":99},".env File Hierarchy",{"type":63,"tag":72,"props":101,"children":102},{},[103],{"type":69,"value":104},"Vercel and Next.js load environment variables in a specific order. Later files override earlier ones:",{"type":63,"tag":106,"props":107,"children":108},"table",{},[109,133],{"type":63,"tag":110,"props":111,"children":112},"thead",{},[113],{"type":63,"tag":114,"props":115,"children":116},"tr",{},[117,123,128],{"type":63,"tag":118,"props":119,"children":120},"th",{},[121],{"type":69,"value":122},"File",{"type":63,"tag":118,"props":124,"children":125},{},[126],{"type":69,"value":127},"Purpose",{"type":63,"tag":118,"props":129,"children":130},{},[131],{"type":69,"value":132},"Git-tracked?",{"type":63,"tag":134,"props":135,"children":136},"tbody",{},[137,159,186,206,229,249,272,292],{"type":63,"tag":114,"props":138,"children":139},{},[140,149,154],{"type":63,"tag":141,"props":142,"children":143},"td",{},[144],{"type":63,"tag":78,"props":145,"children":147},{"className":146},[],[148],{"type":69,"value":44},{"type":63,"tag":141,"props":150,"children":151},{},[152],{"type":69,"value":153},"Default values for all environments",{"type":63,"tag":141,"props":155,"children":156},{},[157],{"type":69,"value":158},"Yes",{"type":63,"tag":114,"props":160,"children":161},{},[162,170,175],{"type":63,"tag":141,"props":163,"children":164},{},[165],{"type":63,"tag":78,"props":166,"children":168},{"className":167},[],[169],{"type":69,"value":46},{"type":63,"tag":141,"props":171,"children":172},{},[173],{"type":69,"value":174},"Local overrides and secrets",{"type":63,"tag":141,"props":176,"children":177},{},[178,184],{"type":63,"tag":179,"props":180,"children":181},"strong",{},[182],{"type":69,"value":183},"No",{"type":69,"value":185}," (gitignored)",{"type":63,"tag":114,"props":187,"children":188},{},[189,197,202],{"type":63,"tag":141,"props":190,"children":191},{},[192],{"type":63,"tag":78,"props":193,"children":195},{"className":194},[],[196],{"type":69,"value":48},{"type":63,"tag":141,"props":198,"children":199},{},[200],{"type":69,"value":201},"Development-specific defaults",{"type":63,"tag":141,"props":203,"children":204},{},[205],{"type":69,"value":158},{"type":63,"tag":114,"props":207,"children":208},{},[209,217,222],{"type":63,"tag":141,"props":210,"children":211},{},[212],{"type":63,"tag":78,"props":213,"children":215},{"className":214},[],[216],{"type":69,"value":51},{"type":63,"tag":141,"props":218,"children":219},{},[220],{"type":69,"value":221},"Local dev overrides",{"type":63,"tag":141,"props":223,"children":224},{},[225],{"type":63,"tag":179,"props":226,"children":227},{},[228],{"type":69,"value":183},{"type":63,"tag":114,"props":230,"children":231},{},[232,240,245],{"type":63,"tag":141,"props":233,"children":234},{},[235],{"type":63,"tag":78,"props":236,"children":238},{"className":237},[],[239],{"type":69,"value":47},{"type":63,"tag":141,"props":241,"children":242},{},[243],{"type":69,"value":244},"Production-specific defaults",{"type":63,"tag":141,"props":246,"children":247},{},[248],{"type":69,"value":158},{"type":63,"tag":114,"props":250,"children":251},{},[252,260,265],{"type":63,"tag":141,"props":253,"children":254},{},[255],{"type":63,"tag":78,"props":256,"children":258},{"className":257},[],[259],{"type":69,"value":50},{"type":63,"tag":141,"props":261,"children":262},{},[263],{"type":69,"value":264},"Local prod overrides",{"type":63,"tag":141,"props":266,"children":267},{},[268],{"type":63,"tag":179,"props":269,"children":270},{},[271],{"type":69,"value":183},{"type":63,"tag":114,"props":273,"children":274},{},[275,283,288],{"type":63,"tag":141,"props":276,"children":277},{},[278],{"type":63,"tag":78,"props":279,"children":281},{"className":280},[],[282],{"type":69,"value":49},{"type":63,"tag":141,"props":284,"children":285},{},[286],{"type":69,"value":287},"Test-specific defaults",{"type":63,"tag":141,"props":289,"children":290},{},[291],{"type":69,"value":158},{"type":63,"tag":114,"props":293,"children":294},{},[295,303,308],{"type":63,"tag":141,"props":296,"children":297},{},[298],{"type":63,"tag":78,"props":299,"children":301},{"className":300},[],[302],{"type":69,"value":52},{"type":63,"tag":141,"props":304,"children":305},{},[306],{"type":69,"value":307},"Local test overrides",{"type":63,"tag":141,"props":309,"children":310},{},[311],{"type":63,"tag":179,"props":312,"children":313},{},[314],{"type":69,"value":183},{"type":63,"tag":316,"props":317,"children":319},"h3",{"id":318},"load-order-nextjs",[320],{"type":69,"value":321},"Load Order (Next.js)",{"type":63,"tag":323,"props":324,"children":325},"ol",{},[326,337,348,358],{"type":63,"tag":327,"props":328,"children":329},"li",{},[330,335],{"type":63,"tag":78,"props":331,"children":333},{"className":332},[],[334],{"type":69,"value":44},{"type":69,"value":336}," (lowest priority)",{"type":63,"tag":327,"props":338,"children":339},{},[340,346],{"type":63,"tag":78,"props":341,"children":343},{"className":342},[],[344],{"type":69,"value":345},".env.[environment]",{"type":69,"value":347}," (development, production, or test)",{"type":63,"tag":327,"props":349,"children":350},{},[351,356],{"type":63,"tag":78,"props":352,"children":354},{"className":353},[],[355],{"type":69,"value":46},{"type":69,"value":357}," (skipped in test environment)",{"type":63,"tag":327,"props":359,"children":360},{},[361,367],{"type":63,"tag":78,"props":362,"children":364},{"className":363},[],[365],{"type":69,"value":366},".env.[environment].local",{"type":69,"value":368}," (highest priority, skipped in test)",{"type":63,"tag":316,"props":370,"children":372},{"id":371},"critical-rules",[373],{"type":69,"value":374},"Critical Rules",{"type":63,"tag":376,"props":377,"children":378},"ul",{},[379,418,436,456],{"type":63,"tag":327,"props":380,"children":381},{},[382,387,389,394,396,401,403,408,410,416],{"type":63,"tag":179,"props":383,"children":384},{},[385],{"type":69,"value":386},"Never commit secrets",{"type":69,"value":388}," to ",{"type":63,"tag":78,"props":390,"children":392},{"className":391},[],[393],{"type":69,"value":44},{"type":69,"value":395},", ",{"type":63,"tag":78,"props":397,"children":399},{"className":398},[],[400],{"type":69,"value":48},{"type":69,"value":402},", or ",{"type":63,"tag":78,"props":404,"children":406},{"className":405},[],[407],{"type":69,"value":47},{"type":69,"value":409}," — use ",{"type":63,"tag":78,"props":411,"children":413},{"className":412},[],[414],{"type":69,"value":415},".local",{"type":69,"value":417}," variants or Vercel environment variables",{"type":63,"tag":327,"props":419,"children":420},{},[421,426,428,434],{"type":63,"tag":78,"props":422,"children":424},{"className":423},[],[425],{"type":69,"value":46},{"type":69,"value":427}," is always gitignored by Next.js — this is where ",{"type":63,"tag":78,"props":429,"children":431},{"className":430},[],[432],{"type":69,"value":433},"vercel env pull",{"type":69,"value":435}," writes secrets",{"type":63,"tag":327,"props":437,"children":438},{},[439,441,447,449,454],{"type":69,"value":440},"Variables prefixed with ",{"type":63,"tag":78,"props":442,"children":444},{"className":443},[],[445],{"type":69,"value":446},"NEXT_PUBLIC_",{"type":69,"value":448}," are exposed to the browser bundle — never put secrets in ",{"type":63,"tag":78,"props":450,"children":452},{"className":451},[],[453],{"type":69,"value":446},{"type":69,"value":455}," vars",{"type":63,"tag":327,"props":457,"children":458},{},[459],{"type":69,"value":460},"All other variables are server-only (API routes, Server Components, middleware)",{"type":63,"tag":94,"props":462,"children":464},{"id":463},"vercel-env-cli",[465],{"type":69,"value":466},"vercel env CLI",{"type":63,"tag":316,"props":468,"children":470},{"id":469},"pull-environment-variables",[471],{"type":69,"value":472},"Pull Environment Variables",{"type":63,"tag":474,"props":475,"children":480},"pre",{"className":476,"code":477,"language":478,"meta":479,"style":479},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Pull all env vars for the current environment into .env.local\nvercel env pull .env.local\n\n# Pull for a specific environment\nvercel env pull .env.local --environment=production\nvercel env pull .env.local --environment=preview\nvercel env pull .env.local --environment=development\n\n# Overwrite existing file without prompting\nvercel env pull .env.local --yes\n\n# Pull to a custom file\nvercel env pull .env.production.local --environment=production\n","bash","",[481],{"type":63,"tag":78,"props":482,"children":483},{"__ignoreMap":479},[484,496,521,531,540,566,591,615,623,632,657,665,674],{"type":63,"tag":485,"props":486,"children":489},"span",{"class":487,"line":488},"line",1,[490],{"type":63,"tag":485,"props":491,"children":493},{"style":492},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[494],{"type":69,"value":495},"# Pull all env vars for the current environment into .env.local\n",{"type":63,"tag":485,"props":497,"children":499},{"class":487,"line":498},2,[500,505,511,516],{"type":63,"tag":485,"props":501,"children":503},{"style":502},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[504],{"type":69,"value":18},{"type":63,"tag":485,"props":506,"children":508},{"style":507},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[509],{"type":69,"value":510}," env",{"type":63,"tag":485,"props":512,"children":513},{"style":507},[514],{"type":69,"value":515}," pull",{"type":63,"tag":485,"props":517,"children":518},{"style":507},[519],{"type":69,"value":520}," .env.local\n",{"type":63,"tag":485,"props":522,"children":524},{"class":487,"line":523},3,[525],{"type":63,"tag":485,"props":526,"children":528},{"emptyLinePlaceholder":527},true,[529],{"type":69,"value":530},"\n",{"type":63,"tag":485,"props":532,"children":534},{"class":487,"line":533},4,[535],{"type":63,"tag":485,"props":536,"children":537},{"style":492},[538],{"type":69,"value":539},"# Pull for a specific environment\n",{"type":63,"tag":485,"props":541,"children":543},{"class":487,"line":542},5,[544,548,552,556,561],{"type":63,"tag":485,"props":545,"children":546},{"style":502},[547],{"type":69,"value":18},{"type":63,"tag":485,"props":549,"children":550},{"style":507},[551],{"type":69,"value":510},{"type":63,"tag":485,"props":553,"children":554},{"style":507},[555],{"type":69,"value":515},{"type":63,"tag":485,"props":557,"children":558},{"style":507},[559],{"type":69,"value":560}," .env.local",{"type":63,"tag":485,"props":562,"children":563},{"style":507},[564],{"type":69,"value":565}," --environment=production\n",{"type":63,"tag":485,"props":567,"children":569},{"class":487,"line":568},6,[570,574,578,582,586],{"type":63,"tag":485,"props":571,"children":572},{"style":502},[573],{"type":69,"value":18},{"type":63,"tag":485,"props":575,"children":576},{"style":507},[577],{"type":69,"value":510},{"type":63,"tag":485,"props":579,"children":580},{"style":507},[581],{"type":69,"value":515},{"type":63,"tag":485,"props":583,"children":584},{"style":507},[585],{"type":69,"value":560},{"type":63,"tag":485,"props":587,"children":588},{"style":507},[589],{"type":69,"value":590}," --environment=preview\n",{"type":63,"tag":485,"props":592,"children":593},{"class":487,"line":39},[594,598,602,606,610],{"type":63,"tag":485,"props":595,"children":596},{"style":502},[597],{"type":69,"value":18},{"type":63,"tag":485,"props":599,"children":600},{"style":507},[601],{"type":69,"value":510},{"type":63,"tag":485,"props":603,"children":604},{"style":507},[605],{"type":69,"value":515},{"type":63,"tag":485,"props":607,"children":608},{"style":507},[609],{"type":69,"value":560},{"type":63,"tag":485,"props":611,"children":612},{"style":507},[613],{"type":69,"value":614}," --environment=development\n",{"type":63,"tag":485,"props":616,"children":618},{"class":487,"line":617},8,[619],{"type":63,"tag":485,"props":620,"children":621},{"emptyLinePlaceholder":527},[622],{"type":69,"value":530},{"type":63,"tag":485,"props":624,"children":626},{"class":487,"line":625},9,[627],{"type":63,"tag":485,"props":628,"children":629},{"style":492},[630],{"type":69,"value":631},"# Overwrite existing file without prompting\n",{"type":63,"tag":485,"props":633,"children":635},{"class":487,"line":634},10,[636,640,644,648,652],{"type":63,"tag":485,"props":637,"children":638},{"style":502},[639],{"type":69,"value":18},{"type":63,"tag":485,"props":641,"children":642},{"style":507},[643],{"type":69,"value":510},{"type":63,"tag":485,"props":645,"children":646},{"style":507},[647],{"type":69,"value":515},{"type":63,"tag":485,"props":649,"children":650},{"style":507},[651],{"type":69,"value":560},{"type":63,"tag":485,"props":653,"children":654},{"style":507},[655],{"type":69,"value":656}," --yes\n",{"type":63,"tag":485,"props":658,"children":660},{"class":487,"line":659},11,[661],{"type":63,"tag":485,"props":662,"children":663},{"emptyLinePlaceholder":527},[664],{"type":69,"value":530},{"type":63,"tag":485,"props":666,"children":668},{"class":487,"line":667},12,[669],{"type":63,"tag":485,"props":670,"children":671},{"style":492},[672],{"type":69,"value":673},"# Pull to a custom file\n",{"type":63,"tag":485,"props":675,"children":677},{"class":487,"line":676},13,[678,682,686,690,695],{"type":63,"tag":485,"props":679,"children":680},{"style":502},[681],{"type":69,"value":18},{"type":63,"tag":485,"props":683,"children":684},{"style":507},[685],{"type":69,"value":510},{"type":63,"tag":485,"props":687,"children":688},{"style":507},[689],{"type":69,"value":515},{"type":63,"tag":485,"props":691,"children":692},{"style":507},[693],{"type":69,"value":694}," .env.production.local",{"type":63,"tag":485,"props":696,"children":697},{"style":507},[698],{"type":69,"value":565},{"type":63,"tag":316,"props":700,"children":702},{"id":701},"add-environment-variables",[703],{"type":69,"value":704},"Add Environment Variables",{"type":63,"tag":474,"props":706,"children":708},{"className":476,"code":707,"language":478,"meta":479,"style":479},"# Interactive — prompts for value and environments\nvercel env add MY_SECRET\n\n# Non-interactive\necho \"secret-value\" | vercel env add MY_SECRET production\n\n# Add to multiple environments\necho \"secret-value\" | vercel env add MY_SECRET production preview development\n\n# Add a sensitive variable (encrypted, not shown in logs)\nvercel env add MY_SECRET --sensitive\n",[709],{"type":63,"tag":78,"props":710,"children":711},{"__ignoreMap":479},[712,720,741,748,756,809,816,824,878,885,893],{"type":63,"tag":485,"props":713,"children":714},{"class":487,"line":488},[715],{"type":63,"tag":485,"props":716,"children":717},{"style":492},[718],{"type":69,"value":719},"# Interactive — prompts for value and environments\n",{"type":63,"tag":485,"props":721,"children":722},{"class":487,"line":498},[723,727,731,736],{"type":63,"tag":485,"props":724,"children":725},{"style":502},[726],{"type":69,"value":18},{"type":63,"tag":485,"props":728,"children":729},{"style":507},[730],{"type":69,"value":510},{"type":63,"tag":485,"props":732,"children":733},{"style":507},[734],{"type":69,"value":735}," add",{"type":63,"tag":485,"props":737,"children":738},{"style":507},[739],{"type":69,"value":740}," MY_SECRET\n",{"type":63,"tag":485,"props":742,"children":743},{"class":487,"line":523},[744],{"type":63,"tag":485,"props":745,"children":746},{"emptyLinePlaceholder":527},[747],{"type":69,"value":530},{"type":63,"tag":485,"props":749,"children":750},{"class":487,"line":533},[751],{"type":63,"tag":485,"props":752,"children":753},{"style":492},[754],{"type":69,"value":755},"# Non-interactive\n",{"type":63,"tag":485,"props":757,"children":758},{"class":487,"line":542},[759,765,771,776,781,786,791,795,799,804],{"type":63,"tag":485,"props":760,"children":762},{"style":761},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[763],{"type":69,"value":764},"echo",{"type":63,"tag":485,"props":766,"children":768},{"style":767},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[769],{"type":69,"value":770}," \"",{"type":63,"tag":485,"props":772,"children":773},{"style":507},[774],{"type":69,"value":775},"secret-value",{"type":63,"tag":485,"props":777,"children":778},{"style":767},[779],{"type":69,"value":780},"\"",{"type":63,"tag":485,"props":782,"children":783},{"style":767},[784],{"type":69,"value":785}," |",{"type":63,"tag":485,"props":787,"children":788},{"style":502},[789],{"type":69,"value":790}," vercel",{"type":63,"tag":485,"props":792,"children":793},{"style":507},[794],{"type":69,"value":510},{"type":63,"tag":485,"props":796,"children":797},{"style":507},[798],{"type":69,"value":735},{"type":63,"tag":485,"props":800,"children":801},{"style":507},[802],{"type":69,"value":803}," MY_SECRET",{"type":63,"tag":485,"props":805,"children":806},{"style":507},[807],{"type":69,"value":808}," production\n",{"type":63,"tag":485,"props":810,"children":811},{"class":487,"line":568},[812],{"type":63,"tag":485,"props":813,"children":814},{"emptyLinePlaceholder":527},[815],{"type":69,"value":530},{"type":63,"tag":485,"props":817,"children":818},{"class":487,"line":39},[819],{"type":63,"tag":485,"props":820,"children":821},{"style":492},[822],{"type":69,"value":823},"# Add to multiple environments\n",{"type":63,"tag":485,"props":825,"children":826},{"class":487,"line":617},[827,831,835,839,843,847,851,855,859,863,868,873],{"type":63,"tag":485,"props":828,"children":829},{"style":761},[830],{"type":69,"value":764},{"type":63,"tag":485,"props":832,"children":833},{"style":767},[834],{"type":69,"value":770},{"type":63,"tag":485,"props":836,"children":837},{"style":507},[838],{"type":69,"value":775},{"type":63,"tag":485,"props":840,"children":841},{"style":767},[842],{"type":69,"value":780},{"type":63,"tag":485,"props":844,"children":845},{"style":767},[846],{"type":69,"value":785},{"type":63,"tag":485,"props":848,"children":849},{"style":502},[850],{"type":69,"value":790},{"type":63,"tag":485,"props":852,"children":853},{"style":507},[854],{"type":69,"value":510},{"type":63,"tag":485,"props":856,"children":857},{"style":507},[858],{"type":69,"value":735},{"type":63,"tag":485,"props":860,"children":861},{"style":507},[862],{"type":69,"value":803},{"type":63,"tag":485,"props":864,"children":865},{"style":507},[866],{"type":69,"value":867}," production",{"type":63,"tag":485,"props":869,"children":870},{"style":507},[871],{"type":69,"value":872}," preview",{"type":63,"tag":485,"props":874,"children":875},{"style":507},[876],{"type":69,"value":877}," development\n",{"type":63,"tag":485,"props":879,"children":880},{"class":487,"line":625},[881],{"type":63,"tag":485,"props":882,"children":883},{"emptyLinePlaceholder":527},[884],{"type":69,"value":530},{"type":63,"tag":485,"props":886,"children":887},{"class":487,"line":634},[888],{"type":63,"tag":485,"props":889,"children":890},{"style":492},[891],{"type":69,"value":892},"# Add a sensitive variable (encrypted, not shown in logs)\n",{"type":63,"tag":485,"props":894,"children":895},{"class":487,"line":659},[896,900,904,908,912],{"type":63,"tag":485,"props":897,"children":898},{"style":502},[899],{"type":69,"value":18},{"type":63,"tag":485,"props":901,"children":902},{"style":507},[903],{"type":69,"value":510},{"type":63,"tag":485,"props":905,"children":906},{"style":507},[907],{"type":69,"value":735},{"type":63,"tag":485,"props":909,"children":910},{"style":507},[911],{"type":69,"value":803},{"type":63,"tag":485,"props":913,"children":914},{"style":507},[915],{"type":69,"value":916}," --sensitive\n",{"type":63,"tag":316,"props":918,"children":920},{"id":919},"list-environment-variables",[921],{"type":69,"value":922},"List Environment Variables",{"type":63,"tag":474,"props":924,"children":926},{"className":476,"code":925,"language":478,"meta":479,"style":479},"# List all environment variables\nvercel env ls\n\n# Filter by environment\nvercel env ls production\n",[927],{"type":63,"tag":78,"props":928,"children":929},{"__ignoreMap":479},[930,938,954,961,969],{"type":63,"tag":485,"props":931,"children":932},{"class":487,"line":488},[933],{"type":63,"tag":485,"props":934,"children":935},{"style":492},[936],{"type":69,"value":937},"# List all environment variables\n",{"type":63,"tag":485,"props":939,"children":940},{"class":487,"line":498},[941,945,949],{"type":63,"tag":485,"props":942,"children":943},{"style":502},[944],{"type":69,"value":18},{"type":63,"tag":485,"props":946,"children":947},{"style":507},[948],{"type":69,"value":510},{"type":63,"tag":485,"props":950,"children":951},{"style":507},[952],{"type":69,"value":953}," ls\n",{"type":63,"tag":485,"props":955,"children":956},{"class":487,"line":523},[957],{"type":63,"tag":485,"props":958,"children":959},{"emptyLinePlaceholder":527},[960],{"type":69,"value":530},{"type":63,"tag":485,"props":962,"children":963},{"class":487,"line":533},[964],{"type":63,"tag":485,"props":965,"children":966},{"style":492},[967],{"type":69,"value":968},"# Filter by environment\n",{"type":63,"tag":485,"props":970,"children":971},{"class":487,"line":542},[972,976,980,985],{"type":63,"tag":485,"props":973,"children":974},{"style":502},[975],{"type":69,"value":18},{"type":63,"tag":485,"props":977,"children":978},{"style":507},[979],{"type":69,"value":510},{"type":63,"tag":485,"props":981,"children":982},{"style":507},[983],{"type":69,"value":984}," ls",{"type":63,"tag":485,"props":986,"children":987},{"style":507},[988],{"type":69,"value":808},{"type":63,"tag":316,"props":990,"children":992},{"id":991},"remove-environment-variables",[993],{"type":69,"value":994},"Remove Environment Variables",{"type":63,"tag":474,"props":996,"children":998},{"className":476,"code":997,"language":478,"meta":479,"style":479},"# Remove from specific environment\nvercel env rm MY_SECRET production\n\n# Remove from all environments\nvercel env rm MY_SECRET\n",[999],{"type":63,"tag":78,"props":1000,"children":1001},{"__ignoreMap":479},[1002,1010,1034,1041,1049],{"type":63,"tag":485,"props":1003,"children":1004},{"class":487,"line":488},[1005],{"type":63,"tag":485,"props":1006,"children":1007},{"style":492},[1008],{"type":69,"value":1009},"# Remove from specific environment\n",{"type":63,"tag":485,"props":1011,"children":1012},{"class":487,"line":498},[1013,1017,1021,1026,1030],{"type":63,"tag":485,"props":1014,"children":1015},{"style":502},[1016],{"type":69,"value":18},{"type":63,"tag":485,"props":1018,"children":1019},{"style":507},[1020],{"type":69,"value":510},{"type":63,"tag":485,"props":1022,"children":1023},{"style":507},[1024],{"type":69,"value":1025}," rm",{"type":63,"tag":485,"props":1027,"children":1028},{"style":507},[1029],{"type":69,"value":803},{"type":63,"tag":485,"props":1031,"children":1032},{"style":507},[1033],{"type":69,"value":808},{"type":63,"tag":485,"props":1035,"children":1036},{"class":487,"line":523},[1037],{"type":63,"tag":485,"props":1038,"children":1039},{"emptyLinePlaceholder":527},[1040],{"type":69,"value":530},{"type":63,"tag":485,"props":1042,"children":1043},{"class":487,"line":533},[1044],{"type":63,"tag":485,"props":1045,"children":1046},{"style":492},[1047],{"type":69,"value":1048},"# Remove from all environments\n",{"type":63,"tag":485,"props":1050,"children":1051},{"class":487,"line":542},[1052,1056,1060,1064],{"type":63,"tag":485,"props":1053,"children":1054},{"style":502},[1055],{"type":69,"value":18},{"type":63,"tag":485,"props":1057,"children":1058},{"style":507},[1059],{"type":69,"value":510},{"type":63,"tag":485,"props":1061,"children":1062},{"style":507},[1063],{"type":69,"value":1025},{"type":63,"tag":485,"props":1065,"children":1066},{"style":507},[1067],{"type":69,"value":740},{"type":63,"tag":94,"props":1069,"children":1071},{"id":1070},"bootstrap-flow-fresh-clone-new-machine",[1072],{"type":69,"value":1073},"Bootstrap Flow (Fresh Clone \u002F New Machine)",{"type":63,"tag":72,"props":1075,"children":1076},{},[1077],{"type":69,"value":1078},"Use this sequence when setting up a project from scratch:",{"type":63,"tag":474,"props":1080,"children":1082},{"className":476,"code":1081,"language":478,"meta":479,"style":479},"# 1) Link first so pulls target the correct Vercel project\nvercel link --yes --project \u003Cname-or-id> --scope \u003Cteam>\n\n# 2) Pull env vars into .env.local\nvercel env pull .env.local --yes\n\n# 3) Verify required keys from .env.example exist in .env.local\nwhile IFS='=' read -r key _; do\n  [[ -z \"$key\" || \"$key\" == \\#* ]] && continue\n  grep -q \"^${key}=\" .env.local || echo \"Missing in .env.local: $key\"\ndone \u003C .env.example\n",[1083],{"type":63,"tag":78,"props":1084,"children":1085},{"__ignoreMap":479},[1086,1094,1161,1168,1176,1199,1206,1214,1276,1349,1425],{"type":63,"tag":485,"props":1087,"children":1088},{"class":487,"line":488},[1089],{"type":63,"tag":485,"props":1090,"children":1091},{"style":492},[1092],{"type":69,"value":1093},"# 1) Link first so pulls target the correct Vercel project\n",{"type":63,"tag":485,"props":1095,"children":1096},{"class":487,"line":498},[1097,1101,1106,1111,1116,1121,1126,1132,1137,1142,1146,1151,1156],{"type":63,"tag":485,"props":1098,"children":1099},{"style":502},[1100],{"type":69,"value":18},{"type":63,"tag":485,"props":1102,"children":1103},{"style":507},[1104],{"type":69,"value":1105}," link",{"type":63,"tag":485,"props":1107,"children":1108},{"style":507},[1109],{"type":69,"value":1110}," --yes",{"type":63,"tag":485,"props":1112,"children":1113},{"style":507},[1114],{"type":69,"value":1115}," --project",{"type":63,"tag":485,"props":1117,"children":1118},{"style":767},[1119],{"type":69,"value":1120}," \u003C",{"type":63,"tag":485,"props":1122,"children":1123},{"style":507},[1124],{"type":69,"value":1125},"name-or-i",{"type":63,"tag":485,"props":1127,"children":1129},{"style":1128},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1130],{"type":69,"value":1131},"d",{"type":63,"tag":485,"props":1133,"children":1134},{"style":767},[1135],{"type":69,"value":1136},">",{"type":63,"tag":485,"props":1138,"children":1139},{"style":507},[1140],{"type":69,"value":1141}," --scope",{"type":63,"tag":485,"props":1143,"children":1144},{"style":767},[1145],{"type":69,"value":1120},{"type":63,"tag":485,"props":1147,"children":1148},{"style":507},[1149],{"type":69,"value":1150},"tea",{"type":63,"tag":485,"props":1152,"children":1153},{"style":1128},[1154],{"type":69,"value":1155},"m",{"type":63,"tag":485,"props":1157,"children":1158},{"style":767},[1159],{"type":69,"value":1160},">\n",{"type":63,"tag":485,"props":1162,"children":1163},{"class":487,"line":523},[1164],{"type":63,"tag":485,"props":1165,"children":1166},{"emptyLinePlaceholder":527},[1167],{"type":69,"value":530},{"type":63,"tag":485,"props":1169,"children":1170},{"class":487,"line":533},[1171],{"type":63,"tag":485,"props":1172,"children":1173},{"style":492},[1174],{"type":69,"value":1175},"# 2) Pull env vars into .env.local\n",{"type":63,"tag":485,"props":1177,"children":1178},{"class":487,"line":542},[1179,1183,1187,1191,1195],{"type":63,"tag":485,"props":1180,"children":1181},{"style":502},[1182],{"type":69,"value":18},{"type":63,"tag":485,"props":1184,"children":1185},{"style":507},[1186],{"type":69,"value":510},{"type":63,"tag":485,"props":1188,"children":1189},{"style":507},[1190],{"type":69,"value":515},{"type":63,"tag":485,"props":1192,"children":1193},{"style":507},[1194],{"type":69,"value":560},{"type":63,"tag":485,"props":1196,"children":1197},{"style":507},[1198],{"type":69,"value":656},{"type":63,"tag":485,"props":1200,"children":1201},{"class":487,"line":568},[1202],{"type":63,"tag":485,"props":1203,"children":1204},{"emptyLinePlaceholder":527},[1205],{"type":69,"value":530},{"type":63,"tag":485,"props":1207,"children":1208},{"class":487,"line":39},[1209],{"type":63,"tag":485,"props":1210,"children":1211},{"style":492},[1212],{"type":69,"value":1213},"# 3) Verify required keys from .env.example exist in .env.local\n",{"type":63,"tag":485,"props":1215,"children":1216},{"class":487,"line":617},[1217,1223,1228,1233,1238,1242,1246,1251,1256,1261,1266,1271],{"type":63,"tag":485,"props":1218,"children":1220},{"style":1219},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1221],{"type":69,"value":1222},"while",{"type":63,"tag":485,"props":1224,"children":1225},{"style":1128},[1226],{"type":69,"value":1227}," IFS",{"type":63,"tag":485,"props":1229,"children":1230},{"style":767},[1231],{"type":69,"value":1232},"=",{"type":63,"tag":485,"props":1234,"children":1235},{"style":767},[1236],{"type":69,"value":1237},"'",{"type":63,"tag":485,"props":1239,"children":1240},{"style":507},[1241],{"type":69,"value":1232},{"type":63,"tag":485,"props":1243,"children":1244},{"style":767},[1245],{"type":69,"value":1237},{"type":63,"tag":485,"props":1247,"children":1248},{"style":761},[1249],{"type":69,"value":1250}," read",{"type":63,"tag":485,"props":1252,"children":1253},{"style":507},[1254],{"type":69,"value":1255}," -r",{"type":63,"tag":485,"props":1257,"children":1258},{"style":507},[1259],{"type":69,"value":1260}," key",{"type":63,"tag":485,"props":1262,"children":1263},{"style":507},[1264],{"type":69,"value":1265}," _",{"type":63,"tag":485,"props":1267,"children":1268},{"style":767},[1269],{"type":69,"value":1270},";",{"type":63,"tag":485,"props":1272,"children":1273},{"style":1219},[1274],{"type":69,"value":1275}," do\n",{"type":63,"tag":485,"props":1277,"children":1278},{"class":487,"line":625},[1279,1284,1289,1293,1298,1302,1307,1311,1315,1319,1324,1329,1334,1339,1344],{"type":63,"tag":485,"props":1280,"children":1281},{"style":767},[1282],{"type":69,"value":1283},"  [[",{"type":63,"tag":485,"props":1285,"children":1286},{"style":767},[1287],{"type":69,"value":1288}," -z",{"type":63,"tag":485,"props":1290,"children":1291},{"style":767},[1292],{"type":69,"value":770},{"type":63,"tag":485,"props":1294,"children":1295},{"style":1128},[1296],{"type":69,"value":1297},"$key",{"type":63,"tag":485,"props":1299,"children":1300},{"style":767},[1301],{"type":69,"value":780},{"type":63,"tag":485,"props":1303,"children":1304},{"style":767},[1305],{"type":69,"value":1306}," ||",{"type":63,"tag":485,"props":1308,"children":1309},{"style":767},[1310],{"type":69,"value":770},{"type":63,"tag":485,"props":1312,"children":1313},{"style":1128},[1314],{"type":69,"value":1297},{"type":63,"tag":485,"props":1316,"children":1317},{"style":767},[1318],{"type":69,"value":780},{"type":63,"tag":485,"props":1320,"children":1321},{"style":767},[1322],{"type":69,"value":1323}," ==",{"type":63,"tag":485,"props":1325,"children":1326},{"style":1128},[1327],{"type":69,"value":1328}," \\#",{"type":63,"tag":485,"props":1330,"children":1331},{"style":767},[1332],{"type":69,"value":1333},"*",{"type":63,"tag":485,"props":1335,"children":1336},{"style":767},[1337],{"type":69,"value":1338}," ]]",{"type":63,"tag":485,"props":1340,"children":1341},{"style":767},[1342],{"type":69,"value":1343}," &&",{"type":63,"tag":485,"props":1345,"children":1346},{"style":1219},[1347],{"type":69,"value":1348}," continue\n",{"type":63,"tag":485,"props":1350,"children":1351},{"class":487,"line":634},[1352,1357,1362,1366,1371,1376,1381,1386,1390,1394,1398,1402,1407,1411,1416,1420],{"type":63,"tag":485,"props":1353,"children":1354},{"style":502},[1355],{"type":69,"value":1356},"  grep",{"type":63,"tag":485,"props":1358,"children":1359},{"style":507},[1360],{"type":69,"value":1361}," -q",{"type":63,"tag":485,"props":1363,"children":1364},{"style":767},[1365],{"type":69,"value":770},{"type":63,"tag":485,"props":1367,"children":1368},{"style":507},[1369],{"type":69,"value":1370},"^",{"type":63,"tag":485,"props":1372,"children":1373},{"style":767},[1374],{"type":69,"value":1375},"${",{"type":63,"tag":485,"props":1377,"children":1378},{"style":1128},[1379],{"type":69,"value":1380},"key",{"type":63,"tag":485,"props":1382,"children":1383},{"style":767},[1384],{"type":69,"value":1385},"}",{"type":63,"tag":485,"props":1387,"children":1388},{"style":507},[1389],{"type":69,"value":1232},{"type":63,"tag":485,"props":1391,"children":1392},{"style":767},[1393],{"type":69,"value":780},{"type":63,"tag":485,"props":1395,"children":1396},{"style":507},[1397],{"type":69,"value":560},{"type":63,"tag":485,"props":1399,"children":1400},{"style":767},[1401],{"type":69,"value":1306},{"type":63,"tag":485,"props":1403,"children":1404},{"style":761},[1405],{"type":69,"value":1406}," echo",{"type":63,"tag":485,"props":1408,"children":1409},{"style":767},[1410],{"type":69,"value":770},{"type":63,"tag":485,"props":1412,"children":1413},{"style":507},[1414],{"type":69,"value":1415},"Missing in .env.local: ",{"type":63,"tag":485,"props":1417,"children":1418},{"style":1128},[1419],{"type":69,"value":1297},{"type":63,"tag":485,"props":1421,"children":1422},{"style":767},[1423],{"type":69,"value":1424},"\"\n",{"type":63,"tag":485,"props":1426,"children":1427},{"class":487,"line":659},[1428,1433,1437],{"type":63,"tag":485,"props":1429,"children":1430},{"style":1219},[1431],{"type":69,"value":1432},"done",{"type":63,"tag":485,"props":1434,"children":1435},{"style":767},[1436],{"type":69,"value":1120},{"type":63,"tag":485,"props":1438,"children":1439},{"style":1128},[1440],{"type":69,"value":1441}," .env.example\n",{"type":63,"tag":316,"props":1443,"children":1445},{"id":1444},"temporary-path-run-with-vercel-envs-without-writing-a-file",[1446],{"type":69,"value":1447},"Temporary Path: Run With Vercel Envs Without Writing a File",{"type":63,"tag":72,"props":1449,"children":1450},{},[1451,1453,1458],{"type":69,"value":1452},"If you need Vercel environment variables immediately but do not want to write ",{"type":63,"tag":78,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":69,"value":46},{"type":69,"value":1459}," yet:",{"type":63,"tag":474,"props":1461,"children":1463},{"className":476,"code":1462,"language":478,"meta":479,"style":479},"vercel env run -- npm run dev\n",[1464],{"type":63,"tag":78,"props":1465,"children":1466},{"__ignoreMap":479},[1467],{"type":63,"tag":485,"props":1468,"children":1469},{"class":487,"line":488},[1470,1474,1478,1483,1488,1493,1497],{"type":63,"tag":485,"props":1471,"children":1472},{"style":502},[1473],{"type":69,"value":18},{"type":63,"tag":485,"props":1475,"children":1476},{"style":507},[1477],{"type":69,"value":510},{"type":63,"tag":485,"props":1479,"children":1480},{"style":507},[1481],{"type":69,"value":1482}," run",{"type":63,"tag":485,"props":1484,"children":1485},{"style":507},[1486],{"type":69,"value":1487}," --",{"type":63,"tag":485,"props":1489,"children":1490},{"style":507},[1491],{"type":69,"value":1492}," npm",{"type":63,"tag":485,"props":1494,"children":1495},{"style":507},[1496],{"type":69,"value":1482},{"type":63,"tag":485,"props":1498,"children":1499},{"style":507},[1500],{"type":69,"value":1501}," dev\n",{"type":63,"tag":72,"props":1503,"children":1504},{},[1505,1507,1512],{"type":69,"value":1506},"This is useful for quick validation during bootstrap, but still pull ",{"type":63,"tag":78,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":69,"value":46},{"type":69,"value":1513}," for a normal local workflow.",{"type":63,"tag":316,"props":1515,"children":1517},{"id":1516},"re-pull-after-secret-or-provisioning-changes",[1518],{"type":69,"value":1519},"Re-pull After Secret or Provisioning Changes",{"type":63,"tag":72,"props":1521,"children":1522},{},[1523,1525,1531],{"type":69,"value":1524},"After creating\u002Fupdating secrets (",{"type":63,"tag":78,"props":1526,"children":1528},{"className":1527},[],[1529],{"type":69,"value":1530},"vercel env add",{"type":69,"value":1532},", dashboard changes) or provisioning integrations that add env vars (for example Neon\u002FUpstash), re-run:",{"type":63,"tag":474,"props":1534,"children":1536},{"className":476,"code":1535,"language":478,"meta":479,"style":479},"vercel env pull .env.local --yes\n",[1537],{"type":63,"tag":78,"props":1538,"children":1539},{"__ignoreMap":479},[1540],{"type":63,"tag":485,"props":1541,"children":1542},{"class":487,"line":488},[1543,1547,1551,1555,1559],{"type":63,"tag":485,"props":1544,"children":1545},{"style":502},[1546],{"type":69,"value":18},{"type":63,"tag":485,"props":1548,"children":1549},{"style":507},[1550],{"type":69,"value":510},{"type":63,"tag":485,"props":1552,"children":1553},{"style":507},[1554],{"type":69,"value":515},{"type":63,"tag":485,"props":1556,"children":1557},{"style":507},[1558],{"type":69,"value":560},{"type":63,"tag":485,"props":1560,"children":1561},{"style":507},[1562],{"type":69,"value":656},{"type":63,"tag":94,"props":1564,"children":1566},{"id":1565},"oidc-token-lifecycle",[1567],{"type":69,"value":1568},"OIDC Token Lifecycle",{"type":63,"tag":72,"props":1570,"children":1571},{},[1572,1574,1579],{"type":69,"value":1573},"Vercel uses ",{"type":63,"tag":179,"props":1575,"children":1576},{},[1577],{"type":69,"value":1578},"OIDC (OpenID Connect)",{"type":69,"value":1580}," tokens for secure, keyless authentication between your app and Vercel services (AI Gateway, storage, etc.).",{"type":63,"tag":316,"props":1582,"children":1584},{"id":1583},"how-it-works",[1585],{"type":69,"value":1586},"How It Works",{"type":63,"tag":323,"props":1588,"children":1589},{},[1590,1608,1632],{"type":63,"tag":327,"props":1591,"children":1592},{},[1593,1598,1600,1606],{"type":63,"tag":179,"props":1594,"children":1595},{},[1596],{"type":69,"value":1597},"On Vercel deployments",{"type":69,"value":1599},": ",{"type":63,"tag":78,"props":1601,"children":1603},{"className":1602},[],[1604],{"type":69,"value":1605},"VERCEL_OIDC_TOKEN",{"type":69,"value":1607}," is automatically injected as a short-lived JWT and auto-refreshed — zero configuration needed",{"type":63,"tag":327,"props":1609,"children":1610},{},[1611,1616,1617,1623,1625,1630],{"type":63,"tag":179,"props":1612,"children":1613},{},[1614],{"type":69,"value":1615},"Local development",{"type":69,"value":1599},{"type":63,"tag":78,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":69,"value":1622},"vercel env pull .env.local",{"type":69,"value":1624}," provisions a ",{"type":63,"tag":78,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":69,"value":1605},{"type":69,"value":1631}," valid for ~12 hours",{"type":63,"tag":327,"props":1633,"children":1634},{},[1635,1640,1642,1648],{"type":63,"tag":179,"props":1636,"children":1637},{},[1638],{"type":69,"value":1639},"Token expiry",{"type":69,"value":1641},": When the local OIDC token expires, re-run ",{"type":63,"tag":78,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":69,"value":1647},"vercel env pull .env.local --yes",{"type":69,"value":1649}," to get a fresh one. Consider re-pulling at the start of each dev session to avoid mid-session auth failures",{"type":63,"tag":316,"props":1651,"children":1653},{"id":1652},"common-oidc-patterns",[1654],{"type":69,"value":1655},"Common OIDC Patterns",{"type":63,"tag":474,"props":1657,"children":1661},{"className":1658,"code":1659,"language":1660,"meta":479,"style":479},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F The @vercel\u002Foidc package reads VERCEL_OIDC_TOKEN automatically\nimport { getVercelOidcToken } from '@vercel\u002Foidc'\n\n\u002F\u002F AI Gateway uses OIDC by default — no manual token handling needed\nimport { gateway } from 'ai'\nconst result = await generateText({\n  model: gateway('openai\u002Fgpt-5.2'),\n  prompt: 'Hello',\n})\n","ts",[1662],{"type":63,"tag":78,"props":1663,"children":1664},{"__ignoreMap":479},[1665,1673,1716,1723,1731,1768,1806,1851,1880],{"type":63,"tag":485,"props":1666,"children":1667},{"class":487,"line":488},[1668],{"type":63,"tag":485,"props":1669,"children":1670},{"style":492},[1671],{"type":69,"value":1672},"\u002F\u002F The @vercel\u002Foidc package reads VERCEL_OIDC_TOKEN automatically\n",{"type":63,"tag":485,"props":1674,"children":1675},{"class":487,"line":498},[1676,1681,1686,1691,1696,1701,1706,1711],{"type":63,"tag":485,"props":1677,"children":1678},{"style":1219},[1679],{"type":69,"value":1680},"import",{"type":63,"tag":485,"props":1682,"children":1683},{"style":767},[1684],{"type":69,"value":1685}," {",{"type":63,"tag":485,"props":1687,"children":1688},{"style":1128},[1689],{"type":69,"value":1690}," getVercelOidcToken",{"type":63,"tag":485,"props":1692,"children":1693},{"style":767},[1694],{"type":69,"value":1695}," }",{"type":63,"tag":485,"props":1697,"children":1698},{"style":1219},[1699],{"type":69,"value":1700}," from",{"type":63,"tag":485,"props":1702,"children":1703},{"style":767},[1704],{"type":69,"value":1705}," '",{"type":63,"tag":485,"props":1707,"children":1708},{"style":507},[1709],{"type":69,"value":1710},"@vercel\u002Foidc",{"type":63,"tag":485,"props":1712,"children":1713},{"style":767},[1714],{"type":69,"value":1715},"'\n",{"type":63,"tag":485,"props":1717,"children":1718},{"class":487,"line":523},[1719],{"type":63,"tag":485,"props":1720,"children":1721},{"emptyLinePlaceholder":527},[1722],{"type":69,"value":530},{"type":63,"tag":485,"props":1724,"children":1725},{"class":487,"line":533},[1726],{"type":63,"tag":485,"props":1727,"children":1728},{"style":492},[1729],{"type":69,"value":1730},"\u002F\u002F AI Gateway uses OIDC by default — no manual token handling needed\n",{"type":63,"tag":485,"props":1732,"children":1733},{"class":487,"line":542},[1734,1738,1742,1747,1751,1755,1759,1764],{"type":63,"tag":485,"props":1735,"children":1736},{"style":1219},[1737],{"type":69,"value":1680},{"type":63,"tag":485,"props":1739,"children":1740},{"style":767},[1741],{"type":69,"value":1685},{"type":63,"tag":485,"props":1743,"children":1744},{"style":1128},[1745],{"type":69,"value":1746}," gateway",{"type":63,"tag":485,"props":1748,"children":1749},{"style":767},[1750],{"type":69,"value":1695},{"type":63,"tag":485,"props":1752,"children":1753},{"style":1219},[1754],{"type":69,"value":1700},{"type":63,"tag":485,"props":1756,"children":1757},{"style":767},[1758],{"type":69,"value":1705},{"type":63,"tag":485,"props":1760,"children":1761},{"style":507},[1762],{"type":69,"value":1763},"ai",{"type":63,"tag":485,"props":1765,"children":1766},{"style":767},[1767],{"type":69,"value":1715},{"type":63,"tag":485,"props":1769,"children":1770},{"class":487,"line":568},[1771,1777,1782,1786,1791,1796,1801],{"type":63,"tag":485,"props":1772,"children":1774},{"style":1773},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1775],{"type":69,"value":1776},"const",{"type":63,"tag":485,"props":1778,"children":1779},{"style":1128},[1780],{"type":69,"value":1781}," result ",{"type":63,"tag":485,"props":1783,"children":1784},{"style":767},[1785],{"type":69,"value":1232},{"type":63,"tag":485,"props":1787,"children":1788},{"style":1219},[1789],{"type":69,"value":1790}," await",{"type":63,"tag":485,"props":1792,"children":1793},{"style":761},[1794],{"type":69,"value":1795}," generateText",{"type":63,"tag":485,"props":1797,"children":1798},{"style":1128},[1799],{"type":69,"value":1800},"(",{"type":63,"tag":485,"props":1802,"children":1803},{"style":767},[1804],{"type":69,"value":1805},"{\n",{"type":63,"tag":485,"props":1807,"children":1808},{"class":487,"line":39},[1809,1815,1820,1824,1828,1832,1837,1841,1846],{"type":63,"tag":485,"props":1810,"children":1812},{"style":1811},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1813],{"type":69,"value":1814},"  model",{"type":63,"tag":485,"props":1816,"children":1817},{"style":767},[1818],{"type":69,"value":1819},":",{"type":63,"tag":485,"props":1821,"children":1822},{"style":761},[1823],{"type":69,"value":1746},{"type":63,"tag":485,"props":1825,"children":1826},{"style":1128},[1827],{"type":69,"value":1800},{"type":63,"tag":485,"props":1829,"children":1830},{"style":767},[1831],{"type":69,"value":1237},{"type":63,"tag":485,"props":1833,"children":1834},{"style":507},[1835],{"type":69,"value":1836},"openai\u002Fgpt-5.2",{"type":63,"tag":485,"props":1838,"children":1839},{"style":767},[1840],{"type":69,"value":1237},{"type":63,"tag":485,"props":1842,"children":1843},{"style":1128},[1844],{"type":69,"value":1845},")",{"type":63,"tag":485,"props":1847,"children":1848},{"style":767},[1849],{"type":69,"value":1850},",\n",{"type":63,"tag":485,"props":1852,"children":1853},{"class":487,"line":617},[1854,1859,1863,1867,1872,1876],{"type":63,"tag":485,"props":1855,"children":1856},{"style":1811},[1857],{"type":69,"value":1858},"  prompt",{"type":63,"tag":485,"props":1860,"children":1861},{"style":767},[1862],{"type":69,"value":1819},{"type":63,"tag":485,"props":1864,"children":1865},{"style":767},[1866],{"type":69,"value":1705},{"type":63,"tag":485,"props":1868,"children":1869},{"style":507},[1870],{"type":69,"value":1871},"Hello",{"type":63,"tag":485,"props":1873,"children":1874},{"style":767},[1875],{"type":69,"value":1237},{"type":63,"tag":485,"props":1877,"children":1878},{"style":767},[1879],{"type":69,"value":1850},{"type":63,"tag":485,"props":1881,"children":1882},{"class":487,"line":625},[1883,1887],{"type":63,"tag":485,"props":1884,"children":1885},{"style":767},[1886],{"type":69,"value":1385},{"type":63,"tag":485,"props":1888,"children":1889},{"style":1128},[1890],{"type":69,"value":1891},")\n",{"type":63,"tag":316,"props":1893,"children":1895},{"id":1894},"troubleshooting-oidc",[1896],{"type":69,"value":1897},"Troubleshooting OIDC",{"type":63,"tag":106,"props":1899,"children":1900},{},[1901,1922],{"type":63,"tag":110,"props":1902,"children":1903},{},[1904],{"type":63,"tag":114,"props":1905,"children":1906},{},[1907,1912,1917],{"type":63,"tag":118,"props":1908,"children":1909},{},[1910],{"type":69,"value":1911},"Symptom",{"type":63,"tag":118,"props":1913,"children":1914},{},[1915],{"type":69,"value":1916},"Cause",{"type":63,"tag":118,"props":1918,"children":1919},{},[1920],{"type":69,"value":1921},"Fix",{"type":63,"tag":134,"props":1923,"children":1924},{},[1925,1951,1972,1998],{"type":63,"tag":114,"props":1926,"children":1927},{},[1928,1938,1943],{"type":63,"tag":141,"props":1929,"children":1930},{},[1931,1936],{"type":63,"tag":78,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":69,"value":1605},{"type":69,"value":1937}," missing locally",{"type":63,"tag":141,"props":1939,"children":1940},{},[1941],{"type":69,"value":1942},"Haven't pulled env vars",{"type":63,"tag":141,"props":1944,"children":1945},{},[1946],{"type":63,"tag":78,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":69,"value":1622},{"type":63,"tag":114,"props":1952,"children":1953},{},[1954,1959,1964],{"type":63,"tag":141,"props":1955,"children":1956},{},[1957],{"type":69,"value":1958},"Auth errors after ~12h locally",{"type":63,"tag":141,"props":1960,"children":1961},{},[1962],{"type":69,"value":1963},"Token expired",{"type":63,"tag":141,"props":1965,"children":1966},{},[1967],{"type":63,"tag":78,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":69,"value":1647},{"type":63,"tag":114,"props":1973,"children":1974},{},[1975,1980,1990],{"type":63,"tag":141,"props":1976,"children":1977},{},[1978],{"type":69,"value":1979},"Works on Vercel, fails locally",{"type":63,"tag":141,"props":1981,"children":1982},{},[1983,1985],{"type":69,"value":1984},"Token not in ",{"type":63,"tag":78,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":69,"value":46},{"type":63,"tag":141,"props":1991,"children":1992},{},[1993],{"type":63,"tag":78,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":69,"value":1622},{"type":63,"tag":114,"props":1999,"children":2000},{},[2001,2012,2017],{"type":63,"tag":141,"props":2002,"children":2003},{},[2004,2010],{"type":63,"tag":78,"props":2005,"children":2007},{"className":2006},[],[2008],{"type":69,"value":2009},"AI_GATEWAY_API_KEY",{"type":69,"value":2011}," vs OIDC",{"type":63,"tag":141,"props":2013,"children":2014},{},[2015],{"type":69,"value":2016},"Both set, key takes priority",{"type":63,"tag":141,"props":2018,"children":2019},{},[2020,2022,2027],{"type":69,"value":2021},"Remove ",{"type":63,"tag":78,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":69,"value":2009},{"type":69,"value":2028}," to use OIDC",{"type":63,"tag":94,"props":2030,"children":2032},{"id":2031},"environment-specific-configuration",[2033],{"type":69,"value":2034},"Environment-Specific Configuration",{"type":63,"tag":316,"props":2036,"children":2038},{"id":2037},"vercel-dashboard-vs-env-files",[2039],{"type":69,"value":2040},"Vercel Dashboard vs .env Files",{"type":63,"tag":106,"props":2042,"children":2043},{},[2044,2060],{"type":63,"tag":110,"props":2045,"children":2046},{},[2047],{"type":63,"tag":114,"props":2048,"children":2049},{},[2050,2055],{"type":63,"tag":118,"props":2051,"children":2052},{},[2053],{"type":69,"value":2054},"Use Case",{"type":63,"tag":118,"props":2056,"children":2057},{},[2058],{"type":69,"value":2059},"Where to Set",{"type":63,"tag":134,"props":2061,"children":2062},{},[2063,2089,2114,2130],{"type":63,"tag":114,"props":2064,"children":2065},{},[2066,2071],{"type":63,"tag":141,"props":2067,"children":2068},{},[2069],{"type":69,"value":2070},"Secrets (API keys, tokens)",{"type":63,"tag":141,"props":2072,"children":2073},{},[2074,2076,2082,2084],{"type":69,"value":2075},"Vercel Dashboard (",{"type":63,"tag":78,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":69,"value":2081},"https:\u002F\u002Fvercel.com\u002F{team}\u002F{project}\u002Fsettings\u002Fenvironment-variables",{"type":69,"value":2083},") or ",{"type":63,"tag":78,"props":2085,"children":2087},{"className":2086},[],[2088],{"type":69,"value":1530},{"type":63,"tag":114,"props":2090,"children":2091},{},[2092,2097],{"type":63,"tag":141,"props":2093,"children":2094},{},[2095],{"type":69,"value":2096},"Public config (site URL, feature flags)",{"type":63,"tag":141,"props":2098,"children":2099},{},[2100,2105,2107,2112],{"type":63,"tag":78,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":69,"value":44},{"type":69,"value":2106}," or ",{"type":63,"tag":78,"props":2108,"children":2110},{"className":2109},[],[2111],{"type":69,"value":345},{"type":69,"value":2113}," files",{"type":63,"tag":114,"props":2115,"children":2116},{},[2117,2122],{"type":63,"tag":141,"props":2118,"children":2119},{},[2120],{"type":69,"value":2121},"Local-only overrides",{"type":63,"tag":141,"props":2123,"children":2124},{},[2125],{"type":63,"tag":78,"props":2126,"children":2128},{"className":2127},[],[2129],{"type":69,"value":46},{"type":63,"tag":114,"props":2131,"children":2132},{},[2133,2138],{"type":63,"tag":141,"props":2134,"children":2135},{},[2136],{"type":69,"value":2137},"CI\u002FCD secrets",{"type":63,"tag":141,"props":2139,"children":2140},{},[2141,2142,2147],{"type":69,"value":2075},{"type":63,"tag":78,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":69,"value":2081},{"type":69,"value":2148},") with environment scoping",{"type":63,"tag":316,"props":2150,"children":2152},{"id":2151},"environment-scoping-on-vercel",[2153],{"type":69,"value":2154},"Environment Scoping on Vercel",{"type":63,"tag":72,"props":2156,"children":2157},{},[2158,2160,2165],{"type":69,"value":2159},"Variables set in the Vercel Dashboard at ",{"type":63,"tag":78,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":69,"value":2081},{"type":69,"value":2166}," can be scoped to:",{"type":63,"tag":376,"props":2168,"children":2169},{},[2170,2188,2198],{"type":63,"tag":327,"props":2171,"children":2172},{},[2173,2178,2180,2186],{"type":63,"tag":179,"props":2174,"children":2175},{},[2176],{"type":69,"value":2177},"Production",{"type":69,"value":2179}," — only ",{"type":63,"tag":78,"props":2181,"children":2183},{"className":2182},[],[2184],{"type":69,"value":2185},"vercel.app",{"type":69,"value":2187}," production deployments",{"type":63,"tag":327,"props":2189,"children":2190},{},[2191,2196],{"type":63,"tag":179,"props":2192,"children":2193},{},[2194],{"type":69,"value":2195},"Preview",{"type":69,"value":2197}," — branch\u002FPR deployments",{"type":63,"tag":327,"props":2199,"children":2200},{},[2201,2206,2208,2214,2216],{"type":63,"tag":179,"props":2202,"children":2203},{},[2204],{"type":69,"value":2205},"Development",{"type":69,"value":2207}," — ",{"type":63,"tag":78,"props":2209,"children":2211},{"className":2210},[],[2212],{"type":69,"value":2213},"vercel dev",{"type":69,"value":2215}," and ",{"type":63,"tag":78,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":69,"value":433},{"type":63,"tag":72,"props":2222,"children":2223},{},[2224],{"type":69,"value":2225},"A variable can be assigned to one, two, or all three environments.",{"type":63,"tag":316,"props":2227,"children":2229},{"id":2228},"git-branch-overrides",[2230],{"type":69,"value":2231},"Git Branch Overrides",{"type":63,"tag":72,"props":2233,"children":2234},{},[2235],{"type":69,"value":2236},"Preview environment variables can be scoped to specific Git branches:",{"type":63,"tag":474,"props":2238,"children":2240},{"className":476,"code":2239,"language":478,"meta":479,"style":479},"# Add a variable only for the \"staging\" branch\necho \"staging-value\" | vercel env add DATABASE_URL preview --git-branch=staging\n",[2241],{"type":63,"tag":78,"props":2242,"children":2243},{"__ignoreMap":479},[2244,2252],{"type":63,"tag":485,"props":2245,"children":2246},{"class":487,"line":488},[2247],{"type":63,"tag":485,"props":2248,"children":2249},{"style":492},[2250],{"type":69,"value":2251},"# Add a variable only for the \"staging\" branch\n",{"type":63,"tag":485,"props":2253,"children":2254},{"class":487,"line":498},[2255,2259,2263,2268,2272,2276,2280,2284,2288,2293,2297],{"type":63,"tag":485,"props":2256,"children":2257},{"style":761},[2258],{"type":69,"value":764},{"type":63,"tag":485,"props":2260,"children":2261},{"style":767},[2262],{"type":69,"value":770},{"type":63,"tag":485,"props":2264,"children":2265},{"style":507},[2266],{"type":69,"value":2267},"staging-value",{"type":63,"tag":485,"props":2269,"children":2270},{"style":767},[2271],{"type":69,"value":780},{"type":63,"tag":485,"props":2273,"children":2274},{"style":767},[2275],{"type":69,"value":785},{"type":63,"tag":485,"props":2277,"children":2278},{"style":502},[2279],{"type":69,"value":790},{"type":63,"tag":485,"props":2281,"children":2282},{"style":507},[2283],{"type":69,"value":510},{"type":63,"tag":485,"props":2285,"children":2286},{"style":507},[2287],{"type":69,"value":735},{"type":63,"tag":485,"props":2289,"children":2290},{"style":507},[2291],{"type":69,"value":2292}," DATABASE_URL",{"type":63,"tag":485,"props":2294,"children":2295},{"style":507},[2296],{"type":69,"value":872},{"type":63,"tag":485,"props":2298,"children":2299},{"style":507},[2300],{"type":69,"value":2301}," --git-branch=staging\n",{"type":63,"tag":94,"props":2303,"children":2305},{"id":2304},"gotchas",[2306],{"type":69,"value":2307},"Gotchas",{"type":63,"tag":316,"props":2309,"children":2311},{"id":2310},"vercel-env-pull-overwrites-custom-variables",[2312,2317],{"type":63,"tag":78,"props":2313,"children":2315},{"className":2314},[],[2316],{"type":69,"value":433},{"type":69,"value":2318}," Overwrites Custom Variables",{"type":63,"tag":72,"props":2320,"children":2321},{},[2322,2327,2329,2334],{"type":63,"tag":78,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":69,"value":1622},{"type":69,"value":2328}," ",{"type":63,"tag":179,"props":2330,"children":2331},{},[2332],{"type":69,"value":2333},"replaces the entire file",{"type":69,"value":2335}," — any manually added variables (custom secrets, local overrides, debug flags) are lost. Always back up or re-add custom vars after pulling:",{"type":63,"tag":474,"props":2337,"children":2339},{"className":476,"code":2338,"language":478,"meta":479,"style":479},"# Save custom vars before pulling\ngrep -v '^#' .env.local | grep -v '^VERCEL_\\|^POSTGRES_\\|^NEXT_PUBLIC_' > .env.custom.bak\nvercel env pull .env.local --yes\ncat .env.custom.bak >> .env.local  # Re-append custom vars\n",[2340],{"type":63,"tag":78,"props":2341,"children":2342},{"__ignoreMap":479},[2343,2351,2417,2440],{"type":63,"tag":485,"props":2344,"children":2345},{"class":487,"line":488},[2346],{"type":63,"tag":485,"props":2347,"children":2348},{"style":492},[2349],{"type":69,"value":2350},"# Save custom vars before pulling\n",{"type":63,"tag":485,"props":2352,"children":2353},{"class":487,"line":498},[2354,2359,2364,2368,2373,2377,2381,2385,2390,2394,2398,2403,2407,2412],{"type":63,"tag":485,"props":2355,"children":2356},{"style":502},[2357],{"type":69,"value":2358},"grep",{"type":63,"tag":485,"props":2360,"children":2361},{"style":507},[2362],{"type":69,"value":2363}," -v",{"type":63,"tag":485,"props":2365,"children":2366},{"style":767},[2367],{"type":69,"value":1705},{"type":63,"tag":485,"props":2369,"children":2370},{"style":507},[2371],{"type":69,"value":2372},"^#",{"type":63,"tag":485,"props":2374,"children":2375},{"style":767},[2376],{"type":69,"value":1237},{"type":63,"tag":485,"props":2378,"children":2379},{"style":507},[2380],{"type":69,"value":560},{"type":63,"tag":485,"props":2382,"children":2383},{"style":767},[2384],{"type":69,"value":785},{"type":63,"tag":485,"props":2386,"children":2387},{"style":502},[2388],{"type":69,"value":2389}," grep",{"type":63,"tag":485,"props":2391,"children":2392},{"style":507},[2393],{"type":69,"value":2363},{"type":63,"tag":485,"props":2395,"children":2396},{"style":767},[2397],{"type":69,"value":1705},{"type":63,"tag":485,"props":2399,"children":2400},{"style":507},[2401],{"type":69,"value":2402},"^VERCEL_\\|^POSTGRES_\\|^NEXT_PUBLIC_",{"type":63,"tag":485,"props":2404,"children":2405},{"style":767},[2406],{"type":69,"value":1237},{"type":63,"tag":485,"props":2408,"children":2409},{"style":767},[2410],{"type":69,"value":2411}," >",{"type":63,"tag":485,"props":2413,"children":2414},{"style":507},[2415],{"type":69,"value":2416}," .env.custom.bak\n",{"type":63,"tag":485,"props":2418,"children":2419},{"class":487,"line":523},[2420,2424,2428,2432,2436],{"type":63,"tag":485,"props":2421,"children":2422},{"style":502},[2423],{"type":69,"value":18},{"type":63,"tag":485,"props":2425,"children":2426},{"style":507},[2427],{"type":69,"value":510},{"type":63,"tag":485,"props":2429,"children":2430},{"style":507},[2431],{"type":69,"value":515},{"type":63,"tag":485,"props":2433,"children":2434},{"style":507},[2435],{"type":69,"value":560},{"type":63,"tag":485,"props":2437,"children":2438},{"style":507},[2439],{"type":69,"value":656},{"type":63,"tag":485,"props":2441,"children":2442},{"class":487,"line":533},[2443,2448,2453,2458,2462],{"type":63,"tag":485,"props":2444,"children":2445},{"style":502},[2446],{"type":69,"value":2447},"cat",{"type":63,"tag":485,"props":2449,"children":2450},{"style":507},[2451],{"type":69,"value":2452}," .env.custom.bak",{"type":63,"tag":485,"props":2454,"children":2455},{"style":767},[2456],{"type":69,"value":2457}," >>",{"type":63,"tag":485,"props":2459,"children":2460},{"style":507},[2461],{"type":69,"value":560},{"type":63,"tag":485,"props":2463,"children":2464},{"style":492},[2465],{"type":69,"value":2466},"  # Re-append custom vars\n",{"type":63,"tag":72,"props":2468,"children":2469},{},[2470,2472,2477,2479,2484],{"type":69,"value":2471},"Or maintain custom vars in a separate ",{"type":63,"tag":78,"props":2473,"children":2475},{"className":2474},[],[2476],{"type":69,"value":51},{"type":69,"value":2478}," file (loaded after ",{"type":63,"tag":78,"props":2480,"children":2482},{"className":2481},[],[2483],{"type":69,"value":46},{"type":69,"value":2485}," by Next.js).",{"type":63,"tag":316,"props":2487,"children":2489},{"id":2488},"scripts-dont-auto-load-envlocal",[2490,2492],{"type":69,"value":2491},"Scripts Don't Auto-Load ",{"type":63,"tag":78,"props":2493,"children":2495},{"className":2494},[],[2496],{"type":69,"value":46},{"type":63,"tag":72,"props":2498,"children":2499},{},[2500,2502,2507,2509,2515,2516,2522],{"type":69,"value":2501},"Only Next.js auto-loads ",{"type":63,"tag":78,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":69,"value":46},{"type":69,"value":2508},". Standalone scripts (",{"type":63,"tag":78,"props":2510,"children":2512},{"className":2511},[],[2513],{"type":69,"value":2514},"drizzle-kit",{"type":69,"value":395},{"type":63,"tag":78,"props":2517,"children":2519},{"className":2518},[],[2520],{"type":69,"value":2521},"tsx",{"type":69,"value":2523},", custom Node scripts) need explicit loading:",{"type":63,"tag":474,"props":2525,"children":2527},{"className":476,"code":2526,"language":478,"meta":479,"style":479},"# Use dotenv-cli\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n\n# Or source manually\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && node scripts\u002Fmigrate.js\n",[2528],{"type":63,"tag":78,"props":2529,"children":2530},{"__ignoreMap":479},[2531,2539,2562,2603,2640,2647,2655],{"type":63,"tag":485,"props":2532,"children":2533},{"class":487,"line":488},[2534],{"type":63,"tag":485,"props":2535,"children":2536},{"style":492},[2537],{"type":69,"value":2538},"# Use dotenv-cli\n",{"type":63,"tag":485,"props":2540,"children":2541},{"class":487,"line":498},[2542,2547,2552,2557],{"type":63,"tag":485,"props":2543,"children":2544},{"style":502},[2545],{"type":69,"value":2546},"npm",{"type":63,"tag":485,"props":2548,"children":2549},{"style":507},[2550],{"type":69,"value":2551}," install",{"type":63,"tag":485,"props":2553,"children":2554},{"style":507},[2555],{"type":69,"value":2556}," -D",{"type":63,"tag":485,"props":2558,"children":2559},{"style":507},[2560],{"type":69,"value":2561}," dotenv-cli\n",{"type":63,"tag":485,"props":2563,"children":2564},{"class":487,"line":523},[2565,2570,2575,2580,2584,2588,2593,2598],{"type":63,"tag":485,"props":2566,"children":2567},{"style":502},[2568],{"type":69,"value":2569},"npx",{"type":63,"tag":485,"props":2571,"children":2572},{"style":507},[2573],{"type":69,"value":2574}," dotenv",{"type":63,"tag":485,"props":2576,"children":2577},{"style":507},[2578],{"type":69,"value":2579}," -e",{"type":63,"tag":485,"props":2581,"children":2582},{"style":507},[2583],{"type":69,"value":560},{"type":63,"tag":485,"props":2585,"children":2586},{"style":507},[2587],{"type":69,"value":1487},{"type":63,"tag":485,"props":2589,"children":2590},{"style":507},[2591],{"type":69,"value":2592}," npx",{"type":63,"tag":485,"props":2594,"children":2595},{"style":507},[2596],{"type":69,"value":2597}," drizzle-kit",{"type":63,"tag":485,"props":2599,"children":2600},{"style":507},[2601],{"type":69,"value":2602}," push\n",{"type":63,"tag":485,"props":2604,"children":2605},{"class":487,"line":533},[2606,2610,2614,2618,2622,2626,2630,2635],{"type":63,"tag":485,"props":2607,"children":2608},{"style":502},[2609],{"type":69,"value":2569},{"type":63,"tag":485,"props":2611,"children":2612},{"style":507},[2613],{"type":69,"value":2574},{"type":63,"tag":485,"props":2615,"children":2616},{"style":507},[2617],{"type":69,"value":2579},{"type":63,"tag":485,"props":2619,"children":2620},{"style":507},[2621],{"type":69,"value":560},{"type":63,"tag":485,"props":2623,"children":2624},{"style":507},[2625],{"type":69,"value":1487},{"type":63,"tag":485,"props":2627,"children":2628},{"style":507},[2629],{"type":69,"value":2592},{"type":63,"tag":485,"props":2631,"children":2632},{"style":507},[2633],{"type":69,"value":2634}," tsx",{"type":63,"tag":485,"props":2636,"children":2637},{"style":507},[2638],{"type":69,"value":2639}," scripts\u002Fseed.ts\n",{"type":63,"tag":485,"props":2641,"children":2642},{"class":487,"line":542},[2643],{"type":63,"tag":485,"props":2644,"children":2645},{"emptyLinePlaceholder":527},[2646],{"type":69,"value":530},{"type":63,"tag":485,"props":2648,"children":2649},{"class":487,"line":568},[2650],{"type":63,"tag":485,"props":2651,"children":2652},{"style":492},[2653],{"type":69,"value":2654},"# Or source manually\n",{"type":63,"tag":485,"props":2656,"children":2657},{"class":487,"line":39},[2658,2663,2668,2672,2677,2681,2685,2689,2694,2699,2704,2708,2713,2718,2722,2727],{"type":63,"tag":485,"props":2659,"children":2660},{"style":761},[2661],{"type":69,"value":2662},"source",{"type":63,"tag":485,"props":2664,"children":2665},{"style":767},[2666],{"type":69,"value":2667}," \u003C(",{"type":63,"tag":485,"props":2669,"children":2670},{"style":502},[2671],{"type":69,"value":2358},{"type":63,"tag":485,"props":2673,"children":2674},{"style":507},[2675],{"type":69,"value":2676}," -v ",{"type":63,"tag":485,"props":2678,"children":2679},{"style":767},[2680],{"type":69,"value":1237},{"type":63,"tag":485,"props":2682,"children":2683},{"style":507},[2684],{"type":69,"value":2372},{"type":63,"tag":485,"props":2686,"children":2687},{"style":767},[2688],{"type":69,"value":1237},{"type":63,"tag":485,"props":2690,"children":2691},{"style":507},[2692],{"type":69,"value":2693}," .env.local ",{"type":63,"tag":485,"props":2695,"children":2696},{"style":767},[2697],{"type":69,"value":2698},"|",{"type":63,"tag":485,"props":2700,"children":2701},{"style":502},[2702],{"type":69,"value":2703}," sed",{"type":63,"tag":485,"props":2705,"children":2706},{"style":767},[2707],{"type":69,"value":1705},{"type":63,"tag":485,"props":2709,"children":2710},{"style":507},[2711],{"type":69,"value":2712},"s\u002F^\u002Fexport \u002F",{"type":63,"tag":485,"props":2714,"children":2715},{"style":767},[2716],{"type":69,"value":2717},"')",{"type":63,"tag":485,"props":2719,"children":2720},{"style":767},[2721],{"type":69,"value":1343},{"type":63,"tag":485,"props":2723,"children":2724},{"style":502},[2725],{"type":69,"value":2726}," node",{"type":63,"tag":485,"props":2728,"children":2729},{"style":507},[2730],{"type":69,"value":2731}," scripts\u002Fmigrate.js\n",{"type":63,"tag":94,"props":2733,"children":2735},{"id":2734},"best-practices",[2736],{"type":69,"value":2737},"Best Practices",{"type":63,"tag":323,"props":2739,"children":2740},{},[2741,2758,2768,2778,2788,2802,2817],{"type":63,"tag":327,"props":2742,"children":2743},{},[2744,2756],{"type":63,"tag":179,"props":2745,"children":2746},{},[2747,2749,2754],{"type":69,"value":2748},"Use ",{"type":63,"tag":78,"props":2750,"children":2752},{"className":2751},[],[2753],{"type":69,"value":433},{"type":69,"value":2755}," as part of your setup workflow",{"type":69,"value":2757}," — document it in your README",{"type":63,"tag":327,"props":2759,"children":2760},{},[2761,2766],{"type":63,"tag":179,"props":2762,"children":2763},{},[2764],{"type":69,"value":2765},"Never hardcode secrets",{"type":69,"value":2767}," — always use environment variables",{"type":63,"tag":327,"props":2769,"children":2770},{},[2771,2776],{"type":63,"tag":179,"props":2772,"children":2773},{},[2774],{"type":69,"value":2775},"Scope narrowly",{"type":69,"value":2777}," — don't give preview deployments production database access",{"type":63,"tag":327,"props":2779,"children":2780},{},[2781,2786],{"type":63,"tag":179,"props":2782,"children":2783},{},[2784],{"type":69,"value":2785},"Rotate OIDC tokens regularly in local dev",{"type":69,"value":2787}," — re-pull when you see auth errors",{"type":63,"tag":327,"props":2789,"children":2790},{},[2791,2800],{"type":63,"tag":179,"props":2792,"children":2793},{},[2794,2795],{"type":69,"value":2748},{"type":63,"tag":78,"props":2796,"children":2798},{"className":2797},[],[2799],{"type":69,"value":53},{"type":69,"value":2801}," — commit a template with empty values so teammates know which vars are needed",{"type":63,"tag":327,"props":2803,"children":2804},{},[2805,2815],{"type":63,"tag":179,"props":2806,"children":2807},{},[2808,2810],{"type":69,"value":2809},"Prefix client-side vars with ",{"type":63,"tag":78,"props":2811,"children":2813},{"className":2812},[],[2814],{"type":69,"value":446},{"type":69,"value":2816}," — and never put secrets in them",{"type":63,"tag":327,"props":2818,"children":2819},{},[2820,2830,2832,2837],{"type":63,"tag":179,"props":2821,"children":2822},{},[2823,2825],{"type":69,"value":2824},"Keep custom vars in ",{"type":63,"tag":78,"props":2826,"children":2828},{"className":2827},[],[2829],{"type":69,"value":51},{"type":69,"value":2831}," — protects them from ",{"type":63,"tag":78,"props":2833,"children":2835},{"className":2834},[],[2836],{"type":69,"value":433},{"type":69,"value":2838}," overwrites",{"type":63,"tag":94,"props":2840,"children":2842},{"id":2841},"official-documentation",[2843],{"type":69,"value":2844},"Official Documentation",{"type":63,"tag":376,"props":2846,"children":2847},{},[2848,2858,2868],{"type":63,"tag":327,"props":2849,"children":2850},{},[2851],{"type":63,"tag":2852,"props":2853,"children":2856},"a",{"href":41,"rel":2854},[2855],"nofollow",[2857],{"type":69,"value":23},{"type":63,"tag":327,"props":2859,"children":2860},{},[2861],{"type":63,"tag":2852,"props":2862,"children":2865},{"href":2863,"rel":2864},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\u002Fenv",[2855],[2866],{"type":69,"value":2867},"Vercel CLI: env",{"type":63,"tag":327,"props":2869,"children":2870},{},[2871],{"type":63,"tag":2852,"props":2872,"children":2875},{"href":2873,"rel":2874},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fbuilding-your-application\u002Fconfiguring\u002Fenvironment-variables",[2855],[2876],{"type":69,"value":2877},"Next.js Environment Variables",{"type":63,"tag":2879,"props":2880,"children":2881},"style",{},[2882],{"type":69,"value":2883},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2885,"total":3005},[2886,2905,2921,2933,2953,2973,2993],{"slug":2887,"name":2887,"fn":2888,"description":2889,"org":2890,"tags":2891,"stars":25,"repoUrl":26,"updatedAt":2904},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2892,2895,2898,2901],{"name":2893,"slug":2894,"type":15},"Accessibility","accessibility",{"name":2896,"slug":2897,"type":15},"Charts","charts",{"name":2899,"slug":2900,"type":15},"Data Visualization","data-visualization",{"name":2902,"slug":2903,"type":15},"Design","design","2026-06-30T19:00:57.102",{"slug":2906,"name":2906,"fn":2907,"description":2908,"org":2909,"tags":2910,"stars":25,"repoUrl":26,"updatedAt":2920},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2911,2914,2917],{"name":2912,"slug":2913,"type":15},"Agents","agents",{"name":2915,"slug":2916,"type":15},"Browser Automation","browser-automation",{"name":2918,"slug":2919,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":2922,"name":2922,"fn":2923,"description":2924,"org":2925,"tags":2926,"stars":25,"repoUrl":26,"updatedAt":2932},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2927,2928,2931],{"name":2915,"slug":2916,"type":15},{"name":2929,"slug":2930,"type":15},"Local Development","local-development",{"name":2918,"slug":2919,"type":15},"2026-04-06T18:41:17.526867",{"slug":2934,"name":2934,"fn":2935,"description":2936,"org":2937,"tags":2938,"stars":25,"repoUrl":26,"updatedAt":2952},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2939,2940,2943,2946,2949],{"name":2912,"slug":2913,"type":15},{"name":2941,"slug":2942,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":2944,"slug":2945,"type":15},"SDK","sdk",{"name":2947,"slug":2948,"type":15},"Serverless","serverless",{"name":2950,"slug":2951,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":2954,"name":2954,"fn":2955,"description":2956,"org":2957,"tags":2958,"stars":25,"repoUrl":26,"updatedAt":2972},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2959,2962,2965,2968,2971],{"name":2960,"slug":2961,"type":15},"Frontend","frontend",{"name":2963,"slug":2964,"type":15},"React","react",{"name":2966,"slug":2967,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":2969,"slug":2970,"type":15},"UI Components","ui-components",{"name":17,"slug":18,"type":15},"2026-04-06T18:40:59.619419",{"slug":2974,"name":2974,"fn":2975,"description":2976,"org":2977,"tags":2978,"stars":25,"repoUrl":26,"updatedAt":2992},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2979,2982,2985,2988,2991],{"name":2980,"slug":2981,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2983,"slug":2984,"type":15},"Cost Optimization","cost-optimization",{"name":2986,"slug":2987,"type":15},"LLM","llm",{"name":2989,"slug":2990,"type":15},"Performance","performance",{"name":17,"slug":18,"type":15},"2026-04-06T18:40:44.377464",{"slug":2994,"name":2994,"fn":2995,"description":2996,"org":2997,"tags":2998,"stars":25,"repoUrl":26,"updatedAt":3004},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2999,3000,3003],{"name":2983,"slug":2984,"type":15},{"name":3001,"slug":3002,"type":15},"Database","database",{"name":2986,"slug":2987,"type":15},"2026-04-06T18:41:08.513425",600,{"items":3007,"total":3202},[3008,3029,3052,3069,3085,3100,3119,3131,3145,3159,3171,3186],{"slug":3009,"name":3009,"fn":3010,"description":3011,"org":3012,"tags":3013,"stars":3026,"repoUrl":3027,"updatedAt":3028},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3014,3017,3020,3023],{"name":3015,"slug":3016,"type":15},"Documents","documents",{"name":3018,"slug":3019,"type":15},"Healthcare","healthcare",{"name":3021,"slug":3022,"type":15},"Insurance","insurance",{"name":3024,"slug":3025,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":3030,"name":3030,"fn":3031,"description":3032,"org":3033,"tags":3034,"stars":3049,"repoUrl":3050,"updatedAt":3051},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3035,3038,3040,3043,3046],{"name":3036,"slug":3037,"type":15},".NET","dotnet",{"name":3039,"slug":3030,"type":15},"ASP.NET Core",{"name":3041,"slug":3042,"type":15},"Blazor","blazor",{"name":3044,"slug":3045,"type":15},"C#","csharp",{"name":3047,"slug":3048,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":3053,"name":3053,"fn":3054,"description":3055,"org":3056,"tags":3057,"stars":3049,"repoUrl":3050,"updatedAt":3068},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3058,3061,3064,3067],{"name":3059,"slug":3060,"type":15},"Apps SDK","apps-sdk",{"name":3062,"slug":3063,"type":15},"ChatGPT","chatgpt",{"name":3065,"slug":3066,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":3070,"name":3070,"fn":3071,"description":3072,"org":3073,"tags":3074,"stars":3049,"repoUrl":3050,"updatedAt":3084},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3075,3078,3081],{"name":3076,"slug":3077,"type":15},"API Development","api-development",{"name":3079,"slug":3080,"type":15},"CLI","cli",{"name":3082,"slug":3083,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":3086,"name":3086,"fn":3087,"description":3088,"org":3089,"tags":3090,"stars":3049,"repoUrl":3050,"updatedAt":3099},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3091,3094,3097,3098],{"name":3092,"slug":3093,"type":15},"Cloudflare","cloudflare",{"name":3095,"slug":3096,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":2941,"slug":2942,"type":15},{"name":20,"slug":21,"type":15},"2026-04-12T05:07:14.275118",{"slug":3101,"name":3101,"fn":3102,"description":3103,"org":3104,"tags":3105,"stars":3049,"repoUrl":3050,"updatedAt":3118},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3106,3109,3112,3115],{"name":3107,"slug":3108,"type":15},"Productivity","productivity",{"name":3110,"slug":3111,"type":15},"Project Management","project-management",{"name":3113,"slug":3114,"type":15},"Strategy","strategy",{"name":3116,"slug":3117,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":3120,"name":3120,"fn":3121,"description":3122,"org":3123,"tags":3124,"stars":3049,"repoUrl":3050,"updatedAt":3130},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3125,3126,3128,3129],{"name":2902,"slug":2903,"type":15},{"name":3127,"slug":3120,"type":15},"Figma",{"name":2960,"slug":2961,"type":15},{"name":3065,"slug":3066,"type":15},"2026-04-12T05:06:47.939943",{"slug":3132,"name":3132,"fn":3133,"description":3134,"org":3135,"tags":3136,"stars":3049,"repoUrl":3050,"updatedAt":3144},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3137,3138,3141,3142,3143],{"name":2902,"slug":2903,"type":15},{"name":3139,"slug":3140,"type":15},"Design System","design-system",{"name":3127,"slug":3120,"type":15},{"name":2960,"slug":2961,"type":15},{"name":2969,"slug":2970,"type":15},"2026-05-10T05:59:52.971881",{"slug":3146,"name":3146,"fn":3147,"description":3148,"org":3149,"tags":3150,"stars":3049,"repoUrl":3050,"updatedAt":3158},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3151,3152,3153,3156,3157],{"name":2902,"slug":2903,"type":15},{"name":3139,"slug":3140,"type":15},{"name":3154,"slug":3155,"type":15},"Documentation","documentation",{"name":3127,"slug":3120,"type":15},{"name":2960,"slug":2961,"type":15},"2026-05-16T06:07:47.821474",{"slug":3160,"name":3160,"fn":3161,"description":3162,"org":3163,"tags":3164,"stars":3049,"repoUrl":3050,"updatedAt":3170},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3165,3166,3167,3168,3169],{"name":2902,"slug":2903,"type":15},{"name":3127,"slug":3120,"type":15},{"name":2960,"slug":2961,"type":15},{"name":2969,"slug":2970,"type":15},{"name":3047,"slug":3048,"type":15},"2026-05-16T06:07:40.583615",{"slug":3172,"name":3172,"fn":3173,"description":3174,"org":3175,"tags":3176,"stars":3049,"repoUrl":3050,"updatedAt":3185},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3177,3180,3181,3184],{"name":3178,"slug":3179,"type":15},"Animation","animation",{"name":3082,"slug":3083,"type":15},{"name":3182,"slug":3183,"type":15},"Creative","creative",{"name":2902,"slug":2903,"type":15},"2026-05-02T05:31:48.48485",{"slug":3187,"name":3187,"fn":3188,"description":3189,"org":3190,"tags":3191,"stars":3049,"repoUrl":3050,"updatedAt":3201},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3192,3193,3194,3197,3200],{"name":3182,"slug":3183,"type":15},{"name":2902,"slug":2903,"type":15},{"name":3195,"slug":3196,"type":15},"Image Generation","image-generation",{"name":3198,"slug":3199,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]