Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "0.46.0",
"version": "0.47.0",
"description": "Build and deploy web apps and agents",
"author": {
"name": "Vercel",
Expand Down
2 changes: 1 addition & 1 deletion .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "0.46.0",
"version": "0.47.0",
"description": "Build and deploy web apps and agents",
"author": {
"name": "Vercel",
Expand Down
2 changes: 1 addition & 1 deletion .kimi-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vercel-plugin",
"version": "0.46.0",
"version": "0.47.0",
"description": "Comprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.",
"keywords": [
"vercel",
Expand Down
2 changes: 1 addition & 1 deletion .plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vercel-plugin",
"version": "0.46.0",
"version": "0.47.0",
"description": "Comprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.",
"author": {
"name": "Vercel",
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ A text-form relational graph covering:
- Common cross-product workflows
- Migration awareness for sunset products

### Skills (31 skills)
### Skills (32 skills)

| Skill | Covers |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
Expand Down Expand Up @@ -78,6 +78,7 @@ A text-form relational graph covering:
| `vercel-firewall` | DDoS protection, WAF rules, rate limiting, bot filtering, and IP controls |
| `vercel-functions` | Serverless, Edge, Fluid Compute, streaming, Cron Jobs, configuration |
| `vercel-sandbox` | Ephemeral Firecracker microVMs for running untrusted/AI-generated code safely |
| `vercel-services` | Multiple frontends and backends in one project, with public rewrites and private service bindings |
| `vercel-storage` | Blob, Edge Config, Neon Postgres, Upstash Redis, migration from sunset packages |
| `verification` | Full-story verification — infers user story, verifies end-to-end browser → API → data → response |
| `workflow` | Workflow DevKit — durable execution, DurableAgent, steps, Worlds, pause/resume |
Expand Down Expand Up @@ -227,7 +228,7 @@ Exits non-zero if any `SKILL.md` is stale. Add to CI to catch drift.
vercel-plugin/
├── .plugin/plugin.json # Plugin manifest
├── vercel.md # Ecosystem graph + conventions (injected via SessionStart hook)
├── skills/ # 31 skills
├── skills/ # 32 skills
│ ├── ai-sdk/ # Upstream-synced skill example:
│ │ ├── overlay.yaml # Plugin injection metadata
│ │ ├── upstream/ # Pure upstream content
Expand Down Expand Up @@ -267,6 +268,7 @@ bun run build:from-skills # Stage 4: Resolve template includes
- Workflow DevKit (DurableAgent, Worlds, open source)
- AI Gateway (100+ models, provider routing, cost tracking)
- Vercel Functions (Fluid Compute, streaming, Cron Jobs)
- Vercel Services (multiple frontends and backends, public rewrites, private bindings)
- Storage (Blob, Edge Config, Neon Postgres, Upstash Redis)
- Routing Middleware (request interception, Edge/Node.js/Bun runtimes)
- Runtime Cache API (per-region KV cache, tag-based invalidation)
Expand Down
24 changes: 19 additions & 5 deletions generated/skill-catalog.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Skill Catalog

> Auto-generated by `scripts/generate-catalog.ts` — do not edit manually.
> Generated: 2026-07-31T16:50:47.870Z
> Skills: 31
> Generated: 2026-08-06T02:59:07.756Z
> Skills: 32

## Table of Contents

Expand All @@ -27,6 +27,7 @@
| `env-vars` | 7 | 10 | 4 | 0 |
| `microfrontends` | 7 | 4 | 6 | 1 |
| `vercel-firewall` | 7 | 0 | 1 | 0 |
| `vercel-services` | 7 | 2 | 1 | 0 |
| `vercel-storage` | 7 | 15 | 48 | 8 |
| `verification` | 7 | 0 | 8 | 0 |
| `auth` | 6 | 14 | 12 | 0 |
Expand Down Expand Up @@ -380,6 +381,19 @@
**Matched examples:**
- `vercel firewall` (bash)

#### `vercel-services` (priority 7)

**Path patterns:**
- `vercel.json`
- `apps/*/vercel.json`

**Bash patterns:**
- `\b(?:vercel|vc)\s+dev\b[^\n]*(?:--local|-L)(?:\s|$)`

**Matched examples:**
- `vercel.json` (path)
- `apps/web/vercel.json` (path)

#### `vercel-storage` (priority 7)

**Path patterns:**
Expand Down Expand Up @@ -922,8 +936,8 @@ Shows which skills compete on shared file targets.

| Target File | Competing Skills (priority) |
|-------------|---------------------------|
| `vercel.json` | `vercel-functions` (8), `deployments-cicd` (6), `routing-middleware` (6), `vercel-cli` (4) |
| `apps/web/vercel.json` | `vercel-functions` (8), `deployments-cicd` (6), `next-forge` (6), `routing-middleware` (6) |
| `vercel.json` | `vercel-functions` (8), `vercel-services` (7), `deployments-cicd` (6), `routing-middleware` (6), `vercel-cli` (4) |
| `apps/web/vercel.json` | `vercel-functions` (8), `vercel-services` (7), `deployments-cicd` (6), `next-forge` (6), `routing-middleware` (6) |
| `middleware.ts` | `auth` (6), `routing-middleware` (6) |
| `middleware.js` | `auth` (6), `routing-middleware` (6) |
| `src/middleware.ts` | `auth` (6), `routing-middleware` (6) |
Expand Down Expand Up @@ -970,7 +984,7 @@ Shows which skills compete on shared bash commands.

**Priority 8:** `access-protected-vercel-deployment`, `ai-sdk`, `bootstrap`, `chat-sdk`, `eve`, `vercel-functions`

**Priority 7:** `ai-gateway`, `env-vars`, `microfrontends`, `vercel-firewall`, `vercel-storage`, `verification`
**Priority 7:** `ai-gateway`, `env-vars`, `microfrontends`, `vercel-firewall`, `vercel-services`, `vercel-storage`, `verification`

**Priority 6:** `auth`, `cdn-caching`, `deployments-cicd`, `next-cache-components`, `next-forge`, `next-upgrade`, `routing-middleware`, `runtime-cache`, `shadcn`

Expand Down
102 changes: 101 additions & 1 deletion generated/skill-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"generatedAt": "2026-07-31T18:16:05.834Z",
"generatedAt": "2026-08-06T02:59:36.893Z",
"version": 2,
"skills": {
"access-protected-vercel-deployment": {
Expand Down Expand Up @@ -3998,6 +3998,106 @@
"examples": []
}
},
"vercel-services": {
"priority": 7,
"summary": "Compose multiple frontends and backends in one Vercel project",
"docs": [
"https://vercel.com/docs/services",
"https://vercel.com/docs/services/routing",
"https://vercel.com/docs/services/bindings",
"https://vercel.com/docs/services/config-reference"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"vercel.json",
"apps/*/vercel.json"
],
"bashPatterns": [
"\\b(?:vercel|vc)\\s+dev\\b[^\\n]*(?:--local|-L)(?:\\s|$)"
],
"importPatterns": [],
"bodyPath": "skills/vercel-services/SKILL.md",
"pathRegexSources": [
"^vercel\\.json$",
"^apps\\/[^/]*\\/vercel\\.json$"
],
"bashRegexSources": [
"\\b(?:vercel|vc)\\s+dev\\b[^\\n]*(?:--local|-L)(?:\\s|$)"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"vercel services",
"vercel service binding",
"vercel service bindings",
"multi-service vercel",
"multiple services on vercel",
"frontend and backend on vercel"
],
"allOf": [
[
"frontend",
"backend",
"vercel"
],
[
"polyglot",
"vercel"
],
[
"multiple",
"services",
"vercel"
],
[
"services",
"vercel.json"
],
[
"vercel",
"service",
"binding"
]
],
"anyOf": [
"frontend",
"backend",
"monorepo",
"polyglot",
"service",
"binding",
"vercel"
],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"Vercel Services",
"multi-service project",
"polyglot project",
"service binding",
"service rewrite"
],
"intents": [
"deploy frontend and backend together on Vercel",
"configure multiple services in vercel.json",
"route requests to a service",
"call another service privately"
],
"entities": [
"services",
"bindings",
"destination.service",
"root"
],
"examples": [
"put a Next.js frontend and FastAPI backend in one Vercel project",
"expose one service at /api and keep another service private",
"inject an internal backend URL into the frontend service"
]
}
},
"vercel-storage": {
"priority": 7,
"summary": "",
Expand Down
3 changes: 3 additions & 0 deletions hooks/session-start-profiler.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ function profileProject(projectRoot) {
skills.add("routing-middleware");
}
if (vercelConfig.functions) skills.add("vercel-functions");
if (vercelConfig.services) {
skills.add("vercel-services");
}
}
return [...skills].sort();
}
Expand Down
3 changes: 3 additions & 0 deletions hooks/src/session-start-profiler.mts
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ export function profileProject(projectRoot: string): string[] {
skills.add("routing-middleware");
}
if (vercelConfig.functions) skills.add("vercel-functions");
if (vercelConfig.services) {
skills.add("vercel-services");
}
}

return [...skills].sort();
Expand Down
3 changes: 3 additions & 0 deletions hooks/src/vercel-config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ const KEY_SKILL_MAP: Record<string, string[]> = {
devCommand: ["deployments-cicd"],
ignoreCommand: ["deployments-cicd"],

// Services
services: ["vercel-services"],
};

/**
Expand All @@ -49,6 +51,7 @@ const KEY_SKILL_MAP: Record<string, string[]> = {
export const VERCEL_JSON_SKILLS = new Set([
"deployments-cicd",
"routing-middleware",
"vercel-services",
"vercel-functions",
]);

Expand Down
2 changes: 1 addition & 1 deletion hooks/telemetry.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { join, dirname } from "path";
import { homedir } from "os";
var BRIDGE_ENDPOINT = "https://telemetry.vercel.com/api/vercel-plugin/v1/events";
var FLUSH_TIMEOUT_MS = 3e3;
var PLUGIN_VERSION = true ? "0.46.0" : "0.43.0";
var PLUGIN_VERSION = true ? "0.47.0" : "0.43.0";
var ACTIVE_SESSION_TTL_MS = 60 * 60 * 1e3;
var DAU_STAMP_PATH = join(homedir(), ".config", "vercel-plugin", "dau-stamp");
var FIRST_USE_STAMP_PATH = join(homedir(), ".config", "vercel-plugin", "first-use-stamp");
Expand Down
5 changes: 4 additions & 1 deletion hooks/vercel-config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,14 @@ var KEY_SKILL_MAP = {
outputDirectory: ["deployments-cicd"],
framework: ["deployments-cicd"],
devCommand: ["deployments-cicd"],
ignoreCommand: ["deployments-cicd"]
ignoreCommand: ["deployments-cicd"],
// Services
services: ["vercel-services"]
};
var VERCEL_JSON_SKILLS = /* @__PURE__ */ new Set([
"deployments-cicd",
"routing-middleware",
"vercel-services",
"vercel-functions"
]);
function resolveVercelJsonSkills(filePath) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vercel-plugin",
"version": "0.46.0",
"version": "0.47.0",
"private": true,
"license": "Apache-2.0",
"bin": {
Expand Down
Loading
Loading