Files
vercel__vercel-plugin/generated/skill-manifest.json

6073 lines
181 KiB
JSON

{
"generatedAt": "2026-03-10T20:31:32.307Z",
"version": 2,
"skills": {
"vercel-agent": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/docs",
"https://sdk.vercel.ai/docs"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".github/workflows/vercel*.yml",
".github/workflows/vercel*.yaml",
".github/workflows/deploy*.yml",
".github/workflows/deploy*.yaml",
".github/workflows/preview*.yml",
".github/workflows/preview*.yaml"
],
"bashPatterns": [
"\\bvercel\\s+agent\\b"
],
"importPatterns": [],
"bodyPath": "skills/vercel-agent/SKILL.md",
"pathRegexSources": [
"^\\.github\\/workflows\\/vercel[^/]*\\.yml$",
"^\\.github\\/workflows\\/vercel[^/]*\\.yaml$",
"^\\.github\\/workflows\\/deploy[^/]*\\.yml$",
"^\\.github\\/workflows\\/deploy[^/]*\\.yaml$",
"^\\.github\\/workflows\\/preview[^/]*\\.yml$",
"^\\.github\\/workflows\\/preview[^/]*\\.yaml$"
],
"bashRegexSources": [
"\\bvercel\\s+agent\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"ai code review",
"incident debugger",
"vercel ai tools",
"pr analyzer"
],
"intents": [
"set up vercel agent",
"automate code review",
"investigate incident",
"configure ai tools"
],
"entities": [
"Vercel Agent",
"code review",
"incident investigation",
"SDK"
],
"examples": []
}
},
"routing-middleware": {
"priority": 6,
"summary": "",
"docs": [
"https://nextjs.org/docs/app/building-your-application/routing/middleware",
"https://vercel.com/docs/routing-middleware"
],
"sitemap": "https://nextjs.org/sitemap.xml",
"pathPatterns": [
"middleware.ts",
"middleware.js",
"middleware.mts",
"middleware.mjs",
"proxy.ts",
"proxy.js",
"proxy.mts",
"proxy.mjs",
"src/middleware.ts",
"src/middleware.js",
"src/middleware.mts",
"src/middleware.mjs",
"src/proxy.ts",
"src/proxy.js",
"src/proxy.mts",
"src/proxy.mjs",
"vercel.json",
"apps/*/vercel.json",
"vercel.ts",
"vercel.mts"
],
"bashPatterns": [
"\\bnpx\\s+@vercel/config\\b"
],
"importPatterns": [],
"bodyPath": "skills/routing-middleware/SKILL.md",
"pathRegexSources": [
"^middleware\\.ts$",
"^middleware\\.js$",
"^middleware\\.mts$",
"^middleware\\.mjs$",
"^proxy\\.ts$",
"^proxy\\.js$",
"^proxy\\.mts$",
"^proxy\\.mjs$",
"^src\\/middleware\\.ts$",
"^src\\/middleware\\.js$",
"^src\\/middleware\\.mts$",
"^src\\/middleware\\.mjs$",
"^src\\/proxy\\.ts$",
"^src\\/proxy\\.js$",
"^src\\/proxy\\.mts$",
"^src\\/proxy\\.mjs$",
"^vercel\\.json$",
"^apps\\/[^/]*\\/vercel\\.json$",
"^vercel\\.ts$",
"^vercel\\.mts$"
],
"bashRegexSources": [
"\\bnpx\\s+@vercel/config\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"request interceptor",
"middleware",
"rewrite rules",
"redirect rules"
],
"intents": [
"intercept requests",
"add middleware",
"configure rewrites",
"set up redirects"
],
"entities": [
"middleware",
"rewrite",
"redirect",
"personalization",
"Edge"
],
"examples": []
}
},
"agent-browser-verify": {
"priority": 2,
"summary": "",
"docs": [
"https://docs.anthropic.com/en/docs/claude-code/sub-agents"
],
"pathPatterns": [],
"bashPatterns": [
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\s*(dev)?\\b",
"\\bnuxt\\s+dev\\b",
"\\bvercel\\s+dev\\b"
],
"importPatterns": [],
"bodyPath": "skills/agent-browser-verify/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\s*(dev)?\\b",
"\\bnuxt\\s+dev\\b",
"\\bvercel\\s+dev\\b"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"check the page",
"check the browser",
"check the site",
"is the page working",
"is it loading",
"blank page",
"white screen",
"nothing showing",
"page is broken",
"screenshot the page",
"take a screenshot",
"check for errors",
"console errors",
"browser errors",
"page is stuck",
"page is hanging",
"page not loading",
"page frozen",
"spinner not stopping",
"page not responding",
"page won't load",
"page will not load",
"nothing renders",
"nothing rendered",
"ui is broken",
"screen is blank",
"screen is white",
"app won't load"
],
"allOf": [
[
"check",
"page"
],
[
"check",
"browser"
],
[
"check",
"site"
],
[
"blank",
"page"
],
[
"white",
"screen"
],
[
"console",
"errors"
],
[
"page",
"broken"
],
[
"page",
"loading"
],
[
"not",
"rendering"
],
[
"page",
"stuck"
],
[
"page",
"hanging"
],
[
"page",
"frozen"
],
[
"page",
"timeout"
]
],
"anyOf": [
"page",
"browser",
"screen",
"rendering",
"visual",
"spinner",
"loading"
],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"browser verify",
"dev server check",
"visual check",
"page verification"
],
"intents": [
"verify dev server",
"check page loads",
"find console errors",
"validate UI"
],
"entities": [
"dev server",
"console errors",
"visual check",
"gut-check"
],
"examples": []
}
},
"micro": {
"priority": 4,
"summary": "",
"docs": [
"https://github.com/vercel/micro"
],
"pathPatterns": [],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bmicro\\b",
"\\bnpx\\s+micro\\b",
"\\bnpx\\s+micro-dev\\b"
],
"importPatterns": [
"micro",
"micro-dev"
],
"bodyPath": "skills/micro/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmicro\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bmicro\\b",
"\\bnpx\\s+micro\\b",
"\\bnpx\\s+micro-dev\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]micro(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]micro-dev(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"microservice",
"http server",
"lightweight api",
"micro framework"
],
"intents": [
"create microservice",
"build http server",
"set up api endpoint",
"use micro"
],
"entities": [
"micro",
"microservice",
"HTTP",
"async handler"
],
"examples": []
}
},
"agent-browser": {
"priority": 3,
"summary": "",
"docs": [
"https://docs.anthropic.com/en/docs/claude-code/sub-agents"
],
"pathPatterns": [
"agent-browser.json",
"playwright.config.*",
"e2e/**",
"tests/e2e/**",
"test/e2e/**",
"cypress/**",
"cypress.config.*"
],
"bashPatterns": [
"\\bagent-browser\\b",
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\b",
"\\bnuxt\\s+dev\\b",
"\\bvercel\\s+dev\\b",
"\\blocalhost:\\d+",
"\\b127\\.0\\.0\\.1:\\d+",
"\\bcurl\\s+.*localhost",
"\\bopen\\s+https?://",
"\\bplaywright\\b",
"\\bcypress\\b"
],
"importPatterns": [],
"bodyPath": "skills/agent-browser/SKILL.md",
"pathRegexSources": [
"^agent-browser\\.json$",
"^playwright\\.config\\.[^/]*$",
"^e2e\\/.*$",
"^tests\\/e2e\\/.*$",
"^test\\/e2e\\/.*$",
"^cypress\\/.*$",
"^cypress\\.config\\.[^/]*$"
],
"bashRegexSources": [
"\\bagent-browser\\b",
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\b",
"\\bnuxt\\s+dev\\b",
"\\bvercel\\s+dev\\b",
"\\blocalhost:\\d+",
"\\b127\\.0\\.0\\.1:\\d+",
"\\bcurl\\s+.*localhost",
"\\bopen\\s+https?://",
"\\bplaywright\\b",
"\\bcypress\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"browser automation",
"puppeteer",
"playwright",
"web scraping"
],
"intents": [
"automate browser",
"take screenshot",
"test web app",
"fill form",
"click button"
],
"entities": [
"Puppeteer",
"Playwright",
"screenshot",
"browser",
"headless"
],
"examples": []
}
},
"json-render": {
"priority": 4,
"summary": "",
"docs": [
"https://nextjs.org/docs/app/api-reference/file-conventions/route"
],
"sitemap": "https://nextjs.org/sitemap.xml",
"pathPatterns": [
"components/chat/**",
"components/chat-*.tsx",
"components/chat-*.ts",
"src/components/chat/**",
"src/components/chat-*.tsx",
"src/components/chat-*.ts",
"components/message*.tsx",
"src/components/message*.tsx"
],
"bashPatterns": [],
"importPatterns": [],
"bodyPath": "skills/json-render/SKILL.md",
"pathRegexSources": [
"^components\\/chat\\/.*$",
"^components\\/chat-[^/]*\\.tsx$",
"^components\\/chat-[^/]*\\.ts$",
"^src\\/components\\/chat\\/.*$",
"^src\\/components\\/chat-[^/]*\\.tsx$",
"^src\\/components\\/chat-[^/]*\\.ts$",
"^components\\/message[^/]*\\.tsx$",
"^src\\/components\\/message[^/]*\\.tsx$"
],
"bashRegexSources": [],
"importRegexSources": [],
"retrieval": {
"aliases": [
"chat rendering",
"ai response display",
"message parts",
"tool call ui"
],
"intents": [
"render chat messages",
"display tool calls",
"show streaming response",
"format ai output"
],
"entities": [
"UIMessage",
"tool call",
"streaming",
"message parts"
],
"examples": []
}
},
"payments": {
"priority": 5,
"summary": "",
"docs": [
"https://docs.stripe.com",
"https://docs.stripe.com/payments/quickstart"
],
"sitemap": "https://docs.stripe.com/sitemap.xml",
"pathPatterns": [
"app/api/webhook/stripe/**",
"app/api/webhooks/stripe/**",
"src/app/api/webhook/stripe/**",
"src/app/api/webhooks/stripe/**",
"pages/api/webhook/stripe.*",
"pages/api/webhooks/stripe.*",
"app/api/checkout/**",
"src/app/api/checkout/**",
"app/api/stripe/**",
"src/app/api/stripe/**",
"lib/stripe.*",
"src/lib/stripe.*",
"utils/stripe.*",
"src/utils/stripe.*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bstripe\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@stripe/react-stripe-js\\b"
],
"importPatterns": [],
"bodyPath": "skills/payments/SKILL.md",
"pathRegexSources": [
"^app\\/api\\/webhook\\/stripe\\/.*$",
"^app\\/api\\/webhooks\\/stripe\\/.*$",
"^src\\/app\\/api\\/webhook\\/stripe\\/.*$",
"^src\\/app\\/api\\/webhooks\\/stripe\\/.*$",
"^pages\\/api\\/webhook\\/stripe\\.[^/]*$",
"^pages\\/api\\/webhooks\\/stripe\\.[^/]*$",
"^app\\/api\\/checkout\\/.*$",
"^src\\/app\\/api\\/checkout\\/.*$",
"^app\\/api\\/stripe\\/.*$",
"^src\\/app\\/api\\/stripe\\/.*$",
"^lib\\/stripe\\.[^/]*$",
"^src\\/lib\\/stripe\\.[^/]*$",
"^utils\\/stripe\\.[^/]*$",
"^src\\/utils\\/stripe\\.[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bstripe\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bstripe\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@stripe/stripe-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@stripe/stripe-js\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@stripe/react-stripe-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@stripe/react-stripe-js\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"stripe",
"billing",
"checkout",
"subscriptions"
],
"intents": [
"add payments",
"set up stripe",
"implement checkout",
"handle subscriptions"
],
"entities": [
"Stripe",
"checkout",
"webhook",
"subscription",
"payment intent"
],
"examples": []
}
},
"deployments-cicd": {
"priority": 6,
"summary": "",
"docs": [
"https://vercel.com/docs/deployments/overview",
"https://vercel.com/docs/git"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".github/workflows/*.yml",
".github/workflows/*.yaml",
".gitlab-ci.yml",
"bitbucket-pipelines.yml",
"vercel.json",
"apps/*/vercel.json"
],
"bashPatterns": [
"\\bvercel\\s+deploy\\b",
"\\bvercel\\s+--prod\\b",
"\\bvercel\\s+promote\\b",
"\\bvercel\\s+rollback\\b",
"\\bvercel\\s+inspect\\b",
"\\bvercel\\s+build\\b",
"\\bvercel\\s+deploy\\s+--prebuilt\\b"
],
"importPatterns": [],
"bodyPath": "skills/deployments-cicd/SKILL.md",
"pathRegexSources": [
"^\\.github\\/workflows\\/[^/]*\\.yml$",
"^\\.github\\/workflows\\/[^/]*\\.yaml$",
"^\\.gitlab-ci\\.yml$",
"^bitbucket-pipelines\\.yml$",
"^vercel\\.json$",
"^apps\\/[^/]*\\/vercel\\.json$"
],
"bashRegexSources": [
"\\bvercel\\s+deploy\\b",
"\\bvercel\\s+--prod\\b",
"\\bvercel\\s+promote\\b",
"\\bvercel\\s+rollback\\b",
"\\bvercel\\s+inspect\\b",
"\\bvercel\\s+build\\b",
"\\bvercel\\s+deploy\\s+--prebuilt\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"deploy",
"ci cd",
"continuous deployment",
"release pipeline"
],
"intents": [
"deploy to vercel",
"set up ci cd",
"promote deployment",
"rollback deploy"
],
"entities": [
"vercel deploy",
"preview",
"production",
"rollback",
"promote",
"CI workflow"
],
"examples": []
}
},
"vercel-storage": {
"priority": 7,
"summary": "",
"docs": [
"https://vercel.com/docs/storage"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"lib/blob/**",
"lib/storage/**",
"src/lib/blob/**",
"src/lib/storage/**",
"lib/blob.*",
"lib/storage.*",
"lib/edge-config.*",
"src/lib/blob.*",
"src/lib/storage.*",
"src/lib/edge-config.*",
"supabase/**",
"lib/supabase.*",
"src/lib/supabase.*",
"prisma/schema.prisma",
"prisma/**"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/blob\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/edge-config\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\byarn\\s+add\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\byarn\\s+add\\s+[^\\n]*@upstash/redis\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/kv\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/postgres\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\byarn\\s+add\\s+[^\\n]*@supabase/ssr\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@prisma/client\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@libsql/client\\b"
],
"importPatterns": [
"@vercel/blob",
"@vercel/edge-config",
"@neondatabase/serverless",
"@upstash/redis",
"@vercel/kv",
"@vercel/postgres",
"@supabase/supabase-js",
"@prisma/client"
],
"bodyPath": "skills/vercel-storage/SKILL.md",
"pathRegexSources": [
"^lib\\/blob\\/.*$",
"^lib\\/storage\\/.*$",
"^src\\/lib\\/blob\\/.*$",
"^src\\/lib\\/storage\\/.*$",
"^lib\\/blob\\.[^/]*$",
"^lib\\/storage\\.[^/]*$",
"^lib\\/edge-config\\.[^/]*$",
"^src\\/lib\\/blob\\.[^/]*$",
"^src\\/lib\\/storage\\.[^/]*$",
"^src\\/lib\\/edge-config\\.[^/]*$",
"^supabase\\/.*$",
"^lib\\/supabase\\.[^/]*$",
"^src\\/lib\\/supabase\\.[^/]*$",
"^prisma\\/schema\\.prisma$",
"^prisma\\/.*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/blob\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/blob\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/edge-config\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/edge-config\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase/serverless\\b",
"\\byarn\\s+add\\s+[^\\n]*@neondatabase/serverless\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash/redis\\b",
"\\byarn\\s+add\\s+[^\\n]*@upstash/redis\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/kv\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/kv\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/postgres\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/postgres\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase/supabase-js\\b",
"\\byarn\\s+add\\s+[^\\n]*@supabase/supabase-js\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase/ssr\\b",
"\\byarn\\s+add\\s+[^\\n]*@supabase/ssr\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@prisma/client\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@libsql/client\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/blob(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/edge-config(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@neondatabase\\/serverless(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@upstash\\/redis(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/kv(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/postgres(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@supabase\\/supabase-js(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@prisma\\/client(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "from\\s+['\"]@vercel/kv['\"]",
"message": "@vercel/kv is deprecated — migrate to @upstash/redis (Redis.fromEnv()) instead",
"severity": "error"
},
{
"pattern": "from\\s+['\"]@vercel/postgres['\"]",
"message": "@vercel/postgres is deprecated — use @neondatabase/serverless with drizzle-orm instead",
"severity": "error"
}
],
"retrieval": {
"aliases": [
"database",
"blob storage",
"redis",
"postgres"
],
"intents": [
"add storage",
"set up database",
"configure blob storage",
"use edge config"
],
"entities": [
"Blob",
"Edge Config",
"Neon Postgres",
"Upstash Redis",
"Vercel Storage"
],
"examples": []
}
},
"ncc": {
"priority": 4,
"summary": "",
"docs": [
"https://github.com/vercel/ncc"
],
"pathPatterns": [],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/ncc\\b",
"\\bncc\\s+build\\b"
],
"importPatterns": [
"@vercel/ncc"
],
"bodyPath": "skills/ncc/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/ncc\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/ncc\\b",
"\\bncc\\s+build\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/ncc(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"node bundler",
"single file bundle",
"ncc compiler",
"node compiler"
],
"intents": [
"bundle node module",
"compile to single file",
"package serverless function",
"use ncc"
],
"entities": [
"@vercel/ncc",
"ncc",
"bundle",
"single file"
],
"examples": []
}
},
"investigation-mode": {
"priority": 8,
"summary": "Debug stuck/hung apps: check logs → workflow runs → browser → deployment",
"docs": [
"https://docs.anthropic.com/en/docs/claude-code/sub-agents"
],
"pathPatterns": [
"**/middleware.{ts,js,mjs}",
"**/lib/logger.{ts,js}",
"**/utils/logger.{ts,js}",
"**/instrumentation.{ts,js}",
"**/*.log",
"**/error.{tsx,ts,js,jsx}",
"**/global-error.{tsx,ts,js,jsx}",
"**/not-found.{tsx,ts,js,jsx}"
],
"bashPatterns": [
"\\bvercel\\s+logs?\\b",
"\\bvercel\\s+inspect\\b",
"\\btail\\s+-f\\b.*\\.log",
"\\bworkflow\\s+runs?\\b",
"\\bvercel\\s+ls\\b",
"\\bcurl\\s+-[vI]"
],
"importPatterns": [],
"bodyPath": "skills/investigation-mode/SKILL.md",
"pathRegexSources": [
"^(?:[^/]+\\/)*middleware\\.(?:ts|js|mjs)$",
"^(?:[^/]+\\/)*lib\\/logger\\.(?:ts|js)$",
"^(?:[^/]+\\/)*utils\\/logger\\.(?:ts|js)$",
"^(?:[^/]+\\/)*instrumentation\\.(?:ts|js)$",
"^(?:[^/]+\\/)*[^/]*\\.log$",
"^(?:[^/]+\\/)*error\\.(?:tsx|ts|js|jsx)$",
"^(?:[^/]+\\/)*global-error\\.(?:tsx|ts|js|jsx)$",
"^(?:[^/]+\\/)*not-found\\.(?:tsx|ts|js|jsx)$"
],
"bashRegexSources": [
"\\bvercel\\s+logs?\\b",
"\\bvercel\\s+inspect\\b",
"\\btail\\s+-f\\b.*\\.log",
"\\bworkflow\\s+runs?\\b",
"\\bvercel\\s+ls\\b",
"\\bcurl\\s+-[vI]"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"nothing happened",
"still waiting",
"it's stuck",
"it's hung",
"nothing is happening",
"not responding",
"just sitting there",
"just sits there",
"seems frozen",
"is it frozen",
"frozen",
"why is it hanging",
"check the logs",
"check logs",
"where are the logs",
"how do I debug",
"how to debug",
"white screen",
"blank page",
"spinning forever",
"timed out",
"keeps timing out",
"no response",
"no output",
"not loading",
"debug this",
"investigate why",
"what went wrong",
"why did it fail",
"why is it failing",
"something is broken",
"something broke",
"seems broken",
"check what happened",
"check the status",
"where is the error",
"where did it fail",
"find the error",
"show me the error",
"why is it slow",
"taking forever",
"still loading",
"not finishing",
"seems dead",
"been waiting",
"waiting forever",
"stuck on",
"hung up",
"not progressing",
"stalled out",
"is it running",
"did it crash",
"keeps failing",
"why no response",
"where did it go",
"lost connection",
"never finishes",
"pending forever",
"queue stuck",
"job stuck",
"build stuck",
"request hanging",
"api not responding"
],
"allOf": [
[
"stuck",
"workflow"
],
[
"stuck",
"deploy"
],
[
"stuck",
"loading"
],
[
"stuck",
"build"
],
[
"stuck",
"queue"
],
[
"stuck",
"job"
],
[
"hung",
"request"
],
[
"hung",
"api"
],
[
"frozen",
"page"
],
[
"frozen",
"app"
],
[
"check",
"why"
],
[
"check",
"broken"
],
[
"check",
"error"
],
[
"check",
"status"
],
[
"check",
"logs"
],
[
"debug",
"workflow"
],
[
"debug",
"deploy"
],
[
"debug",
"api"
],
[
"debug",
"issue"
],
[
"investigate",
"error"
],
[
"logs",
"error"
],
[
"logs",
"check"
],
[
"slow",
"response"
],
[
"slow",
"loading"
],
[
"timeout",
"api"
],
[
"timeout",
"request"
],
[
"waiting",
"response"
],
[
"waiting",
"forever"
],
[
"waiting",
"deploy"
],
[
"not working",
"why"
],
[
"not",
"responding"
],
[
"hanging",
"for"
],
[
"been",
"hanging"
],
[
"been",
"stuck"
],
[
"been",
"waiting"
],
[
"why",
"slow"
],
[
"why",
"failing"
],
[
"why",
"stuck"
],
[
"why",
"hanging"
],
[
"job",
"failing"
],
[
"queue",
"processing"
]
],
"anyOf": [
"stuck",
"hung",
"frozen",
"broken",
"failing",
"timeout",
"slow",
"debug",
"investigate",
"check",
"logs",
"error",
"hanging",
"waiting",
"stalled",
"pending",
"processing",
"loading",
"unresponsive"
],
"noneOf": [
"css stuck",
"sticky position",
"position: sticky",
"z-index",
"sticky nav",
"sticky header",
"sticky footer",
"overflow: hidden",
"add a button",
"create a button",
"style the button"
],
"minScore": 4
},
"retrieval": {
"aliases": [
"debug helper",
"troubleshooter",
"stuck helper",
"problem solver"
],
"intents": [
"debug issue",
"fix stuck app",
"investigate error",
"triage problem"
],
"entities": [
"runtime logs",
"workflow status",
"browser verify",
"triage"
],
"examples": []
}
},
"bootstrap": {
"priority": 8,
"summary": "",
"docs": [
"https://vercel.com/docs/getting-started-with-vercel",
"https://nextjs.org/docs/getting-started/installation"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".env.example",
".env.sample",
".env.template",
"README*",
"docs/**/setup*",
"package.json",
"drizzle.config.*",
"prisma/schema.prisma",
"auth.*",
"src/**/auth.*"
],
"bashPatterns": [
"\\\\bcp\\\\s+\\\\.env\\\\.(?:example|sample|template)\\\\s+\\\\.env\\\\.local\\\\b",
"\\\\b(?:npm|pnpm|bun|yarn)\\\\s+run\\\\s+db:(?:push|seed|migrate|generate)\\\\b",
"\\\\b(?:npm|pnpm|bun|yarn)\\\\s+run\\\\s+dev\\\\b",
"\\\\bvercel\\\\s+link\\\\b",
"\\\\bvercel\\\\s+integration\\\\s+(?:add|install)\\\\b",
"\\\\bvercel\\\\s+env\\\\s+pull\\\\b"
],
"importPatterns": [
"@neondatabase/serverless",
"drizzle-orm",
"@upstash/redis",
"@vercel/blob",
"@vercel/edge-config",
"next-auth",
"@auth/core",
"better-auth"
],
"bodyPath": "skills/bootstrap/SKILL.md",
"pathRegexSources": [
"^\\.env\\.example$",
"^\\.env\\.sample$",
"^\\.env\\.template$",
"^README[^/]*$",
"^docs\\/(?:[^/]+\\/)*setup[^/]*$",
"^package\\.json$",
"^drizzle\\.config\\.[^/]*$",
"^prisma\\/schema\\.prisma$",
"^auth\\.[^/]*$",
"^src\\/(?:[^/]+\\/)*auth\\.[^/]*$"
],
"bashRegexSources": [
"\\\\bcp\\\\s+\\\\.env\\\\.(?:example|sample|template)\\\\s+\\\\.env\\\\.local\\\\b",
"\\\\b(?:npm|pnpm|bun|yarn)\\\\s+run\\\\s+db:(?:push|seed|migrate|generate)\\\\b",
"\\\\b(?:npm|pnpm|bun|yarn)\\\\s+run\\\\s+dev\\\\b",
"\\\\bvercel\\\\s+link\\\\b",
"\\\\bvercel\\\\s+integration\\\\s+(?:add|install)\\\\b",
"\\\\bvercel\\\\s+env\\\\s+pull\\\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@neondatabase\\/serverless(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]drizzle-orm(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@upstash\\/redis(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/blob(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/edge-config(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]next-auth(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@auth\\/core(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]better-auth(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"project setup",
"repo init",
"getting started",
"scaffold"
],
"intents": [
"set up project",
"initialize repo",
"link vercel project",
"pull env vars"
],
"entities": [
"vercel link",
"env pull",
"database setup",
"first run"
],
"examples": []
}
},
"vercel-cli": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/docs/cli"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"vercel.json",
"vercel.ts",
".vercel/**",
".vercelignore",
"now.json"
],
"bashPatterns": [
"^\\s*vercel(?:\\s|$)",
"^\\s*vc(?:\\s|$)",
"\\bnpx\\s+vercel\\b",
"\\bpnpm\\s+dlx\\s+vercel\\b",
"\\bbunx\\s+vercel\\b",
"\\byarn\\s+dlx\\s+vercel\\b",
"\\bnpx\\s+@vercel/config\\b"
],
"importPatterns": [],
"bodyPath": "skills/vercel-cli/SKILL.md",
"pathRegexSources": [
"^vercel\\.json$",
"^vercel\\.ts$",
"^\\.vercel\\/.*$",
"^\\.vercelignore$",
"^now\\.json$"
],
"bashRegexSources": [
"^\\s*vercel(?:\\s|$)",
"^\\s*vc(?:\\s|$)",
"\\bnpx\\s+vercel\\b",
"\\bpnpm\\s+dlx\\s+vercel\\b",
"\\bbunx\\s+vercel\\b",
"\\byarn\\s+dlx\\s+vercel\\b",
"\\bnpx\\s+@vercel/config\\b"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"check deployment",
"check deploy",
"deployment status",
"deploy status",
"vercel logs",
"deployment logs",
"deploy logs",
"vercel inspect",
"is it deployed",
"deploy failing",
"deploy failed",
"deployment error",
"check vercel",
"vercel status"
],
"allOf": [
[
"check",
"deployment"
],
[
"check",
"deploy"
],
[
"vercel",
"status"
],
[
"vercel",
"logs"
],
[
"deploy",
"error"
],
[
"deploy",
"failed"
],
[
"deploy",
"stuck"
]
],
"anyOf": [
"deployment",
"deploy",
"vercel",
"production"
],
"noneOf": [
"terraform",
"aws deploy",
"heroku"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"vercel command line",
"vc cli",
"deploy command",
"vercel terminal"
],
"intents": [
"deploy from cli",
"link project",
"manage domains",
"view logs from terminal"
],
"entities": [
"vercel CLI",
"vercel deploy",
"vercel env",
"vercel link",
"vercel logs"
],
"examples": []
}
},
"runtime-cache": {
"priority": 6,
"summary": "",
"docs": [
"https://nextjs.org/docs/app/building-your-application/caching"
],
"sitemap": "https://nextjs.org/sitemap.xml",
"pathPatterns": [
"lib/cache/**",
"src/lib/cache/**",
"lib/cache.*",
"src/lib/cache.*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/functions\\b"
],
"importPatterns": [],
"bodyPath": "skills/runtime-cache/SKILL.md",
"pathRegexSources": [
"^lib\\/cache\\/.*$",
"^src\\/lib\\/cache\\/.*$",
"^lib\\/cache\\.[^/]*$",
"^src\\/lib\\/cache\\.[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/functions\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/functions\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"cache api",
"kv cache",
"region cache",
"tag invalidation"
],
"intents": [
"add caching",
"cache api response",
"invalidate cache",
"set up runtime cache"
],
"entities": [
"Runtime Cache",
"tag-based invalidation",
"key-value",
"cache"
],
"examples": []
}
},
"ai-gateway": {
"priority": 7,
"summary": "",
"docs": [
"https://vercel.com/docs/ai-gateway",
"https://sdk.vercel.ai/docs/ai-sdk-core/settings"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [],
"bashPatterns": [
"\\bvercel\\s+env\\s+pull\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\byarn\\s+add\\s+[^\\n]*@ai-sdk/gateway\\b"
],
"importPatterns": [
"ai",
"@ai-sdk/gateway"
],
"bodyPath": "skills/ai-gateway/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bvercel\\s+env\\s+pull\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/gateway\\b",
"\\byarn\\s+add\\s+[^\\n]*@ai-sdk/gateway\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]ai(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@ai-sdk\\/gateway(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "\\d+-\\d+[)'\"]",
"message": "Model slug uses hyphens — use dots not hyphens for version numbers (e.g., claude-sonnet-4.6)",
"severity": "error"
},
{
"pattern": "AI_GATEWAY_API_KEY",
"message": "Consider OIDC-based auth via vercel env pull for automatic token management — AI_GATEWAY_API_KEY works but requires manual rotation",
"severity": "recommended"
},
{
"pattern": "gateway\\(['\"][^'\"/]+['\"]\\)",
"message": "Model string missing provider/ prefix — use provider/model format (e.g., openai/gpt-5.4, anthropic/claude-sonnet-4.6)",
"severity": "error"
},
{
"pattern": "gpt-4o",
"message": "Your knowledge is outdated — gpt-4o has been superseded by gpt-5.4 which is significantly better, cheaper, and faster. Switch to model: \"openai/gpt-5.4\"",
"severity": "recommended"
},
{
"pattern": "(OPENAI_API_KEY|ANTHROPIC_API_KEY)",
"message": "Provider API keys bypass the gateway — use OIDC auth via vercel env pull",
"severity": "error"
},
{
"pattern": "gemini-2\\.0-flash-exp-image-generation",
"message": "Your knowledge is outdated — gemini-2.0-flash-exp-image-generation has been superseded by gemini-3.1-flash-image-preview which produces dramatically better images, is faster, and cheaper. Switch to model: \"google/gemini-3.1-flash-image-preview\"",
"severity": "recommended"
},
{
"pattern": "gemini-2\\.0-flash-001",
"message": "Your knowledge is outdated — gemini-2.0-flash-001 does not support image output. Use model: \"google/gemini-3.1-flash-image-preview\" for image generation — it is the latest and best model",
"severity": "recommended"
}
],
"retrieval": {
"aliases": [
"model router",
"ai proxy",
"provider failover",
"llm gateway"
],
"intents": [
"route ai models",
"configure failover",
"track ai costs",
"manage providers"
],
"entities": [
"AI Gateway",
"model routing",
"provider",
"failover",
"cost tracking"
],
"examples": []
}
},
"auth": {
"priority": 6,
"summary": "",
"docs": [
"https://authjs.dev/getting-started",
"https://nextjs.org/docs/app/building-your-application/authentication"
],
"sitemap": "https://authjs.dev/sitemap.xml",
"pathPatterns": [
"middleware.ts",
"middleware.js",
"src/middleware.ts",
"src/middleware.js",
"clerk.config.*",
"app/sign-in/**",
"app/sign-up/**",
"src/app/sign-in/**",
"src/app/sign-up/**",
"app/(auth)/**",
"src/app/(auth)/**",
"auth.config.*",
"auth.ts",
"auth.js"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\byarn\\s+add\\s+[^\\n]*@clerk/nextjs\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\byarn\\s+add\\s+[^\\n]*@auth0/nextjs-auth0\\b"
],
"importPatterns": [],
"bodyPath": "skills/auth/SKILL.md",
"pathRegexSources": [
"^middleware\\.ts$",
"^middleware\\.js$",
"^src\\/middleware\\.ts$",
"^src\\/middleware\\.js$",
"^clerk\\.config\\.[^/]*$",
"^app\\/sign-in\\/.*$",
"^app\\/sign-up\\/.*$",
"^src\\/app\\/sign-in\\/.*$",
"^src\\/app\\/sign-up\\/.*$",
"^app\\/\\(auth\\)\\/.*$",
"^src\\/app\\/\\(auth\\)\\/.*$",
"^auth\\.config\\.[^/]*$",
"^auth\\.ts$",
"^auth\\.js$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@clerk/nextjs\\b",
"\\byarn\\s+add\\s+[^\\n]*@clerk/nextjs\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@descope/nextjs-sdk\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@auth0/nextjs-auth0\\b",
"\\byarn\\s+add\\s+[^\\n]*@auth0/nextjs-auth0\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"authentication",
"login system",
"sign in",
"auth flow"
],
"intents": [
"add auth",
"protect routes",
"manage sessions",
"implement login",
"secure api endpoints"
],
"entities": [
"NextAuth",
"Auth.js",
"JWT",
"OAuth",
"session",
"middleware",
"getServerSession"
],
"examples": [
"add login to my app",
"protect this route with auth",
"set up NextAuth"
]
}
},
"ai-generation-persistence": {
"priority": 6,
"summary": "Persist every AI generation: unique ID, save to DB/Blob, addressable URL /chat/[id], track token cost",
"docs": [
"https://sdk.vercel.ai/docs/ai-sdk-ui/storing-messages"
],
"sitemap": "https://sdk.vercel.ai/sitemap.xml",
"pathPatterns": [
"app/api/generate/**",
"app/api/generations/**",
"src/app/api/generate/**",
"src/app/api/generations/**",
"app/chat/[id]/**",
"app/generate/[id]/**",
"src/app/chat/[id]/**",
"src/app/generate/[id]/**",
"lib/generations/**",
"src/lib/generations/**"
],
"bashPatterns": [],
"importPatterns": [
"ai",
"@ai-sdk/*",
"@vercel/blob",
"nanoid",
"@paralleldrive/cuid2"
],
"bodyPath": "skills/ai-generation-persistence/SKILL.md",
"pathRegexSources": [
"^app\\/api\\/generate\\/.*$",
"^app\\/api\\/generations\\/.*$",
"^src\\/app\\/api\\/generate\\/.*$",
"^src\\/app\\/api\\/generations\\/.*$",
"^app\\/chat\\/\\[id\\]\\/.*$",
"^app\\/generate\\/\\[id\\]\\/.*$",
"^src\\/app\\/chat\\/\\[id\\]\\/.*$",
"^src\\/app\\/generate\\/\\[id\\]\\/.*$",
"^lib\\/generations\\/.*$",
"^src\\/lib\\/generations\\/.*$"
],
"bashRegexSources": [],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]ai(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@ai-sdk\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/blob(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]nanoid(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@paralleldrive\\/cuid2(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "streamText\\\\(|generateText\\\\(",
"message": "Ensure this AI generation is persisted with a unique ID (nanoid/cuid2) — generations are expensive assets that should be saved and addressable via URL",
"severity": "warn",
"skipIfFileContains": "nanoid|cuid|createId|randomUUID|uuid"
}
],
"promptSignals": {
"phrases": [
"save generations",
"persist generations",
"generation history",
"chat history",
"save chat",
"generation id",
"ai chat",
"chat app",
"chatbot",
"image generation",
"text generation",
"ai app"
],
"allOf": [
[
"generate",
"save"
],
[
"generate",
"persist"
],
[
"generate",
"store"
],
[
"ai",
"persist"
],
[
"ai",
"history"
],
[
"ai",
"database"
],
[
"chat",
"persist"
],
[
"chat",
"database"
],
[
"chat",
"url"
],
[
"generation",
"url"
],
[
"generation",
"id"
],
[
"image",
"generate"
],
[
"stream",
"save"
],
[
"stream",
"persist"
]
],
"anyOf": [
"shareable",
"retrievable",
"permalink",
"cost tracking",
"token usage",
"nanoid",
"cuid",
"openai",
"anthropic",
"llm",
"gpt",
"claude"
],
"noneOf": [
"github actions",
"ci workflow"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"ai storage",
"generation history",
"llm persistence",
"ai audit"
],
"intents": [
"save ai generations",
"track llm costs",
"store completions",
"persist ai output"
],
"entities": [
"generation ID",
"addressable URL",
"cost tracking",
"LLM generation"
],
"examples": []
}
},
"vercel-queues": {
"priority": 5,
"summary": "",
"docs": [
"https://vercel.com/docs/workflow-collaboration/conformance"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"lib/queues/**",
"src/lib/queues/**",
"lib/queues.*",
"lib/queue.*",
"src/lib/queues.*",
"src/lib/queue.*",
"workflows/*.ts",
"workflows/*.mts",
"src/workflows/*.ts",
"src/workflows/*.mts",
"app/api/workflow/**",
"src/app/api/workflow/**",
"app/api/workflows/**",
"src/app/api/workflows/**",
"vercel.ts",
"vercel.mts"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/queue\\b"
],
"importPatterns": [
"workflow",
"@vercel/workflow"
],
"bodyPath": "skills/vercel-queues/SKILL.md",
"pathRegexSources": [
"^lib\\/queues\\/.*$",
"^src\\/lib\\/queues\\/.*$",
"^lib\\/queues\\.[^/]*$",
"^lib\\/queue\\.[^/]*$",
"^src\\/lib\\/queues\\.[^/]*$",
"^src\\/lib\\/queue\\.[^/]*$",
"^workflows\\/[^/]*\\.ts$",
"^workflows\\/[^/]*\\.mts$",
"^src\\/workflows\\/[^/]*\\.ts$",
"^src\\/workflows\\/[^/]*\\.mts$",
"^app\\/api\\/workflow\\/.*$",
"^src\\/app\\/api\\/workflow\\/.*$",
"^app\\/api\\/workflows\\/.*$",
"^src\\/app\\/api\\/workflows\\/.*$",
"^vercel\\.ts$",
"^vercel\\.mts$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/queue\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/queue\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]workflow(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/workflow(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"message queue",
"event streaming",
"async processing",
"task queue"
],
"intents": [
"add message queue",
"process events async",
"set up fan out",
"configure retries"
],
"entities": [
"Vercel Queues",
"topics",
"consumer groups",
"delayed delivery",
"Workflow DevKit"
],
"examples": []
}
},
"turbopack": {
"priority": 4,
"summary": "",
"docs": [
"https://turbo.build/pack/docs",
"https://nextjs.org/docs/architecture/turbopack"
],
"sitemap": "https://turbo.build/sitemap.xml",
"pathPatterns": [
"next.config.*"
],
"bashPatterns": [
"\\bnext\\s+dev\\s+--turbo\\b",
"\\bnext\\s+dev\\s+--turbopack\\b"
],
"importPatterns": [],
"bodyPath": "skills/turbopack/SKILL.md",
"pathRegexSources": [
"^next\\.config\\.[^/]*$"
],
"bashRegexSources": [
"\\bnext\\s+dev\\s+--turbo\\b",
"\\bnext\\s+dev\\s+--turbopack\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"next bundler",
"turbopack",
"fast bundler",
"hmr"
],
"intents": [
"enable turbopack",
"fix build issue",
"speed up dev server",
"configure bundler"
],
"entities": [
"Turbopack",
"HMR",
"bundler",
"next dev --turbopack"
],
"examples": []
}
},
"marketplace": {
"priority": 3,
"summary": "",
"docs": [
"https://vercel.com/docs/integrations"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"integration.json"
],
"bashPatterns": [
"\\bvercel\\s+integration\\b",
"\\bvercel\\s+integration\\s+add\\b",
"\\bvercel\\s+integration\\s+discover\\b"
],
"importPatterns": [],
"bodyPath": "skills/marketplace/SKILL.md",
"pathRegexSources": [
"^integration\\.json$"
],
"bashRegexSources": [
"\\bvercel\\s+integration\\b",
"\\bvercel\\s+integration\\s+add\\b",
"\\bvercel\\s+integration\\s+discover\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"vercel integrations",
"marketplace",
"third party services",
"add ons"
],
"intents": [
"install integration",
"build integration",
"manage marketplace",
"add third party service"
],
"entities": [
"Vercel Marketplace",
"integration",
"vercel integration",
"unified billing"
],
"examples": []
}
},
"vercel-flags": {
"priority": 6,
"summary": "",
"docs": [
"https://vercel.com/docs/workflow-collaboration/feature-flags",
"https://flags-sdk.dev"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"flags.ts",
"flags.js",
"src/flags.ts",
"src/flags.js",
"lib/flags/**",
"src/lib/flags/**",
"lib/flags.*",
"src/lib/flags.*",
".well-known/vercel/flags/**",
"app/.well-known/vercel/flags/**",
"src/app/.well-known/vercel/flags/**"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bflags\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/flags\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\byarn\\s+add\\s+[^\\n]*@flags-sdk/"
],
"importPatterns": [
"flags",
"flags/next",
"flags/sveltekit",
"@vercel/flags",
"@vercel/flags/next",
"@vercel/flags/sveltekit",
"@flags-sdk/*"
],
"bodyPath": "skills/vercel-flags/SKILL.md",
"pathRegexSources": [
"^flags\\.ts$",
"^flags\\.js$",
"^src\\/flags\\.ts$",
"^src\\/flags\\.js$",
"^lib\\/flags\\/.*$",
"^src\\/lib\\/flags\\/.*$",
"^lib\\/flags\\.[^/]*$",
"^src\\/lib\\/flags\\.[^/]*$",
"^\\.well-known\\/vercel\\/flags\\/.*$",
"^app\\/\\.well-known\\/vercel\\/flags\\/.*$",
"^src\\/app\\/\\.well-known\\/vercel\\/flags\\/.*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bflags\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bflags\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/flags\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/flags\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@flags-sdk/",
"\\byarn\\s+add\\s+[^\\n]*@flags-sdk/"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]flags(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]flags\\/next(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]flags\\/sveltekit(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/flags(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/flags\\/next(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/flags\\/sveltekit(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@flags-sdk\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"feature flags",
"feature toggles",
"ab testing",
"gradual rollout"
],
"intents": [
"add feature flag",
"set up ab test",
"configure rollout",
"manage feature toggles"
],
"entities": [
"Flags Explorer",
"feature flag",
"A/B test",
"rollout",
"provider adapter"
],
"examples": []
}
},
"shadcn": {
"priority": 6,
"summary": "",
"docs": [
"https://ui.shadcn.com/docs",
"https://ui.shadcn.com/docs/components"
],
"pathPatterns": [
"components.json",
"components/ui/**",
"src/components/ui/**",
"apps/*/components/ui/**",
"apps/*/src/components/ui/**",
"packages/*/components/ui/**",
"packages/*/src/components/ui/**"
],
"bashPatterns": [
"\\bnpx\\s+shadcn\\b",
"\\bnpx\\s+shadcn@latest\\s+(init|add|build|search|list|migrate|info|docs|view)\\b",
"\\bnpx\\s+create-next-app\\b",
"\\bbunx\\s+create-next-app\\b",
"\\bpnpm\\s+create\\s+next-app\\b",
"\\bnpm\\s+create\\s+next-app\\b"
],
"importPatterns": [],
"bodyPath": "skills/shadcn/SKILL.md",
"pathRegexSources": [
"^components\\.json$",
"^components\\/ui\\/.*$",
"^src\\/components\\/ui\\/.*$",
"^apps\\/[^/]*\\/components\\/ui\\/.*$",
"^apps\\/[^/]*\\/src\\/components\\/ui\\/.*$",
"^packages\\/[^/]*\\/components\\/ui\\/.*$",
"^packages\\/[^/]*\\/src\\/components\\/ui\\/.*$"
],
"bashRegexSources": [
"\\bnpx\\s+shadcn\\b",
"\\bnpx\\s+shadcn@latest\\s+(init|add|build|search|list|migrate|info|docs|view)\\b",
"\\bnpx\\s+create-next-app\\b",
"\\bbunx\\s+create-next-app\\b",
"\\bpnpm\\s+create\\s+next-app\\b",
"\\bnpm\\s+create\\s+next-app\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"shadcn ui",
"component library",
"ui components",
"tailwind components"
],
"intents": [
"add shadcn component",
"set up shadcn",
"customize theme",
"build ui"
],
"entities": [
"shadcn/ui",
"Tailwind CSS",
"registry",
"theme",
"components.json"
],
"examples": []
}
},
"cron-jobs": {
"priority": 6,
"summary": "",
"docs": [
"https://vercel.com/docs/cron-jobs"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"vercel.json",
"apps/*/vercel.json"
],
"bashPatterns": [],
"importPatterns": [],
"bodyPath": "skills/cron-jobs/SKILL.md",
"pathRegexSources": [
"^vercel\\.json$",
"^apps\\/[^/]*\\/vercel\\.json$"
],
"bashRegexSources": [],
"importRegexSources": [],
"retrieval": {
"aliases": [
"scheduled tasks",
"cron",
"recurring jobs",
"timed execution"
],
"intents": [
"add cron job",
"schedule task",
"set up recurring job",
"configure cron"
],
"entities": [
"vercel.json",
"cron",
"schedule",
"cron expression"
],
"examples": []
}
},
"observability": {
"priority": 6,
"summary": "",
"docs": [
"https://vercel.com/docs/observability",
"https://vercel.com/docs/observability/otel-overview"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"instrumentation.ts",
"instrumentation.js",
"src/instrumentation.ts",
"src/instrumentation.js",
"app/layout.*",
"src/app/layout.*",
"pages/_app.*",
"src/pages/_app.*",
"apps/*/instrumentation.ts",
"apps/*/instrumentation.js",
"apps/*/app/layout.*",
"apps/*/src/app/layout.*",
"apps/*/pages/_app.*",
"apps/*/src/pages/_app.*",
"sentry.client.config.*",
"sentry.server.config.*",
"sentry.edge.config.*"
],
"bashPatterns": [
"\\bvercel\\s+logs?\\b",
"\\bvercel\\s+logs?\\s+.*--follow\\b",
"\\bvercel\\s+logs?\\s+.*--level\\b",
"\\bvercel\\s+logs?\\s+.*--since\\b",
"\\bcurl\\s+.*deployments.*events\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/analytics\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\byarn\\s+add\\s+[^\\n]*@sentry/nextjs\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\byarn\\s+add\\s+[^\\n]*@sentry/node\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\byarn\\s+add\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bcheckly\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bnewrelic\\b"
],
"importPatterns": [],
"bodyPath": "skills/observability/SKILL.md",
"pathRegexSources": [
"^instrumentation\\.ts$",
"^instrumentation\\.js$",
"^src\\/instrumentation\\.ts$",
"^src\\/instrumentation\\.js$",
"^app\\/layout\\.[^/]*$",
"^src\\/app\\/layout\\.[^/]*$",
"^pages\\/_app\\.[^/]*$",
"^src\\/pages\\/_app\\.[^/]*$",
"^apps\\/[^/]*\\/instrumentation\\.ts$",
"^apps\\/[^/]*\\/instrumentation\\.js$",
"^apps\\/[^/]*\\/app\\/layout\\.[^/]*$",
"^apps\\/[^/]*\\/src\\/app\\/layout\\.[^/]*$",
"^apps\\/[^/]*\\/pages\\/_app\\.[^/]*$",
"^apps\\/[^/]*\\/src\\/pages\\/_app\\.[^/]*$",
"^sentry\\.client\\.config\\.[^/]*$",
"^sentry\\.server\\.config\\.[^/]*$",
"^sentry\\.edge\\.config\\.[^/]*$"
],
"bashRegexSources": [
"\\bvercel\\s+logs?\\b",
"\\bvercel\\s+logs?\\s+.*--follow\\b",
"\\bvercel\\s+logs?\\s+.*--level\\b",
"\\bvercel\\s+logs?\\s+.*--since\\b",
"\\bcurl\\s+.*deployments.*events\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/analytics\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/analytics\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/speed-insights\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/speed-insights\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sentry/nextjs\\b",
"\\byarn\\s+add\\s+[^\\n]*@sentry/nextjs\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sentry/node\\b",
"\\byarn\\s+add\\s+[^\\n]*@sentry/node\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@datadog/browser-rum\\b",
"\\byarn\\s+add\\s+[^\\n]*@datadog/browser-rum\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bcheckly\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bcheckly\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bnewrelic\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bnewrelic\\b"
],
"importRegexSources": [],
"validate": [
{
"pattern": "export (async )?function (GET|POST|PUT|PATCH|DELETE)",
"message": "API route handlers should include error logging — wrap in try/catch with console.error for production debugging",
"severity": "warn",
"skipIfFileContains": "console\\\\.error|logger\\\\.|captureException|Sentry"
}
],
"promptSignals": {
"phrases": [
"add logging",
"add logs",
"set up logging",
"setup logging",
"configure logging",
"structured logging",
"log drain",
"log drains",
"vercel analytics",
"speed insights",
"web analytics",
"opentelemetry",
"otel",
"instrumentation",
"monitoring",
"set up monitoring",
"add observability",
"track errors",
"error tracking",
"sentry",
"datadog",
"check the logs",
"show me the error",
"what went wrong",
"where did it fail",
"show me the logs",
"find the error",
"why did it fail",
"debug the error"
],
"allOf": [
[
"add",
"logging"
],
[
"add",
"monitoring"
],
[
"set up",
"logs"
],
[
"configure",
"analytics"
],
[
"vercel",
"logs"
],
[
"vercel",
"analytics"
],
[
"track",
"performance"
],
[
"track",
"errors"
]
],
"anyOf": [
"logging",
"monitoring",
"analytics",
"observability",
"telemetry",
"traces",
"metrics",
"debug",
"debugging",
"stuck",
"hanging",
"hung",
"waiting",
"stalled",
"spinning",
"timeout",
"slow",
"pending",
"unresponsive"
],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"monitoring",
"logging",
"analytics",
"performance tracking"
],
"intents": [
"add monitoring",
"set up logging",
"track performance",
"configure analytics"
],
"entities": [
"Web Analytics",
"Speed Insights",
"OpenTelemetry",
"Drains",
"runtime logs"
],
"examples": []
}
},
"verification": {
"priority": 7,
"summary": "Verify full user story: browser + server + data flow + env",
"docs": [
"https://vercel.com/docs/projects/project-configuration"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [],
"bashPatterns": [
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\s*(dev)?\\b",
"\\bvercel\\s+dev\\b",
"\\bastro\\s+dev\\b"
],
"importPatterns": [],
"bodyPath": "skills/verification/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnext\\s+dev\\b",
"\\bnpm\\s+run\\s+dev\\b",
"\\bpnpm\\s+dev\\b",
"\\bbun\\s+run\\s+dev\\b",
"\\byarn\\s+dev\\b",
"\\bvite\\s*(dev)?\\b",
"\\bvercel\\s+dev\\b",
"\\bastro\\s+dev\\b"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"verify the flow",
"verify everything works",
"test the whole thing",
"does it actually work",
"check end to end",
"end to end test",
"why isn't it working right",
"why doesn't it work",
"it's not working correctly",
"something's off",
"not quite right",
"almost works but",
"works locally but",
"verify the feature",
"make sure it works",
"full verification"
],
"allOf": [
[
"verify",
"flow"
],
[
"verify",
"works"
],
[
"check",
"everything"
],
[
"test",
"end",
"end"
],
[
"not",
"working",
"right"
],
[
"something",
"off"
],
[
"almost",
"works"
],
[
"make",
"sure",
"works"
]
],
"anyOf": [
"verify",
"verification",
"end-to-end",
"full flow",
"works",
"working"
],
"noneOf": [
"unit test",
"jest",
"vitest",
"playwright test",
"cypress test"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"end to end test",
"full stack verify",
"flow test",
"integration check"
],
"intents": [
"verify full flow",
"test end to end",
"check if app works",
"validate implementation"
],
"entities": [
"browser",
"API",
"data flow",
"end-to-end",
"verification"
],
"examples": []
}
},
"cms": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/docs/solutions/cms",
"https://nextjs.org/docs/app/building-your-application/data-fetching"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"sanity.config.*",
"sanity.cli.*",
"sanity/**",
"studio/**",
"schemas/*.ts",
"schemas/*.tsx",
"src/sanity/**",
"lib/sanity.*",
"src/lib/sanity.*",
"lib/contentful.*",
"src/lib/contentful.*",
"app/api/draft/**",
"src/app/api/draft/**",
"app/api/revalidate/**",
"src/app/api/revalidate/**",
"app/studio/**",
"src/app/studio/**"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@sanity/client\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bnext-sanity\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bcontentful\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\byarn\\s+add\\s+[^\\n]*@storyblok/\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\byarn\\s+add\\s+[^\\n]*datocms-client\\b",
"\\bnpx\\s+create-sanity\\b",
"\\bnpx\\s+sanity\\s+init\\b"
],
"importPatterns": [],
"bodyPath": "skills/cms/SKILL.md",
"pathRegexSources": [
"^sanity\\.config\\.[^/]*$",
"^sanity\\.cli\\.[^/]*$",
"^sanity\\/.*$",
"^studio\\/.*$",
"^schemas\\/[^/]*\\.ts$",
"^schemas\\/[^/]*\\.tsx$",
"^src\\/sanity\\/.*$",
"^lib\\/sanity\\.[^/]*$",
"^src\\/lib\\/sanity\\.[^/]*$",
"^lib\\/contentful\\.[^/]*$",
"^src\\/lib\\/contentful\\.[^/]*$",
"^app\\/api\\/draft\\/.*$",
"^src\\/app\\/api\\/draft\\/.*$",
"^app\\/api\\/revalidate\\/.*$",
"^src\\/app\\/api\\/revalidate\\/.*$",
"^app\\/studio\\/.*$",
"^src\\/app\\/studio\\/.*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@sanity/client\\b",
"\\byarn\\s+add\\s+[^\\n]*@sanity/client\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bnext-sanity\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bnext-sanity\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bcontentful\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bcontentful\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@builder\\.io/sdk\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@storyblok/\\b",
"\\byarn\\s+add\\s+[^\\n]*@storyblok/\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*datocms-client\\b",
"\\byarn\\s+add\\s+[^\\n]*datocms-client\\b",
"\\bnpx\\s+create-sanity\\b",
"\\bnpx\\s+sanity\\s+init\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"headless cms",
"content management",
"sanity",
"contentful"
],
"intents": [
"add cms",
"set up content management",
"configure preview mode",
"create content model"
],
"entities": [
"Sanity",
"Contentful",
"DatoCMS",
"Storyblok",
"Visual Editing",
"revalidation"
],
"examples": []
}
},
"geist": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/font",
"https://github.com/vercel/geist-font"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"app/layout.*",
"src/app/layout.*",
"app/globals.css",
"src/app/globals.css",
"styles/**",
"tailwind.config.*",
"apps/*/app/layout.*",
"apps/*/src/app/layout.*",
"apps/*/app/globals.css",
"apps/*/src/app/globals.css"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bgeist\\b"
],
"importPatterns": [
"geist",
"geist/font",
"geist/font/*"
],
"bodyPath": "skills/geist/SKILL.md",
"pathRegexSources": [
"^app\\/layout\\.[^/]*$",
"^src\\/app\\/layout\\.[^/]*$",
"^app\\/globals\\.css$",
"^src\\/app\\/globals\\.css$",
"^styles\\/.*$",
"^tailwind\\.config\\.[^/]*$",
"^apps\\/[^/]*\\/app\\/layout\\.[^/]*$",
"^apps\\/[^/]*\\/src\\/app\\/layout\\.[^/]*$",
"^apps\\/[^/]*\\/app\\/globals\\.css$",
"^apps\\/[^/]*\\/src\\/app\\/globals\\.css$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bgeist\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bgeist\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]geist(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]geist\\/font(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]geist\\/font\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"vercel font",
"geist font",
"typography",
"font family"
],
"intents": [
"add geist font",
"configure typography",
"set up fonts",
"use vercel font"
],
"entities": [
"Geist Sans",
"Geist Mono",
"Geist Pixel",
"next/font"
],
"examples": []
}
},
"workflow": {
"priority": 9,
"summary": "",
"docs": [
"https://vercel.com/docs/workflow",
"https://useworkflow.dev"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"lib/workflow/**",
"src/lib/workflow/**",
"workflows/**",
"lib/workflow.*",
"src/lib/workflow.*",
"workflow.*",
"*workflow*",
"*workflow*/**",
"**/chain-engine*",
"**/chain_engine*",
"**/chainEngine*",
"**/pipeline-engine*",
"**/pipeline_engine*",
"**/pipelineEngine*",
"**/state-machine*",
"**/state_machine*",
"**/stateMachine*",
"**/orchestrat*",
"**/escalation*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/workflow\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bworkflow\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\byarn\\s+add\\s+[^\\n]*@workflow/",
"\\bnpx\\s+workflow(?:@latest)?\\b",
"\\bbunx\\s+workflow(?:@latest)?\\b"
],
"importPatterns": [
"@vercel/workflow",
"workflow",
"@workflow/*",
"*workflow*"
],
"bodyPath": "skills/workflow/SKILL.md",
"pathRegexSources": [
"^lib\\/workflow\\/.*$",
"^src\\/lib\\/workflow\\/.*$",
"^workflows\\/.*$",
"^lib\\/workflow\\.[^/]*$",
"^src\\/lib\\/workflow\\.[^/]*$",
"^workflow\\.[^/]*$",
"^[^/]*workflow[^/]*$",
"^[^/]*workflow[^/]*\\/.*$",
"^(?:[^/]+\\/)*chain-engine[^/]*$",
"^(?:[^/]+\\/)*chain_engine[^/]*$",
"^(?:[^/]+\\/)*chainEngine[^/]*$",
"^(?:[^/]+\\/)*pipeline-engine[^/]*$",
"^(?:[^/]+\\/)*pipeline_engine[^/]*$",
"^(?:[^/]+\\/)*pipelineEngine[^/]*$",
"^(?:[^/]+\\/)*state-machine[^/]*$",
"^(?:[^/]+\\/)*state_machine[^/]*$",
"^(?:[^/]+\\/)*stateMachine[^/]*$",
"^(?:[^/]+\\/)*orchestrat[^/]*$",
"^(?:[^/]+\\/)*escalation[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/workflow\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/workflow\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bworkflow\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bworkflow\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@workflow/",
"\\byarn\\s+add\\s+[^\\n]*@workflow/",
"\\bnpx\\s+workflow(?:@latest)?\\b",
"\\bbunx\\s+workflow(?:@latest)?\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/workflow(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]workflow(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@workflow\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"][^'\"]*workflow[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "experimental_createWorkflow",
"message": "experimental_createWorkflow is now stable — use createWorkflow from @vercel/workflow",
"severity": "error"
},
{
"pattern": "from\\s+['\"]@vercel/workflow['\"]",
"message": "Workflow DevKit requires AI Gateway OIDC setup — ensure vercel link + vercel env pull for VERCEL_OIDC_TOKEN",
"severity": "recommended"
},
{
"pattern": "setTimeout|setInterval",
"message": "setTimeout/setInterval are not available in workflow sandbox scope — use sleep() from \"workflow\" for delays",
"severity": "error",
"skipIfFileContains": "use step"
},
{
"pattern": "context\\.run\\s*\\(",
"message": "context.run() is not a WDK pattern — use \"use step\" directive for retryable, observable steps",
"severity": "error"
},
{
"pattern": "\\brequire\\s*\\(",
"message": "require() is not available in workflow sandbox scope — use ESM imports and move Node.js logic into \"use step\" functions",
"severity": "error",
"skipIfFileContains": "use step"
},
{
"pattern": "getWritable\\(\\)",
"message": "getWritable() must only be called inside \"use step\" functions — workflow sandbox scope does not support it",
"severity": "recommended",
"skipIfFileContains": "use step"
},
{
"pattern": "createWorkflow\\s*\\(",
"message": "createWorkflow() is the legacy API — use the \"use workflow\" directive on an async function instead",
"severity": "error",
"skipIfFileContains": "experimental_createWorkflow"
},
{
"pattern": "streamObject\\s*\\(",
"message": "streamObject() was removed in AI SDK v6 — use streamText() with output: Output.object() instead",
"severity": "error"
},
{
"pattern": "await\\s+\\w+Workflow\\s*\\(",
"message": "Do not call workflow functions directly — use start() from \"workflow/api\" to register the run and get a runId",
"severity": "recommended",
"skipIfFileContains": "use workflow"
},
{
"pattern": "\\bfetch\\s*\\(",
"message": "Native fetch() is not available in workflow sandbox scope — import fetch from \"workflow\" or move the call into a \"use step\" function",
"severity": "recommended",
"skipIfFileContains": "use step"
},
{
"pattern": "\"use step\"",
"message": "Workflow steps should include console.log or structured logging for observability — add logging at step entry/exit to debug hangs",
"severity": "warn",
"skipIfFileContains": "console\\\\.(log|warn|error|info)"
},
{
"pattern": "\"use workflow\"",
"message": "Workflow files should import and use logging — add console.log or a logger at key execution points for debugging",
"severity": "warn",
"skipIfFileContains": "console\\\\.(log|warn|error|info)"
}
],
"promptSignals": {
"phrases": [
"vercel workflow",
"workflow devkit",
"durable workflow",
"durable execution",
"durable function",
"durable pipeline",
"durable process",
"durable agent",
"durable chat",
"step function",
"step functions",
"use workflow",
"use step",
"multi-step pipeline",
"multi step pipeline",
"multi-step process",
"multi step process",
"multi-step creation",
"multi-step generation",
"processing pipeline",
"creation pipeline",
"generation pipeline",
"content pipeline",
"production pipeline",
"approval pipeline",
"ingestion pipeline",
"streams progress",
"stream progress",
"streams each phase",
"streams each step",
"streams each",
"stream each",
"survive page reload",
"survive page reloads",
"survive a crash",
"survive crashes",
"survive network",
"fault-tolerant",
"fault tolerant",
"crash-safe",
"crash safe",
"automatically retry",
"auto retry",
"retry on failure",
"retry on error",
"reliable and retry",
"reliable processing",
"individually reliable",
"each step reliable",
"each step should be reliable",
"steps should be reliable",
"reliable with automatic retry",
"reliable with retry",
"retry on transient",
"transient failures",
"session persistence",
"session should persist",
"session survives",
"reconnect automatically",
"auto reconnect",
"reconnect if the network",
"reconnect on disconnect",
"resume after failure",
"resume after crash",
"resume on reconnect",
"human-in-the-loop",
"human in the loop",
"wait for approval",
"approval step",
"approval before",
"editorial approval",
"manual approval",
"wait for user",
"pause until",
"wait for response",
"callback url",
"webhook callback",
"chat should survive",
"chat survives",
"conversation should persist",
"conversation persists",
"conversation should survive",
"sequential chain",
"email chain",
"chain of emails",
"chain of steps",
"chain engine",
"chain with triggers",
"trigger chain",
"triggered chain",
"webhook chain",
"webhook pipeline",
"webhook orchestration",
"multi-service trigger",
"cross-service trigger",
"various triggers",
"different triggers",
"triggers from different",
"triggers from various",
"sequential steps",
"sequential pipeline",
"sequential process",
"sequential emails",
"escalation chain",
"escalation pipeline",
"state machine",
"step-based",
"step based",
"delay between steps",
"delay between emails",
"delayed steps",
"conditional steps",
"skip steps",
"branch based on",
"wait for webhook",
"wait for trigger",
"wait for event",
"orchestrate emails",
"orchestrate webhooks",
"orchestrate services",
"chain across services",
"workflow stuck",
"workflow hung",
"workflow hanging",
"workflow waiting",
"workflow failing",
"workflow timeout",
"workflow not running",
"workflow error",
"check workflow",
"workflow logs",
"workflow run status",
"debug workflow",
"workflow not finishing",
"workflow not responding",
"workflow stalled",
"workflow pending",
"step is stuck",
"step is hanging",
"why is my workflow",
"workflow run",
"step failed",
"run status",
"run failed",
"run logs",
"workflow run failed",
"workflow step failed"
],
"allOf": [
[
"workflow",
"durable"
],
[
"workflow",
"retry"
],
[
"workflow",
"resume"
],
[
"pause",
"resume"
],
[
"survive",
"crash"
],
[
"survive",
"reload"
],
[
"survive",
"disconnect"
],
[
"pipeline",
"stream"
],
[
"pipeline",
"step"
],
[
"pipeline",
"durable"
],
[
"pipeline",
"reliable"
],
[
"pipeline",
"retry"
],
[
"multi-step",
"stream"
],
[
"multi-step",
"reliable"
],
[
"generation",
"pipeline"
],
[
"creation",
"pipeline"
],
[
"process",
"stream"
],
[
"process",
"reliable"
],
[
"process",
"retry"
],
[
"retry",
"failure"
],
[
"retry",
"error"
],
[
"retry",
"automatically"
],
[
"retry",
"transient"
],
[
"reliable",
"retry"
],
[
"individually",
"reliable"
],
[
"steps",
"reliable"
],
[
"sandbox",
"reliable"
],
[
"sandbox",
"retry"
],
[
"reconnect",
"network"
],
[
"reconnect",
"drop"
],
[
"reconnect",
"disconnect"
],
[
"session",
"persist"
],
[
"session",
"survive"
],
[
"session",
"reload"
],
[
"session",
"reconnect"
],
[
"chat",
"survive"
],
[
"chat",
"persist"
],
[
"chat",
"reconnect"
],
[
"chat",
"durable"
],
[
"chat",
"fault"
],
[
"conversation",
"persist"
],
[
"conversation",
"survive"
],
[
"approval",
"wait"
],
[
"approval",
"human"
],
[
"each",
"step"
],
[
"each",
"phase"
],
[
"each",
"stage"
],
[
"step",
"reliable"
],
[
"step",
"retry"
],
[
"chain",
"trigger"
],
[
"chain",
"sequential"
],
[
"chain",
"email"
],
[
"chain",
"webhook"
],
[
"chain",
"delay"
],
[
"chain",
"step"
],
[
"chain",
"escalat"
],
[
"sequential",
"trigger"
],
[
"sequential",
"email"
],
[
"sequential",
"step"
],
[
"sequential",
"webhook"
],
[
"trigger",
"orchestrat"
],
[
"trigger",
"service"
],
[
"trigger",
"delay"
],
[
"trigger",
"sequential"
],
[
"webhook",
"chain"
],
[
"webhook",
"orchestrat"
],
[
"webhook",
"pipeline"
],
[
"webhook",
"sequential"
],
[
"email",
"trigger"
],
[
"email",
"pipeline"
],
[
"email",
"sequential"
],
[
"email",
"delay"
],
[
"email",
"escalat"
],
[
"escalat",
"trigger"
],
[
"escalat",
"step"
],
[
"escalat",
"email"
],
[
"state",
"machine"
],
[
"conditional",
"step"
],
[
"conditional",
"skip"
],
[
"branch",
"condition"
],
[
"wait",
"webhook"
],
[
"wait",
"trigger"
],
[
"wait",
"event"
],
[
"workflow",
"stuck"
],
[
"workflow",
"hung"
],
[
"workflow",
"timeout"
],
[
"workflow",
"error"
],
[
"workflow",
"logs"
],
[
"workflow",
"debug"
],
[
"workflow",
"check"
],
[
"workflow",
"failing"
],
[
"workflow",
"status"
],
[
"run",
"status"
],
[
"step",
"failed"
],
[
"step",
"stuck"
],
[
"step",
"timeout"
],
[
"workflow",
"run"
],
[
"run",
"logs"
]
],
"anyOf": [
"long-running",
"long running",
"multi-step",
"multi step",
"pipeline",
"orchestration",
"step-by-step",
"step by step",
"each piece",
"each step",
"each phase",
"each stage",
"phase",
"phases",
"stage",
"stages",
"durable",
"reliable",
"fault-tolerant",
"retry",
"reconnect",
"survive",
"persist",
"approval",
"chain",
"sequential",
"trigger",
"webhook",
"escalation",
"state machine",
"orchestrate",
"orchestration"
],
"noneOf": [
"github actions",
".github/workflows",
"ci workflow",
"aws step functions"
],
"minScore": 4
},
"retrieval": {
"aliases": [
"durable workflow",
"long running task",
"step function",
"orchestration"
],
"intents": [
"build workflow",
"add retry logic",
"create durable task",
"implement step function"
],
"entities": [
"Workflow DevKit",
"WDK",
"step",
"pause/resume",
"durable"
],
"examples": []
}
},
"react-best-practices": {
"priority": 4,
"summary": "",
"docs": [
"https://react.dev/reference/react",
"https://react.dev/learn"
],
"pathPatterns": [
"src/components/**/*.tsx",
"src/components/**/*.jsx",
"app/components/**/*.tsx",
"app/components/**/*.jsx",
"components/**/*.tsx",
"components/**/*.jsx",
"src/ui/**/*.tsx",
"lib/components/**/*.tsx"
],
"bashPatterns": [],
"importPatterns": [
"react",
"react-dom"
],
"bodyPath": "skills/react-best-practices/SKILL.md",
"pathRegexSources": [
"^src\\/components\\/(?:[^/]+\\/)*[^/]*\\.tsx$",
"^src\\/components\\/(?:[^/]+\\/)*[^/]*\\.jsx$",
"^app\\/components\\/(?:[^/]+\\/)*[^/]*\\.tsx$",
"^app\\/components\\/(?:[^/]+\\/)*[^/]*\\.jsx$",
"^components\\/(?:[^/]+\\/)*[^/]*\\.tsx$",
"^components\\/(?:[^/]+\\/)*[^/]*\\.jsx$",
"^src\\/ui\\/(?:[^/]+\\/)*[^/]*\\.tsx$",
"^lib\\/components\\/(?:[^/]+\\/)*[^/]*\\.tsx$"
],
"bashRegexSources": [],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]react(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]react-dom(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"react review",
"component quality",
"tsx linter",
"react patterns"
],
"intents": [
"review react code",
"improve component quality",
"check accessibility",
"optimize react"
],
"entities": [
"hooks",
"accessibility",
"React",
"TSX",
"component"
],
"examples": []
}
},
"nextjs": {
"priority": 5,
"summary": "",
"docs": [
"https://nextjs.org/docs",
"https://nextjs.org/docs/app"
],
"sitemap": "https://nextjs.org/sitemap.xml",
"pathPatterns": [
"next.config.*",
"next-env.d.ts",
"app/**",
"pages/**",
"src/app/**",
"src/pages/**",
"tailwind.config.*",
"postcss.config.*",
"tsconfig.json",
"tsconfig.*.json",
"apps/*/app/**",
"apps/*/pages/**",
"apps/*/src/app/**",
"apps/*/src/pages/**",
"apps/*/next.config.*"
],
"bashPatterns": [
"\\bnext\\s+(dev|build|start|lint)\\b",
"\\bnext\\s+experimental-analyze\\b",
"\\bnpx\\s+create-next-app\\b",
"\\bbunx\\s+create-next-app\\b",
"\\bnpm\\s+run\\s+(dev|build|start)\\b",
"\\bpnpm\\s+(dev|build)\\b",
"\\bbun\\s+run\\s+(dev|build)\\b"
],
"importPatterns": [],
"bodyPath": "skills/nextjs/SKILL.md",
"pathRegexSources": [
"^next\\.config\\.[^/]*$",
"^next-env\\.d\\.ts$",
"^app\\/.*$",
"^pages\\/.*$",
"^src\\/app\\/.*$",
"^src\\/pages\\/.*$",
"^tailwind\\.config\\.[^/]*$",
"^postcss\\.config\\.[^/]*$",
"^tsconfig\\.json$",
"^tsconfig\\.[^/]*\\.json$",
"^apps\\/[^/]*\\/app\\/.*$",
"^apps\\/[^/]*\\/pages\\/.*$",
"^apps\\/[^/]*\\/src\\/app\\/.*$",
"^apps\\/[^/]*\\/src\\/pages\\/.*$",
"^apps\\/[^/]*\\/next\\.config\\.[^/]*$"
],
"bashRegexSources": [
"\\bnext\\s+(dev|build|start|lint)\\b",
"\\bnext\\s+experimental-analyze\\b",
"\\bnpx\\s+create-next-app\\b",
"\\bbunx\\s+create-next-app\\b",
"\\bnpm\\s+run\\s+(dev|build|start)\\b",
"\\bpnpm\\s+(dev|build)\\b",
"\\bbun\\s+run\\s+(dev|build)\\b"
],
"importRegexSources": [],
"validate": [
{
"pattern": "export.*getServerSideProps",
"message": "getServerSideProps is removed in App Router — use server components or route handlers",
"severity": "error"
},
{
"pattern": "getServerSideProps",
"message": "getServerSideProps is a Pages Router pattern — migrate to App Router server components",
"severity": "warn"
},
{
"pattern": "from\\s+['\"]next/router['\"]",
"message": "next/router is Pages Router only — use next/navigation for App Router",
"severity": "error"
},
{
"pattern": "(useState|useEffect)",
"message": "React hooks require \"use client\" directive — add it at the top of client components",
"severity": "warn",
"skipIfFileContains": "^['\\\"]use client['\\\"]"
},
{
"pattern": "from\\s+['\"]next/head['\"]",
"message": "next/head is Pages Router — use export const metadata or generateMetadata() in App Router",
"severity": "error"
},
{
"pattern": "export\\s+(default\\s+)?function\\s+middleware",
"message": "middleware() is renamed to proxy() in Next.js 16 — rename the function and the file to proxy.ts",
"severity": "recommended"
},
{
"pattern": "revalidateTag\\(\\s*['\"][^'\"]+['\"]\\s*\\)",
"message": "Single-arg revalidateTag(tag) is deprecated in Next.js 16 — pass a cacheLife profile: revalidateTag(tag, \"max\")",
"severity": "recommended"
},
{
"pattern": "\\bcacheHandler\\s*:",
"message": "Singular cacheHandler is deprecated in Next.js 16 — use cacheHandlers (plural) with per-type handlers",
"severity": "recommended"
},
{
"pattern": "useRef\\(\\s*\\)",
"message": "useRef() requires an initial value in React 19 — use useRef(null) or useRef(0)",
"severity": "error"
},
{
"pattern": "next\\s+export",
"message": "next export was removed — use output: \"export\" in next.config.js for static export",
"severity": "error"
},
{
"pattern": "(?<!await )\\bcookies\\(\\s*\\)",
"message": "cookies() is async in Next.js 16 — add await: const cookieStore = await cookies()",
"severity": "error",
"skipIfFileContains": "^['\\\"]use client['\\\"]"
},
{
"pattern": "(?<!await )\\bheaders\\(\\s*\\)",
"message": "headers() is async in Next.js 16 — add await: const headersList = await headers()",
"severity": "error",
"skipIfFileContains": "^['\\\"]use client['\\\"]"
},
{
"pattern": "=\\s*(?!await\\b)params\\b",
"message": "params is async in Next.js 16 — add await: const { slug } = await params",
"severity": "recommended",
"skipIfFileContains": "^['\\\"]use client['\\\"]"
},
{
"pattern": "=\\s*(?!await\\b)searchParams\\b",
"message": "searchParams is async in Next.js 16 — add await: const { query } = await searchParams",
"severity": "recommended",
"skipIfFileContains": "^['\\\"]use client['\\\"]"
}
],
"promptSignals": {
"phrases": [
"next.js",
"nextjs",
"app router",
"server component",
"server action"
],
"allOf": [
[
"middleware",
"next"
],
[
"layout",
"route"
]
],
"anyOf": [
"pages router",
"getserversideprops",
"use server"
],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"next.js",
"nextjs app",
"react framework",
"app router"
],
"intents": [
"set up routing and layouts in a Next.js app",
"choose between server and client components for a feature",
"configure data fetching or caching in App Router",
"add middleware or proxy logic to handle requests",
"set up server rendering for React pages",
"add a new page with dynamic route segments"
],
"entities": [
"App Router",
"Server Components",
"Server Actions",
"generateMetadata",
"layout",
"proxy",
"next.config"
],
"examples": [
"add a new page with dynamic routing",
"should this be a server or client component",
"set up middleware for auth redirects",
"configure caching for this data fetch",
"set up server rendering for my pages"
]
}
},
"ai-elements": {
"priority": 5,
"summary": "",
"docs": [
"https://sdk.vercel.ai/docs/ai-sdk-ui/chatbot-with-tool-calling"
],
"sitemap": "https://sdk.vercel.ai/sitemap.xml",
"pathPatterns": [
"components/ai-elements/**",
"src/components/ai-elements/**",
"components/**/chat*",
"components/**/*chat*",
"components/**/message*",
"components/**/*message*",
"src/components/**/chat*",
"src/components/**/*chat*",
"src/components/**/message*",
"src/components/**/*message*"
],
"bashPatterns": [
"\\bnpx\\s+ai-elements\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bai-elements\\b",
"\\bnpx\\s+shadcn@latest\\s+add\\s+[^\\n]*elements\\.ai-sdk\\.dev\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\byarn\\s+add\\s+[^\\n]*\\b@ai-sdk/react\\b"
],
"importPatterns": [
"ai",
"@ai-sdk/*",
"@ai-sdk/react",
"@/components/ai-elements/*"
],
"bodyPath": "skills/ai-elements/SKILL.md",
"pathRegexSources": [
"^components\\/ai-elements\\/.*$",
"^src\\/components\\/ai-elements\\/.*$",
"^components\\/(?:[^/]+\\/)*chat[^/]*$",
"^components\\/(?:[^/]+\\/)*[^/]*chat[^/]*$",
"^components\\/(?:[^/]+\\/)*message[^/]*$",
"^components\\/(?:[^/]+\\/)*[^/]*message[^/]*$",
"^src\\/components\\/(?:[^/]+\\/)*chat[^/]*$",
"^src\\/components\\/(?:[^/]+\\/)*[^/]*chat[^/]*$",
"^src\\/components\\/(?:[^/]+\\/)*message[^/]*$",
"^src\\/components\\/(?:[^/]+\\/)*[^/]*message[^/]*$"
],
"bashRegexSources": [
"\\bnpx\\s+ai-elements\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bai-elements\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bai-elements\\b",
"\\bnpx\\s+shadcn@latest\\s+add\\s+[^\\n]*elements\\.ai-sdk\\.dev\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\b@ai-sdk/react\\b",
"\\byarn\\s+add\\s+[^\\n]*\\b@ai-sdk/react\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]ai(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@ai-sdk\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@ai-sdk\\/react(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@\\/components\\/ai-elements\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "part\\.text\\b",
"message": "You are rendering AI message text as raw strings — use <MessageResponse> from @/components/ai-elements/message to render markdown, code blocks, and rich formatting. Install with: npx shadcn@latest add https://elements.ai-sdk.dev/api/registry/message.json",
"severity": "warn",
"skipIfFileContains": "ai-elements/message"
},
{
"pattern": "react-markdown",
"message": "Use <MessageResponse> from @/components/ai-elements/message instead of react-markdown — it handles streaming, code highlighting, and AI SDK message parts out of the box",
"severity": "warn",
"skipIfFileContains": "ai-elements/message"
},
{
"pattern": "dangerouslySetInnerHTML",
"message": "Do not render AI responses with dangerouslySetInnerHTML — use <MessageResponse> from @/components/ai-elements/message for safe, styled markdown rendering",
"severity": "error",
"skipIfFileContains": "ai-elements/message"
},
{
"pattern": "@ts-nocheck",
"message": "Do not add @ts-nocheck — this means you installed an AI Elements component with a type conflict. Delete unused components, or reinstall the broken one: npx shadcn@latest add https://elements.ai-sdk.dev/api/registry/<component>.json --overwrite",
"severity": "error"
}
],
"promptSignals": {
"phrases": [
"ai elements",
"ai components",
"chat components",
"chat ui",
"chat interface",
"voice elements",
"code elements",
"voice agent",
"speech input",
"transcription component",
"code editor component",
"streaming markdown",
"streaming ui",
"streaming response",
"markdown formatting"
],
"allOf": [
[
"message",
"component"
],
[
"conversation",
"component"
],
[
"markdown",
"stream"
],
[
"markdown",
"render"
],
[
"chat",
"ui"
],
[
"chat",
"interface"
],
[
"stream",
"response"
],
[
"ai",
"component"
]
],
"anyOf": [
"message component",
"conversation component",
"tool call display",
"reasoning display",
"voice conversation",
"speech to text",
"text to speech",
"mic selector",
"voice selector",
"ai code editor",
"file tree component",
"terminal component",
"stack trace component",
"test results component",
"react-markdown",
"chat ui",
"terminal",
"useChat",
"streamText"
],
"noneOf": [
"vue",
"svelte",
"readme",
"markdown file",
"changelog"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"ai components",
"chat components",
"ai ui kit",
"ai interface"
],
"intents": [
"build chat ui",
"render tool calls",
"show streaming response",
"add reasoning panel"
],
"entities": [
"AIMessage",
"ToolCallDisplay",
"StreamingMessage",
"ReasoningPanel",
"shadcn"
],
"examples": []
}
},
"vercel-sandbox": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/docs/sandbox"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/sandbox\\b"
],
"importPatterns": [
"@vercel/sandbox"
],
"bodyPath": "skills/vercel-sandbox/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/sandbox\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/sandbox\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/sandbox(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"promptSignals": {
"phrases": [
"@vercel/sandbox",
"sandbox",
"code sandbox",
"vercel sandbox",
"isolated environment",
"sandboxed execution"
],
"allOf": [
[
"sandbox",
"code"
],
[
"sandbox",
"execute"
],
[
"sandbox",
"run"
],
[
"sandbox",
"isolated"
],
[
"sandbox",
"safe"
],
[
"sandbox",
"environment"
],
[
"isolated",
"execute"
],
[
"isolated",
"code"
],
[
"isolated",
"environment"
],
[
"isolated",
"run"
],
[
"safe",
"execute"
],
[
"safe",
"code"
],
[
"untrusted",
"code"
],
[
"untrusted",
"execute"
],
[
"code",
"runner"
],
[
"code",
"playground"
],
[
"execute",
"safely"
],
[
"run",
"safely"
],
[
"run",
"isolation"
],
[
"execute",
"isolation"
],
[
"ffmpeg",
"process"
],
[
"ffmpeg",
"convert"
],
[
"ffmpeg",
"compress"
],
[
"student",
"code"
],
[
"student",
"execute"
],
[
"student",
"run"
]
],
"anyOf": [
"sandbox",
"isolated",
"isolation",
"untrusted",
"safely",
"microvm",
"ffmpeg",
"playground"
],
"noneOf": [
"iframe sandbox",
"sandbox attribute",
"codesandbox.io",
"stackblitz"
],
"minScore": 4
},
"retrieval": {
"aliases": [
"code sandbox",
"microvm",
"isolated execution",
"safe code runner"
],
"intents": [
"run untrusted code",
"execute code safely",
"create sandbox",
"isolate code execution"
],
"entities": [
"Vercel Sandbox",
"Firecracker",
"microVM",
"isolated execution"
],
"examples": []
}
},
"satori": {
"priority": 4,
"summary": "",
"docs": [
"https://github.com/vercel/satori",
"https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image"
],
"sitemap": "https://nextjs.org/sitemap.xml",
"pathPatterns": [
"app/**/og/**",
"app/**/og.*",
"app/**/opengraph-image.*",
"app/**/twitter-image.*",
"src/app/**/og/**",
"src/app/**/og.*",
"src/app/**/opengraph-image.*",
"src/app/**/twitter-image.*",
"pages/api/og.*",
"pages/api/og/**",
"src/pages/api/og.*",
"src/pages/api/og/**",
"apps/*/app/**/og/**",
"apps/*/app/**/og.*",
"apps/*/app/**/opengraph-image.*",
"apps/*/app/**/twitter-image.*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bsatori\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/og\\b"
],
"importPatterns": [
"satori",
"satori/wasm",
"@vercel/og",
"next/og"
],
"bodyPath": "skills/satori/SKILL.md",
"pathRegexSources": [
"^app\\/(?:[^/]+\\/)*og\\/.*$",
"^app\\/(?:[^/]+\\/)*og\\.[^/]*$",
"^app\\/(?:[^/]+\\/)*opengraph-image\\.[^/]*$",
"^app\\/(?:[^/]+\\/)*twitter-image\\.[^/]*$",
"^src\\/app\\/(?:[^/]+\\/)*og\\/.*$",
"^src\\/app\\/(?:[^/]+\\/)*og\\.[^/]*$",
"^src\\/app\\/(?:[^/]+\\/)*opengraph-image\\.[^/]*$",
"^src\\/app\\/(?:[^/]+\\/)*twitter-image\\.[^/]*$",
"^pages\\/api\\/og\\.[^/]*$",
"^pages\\/api\\/og\\/.*$",
"^src\\/pages\\/api\\/og\\.[^/]*$",
"^src\\/pages\\/api\\/og\\/.*$",
"^apps\\/[^/]*\\/app\\/(?:[^/]+\\/)*og\\/.*$",
"^apps\\/[^/]*\\/app\\/(?:[^/]+\\/)*og\\.[^/]*$",
"^apps\\/[^/]*\\/app\\/(?:[^/]+\\/)*opengraph-image\\.[^/]*$",
"^apps\\/[^/]*\\/app\\/(?:[^/]+\\/)*twitter-image\\.[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bsatori\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bsatori\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/og\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/og\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]satori(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]satori\\/wasm(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@vercel\\/og(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]next\\/og(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"retrieval": {
"aliases": [
"og image",
"social image",
"html to svg",
"open graph"
],
"intents": [
"generate og image",
"create social image",
"convert html to svg",
"dynamic og"
],
"entities": [
"Satori",
"OG image",
"SVG",
"open graph"
],
"examples": []
}
},
"chat-sdk": {
"priority": 8,
"summary": "",
"docs": [
"https://sdk.vercel.ai/docs/ai-sdk-ui/chatbot",
"https://github.com/vercel/ai-chatbot"
],
"sitemap": "https://sdk.vercel.ai/sitemap.xml",
"pathPatterns": [
"app/api/chat/**",
"app/api/chat-bot/**",
"app/api/bot/**",
"app/api/slack/**",
"app/api/teams/**",
"app/api/discord/**",
"app/api/gchat/**",
"app/api/telegram/**",
"app/api/github-bot/**",
"app/api/linear-bot/**",
"app/api/webhooks/slack/**",
"app/api/webhooks/teams/**",
"app/api/webhooks/discord/**",
"app/api/webhooks/gchat/**",
"app/api/webhooks/telegram/**",
"app/api/webhooks/github/**",
"app/api/webhooks/linear/**",
"src/app/api/chat/**",
"src/app/api/chat-bot/**",
"src/app/api/bot/**",
"src/app/api/slack/**",
"src/app/api/teams/**",
"src/app/api/discord/**",
"src/app/api/gchat/**",
"src/app/api/telegram/**",
"lib/bot.*",
"lib/bot/**",
"src/lib/bot.*",
"src/lib/bot/**",
"lib/chat-bot/**",
"src/lib/chat-bot/**",
"bot/**",
"pages/api/bot.*",
"pages/api/bot/**",
"src/pages/api/bot.*",
"src/pages/api/bot/**",
"tests/**/bot*",
"test/**/bot*",
"fixtures/replay/**",
"apps/*/app/api/bot/**",
"apps/*/app/api/slack/**",
"apps/*/app/api/teams/**",
"apps/*/app/api/discord/**",
"apps/*/lib/bot/**",
"apps/*/src/lib/bot/**"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bchat\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\byarn\\s+add\\s+[^\\n]*@chat-adapter/",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\byarn\\s+add\\s+[^\\n]*@chat-adapter/telegram"
],
"importPatterns": [
"chat",
"@chat-adapter/*"
],
"bodyPath": "skills/chat-sdk/SKILL.md",
"pathRegexSources": [
"^app\\/api\\/chat\\/.*$",
"^app\\/api\\/chat-bot\\/.*$",
"^app\\/api\\/bot\\/.*$",
"^app\\/api\\/slack\\/.*$",
"^app\\/api\\/teams\\/.*$",
"^app\\/api\\/discord\\/.*$",
"^app\\/api\\/gchat\\/.*$",
"^app\\/api\\/telegram\\/.*$",
"^app\\/api\\/github-bot\\/.*$",
"^app\\/api\\/linear-bot\\/.*$",
"^app\\/api\\/webhooks\\/slack\\/.*$",
"^app\\/api\\/webhooks\\/teams\\/.*$",
"^app\\/api\\/webhooks\\/discord\\/.*$",
"^app\\/api\\/webhooks\\/gchat\\/.*$",
"^app\\/api\\/webhooks\\/telegram\\/.*$",
"^app\\/api\\/webhooks\\/github\\/.*$",
"^app\\/api\\/webhooks\\/linear\\/.*$",
"^src\\/app\\/api\\/chat\\/.*$",
"^src\\/app\\/api\\/chat-bot\\/.*$",
"^src\\/app\\/api\\/bot\\/.*$",
"^src\\/app\\/api\\/slack\\/.*$",
"^src\\/app\\/api\\/teams\\/.*$",
"^src\\/app\\/api\\/discord\\/.*$",
"^src\\/app\\/api\\/gchat\\/.*$",
"^src\\/app\\/api\\/telegram\\/.*$",
"^lib\\/bot\\.[^/]*$",
"^lib\\/bot\\/.*$",
"^src\\/lib\\/bot\\.[^/]*$",
"^src\\/lib\\/bot\\/.*$",
"^lib\\/chat-bot\\/.*$",
"^src\\/lib\\/chat-bot\\/.*$",
"^bot\\/.*$",
"^pages\\/api\\/bot\\.[^/]*$",
"^pages\\/api\\/bot\\/.*$",
"^src\\/pages\\/api\\/bot\\.[^/]*$",
"^src\\/pages\\/api\\/bot\\/.*$",
"^tests\\/(?:[^/]+\\/)*bot[^/]*$",
"^test\\/(?:[^/]+\\/)*bot[^/]*$",
"^fixtures\\/replay\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/bot\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/slack\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/teams\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/discord\\/.*$",
"^apps\\/[^/]*\\/lib\\/bot\\/.*$",
"^apps\\/[^/]*\\/src\\/lib\\/bot\\/.*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bchat\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bchat\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/",
"\\byarn\\s+add\\s+[^\\n]*@chat-adapter/",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@chat-adapter/telegram",
"\\byarn\\s+add\\s+[^\\n]*@chat-adapter/telegram"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]chat(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@chat-adapter\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"promptSignals": {
"phrases": [
"chat sdk",
"chat bot",
"chatbot",
"conversational interface",
"slack bot",
"telegram bot",
"discord bot",
"teams bot"
],
"allOf": [
[
"bot",
"platform"
],
[
"bot",
"multi"
]
],
"anyOf": [
"onNewMention",
"onSubscribedMessage",
"chat adapter",
"cross-platform bot"
],
"noneOf": [
"useChat"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"chat ui",
"chatbot",
"conversation interface",
"messaging component"
],
"intents": [
"build chatbot",
"add chat interface",
"create messaging ui",
"implement chat feature"
],
"entities": [
"useChat",
"Message",
"ChatUI",
"StreamingMessage",
"chat-sdk"
],
"examples": [
"build a chatbot interface",
"add chat to my app",
"create a messaging component"
]
}
},
"turborepo": {
"priority": 5,
"summary": "",
"docs": [
"https://turborepo.dev/docs"
],
"sitemap": "https://turborepo.dev/sitemap.xml",
"pathPatterns": [
"turbo.json",
"turbo/**"
],
"bashPatterns": [
"\\bturbo\\s+(run|build|test|lint|dev)\\b",
"\\bnpx\\s+turbo\\b",
"\\bbunx\\s+turbo\\b"
],
"importPatterns": [],
"bodyPath": "skills/turborepo/SKILL.md",
"pathRegexSources": [
"^turbo\\.json$",
"^turbo\\/.*$"
],
"bashRegexSources": [
"\\bturbo\\s+(run|build|test|lint|dev)\\b",
"\\bnpx\\s+turbo\\b",
"\\bbunx\\s+turbo\\b"
],
"importRegexSources": [],
"validate": [
{
"pattern": "\"pipeline\"\\s*:",
"message": "turbo.json \"pipeline\" was renamed to \"tasks\" in Turborepo v2 — update to \"tasks\" key",
"severity": "error"
}
],
"retrieval": {
"aliases": [
"monorepo",
"turbo",
"workspace builds",
"task runner"
],
"intents": [
"set up monorepo",
"configure turbo",
"optimize build caching",
"run tasks in parallel"
],
"entities": [
"Turborepo",
"turbo.json",
"remote caching",
"--affected",
"pipeline"
],
"examples": []
}
},
"ai-sdk": {
"priority": 8,
"summary": "",
"docs": [
"https://sdk.vercel.ai/docs",
"https://sdk.vercel.ai/docs/reference"
],
"sitemap": "https://sdk.vercel.ai/sitemap.xml",
"pathPatterns": [
"app/api/chat/**",
"app/api/completion/**",
"src/app/api/chat/**",
"src/app/api/completion/**",
"pages/api/chat.*",
"pages/api/chat/**",
"pages/api/completion.*",
"pages/api/completion/**",
"src/pages/api/chat.*",
"src/pages/api/chat/**",
"src/pages/api/completion.*",
"src/pages/api/completion/**",
"lib/ai/**",
"src/lib/ai/**",
"lib/ai.*",
"src/lib/ai.*",
"ai/**",
"apps/*/app/api/chat/**",
"apps/*/app/api/completion/**",
"apps/*/src/app/api/chat/**",
"apps/*/src/app/api/completion/**",
"apps/*/lib/ai/**",
"apps/*/src/lib/ai/**",
"lib/agent.*",
"src/lib/agent.*",
"app/actions/chat.*",
"src/app/actions/chat.*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bai\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\byarn\\s+add\\s+[^\\n]*@ai-sdk/",
"\\bnpx\\s+@ai-sdk/devtools\\b",
"\\bnpx\\s+@ai-sdk/codemod\\b",
"\\bnpx\\s+mcp-to-ai-sdk\\b"
],
"importPatterns": [
"ai",
"@ai-sdk/*"
],
"bodyPath": "skills/ai-sdk/SKILL.md",
"pathRegexSources": [
"^app\\/api\\/chat\\/.*$",
"^app\\/api\\/completion\\/.*$",
"^src\\/app\\/api\\/chat\\/.*$",
"^src\\/app\\/api\\/completion\\/.*$",
"^pages\\/api\\/chat\\.[^/]*$",
"^pages\\/api\\/chat\\/.*$",
"^pages\\/api\\/completion\\.[^/]*$",
"^pages\\/api\\/completion\\/.*$",
"^src\\/pages\\/api\\/chat\\.[^/]*$",
"^src\\/pages\\/api\\/chat\\/.*$",
"^src\\/pages\\/api\\/completion\\.[^/]*$",
"^src\\/pages\\/api\\/completion\\/.*$",
"^lib\\/ai\\/.*$",
"^src\\/lib\\/ai\\/.*$",
"^lib\\/ai\\.[^/]*$",
"^src\\/lib\\/ai\\.[^/]*$",
"^ai\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/chat\\/.*$",
"^apps\\/[^/]*\\/app\\/api\\/completion\\/.*$",
"^apps\\/[^/]*\\/src\\/app\\/api\\/chat\\/.*$",
"^apps\\/[^/]*\\/src\\/app\\/api\\/completion\\/.*$",
"^apps\\/[^/]*\\/lib\\/ai\\/.*$",
"^apps\\/[^/]*\\/src\\/lib\\/ai\\/.*$",
"^lib\\/agent\\.[^/]*$",
"^src\\/lib\\/agent\\.[^/]*$",
"^app\\/actions\\/chat\\.[^/]*$",
"^src\\/app\\/actions\\/chat\\.[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bai\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bai\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@ai-sdk/",
"\\byarn\\s+add\\s+[^\\n]*@ai-sdk/",
"\\bnpx\\s+@ai-sdk/devtools\\b",
"\\bnpx\\s+@ai-sdk/codemod\\b",
"\\bnpx\\s+mcp-to-ai-sdk\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]ai(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@ai-sdk\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "from\\s+['\"]openai['\"]",
"message": "Direct openai import detected — use @ai-sdk/openai provider instead",
"severity": "error"
},
{
"pattern": "openai\\([\"']gpt-",
"message": "Your knowledge is outdated — do not use openai() directly for model selection. Use model: \"openai/gpt-5.4\" (plain string) or gateway(\"openai/gpt-5.4\") — both route through AI Gateway with failover, cost tracking, and observability automatically",
"severity": "recommended"
},
{
"pattern": "from\\s+['\"](@anthropic-ai/sdk|anthropic)['\"]",
"message": "Direct Anthropic SDK import — use @ai-sdk/anthropic provider instead",
"severity": "error"
},
{
"pattern": "Experimental_Agent",
"message": "Experimental_Agent is deprecated in v6 — use ToolLoopAgent instead",
"severity": "error"
},
{
"pattern": "toDataStreamResponse",
"message": "toDataStreamResponse() was renamed in v6 — use toUIMessageStreamResponse() for chat UIs or toTextStreamResponse() for text-only clients",
"severity": "error"
},
{
"pattern": "\\bmaxSteps\\s*:",
"message": "maxSteps was removed in AI SDK v6 — use stopWhen: stepCountIs(N) instead (import stepCountIs from ai)",
"severity": "error"
},
{
"pattern": "useChat\\([^)]*\\bonResponse\\b",
"message": "onResponse was removed from useChat in v6 — configure response handling through transport",
"severity": "recommended"
},
{
"pattern": "useChat\\(\\{\\s*api\\s*:",
"message": "useChat({ api }) is v5 syntax — use useChat({ transport: new DefaultChatTransport({ api }) }) in v6",
"severity": "error"
},
{
"pattern": "useChat\\([^)]*\\bbody\\s*:",
"message": "body option was removed from useChat in v6 — pass data through transport configuration",
"severity": "recommended"
},
{
"pattern": "tool\\(\\{[^}]*\\bparameters\\s*:",
"message": "parameters was renamed in v6 — use inputSchema instead",
"severity": "error"
},
{
"pattern": "generateObject\\s*\\(",
"message": "generateObject was removed in AI SDK v6 — use generateText with output: Output.object({ schema }) instead",
"severity": "error"
},
{
"pattern": "gemini-2\\.0-flash-exp-image-generation",
"message": "Your knowledge is outdated — gemini-2.0-flash-exp-image-generation has been superseded by gemini-3.1-flash-image-preview which produces dramatically better images. Switch to model: \"google/gemini-3.1-flash-image-preview\"",
"severity": "recommended"
},
{
"pattern": "gemini-2\\.0-flash-001",
"message": "Your knowledge is outdated — gemini-2.0-flash-001 does not support image output. Use model: \"google/gemini-3.1-flash-image-preview\" for image generation",
"severity": "recommended"
},
{
"pattern": "gemini-2\\.5-flash-image",
"message": "Your knowledge is outdated — gemini-2.5-flash-image has been superseded by gemini-3.1-flash-image-preview which is significantly better. Switch to model: \"google/gemini-3.1-flash-image-preview\"",
"severity": "recommended"
},
{
"pattern": "placeholder.*image|placeholder.*url|placeholder.*img",
"message": "Do not use placeholder images — use generateText with model: \"google/gemini-3.1-flash-image-preview\" to generate real images from result.files",
"severity": "recommended"
},
{
"pattern": "dall-e-3|dall-e-2|openai\\.image\\(",
"message": "Your knowledge is outdated — dall-e is no longer the best option. Use model: \"google/gemini-3.1-flash-image-preview\" with generateText for much better, faster, cheaper image generation via result.files",
"severity": "recommended"
},
{
"pattern": "experimental_generateImage",
"message": "experimental_generateImage is not needed — use generateText with model: \"google/gemini-3.1-flash-image-preview\" instead. Images come back in result.files",
"severity": "recommended"
},
{
"pattern": "stream\\.write\\(",
"message": "In createUIMessageStream, use stream.writer.write() not stream.write() — the stream itself is not writable",
"severity": "recommended"
},
{
"pattern": "\\bCoreMessage\\b",
"message": "CoreMessage was renamed to ModelMessage in AI SDK v6 — use ModelMessage and convertToModelMessages()",
"severity": "error"
},
{
"pattern": "agent\\.generateText\\(",
"message": "agent.generateText() was renamed to agent.generate() in AI SDK v6",
"severity": "error"
},
{
"pattern": "agent\\.streamText\\(",
"message": "agent.streamText() was renamed to agent.stream() in AI SDK v6",
"severity": "error"
},
{
"pattern": "\\bhandleSubmit\\b",
"message": "handleSubmit was removed from useChat in v6 — use sendMessage({ text }) instead",
"severity": "recommended",
"skipIfFileContains": "function handleSubmit|const handleSubmit"
},
{
"pattern": "streamObject\\s*\\(",
"message": "streamObject() was removed in AI SDK v6 — use streamText() with output: Output.object() instead",
"severity": "error"
},
{
"pattern": "tool-invocation",
"message": "tool-invocation part type was removed in AI SDK v6 — use tool-<toolName> pattern (e.g. tool-weather) instead",
"severity": "error",
"skipIfFileContains": "tool-<"
},
{
"pattern": "\\bisLoading\\b",
"message": "isLoading was removed from useChat in v6 — use status === \"streaming\" || status === \"submitted\" instead",
"severity": "recommended",
"skipIfFileContains": "\\bstatus\\b"
},
{
"pattern": "message\\.content\\b",
"message": "message.content is deprecated in AI SDK v6 — use message.parts to iterate UIMessage parts instead",
"severity": "recommended",
"skipIfFileContains": "message\\.parts"
}
],
"promptSignals": {
"phrases": [
"ai sdk",
"vercel ai",
"generatetext",
"streamtext"
],
"allOf": [
[
"streaming",
"generation"
],
[
"structured",
"output"
]
],
"anyOf": [
"usechat",
"usecompletion",
"tool calling",
"embeddings"
],
"noneOf": [
"openai api directly"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"vercel ai",
"ai sdk",
"ai library",
"ai module"
],
"intents": [
"add AI-powered text generation or chat to my app",
"stream responses from a language model to the UI",
"call tools and run agent loops with an LLM",
"generate structured JSON output from a prompt",
"build ai feature with streaming and tool calling"
],
"entities": [
"useChat",
"useCompletion",
"streamText",
"generateText",
"generateObject",
"CoreMessage",
"ToolLoopAgent",
"AI Gateway"
],
"examples": [
"add AI chat to my app",
"stream responses from a language model",
"use tool calling with the AI SDK",
"generate structured output from GPT",
"run an agent loop that calls tools automatically"
]
}
},
"v0-dev": {
"priority": 5,
"summary": "",
"docs": [
"https://v0.dev/docs",
"https://vercel.com/docs/v0"
],
"sitemap": "https://v0.dev/sitemap.xml",
"pathPatterns": [],
"bashPatterns": [
"\\bnpx\\s+v0\\b",
"\\bbunx\\s+v0\\b",
"\\bv0\\s+(generate|dev|chat)\\b"
],
"importPatterns": [
"@v0/sdk",
"v0"
],
"bodyPath": "skills/v0-dev/SKILL.md",
"pathRegexSources": [],
"bashRegexSources": [
"\\bnpx\\s+v0\\b",
"\\bbunx\\s+v0\\b",
"\\bv0\\s+(generate|dev|chat)\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@v0\\/sdk(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]v0(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"promptSignals": {
"phrases": [
"generate with v0",
"v0 components",
"use v0",
"v0 generate"
],
"allOf": [],
"anyOf": [],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"v0",
"ai code gen",
"ui generator",
"prompt to code"
],
"intents": [
"generate ui with v0",
"use v0 cli",
"integrate v0 sdk",
"create component from prompt"
],
"entities": [
"v0",
"v0 CLI",
"v0 SDK",
"AI code generation"
],
"examples": []
}
},
"env-vars": {
"priority": 7,
"summary": "",
"docs": [
"https://vercel.com/docs/environment-variables"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".env",
".env.*",
".env.local",
".env.production",
".env.development",
".env.test",
".env.production.local",
".env.development.local",
".env.test.local",
".env.example"
],
"bashPatterns": [
"\\bvercel\\s+env\\s+pull\\b",
"\\bvercel\\s+env\\s+add\\b",
"\\bvercel\\s+env\\s+rm\\b",
"\\bvercel\\s+env\\s+ls\\b"
],
"importPatterns": [],
"bodyPath": "skills/env-vars/SKILL.md",
"pathRegexSources": [
"^\\.env$",
"^\\.env\\.[^/]*$",
"^\\.env\\.local$",
"^\\.env\\.production$",
"^\\.env\\.development$",
"^\\.env\\.test$",
"^\\.env\\.production\\.local$",
"^\\.env\\.development\\.local$",
"^\\.env\\.test\\.local$",
"^\\.env\\.example$"
],
"bashRegexSources": [
"\\bvercel\\s+env\\s+pull\\b",
"\\bvercel\\s+env\\s+add\\b",
"\\bvercel\\s+env\\s+rm\\b",
"\\bvercel\\s+env\\s+ls\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"environment variables",
"env file",
"secrets",
"config vars"
],
"intents": [
"set env var",
"manage secrets",
"pull env vars",
"configure environment"
],
"entities": [
".env",
"vercel env",
"OIDC",
"environment variable"
],
"examples": []
}
},
"email": {
"priority": 4,
"summary": "",
"docs": [
"https://resend.com/docs",
"https://react.email/docs/introduction"
],
"sitemap": "https://resend.com/sitemap.xml",
"pathPatterns": [
"emails/**",
"src/emails/**",
"components/emails/**",
"src/components/emails/**",
"app/api/send/**",
"src/app/api/send/**",
"app/api/email/**",
"src/app/api/email/**",
"app/api/emails/**",
"src/app/api/emails/**",
"lib/resend.*",
"src/lib/resend.*",
"lib/email.*",
"src/lib/email.*",
"lib/email*",
"src/lib/email*",
"**/email-template*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bresend\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\byarn\\s+add\\s+[^\\n]*@react-email/",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\byarn\\s+add\\s+[^\\n]*react-email\\b"
],
"importPatterns": [],
"bodyPath": "skills/email/SKILL.md",
"pathRegexSources": [
"^emails\\/.*$",
"^src\\/emails\\/.*$",
"^components\\/emails\\/.*$",
"^src\\/components\\/emails\\/.*$",
"^app\\/api\\/send\\/.*$",
"^src\\/app\\/api\\/send\\/.*$",
"^app\\/api\\/email\\/.*$",
"^src\\/app\\/api\\/email\\/.*$",
"^app\\/api\\/emails\\/.*$",
"^src\\/app\\/api\\/emails\\/.*$",
"^lib\\/resend\\.[^/]*$",
"^src\\/lib\\/resend\\.[^/]*$",
"^lib\\/email\\.[^/]*$",
"^src\\/lib\\/email\\.[^/]*$",
"^lib\\/email[^/]*$",
"^src\\/lib\\/email[^/]*$",
"^(?:[^/]+\\/)*email-template[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bresend\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bresend\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@react-email/",
"\\byarn\\s+add\\s+[^\\n]*@react-email/",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*react-email\\b",
"\\byarn\\s+add\\s+[^\\n]*react-email\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"send email",
"transactional email",
"resend",
"react email"
],
"intents": [
"send email",
"set up email",
"create email template",
"verify domain for email"
],
"entities": [
"Resend",
"React Email",
"transactional",
"domain verification"
],
"examples": []
}
},
"vercel-api": {
"priority": 7,
"summary": "",
"docs": [
"https://vercel.com/docs/rest-api"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".mcp.json",
".vercel/project.json"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/sdk\\b",
"\\bclaude\\s+mcp\\s+add\\b[^\\n]*\\bvercel\\b",
"\\bmcp\\.vercel\\.com\\b"
],
"importPatterns": [],
"bodyPath": "skills/vercel-api/SKILL.md",
"pathRegexSources": [
"^\\.mcp\\.json$",
"^\\.vercel\\/project\\.json$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel/sdk\\b",
"\\byarn\\s+add\\s+[^\\n]*@vercel/sdk\\b",
"\\bclaude\\s+mcp\\s+add\\b[^\\n]*\\bvercel\\b",
"\\bmcp\\.vercel\\.com\\b"
],
"importRegexSources": [],
"retrieval": {
"aliases": [
"vercel rest api",
"vercel mcp",
"platform api",
"vercel sdk"
],
"intents": [
"call vercel api",
"use mcp server",
"manage deployments via api",
"query vercel data"
],
"entities": [
"MCP",
"REST API",
"vercel api",
"deployments",
"domains"
],
"examples": []
}
},
"sign-in-with-vercel": {
"priority": 6,
"summary": "",
"docs": [
"https://vercel.com/docs/sign-in-with-vercel"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"app/api/auth/**",
"app/login/**",
"src/app/api/auth/**",
"src/app/login/**",
"pages/api/auth/**"
],
"bashPatterns": [],
"importPatterns": [],
"bodyPath": "skills/sign-in-with-vercel/SKILL.md",
"pathRegexSources": [
"^app\\/api\\/auth\\/.*$",
"^app\\/login\\/.*$",
"^src\\/app\\/api\\/auth\\/.*$",
"^src\\/app\\/login\\/.*$",
"^pages\\/api\\/auth\\/.*$"
],
"bashRegexSources": [],
"importRegexSources": [],
"retrieval": {
"aliases": [
"vercel oauth",
"vercel login",
"vercel identity",
"oauth provider"
],
"intents": [
"add vercel login",
"implement oauth with vercel",
"use vercel as identity provider"
],
"entities": [
"OAuth 2.0",
"OIDC",
"Sign in with Vercel",
"identity provider"
],
"examples": []
}
},
"next-forge": {
"priority": 6,
"summary": "next-forge monorepo SaaS starter (Turborepo, Clerk, Prisma/Neon, Stripe, Resend, shadcn/ui, Sentry, PostHog). See => skill:next-forge for full guide.",
"docs": [
"https://next-forge.com/docs",
"https://github.com/haydenbleasel/next-forge"
],
"pathPatterns": [
"pnpm-workspace.yaml",
"apps/app/**",
"apps/web/**",
"apps/api/**",
"apps/email/**",
"apps/docs/**",
"apps/studio/**",
"apps/storybook/**",
"packages/auth/**",
"packages/database/**",
"packages/design-system/**",
"packages/payments/**",
"packages/email/**",
"packages/analytics/**",
"packages/observability/**",
"packages/security/**",
"packages/ai/**",
"packages/cms/**",
"packages/collaboration/**",
"packages/feature-flags/**",
"packages/internationalization/**",
"packages/notifications/**",
"packages/rate-limit/**",
"packages/seo/**",
"packages/storage/**",
"packages/webhooks/**",
"packages/next-config/**",
"packages/typescript-config/**",
"**/keys.ts",
"**/env.ts",
"**/proxy.ts",
"biome.jsonc"
],
"bashPatterns": [
"\\bnext-forge\\b",
"\\bnpx\\s+next-forge\\b",
"\\bpnpm\\s+migrate\\b",
"\\bpnpm\\s+bump-deps\\b",
"\\bpnpm\\s+bump-ui\\b",
"\\bprisma\\s+(generate|db\\s+push|format|studio)\\b",
"\\bstripe\\s+listen\\b",
"\\bnpx\\s+shadcn@latest\\s+add\\b.*-c\\s+packages/design-system\\b"
],
"importPatterns": [
"@repo/auth",
"@repo/database",
"@repo/design-system",
"@repo/payments",
"@repo/email",
"@repo/analytics",
"@repo/observability",
"@repo/security",
"@repo/ai",
"@repo/cms",
"@repo/collaboration",
"@repo/feature-flags",
"@repo/internationalization",
"@repo/notifications",
"@repo/rate-limit",
"@repo/seo",
"@repo/storage",
"@repo/webhooks",
"@repo/next-config",
"@t3-oss/env-nextjs",
"@rescale/nemo"
],
"bodyPath": "skills/next-forge/SKILL.md",
"pathRegexSources": [
"^pnpm-workspace\\.yaml$",
"^apps\\/app\\/.*$",
"^apps\\/web\\/.*$",
"^apps\\/api\\/.*$",
"^apps\\/email\\/.*$",
"^apps\\/docs\\/.*$",
"^apps\\/studio\\/.*$",
"^apps\\/storybook\\/.*$",
"^packages\\/auth\\/.*$",
"^packages\\/database\\/.*$",
"^packages\\/design-system\\/.*$",
"^packages\\/payments\\/.*$",
"^packages\\/email\\/.*$",
"^packages\\/analytics\\/.*$",
"^packages\\/observability\\/.*$",
"^packages\\/security\\/.*$",
"^packages\\/ai\\/.*$",
"^packages\\/cms\\/.*$",
"^packages\\/collaboration\\/.*$",
"^packages\\/feature-flags\\/.*$",
"^packages\\/internationalization\\/.*$",
"^packages\\/notifications\\/.*$",
"^packages\\/rate-limit\\/.*$",
"^packages\\/seo\\/.*$",
"^packages\\/storage\\/.*$",
"^packages\\/webhooks\\/.*$",
"^packages\\/next-config\\/.*$",
"^packages\\/typescript-config\\/.*$",
"^(?:[^/]+\\/)*keys\\.ts$",
"^(?:[^/]+\\/)*env\\.ts$",
"^(?:[^/]+\\/)*proxy\\.ts$",
"^biome\\.jsonc$"
],
"bashRegexSources": [
"\\bnext-forge\\b",
"\\bnpx\\s+next-forge\\b",
"\\bpnpm\\s+migrate\\b",
"\\bpnpm\\s+bump-deps\\b",
"\\bpnpm\\s+bump-ui\\b",
"\\bprisma\\s+(generate|db\\s+push|format|studio)\\b",
"\\bstripe\\s+listen\\b",
"\\bnpx\\s+shadcn@latest\\s+add\\b.*-c\\s+packages/design-system\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/auth(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/database(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/design-system(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/payments(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/email(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/analytics(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/observability(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/security(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/ai(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/cms(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/collaboration(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/feature-flags(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/internationalization(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/notifications(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/rate-limit(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/seo(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/storage(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/webhooks(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@repo\\/next-config(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@t3-oss\\/env-nextjs(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@rescale\\/nemo(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "\"pipeline\"\\s*:",
"message": "turbo.json \"pipeline\" was renamed to \"tasks\" in Turborepo v2 — update to \"tasks\"",
"severity": "error"
},
{
"pattern": "new Pool\\(",
"message": "PrismaNeon expects a connection config object, not a Pool instance — use PrismaNeon({ connectionString: url })",
"severity": "error",
"skipIfFileContains": "pg\\.Pool"
},
{
"pattern": "prisma studio --schema",
"message": "Prisma v7 removed --schema flag for studio — use --config instead",
"severity": "error"
},
{
"pattern": "middleware\\.ts",
"message": "next-forge uses proxy.ts (Next.js 16+), not middleware.ts — rename to proxy.ts",
"severity": "warn",
"skipIfFileContains": "proxy\\.ts"
}
],
"promptSignals": {
"phrases": [
"next-forge",
"next forge",
"@repo/"
],
"allOf": [
[
"monorepo",
"saas",
"starter"
],
[
"turborepo",
"clerk",
"stripe"
]
],
"anyOf": [
"saas starter",
"production monorepo",
"keys.ts",
"pnpm-workspace"
],
"noneOf": [
"create-t3-app"
],
"minScore": 6
},
"retrieval": {
"aliases": [
"saas starter",
"monorepo starter",
"next forge",
"turborepo template"
],
"intents": [
"scaffold saas",
"set up next-forge",
"create monorepo project",
"use next-forge"
],
"entities": [
"next-forge",
"@repo/*",
"Turborepo",
"monorepo",
"SaaS starter"
],
"examples": []
}
},
"vercel-firewall": {
"priority": 5,
"summary": "",
"docs": [
"https://vercel.com/docs/security/vercel-firewall"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
".vercel/firewall/**"
],
"bashPatterns": [
"\\bvercel\\s+firewall\\b"
],
"importPatterns": [],
"bodyPath": "skills/vercel-firewall/SKILL.md",
"pathRegexSources": [
"^\\.vercel\\/firewall\\/.*$"
],
"bashRegexSources": [
"\\bvercel\\s+firewall\\b"
],
"importRegexSources": [],
"promptSignals": {
"phrases": [
"rate limit",
"rate limiting",
"firewall",
"WAF",
"DDoS protection"
],
"allOf": [],
"anyOf": [],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"waf",
"ddos protection",
"security rules",
"rate limiting"
],
"intents": [
"configure firewall",
"add rate limiting",
"block ips",
"set up waf rules"
],
"entities": [
"WAF",
"DDoS",
"rate limiting",
"IP block",
"OWASP",
"Attack Challenge Mode"
],
"examples": []
}
},
"edge-runtime": {
"priority": 4,
"summary": "",
"docs": [
"https://vercel.com/docs/functions/runtimes/edge-runtime",
"https://edge-runtime.vercel.app"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"edge-runtime.config.*",
"middleware.ts",
"middleware.js",
"src/middleware.ts",
"src/middleware.js"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bedge-runtime\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\byarn\\s+add\\s+[^\\n]*@edge-runtime/"
],
"importPatterns": [
"edge-runtime",
"@edge-runtime/*"
],
"bodyPath": "skills/edge-runtime/SKILL.md",
"pathRegexSources": [
"^edge-runtime\\.config\\.[^/]*$",
"^middleware\\.ts$",
"^middleware\\.js$",
"^src\\/middleware\\.ts$",
"^src\\/middleware\\.js$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bedge-runtime\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bedge-runtime\\b",
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*@edge-runtime/",
"\\byarn\\s+add\\s+[^\\n]*@edge-runtime/"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]edge-runtime(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]@edge-runtime\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"validate": [
{
"pattern": "from\\s+['\"](node:)?fs['\"]",
"message": "fs module is not available in Edge Runtime — use fetch or KV storage instead",
"severity": "error"
},
{
"pattern": "from\\s+['\"](node:)?child_process['\"]",
"message": "child_process is not available in Edge Runtime",
"severity": "error"
},
{
"pattern": "from\\s+['\"](node:)?(net|dns)['\"]",
"message": "Node.js net/dns modules are not available in Edge Runtime",
"severity": "error"
},
{
"pattern": "\\brequire\\s*\\(",
"message": "require() is not available in Edge Runtime — use ESM import instead",
"severity": "error"
},
{
"pattern": "\\beval\\s*\\(",
"message": "eval() is not allowed in Edge Runtime — refactor to avoid dynamic code evaluation",
"severity": "error"
},
{
"pattern": "new\\s+Function\\s*\\(",
"message": "new Function() is not allowed in Edge Runtime — refactor to avoid dynamic code evaluation",
"severity": "error"
}
],
"promptSignals": {
"phrases": [
"edge runtime",
"edge function",
"run at the edge"
],
"allOf": [],
"anyOf": [],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"edge functions",
"edge middleware",
"lightweight runtime",
"edge computing"
],
"intents": [
"run code at edge",
"create edge function",
"configure edge middleware",
"use edge runtime"
],
"entities": [
"Edge Runtime",
"Edge Functions",
"middleware",
"EdgeFunction"
],
"examples": []
}
},
"vercel-functions": {
"priority": 8,
"summary": "",
"docs": [
"https://vercel.com/docs/functions",
"https://vercel.com/docs/functions/runtimes"
],
"sitemap": "https://vercel.com/sitemap/docs.xml",
"pathPatterns": [
"api/**/*.*",
"pages/api/**",
"src/pages/api/**",
"app/**/route.*",
"src/app/**/route.*",
"apps/*/api/**/*.*",
"apps/*/app/**/route.*",
"apps/*/src/app/**/route.*",
"apps/*/pages/api/**",
"vercel.json",
"apps/*/vercel.json"
],
"bashPatterns": [
"\\bvercel\\s+dev\\b",
"\\bvercel\\s+logs\\b"
],
"importPatterns": [],
"bodyPath": "skills/vercel-functions/SKILL.md",
"pathRegexSources": [
"^api\\/(?:[^/]+\\/)*[^/]*\\.[^/]*$",
"^pages\\/api\\/.*$",
"^src\\/pages\\/api\\/.*$",
"^app\\/(?:[^/]+\\/)*route\\.[^/]*$",
"^src\\/app\\/(?:[^/]+\\/)*route\\.[^/]*$",
"^apps\\/[^/]*\\/api\\/(?:[^/]+\\/)*[^/]*\\.[^/]*$",
"^apps\\/[^/]*\\/app\\/(?:[^/]+\\/)*route\\.[^/]*$",
"^apps\\/[^/]*\\/src\\/app\\/(?:[^/]+\\/)*route\\.[^/]*$",
"^apps\\/[^/]*\\/pages\\/api\\/.*$",
"^vercel\\.json$",
"^apps\\/[^/]*\\/vercel\\.json$"
],
"bashRegexSources": [
"\\bvercel\\s+dev\\b",
"\\bvercel\\s+logs\\b"
],
"importRegexSources": [],
"validate": [
{
"pattern": "export\\s+default\\s+function",
"message": "Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers",
"severity": "error"
},
{
"pattern": "NextApiRequest|NextApiResponse",
"message": "NextApiRequest/NextApiResponse are Pages Router types — use Web API Request/Response",
"severity": "error"
}
],
"retrieval": {
"aliases": [
"serverless functions",
"api routes",
"edge functions",
"lambda"
],
"intents": [
"create serverless function",
"configure function runtime",
"optimize cold starts",
"add api route"
],
"entities": [
"Serverless Functions",
"Edge Functions",
"Fluid Compute",
"streaming",
"Cron Jobs"
],
"examples": []
}
},
"swr": {
"priority": 4,
"summary": "",
"docs": [
"https://swr.vercel.app/docs"
],
"sitemap": "https://swr.vercel.app/sitemap.xml",
"pathPatterns": [
"lib/fetcher.*",
"src/lib/fetcher.*",
"utils/fetcher.*",
"src/utils/fetcher.*",
"hooks/use*SWR*",
"src/hooks/use*SWR*",
"hooks/useFetch*",
"src/hooks/useFetch*"
],
"bashPatterns": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bswr\\b"
],
"importPatterns": [
"swr",
"swr/*"
],
"bodyPath": "skills/swr/SKILL.md",
"pathRegexSources": [
"^lib\\/fetcher\\.[^/]*$",
"^src\\/lib\\/fetcher\\.[^/]*$",
"^utils\\/fetcher\\.[^/]*$",
"^src\\/utils\\/fetcher\\.[^/]*$",
"^hooks\\/use[^/]*SWR[^/]*$",
"^src\\/hooks\\/use[^/]*SWR[^/]*$",
"^hooks\\/useFetch[^/]*$",
"^src\\/hooks\\/useFetch[^/]*$"
],
"bashRegexSources": [
"\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bswr\\b",
"\\byarn\\s+add\\s+[^\\n]*\\bswr\\b"
],
"importRegexSources": [
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]swr(?:\\/[^'\"]*)?['\"]",
"flags": "m"
},
{
"source": "(?:from\\s+|require\\s*\\(\\s*|import\\s*\\(\\s*)['\"]swr\\/[^'\"]*(?:\\/[^'\"]*)?['\"]",
"flags": "m"
}
],
"promptSignals": {
"phrases": [
"swr",
"useswr",
"stale-while-revalidate"
],
"allOf": [
[
"data fetching",
"client"
],
[
"cache",
"revalidat"
]
],
"anyOf": [
"mutation",
"optimistic",
"infinite loading",
"pagination"
],
"noneOf": [],
"minScore": 6
},
"retrieval": {
"aliases": [
"data fetching",
"client cache",
"stale while revalidate",
"react hooks data"
],
"intents": [
"refresh stale client cache after a mutation",
"fetch and cache API data on the client side",
"add infinite scroll or paginated data loading",
"keep UI in sync with server data automatically",
"revalidate cached data after updating a record"
],
"entities": [
"useSWR",
"useSWRMutation",
"useSWRInfinite",
"mutate",
"SWRConfig",
"fetcher"
],
"examples": [
"refresh stale client cache after mutation",
"load more items on scroll",
"revalidate data when the window regains focus",
"fetch data client side with caching",
"add infinite scrolling to load more items"
]
}
}
}
}