Skip to main content
skill CX Codex GP ChatGPT official · OpenAI

vercel-services — Codex skill: what it does, how to install

Configures monorepos and multi-service deployments in a single Vercel project. Useful when pairing Python or Go backends with a frontend.

Install into Codex · Skills CLI (Vercel) All methods and platforms ↓
npx skills add openai/plugins --skill vercel-services -a codex
Open on GitHub

What vercel-services does

This skill guides Codex on setting up the experimentalServices block inside vercel.json. It maps entry points and route prefixes for each service. At request time, Vercel routes traffic using the longest prefix match. The prefix is stripped before reaching your handler.

Local development runs via vercel dev -L without cloud authentication. Tested runtimes include Python (FastAPI, Flask, Django) and Go. For Go services, you must explicitly pass "framework": "go" in vercel.json because auto-detection fails. The entrypoint for Go must be a directory rather than a file.

Install this if you bundle separate runtimes under one domain and want to skip multi-repo pipelines.

What it helps with

  • combine a Python or Go backend with a frontend in one Vercel project
  • configure experimentalServices entries and routing rules in vercel.json
  • test multi-service setups locally using vercel dev -L
  • route requests between services using auto-generated {SERVICENAME}_URL variables

Example prompts for the agent

  • Configure vercel.json for a Vite frontend and a FastAPI backend
  • Add a Go service alongside my Next.js app in Vercel
  • How do I route local services using vercel dev -L?

How to install vercel-services

1Skills CLI (Vercel)

npx skills add openai/plugins --skill vercel-services -a codex

2Manually: put the files in place

.agents/skills/vercel-services/SKILL.md

For all projects use ~/.agents/skills/

From the same set201

The whole set →
supabase official supabase Guides the agent through database configuration and strict RLS policies in Supabase. CX Codex GP ChatGPT 8installs remotion-render official Remotion Exports videos and static stills from Remotion projects using CLI commands. CX Codex GP ChatGPT 3installs figma-create-new-file official Figma Creates blank Figma, FigJam, or Slides files inside draft folders. It resolves planKey and editor types before invoking Figma MCP tools. CX Codex GP ChatGPT 6installs swiftui-performance-audit official OpenAI Pinpoints SwiftUI runtime issues like frame drops, unresponsive taps, and excessive view body computations. Works code-first and guides Instruments profiling. CX Codex GP ChatGPT 109installs swiftui-liquid-glass official OpenAI This skill helps build and review SwiftUI Liquid Glass interfaces for iOS 26+. Use it when adopting the API or checking fallbacks, interaction, and design fit. CX Codex GP ChatGPT 121installs swiftui-ui-patterns official OpenAI This skill helps build and refactor SwiftUI interfaces, from navigation and state to layouts and controls. Use it for new screens or changes to an existing project. CX Codex GP ChatGPT 114installs swiftui-view-refactor official OpenAI Refactors SwiftUI view files into clean, testable structures with dedicated subview types and proper Observation ownership. CX Codex GP ChatGPT 113installs ios-memgraph-leaks official OpenAI Captures and inspects iOS leaks from a simulator process or .memgraph. Useful for tracing retained objects and checking a fix with before-and-after evidence. CX Codex GP ChatGPT 1,054installs

Similar

java-testcontainers official github Helps write Java integration tests using Testcontainers 2.x and JUnit Jupiter with Docker dependencies. Useful when adding container tests or migrating from version 1.x. GitHub Copilot 1installs debugview microsoft A skill that drives the Sysinternals DebugView CLI, so your agent can capture Windows usermode and kernel debug output from the terminal. Claude Code GitHub Copilot 15installs wizard Matt Pocock This skill creates an interactive bash wizard for manual setup steps, CI secrets, third-party dashboards, and one-off migrations. Claude Code 553,369installs hyperframes-cli heygen-com Controls HyperFrames video workflows from the CLI: audits layouts and contrast, edits timeline clips, captures snapshots, and renders locally or in cloud runtimes. Claude Code CX Codex Cursor +1 1,200,000installs setup-pre-commit Matt Pocock This skill configures pre-commit checks for a JavaScript repository, running Prettier, type checking, and tests before each commit. Claude Code 489,289installs using-git-worktrees Jesse Vincent Prepares an isolated workspace before feature work or plan execution. It checks the repository first, then uses native worktree support or Git. Claude Code CX Codex 217,153installs finishing-a-development-branch Jesse Vincent This skill checks the test suite and guides branch completion: merge locally, open a Pull Request, or leave the work in place. Claude Code CX Codex 214,439installs orca-cli stablyai The skill lets an agent manage Orca worktrees, terminals, artifacts and the built-in browser through the orca CLI. Useful when your work already runs inside Orca. Claude Code CX Codex Cursor +1 353,000installs

Questions about vercel-services

How to install vercel-services in Codex?

Run npx skills add openai/plugins --skill vercel-services. It installs the skill file to .agents/skills/vercel-services/SKILL.md.

What does vercel-services do?

It teaches Codex how to configure multi-service Vercel monorepos using experimentalServices and accurate route prefixes.

Why is framework configuration required for Go services?

Vercel auto-detection does not work for Go services. You must set "framework": "go" in vercel.json and point entrypoint to the folder rather than a file.

Source text

SKILL.md · Apache-2.0
---
name: vercel-services
description: "Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment."
metadata:
  priority: 7
  docs:
    - "https://vercel.com/docs/services"
  sitemap: "https://vercel.com/sitemap/docs.xml"
  pathPatterns:
    - 'backend/**'
    - 'backend/main.py'
    - 'backend/main.go'
    - 'backend/go.mod'
    - 'backend/pyproject.toml'
    - 'backend/requirements.txt'
    - 'frontend/**'
    - 'apps/*/backend/**'
    - 'apps/*/frontend/**'
    - 'services/*/vercel.json'
    - '*/pyproject.toml'
    - '*/go.mod'
  bashPatterns:
    - '\bvercel\s+dev\b.*-L'
    - '\bpip\s+install\b.*fastapi'
    - '\buv\s+(sync|pip|run)\b'
    - '\bgo\s+(run|build|mod)\b'
    - '\bpython\s+-m\s+uvicorn\b'
    - '\buvicorn\b'
  importPatterns:
    - "fastapi"
  promptSignals:
    phrases:
      - "services api"
      - "vercel services"
      - "multi-service"
      - "python backend"
      - "go backend"
      - "fastapi"
      - "deploy backend"
      - "backend and frontend"
      - "multiple services"
    allOf:
      - [backend, frontend]
      - [python, vercel]
      - [go, vercel]
      - [backend, deploy]
      - [service, monorepo]
      - [fastapi, deploy]
    anyOf:
      - "backend"
      - "monorepo"
      - "service"
      - "python"
      - "golang"
    noneOf:
      - "turborepo cache"
      - "turbo.json"
      - "aws lambda"
      - "docker compose"
    minScore: 6
---

# Deploy multi-service projects with Vercel

Services let you deploy multiple independently-built units within a single Vercel project. The typical use case is combining different runtimes (e.g. Python + JavaScript) in one deployment with shared routing and environment variables, but services work for any combination — multiple services of the same runtime, different frameworks, or a mix.

This skill covers **project structure and configuration**. For the actual deployment, defer to the **deployments-cicd** skill.

## How It Works

A service is an independently built unit within your project, deployed to the same domain under a unique subpath. At build time, Vercel builds each service separately. At request time, Vercel routes incoming requests to the correct service based on the URL path prefix (longest prefix wins).

- Services are enabled via the `experimentalServices` field in `vercel.json` (see reference project).
- `vercel dev -L` auto-detects frameworks and runs all services locally as one application, handling routing automatically. The `-L` flag (short for `--local`) runs without authenticating with Vercel Cloud.
- Only `vercel.json` lives at the root. Each service manages its own dependencies independently.

## Configuration

Define services in `vercel.json`:

```json
{
  "experimentalServices": {
    "web": {
      "entrypoint": "apps/web",
      "routePrefix": "/"
    },
    "api": {
      "entrypoint": "backend/main.py",
      "routePrefix": "/server"
    }
  }
}
```

The project's Framework Preset must be set to **Services** in the Vercel dashboard.

### Configuration fields

| Field          | Required | Description                                                |
|----------------|----------|------------------------------------------------------------|
| `entrypoint`   | Yes      | Path to the service entrypoint file or directory.          |
| `routePrefix`  | Yes      | URL path prefix for routing (e.g. `/`, `/api`, `/svc/go`). |
| `framework`    | No       | Framework slug. Pins detection; auto-detected if unset.    |
| `memory`       | No       | Max available RAM in MB (128–10,240).                      |
| `maxDuration`  | No       | Execution timeout in seconds (1–900).                      |
| `includeFiles` | No       | Glob patterns for files to include in the deployment.      |
| `excludeFiles` | No       | Glob patterns for files to exclude from the deployment.    |

Do not add unknown fields — they will cause the build to fail.

## Supported runtimes and frameworks

Services is in beta. **Python** and **Go** are tested and production-ready. Other runtimes may work but are not yet validated.

### Python

Works with FastAPI, Flask, Django, or any ASGI/WSGI application. Framework is auto-detected. Set `entrypoint` to the application file (e.g. `"backend/main.py"`). Dependencies go in `pyproject.toml` in the service directory.

### Go

Set `entrypoint` to the service **directory** (e.g. `"backend"`), not a file. **Must** set `"framework": "go"` explicitly in `vercel.json` — auto-detection does not work for Go services. Dependencies in `go.mod` in the service directory.

### Other runtimes (untested)

Vercel supports Node.js, Bun, Rust, Ruby, Wasm, and Edge runtimes for functions. These can theoretically be used as services but are not yet validated.

## Routing

Vercel evaluates route prefixes from longest to shortest (most specific first), with the primary service (`/`) as the catch-all. Vercel automatically mounts services at their `routePrefix`, so service handlers should **not** include the prefix in their routes.

For frontend frameworks mounted on a subpath (not `/`), configure the framework's own base path (e.g. `basePath` in `next.config.js`) to match `routePrefix`.

## Environment variables

Vercel auto-generates URL variables so services can find each other:

| Variable                        | Example value                            | Availability | Use case                              |
|---------------------------------|------------------------------------------|--------------|---------------------------------------|
| `{SERVICENAME}_URL`             | `https://your-deploy.vercel.app/svc/api` | Server-side  | Server-to-server requests             |
| `NEXT_PUBLIC_{SERVICENAME}_URL` | `/svc/api`                               | Client-side  | Browser requests (relative, no CORS)  |

`SERVICENAME` is the key name from `experimentalServices`, uppercased. If you define an env var with the same name in project settings, your value takes precedence.

## Usage

1. Read `references/fastapi-vite/` for the canonical project layout.
2. Adapt the structure to the user's chosen runtimes — services can use any supported runtime, not just the ones in the reference.
3. Define service routes **without** the route prefix — Vercel strips the prefix before forwarding.
4. Validate that each service in `vercel.json` has `entrypoint` and `routePrefix`. Only set `framework` when auto-detection fails (required for Go).

## Output

After scaffolding, present the created file structure to the user. After deployment, present the deployment URL (refer to the **deployments-cicd** skill for details).

## Troubleshooting

### 404 on routes after deployment

The project needs the Services framework preset:

1. Go to Project Settings → Build & Deployment → Framework Preset
2. Select **Services** from the dropdown
3. Redeploy

### Routes return unexpected results

1. Ensure all services are picked up by `vercel dev` — check logs. If a service is missing, verify `vercel.json`. Try setting `framework` explicitly.
2. Validate route prefix behavior: handlers declare routes without `routePrefix` (e.g. `/health`), but requests from other services use the full prefix (e.g. `/api/health`).
3. For frontend services on a subpath, confirm the framework's base path config matches `routePrefix`.

© Vercel Labs · Apache-2.0 · openai/plugins

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor