Skip to content
Merged
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 generated/build-from-skills.manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 1,
"generatedAt": "2026-03-12T01:01:33.146Z",
"generatedAt": "2026-03-13T19:50:01.129Z",
"templates": [
{
"template": "agents/ai-architect.md.tmpl",
Expand Down
34 changes: 31 additions & 3 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-03-12T01:01:20.029Z
> Skills: 46
> Generated: 2026-03-13T19:55:41.251Z
> Skills: 47

## Table of Contents

Expand All @@ -24,6 +24,7 @@
| `ai-gateway` | 7 | 0 | 5 | 2 |
| `env-vars` | 7 | 10 | 4 | 0 |
| `vercel-api` | 7 | 2 | 6 | 0 |
| `vercel-services` | 7 | 12 | 6 | 1 |
| `vercel-storage` | 7 | 15 | 48 | 8 |
| `verification` | 7 | 0 | 8 | 0 |
| `ai-generation-persistence` | 6 | 10 | 0 | 5 |
Expand Down Expand Up @@ -389,6 +390,33 @@
- `.mcp.json` (path)
- `.vercel/project.json` (path)

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

**Path patterns:**
- `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`

**Bash patterns:**
- `\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`

**Import patterns:**
- `fastapi`

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

**Path patterns:**
Expand Down Expand Up @@ -1479,7 +1507,7 @@ Shows which skills compete on shared bash commands.

**Priority 8:** `ai-sdk`, `bootstrap`, `chat-sdk`, `investigation-mode`, `vercel-functions`

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

**Priority 6:** `ai-generation-persistence`, `auth`, `cron-jobs`, `deployments-cicd`, `next-forge`, `observability`, `routing-middleware`, `runtime-cache`, `shadcn`, `sign-in-with-vercel`, `vercel-flags`

Expand Down
156 changes: 155 additions & 1 deletion generated/skill-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"generatedAt": "2026-03-12T01:01:33.116Z",
"generatedAt": "2026-03-13T19:50:01.103Z",
"version": 2,
"skills": {
"vercel-agent": {
Expand Down Expand Up @@ -2889,6 +2889,160 @@
"examples": []
}
},
"vercel-services": {
"priority": 7,
"summary": "Deploy multiple services in one Vercel project — e.g. a Python backend alongside a JS frontend",
"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"
],
"bodyPath": "skills/vercel-services/SKILL.md",
"pathRegexSources": [
"^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$"
],
"bashRegexSources": [
"\\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"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]fastapi(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "@app\\.(get|post|put|delete|patch)\\s*\\(\\s*[''\"]\\/api\\/",
"message": "Do not include routePrefix in backend routes — Vercel strips the prefix before forwarding. Use @app.get(\"/health\") not @app.get(\"/api/health\")",
"severity": "error"
},
{
"pattern": "http\\.HandleFunc\\s*\\(\\s*[''\"]\\/api\\/",
"message": "Do not include routePrefix in Go handlers — Vercel strips the prefix. Use \"/health\" not \"/api/health\"",
"severity": "error"
}
],
"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
},
"retrieval": {
"aliases": [
"multi-service",
"backend service",
"services api",
"monorepo deploy",
"monorepo services"
],
"intents": [
"deploy backend and frontend together on vercel",
"set up python backend alongside next.js frontend",
"configure multi-service vercel project",
"add go backend to vercel project"
],
"entities": [
"experimentalServices",
"routePrefix",
"entrypoint",
"Services API",
"vercel.json services"
],
"examples": [
"deploy a fastapi backend with a react frontend",
"add a go api service to my vercel project",
"set up a multi-service monorepo on vercel"
]
}
},
"observability": {
"priority": 6,
"summary": "",
Expand Down
7 changes: 6 additions & 1 deletion hooks/session-start-profiler.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ var FILE_MARKERS = [
{ file: "middleware.js", skills: ["routing-middleware"] },
{ file: "components.json", skills: ["shadcn"] },
{ file: ".env.local", skills: ["env-vars"] },
{ file: "pnpm-workspace.yaml", skills: ["turborepo"] }
{ file: "pnpm-workspace.yaml", skills: ["turborepo"] },
{ file: "backend/pyproject.toml", skills: ["vercel-services"] },
{ file: "backend/main.py", skills: ["vercel-services"] },
{ file: "backend/go.mod", skills: ["vercel-services"] },
{ file: "backend/main.go", skills: ["vercel-services"] }
];
var PACKAGE_MARKERS = {
"next": ["nextjs"],
Expand Down Expand Up @@ -127,6 +131,7 @@ function profileProject(projectRoot) {
skills.add("routing-middleware");
}
if (vercelConfig.functions) skills.add("vercel-functions");
if (vercelConfig.experimentalServices) skills.add("vercel-services");
}
return [...skills].sort();
}
Expand Down
5 changes: 5 additions & 0 deletions hooks/src/session-start-profiler.mts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ const FILE_MARKERS: FileMarker[] = [
{ file: "components.json", skills: ["shadcn"] },
{ file: ".env.local", skills: ["env-vars"] },
{ file: "pnpm-workspace.yaml", skills: ["turborepo"] },
{ file: "backend/pyproject.toml", skills: ["vercel-services"] },
{ file: "backend/main.py", skills: ["vercel-services"] },
{ file: "backend/go.mod", skills: ["vercel-services"] },
{ file: "backend/main.go", skills: ["vercel-services"] },
];

/**
Expand Down Expand Up @@ -206,6 +210,7 @@ export function profileProject(projectRoot: string): string[] {
skills.add("routing-middleware");
}
if (vercelConfig.functions) skills.add("vercel-functions");
if (vercelConfig.experimentalServices) skills.add("vercel-services");
}

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

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

/**
Expand All @@ -53,6 +56,7 @@ export const VERCEL_JSON_SKILLS = new Set([
"deployments-cicd",
"routing-middleware",
"vercel-functions",
"vercel-services",
]);

// ---------------------------------------------------------------------------
Expand Down
7 changes: 5 additions & 2 deletions hooks/vercel-config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@ var KEY_SKILL_MAP = {
outputDirectory: ["deployments-cicd"],
framework: ["deployments-cicd"],
devCommand: ["deployments-cicd"],
ignoreCommand: ["deployments-cicd"]
ignoreCommand: ["deployments-cicd"],
// Services
experimentalServices: ["vercel-services"]
};
var VERCEL_JSON_SKILLS = /* @__PURE__ */ new Set([
"cron-jobs",
"deployments-cicd",
"routing-middleware",
"vercel-functions"
"vercel-functions",
"vercel-services"
]);
function resolveVercelJsonSkills(filePath) {
const content = safeReadFile(filePath);
Expand Down
Loading
Loading