[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71PDHDTNQ0N2GPVDKS8NFYY":3,"skill-same:01M71PDHDTNQ0N2GPVDKS8NFYY":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M71PDHDTNQ0N2GPVDKS8NFYY","prisma-postgres-setup",null,"Set up a new Prisma Postgres database and connect it to a local project using the Management API. Use when asked to \"set up a database\", \"create a Prisma Postgres project\", \"get a connection string\", \"connect my app to Prisma Postgres\", or \"provision a database\".","pattanation\u002FNorvik","pattanation","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F235419268?v=4","01M71M5THHYYB15ME8R2E4FCZG","Patta","01M71M5TJM1NDM992M8PDKYR2K",0,"MIT","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"prisma","prisma postgres setup","prisma postgres","setup","postgres","my","connection","create","api","when","database","connect","use","new","local","up","project","get","app","SET","2026-11-10 13:02:02",false,"---\nname: prisma-postgres-setup\ndescription: Set up a new Prisma Postgres database and connect it to a local project using the Management API. Use when asked to \"set up a database\", \"create a Prisma Postgres project\", \"get a connection string\", \"connect my app to Prisma Postgres\", or \"provision a database\".\nlicense: MIT\nmetadata:\n  author: prisma\n  version: \"1.1.0\"\n---\n\n# Prisma Postgres Setup\n\nProcedural skill that guides you through provisioning a new Prisma Postgres database via the Management API and connecting it to a local project.\n\n## When to Apply\n\nUse this skill when:\n\n- Setting up a new Prisma Postgres database for a project\n- Creating a Prisma Postgres project and connecting it locally\n- Obtaining a connection string for Prisma Postgres\n- Provisioning a database via the Management API (not the Console UI)\n\nDo **not** use this skill when:\n\n- Setting up CI\u002FCD preview databases — use `prisma-postgres-cicd`\n- Building multi-tenant database provisioning into an app — use `prisma-postgres-integrator`\n- Working with a database that already exists and is connected (schema\u002Fmigration tasks are standard Prisma CLI)\n\n## Prerequisites\n\n- Node.js 18+\n- A Prisma Postgres workspace (create one at https:\u002F\u002Fconsole.prisma.io if needed)\n- A workspace service token (see `references\u002Fauth.md`)\n\n## UX Guidelines\n\nWhen presenting choices to the user (region selection, project deletion, etc.), **use your platform's interactive selection mechanism** (e.g., `ask` tool in Claude Code, structured prompts in other agents). Do not print static tables and ask the user to type a value — present selectable options so the user can pick with minimal effort.\n\n## Workflow\n\nFollow these steps in order. Each step includes the API call to make and how to handle the response.\n\n### Step 1: Authenticate\n\nYou need a service token. Try these methods in order:\n\n**1a. Token in the user's prompt**\n\nCheck if the user included a service token in their initial message (e.g., \"Set up Prisma Postgres with token eyJ...\"). If so, use it **exactly as provided** — do not truncate, re-encode, or round-trip it through a file. Store it in a shell variable for subsequent calls.\n\n**1b. Token in the environment**\n\nCheck for `PRISMA_SERVICE_TOKEN` in the environment or `.env` file.\n\n**1c. Ask the user to create one**\n\nIf no token is available, instruct the user:\n\n> Create a service token in Prisma Console → Workspace Settings → Service Tokens.\n> Copy the token and paste it here.\n\nRead `references\u002Fauth.md` for details on service token creation.\n\nOnce you have a token, store it in a shell variable (`PRISMA_SERVICE_TOKEN`) and use it for all subsequent API calls.\n\n### Step 2: List available regions\n\nFetch the list of available Prisma Postgres regions to let the user choose where to deploy.\n\n```bash\ncurl -s -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fregions\u002Fpostgres\n```\n\nThe response contains an array of regions with `id`, `name`, and `status`. Only present regions where `status` is `available`.\n\n**Present the regions as an interactive menu** — let the user pick from options rather than typing a region ID manually.\n\nRead `references\u002Fendpoints.md` for the full response shape.\n\n### Step 3: Create a project with a database\n\n```bash\ncurl -s -X POST https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fprojects \\\n  -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"\u003Cproject-name>\",\n    \"region\": \"\u003Cregion-id>\",\n    \"createDatabase\": true\n  }'\n```\n\nUse the current directory name as the project name by default.\n\nThe response is wrapped in `{ \"data\": { ... } }`. Extract:\n\n- `data.id` — the project ID (prefixed with `proj_`)\n- `data.database.id` — the database ID (prefixed with `db_`)\n- `data.database.connections[0].endpoints.direct.connectionString` — the direct PostgreSQL connection string\n\nUse the **direct** connection string (`endpoints.direct.connectionString`). Do not use the pooled or accelerate endpoints — those are for legacy Accelerate setups and not needed for new projects.\n\nIf the response status is `provisioning`, wait a few seconds and poll `GET \u002Fv1\u002Fdatabases\u002F\u003Cdatabase-id>` until `status` is `ready`.\n\n**If creation fails due to a database limit**, list the user's existing projects and present them as an interactive menu for deletion. After the user picks one, delete it and retry.\n\nRead `references\u002Fendpoints.md` for the full request\u002Fresponse shapes.\n\n### Step 4: Create a named connection (optional)\n\nIf you need a dedicated connection (e.g., per-developer or per-environment), create one:\n\n```bash\ncurl -s -X POST https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fdatabases\u002F\u003Cdatabase-id>\u002Fconnections \\\n  -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"name\": \"dev\" }'\n```\n\nExtract the direct connection string from `data.endpoints.direct.connectionString`.\n\n### Step 5: Configure the local project\n\n1. Install dependencies:\n\n```bash\nnpm install prisma @prisma\u002Fclient @prisma\u002Fadapter-pg pg dotenv\n```\n\nAll five packages are required:\n- `prisma` — CLI for migrations, schema push, client generation\n- `@prisma\u002Fclient` — the generated query client\n- `@prisma\u002Fadapter-pg` — Prisma 7 driver adapter for direct PostgreSQL connections\n- `pg` — Node.js PostgreSQL driver (used by the adapter)\n- `dotenv` — loads `.env` variables for `prisma.config.ts`\n\n2. Write the direct connection string to `.env`. **Append** to the file if it already exists — do not overwrite existing entries:\n\n```\nDATABASE_URL=\"\u003Cdirect-connection-string>\"\n```\n\n3. Verify `.gitignore` includes `.env`. Create `.gitignore` if it does not exist. Warn the user if `.env` is not gitignored.\n\n4. Ensure `package.json` has `\"type\": \"module\"` set (Prisma 7 generates ESM output).\n\n5. If `prisma\u002Fschema.prisma` does not exist, run `npx prisma init` to scaffold the project. This creates both `prisma\u002Fschema.prisma` and `prisma.config.ts`.\n\n6. Ensure `schema.prisma` has the `postgresql` provider and **no** `url` or `directUrl` in the datasource block (Prisma 7 manages connection URLs in `prisma.config.ts`, not in the schema):\n\n```prisma\ndatasource db {\n  provider = \"postgresql\"\n}\n```\n\n7. Ensure `prisma.config.ts` loads the connection URL from the environment:\n\n```typescript\nimport path from 'node:path'\nimport { defineConfig } from 'prisma\u002Fconfig'\nimport 'dotenv\u002Fconfig'\n\nexport default defineConfig({\n  earlyAccess: true,\n  schema: path.join(import.meta.dirname, 'prisma', 'schema.prisma'),\n  datasource: {\n    url: process.env.DATABASE_URL!,\n  },\n})\n```\n\n**Important Prisma 7 notes:**\n- Connection URLs go in `prisma.config.ts`, never in `schema.prisma`\n- The provider in `schema.prisma` must be `\"postgresql\"` (not `\"prismaPostgres\"`)\n- `dotenv\u002Fconfig` must be imported in `prisma.config.ts` to load `.env` variables\n\n### Step 6: Define schema and push\n\nIf the schema already has models, skip to pushing. Otherwise, **present these options as an interactive menu**:\n\n1. **\"I'll define my schema manually\"** — Tell the user to edit `prisma\u002Fschema.prisma` and come back when ready. Wait for them before proceeding.\n2. **\"Give me a starter schema\"** — Add a Blog starter schema (User, Post, Comment with relations) to `prisma\u002Fschema.prisma`. Show the user what was added and ask if they want to adjust it before pushing.\n3. **\"I'll describe what I need\"** — Ask the user to describe their data model in natural language (e.g., \"I'm building a task manager with projects, tasks, and team members\"). Generate a schema from the description, show it, and ask for confirmation before pushing.\n\nOnce the schema has models and the user is ready, create a migration and generate the client:\n\n```bash\nnpx prisma migrate dev --name init\n```\n\nThis creates migration files in `prisma\u002Fmigrations\u002F` **and** generates the client in one step. Migration history is essential for CI\u002FCD workflows (`prisma migrate deploy`) and production deployments.\n\nOnly use `npx prisma db push` if the user explicitly asks for prototyping-only mode (no migration history). In that case, follow it with `npx prisma generate`.\n\n### Step 7: Verify the connection\n\nAfter generating the client, create and run a quick verification script to confirm everything works end-to-end. This is **critical** — do not skip this step.\n\nCreate a file named `test-connection.ts`:\n\n```typescript\nimport 'dotenv\u002Fconfig'\nimport pg from 'pg'\nimport { PrismaPg } from '@prisma\u002Fadapter-pg'\nimport { PrismaClient } from '.\u002Fgenerated\u002Fprisma\u002Fclient.js'\n\nconst pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })\nconst adapter = new PrismaPg(pool)\nconst prisma = new PrismaClient({ adapter })\n\nconst result = await prisma.$queryRawUnsafe('SELECT 1 as connected')\nconsole.log('Connected to Prisma Postgres:', result)\n\nawait prisma.$disconnect()\nawait pool.end()\n```\n\nRun it:\n\n```bash\nnpx tsx test-connection.ts\n```\n\n**Prisma 7 client instantiation rules:**\n- Import from `.\u002Fgenerated\u002Fprisma\u002Fclient.js` (not `.\u002Fgenerated\u002Fprisma`)\n- Create a `pg.Pool` with the `DATABASE_URL` connection string\n- Wrap it in a `PrismaPg` adapter\n- Pass `{ adapter }` to the `PrismaClient` constructor\n- Do **not** use `datasourceUrl` — that option does not exist in Prisma 7\n- Do **not** use `new PrismaClient()` with no arguments — it will throw\n\nAfter verification succeeds, delete `test-connection.ts`.\n\nThen share links for the user to explore their database:\n\n- **Prisma Studio (CLI):** `npx prisma studio` — opens a visual data browser locally\n- **Console:** `https:\u002F\u002Fconsole.prisma.io\u002F\u003CworkspaceId>\u002F\u003CprojectId>\u002F\u003CdatabaseId>\u002Fdashboard` — strip the prefixes (`wksp_`, `proj_`, `db_`) from the IDs returned in Step 3 to build this URL\n\nRead `references\u002Fprisma7-client.md` for the full client instantiation reference.\n\n## Error Handling\n\nRead `references\u002Fapi-basics.md` for the full error reference. Key self-correction patterns:\n\n| HTTP Status | Error Code | Action |\n|---|---|---|\n| 401 | `authentication-failed` | Service token is invalid or expired. Ask the user to create a new one in Console → Workspace Settings → Service Tokens. |\n| 404 | `resource-not-found` | Check that the resource ID includes the correct prefix (`proj_`, `db_`, `con_`). |\n| 422 | `validation-error` | Check request body against the endpoint schema. Common: missing `name`, invalid `region`. |\n| 429 | `rate-limit-exceeded` | Back off and retry after a few seconds. |\n\n## Reference Files\n\nDetailed API and usage information is in:\n\n```\nreferences\u002Fauth.md             — Service token creation and usage\nreferences\u002Fapi-basics.md       — Base URL, envelope, IDs, errors, pagination\nreferences\u002Fendpoints.md        — Endpoint details for projects, databases, connections, regions\nreferences\u002Fprisma7-client.md   — Prisma 7 client instantiation and usage patterns\n```\n","# Prisma Postgres Setup\n\nProcedural skill that guides you through provisioning a new Prisma Postgres database via the Management API and connecting it to a local project.\n\n## When to Apply\n\nUse this skill when:\n\n- Setting up a new Prisma Postgres database for a project\n- Creating a Prisma Postgres project and connecting it locally\n- Obtaining a connection string for Prisma Postgres\n- Provisioning a database via the Management API (not the Console UI)\n\nDo **not** use this skill when:\n\n- Setting up CI\u002FCD preview databases — use `prisma-postgres-cicd`\n- Building multi-tenant database provisioning into an app — use `prisma-postgres-integrator`\n- Working with a database that already exists and is connected (schema\u002Fmigration tasks are standard Prisma CLI)\n\n## Prerequisites\n\n- Node.js 18+\n- A Prisma Postgres workspace (create one at https:\u002F\u002Fconsole.prisma.io if needed)\n- A workspace service token (see `references\u002Fauth.md`)\n\n## UX Guidelines\n\nWhen presenting choices to the user (region selection, project deletion, etc.), **use your platform's interactive selection mechanism** (e.g., `ask` tool in Claude Code, structured prompts in other agents). Do not print static tables and ask the user to type a value — present selectable options so the user can pick with minimal effort.\n\n## Workflow\n\nFollow these steps in order. Each step includes the API call to make and how to handle the response.\n\n### Step 1: Authenticate\n\nYou need a service token. Try these methods in order:\n\n**1a. Token in the user's prompt**\n\nCheck if the user included a service token in their initial message (e.g., \"Set up Prisma Postgres with token eyJ...\"). If so, use it **exactly as provided** — do not truncate, re-encode, or round-trip it through a file. Store it in a shell variable for subsequent calls.\n\n**1b. Token in the environment**\n\nCheck for `PRISMA_SERVICE_TOKEN` in the environment or `.env` file.\n\n**1c. Ask the user to create one**\n\nIf no token is available, instruct the user:\n\n> Create a service token in Prisma Console → Workspace Settings → Service Tokens.\n> Copy the token and paste it here.\n\nRead `references\u002Fauth.md` for details on service token creation.\n\nOnce you have a token, store it in a shell variable (`PRISMA_SERVICE_TOKEN`) and use it for all subsequent API calls.\n\n### Step 2: List available regions\n\nFetch the list of available Prisma Postgres regions to let the user choose where to deploy.\n\n```bash\ncurl -s -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fregions\u002Fpostgres\n```\n\nThe response contains an array of regions with `id`, `name`, and `status`. Only present regions where `status` is `available`.\n\n**Present the regions as an interactive menu** — let the user pick from options rather than typing a region ID manually.\n\nRead `references\u002Fendpoints.md` for the full response shape.\n\n### Step 3: Create a project with a database\n\n```bash\ncurl -s -X POST https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fprojects \\\n  -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"\u003Cproject-name>\",\n    \"region\": \"\u003Cregion-id>\",\n    \"createDatabase\": true\n  }'\n```\n\nUse the current directory name as the project name by default.\n\nThe response is wrapped in `{ \"data\": { ... } }`. Extract:\n\n- `data.id` — the project ID (prefixed with `proj_`)\n- `data.database.id` — the database ID (prefixed with `db_`)\n- `data.database.connections[0].endpoints.direct.connectionString` — the direct PostgreSQL connection string\n\nUse the **direct** connection string (`endpoints.direct.connectionString`). Do not use the pooled or accelerate endpoints — those are for legacy Accelerate setups and not needed for new projects.\n\nIf the response status is `provisioning`, wait a few seconds and poll `GET \u002Fv1\u002Fdatabases\u002F\u003Cdatabase-id>` until `status` is `ready`.\n\n**If creation fails due to a database limit**, list the user's existing projects and present them as an interactive menu for deletion. After the user picks one, delete it and retry.\n\nRead `references\u002Fendpoints.md` for the full request\u002Fresponse shapes.\n\n### Step 4: Create a named connection (optional)\n\nIf you need a dedicated connection (e.g., per-developer or per-environment), create one:\n\n```bash\ncurl -s -X POST https:\u002F\u002Fapi.prisma.io\u002Fv1\u002Fdatabases\u002F\u003Cdatabase-id>\u002Fconnections \\\n  -H \"Authorization: Bearer $PRISMA_SERVICE_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"name\": \"dev\" }'\n```\n\nExtract the direct connection string from `data.endpoints.direct.connectionString`.\n\n### Step 5: Configure the local project\n\n1. Install dependencies:\n\n```bash\nnpm install prisma @prisma\u002Fclient @prisma\u002Fadapter-pg pg dotenv\n```\n\nAll five packages are required:\n- `prisma` — CLI for migrations, schema push, client generation\n- `@prisma\u002Fclient` — the generated query client\n- `@prisma\u002Fadapter-pg` — Prisma 7 driver adapter for direct PostgreSQL connections\n- `pg` — Node.js PostgreSQL driver (used by the adapter)\n- `dotenv` — loads `.env` variables for `prisma.config.ts`\n\n2. Write the direct connection string to `.env`. **Append** to the file if it already exists — do not overwrite existing entries:\n\n```\nDATABASE_URL=\"\u003Cdirect-connection-string>\"\n```\n\n3. Verify `.gitignore` includes `.env`. Create `.gitignore` if it does not exist. Warn the user if `.env` is not gitignored.\n\n4. Ensure `package.json` has `\"type\": \"module\"` set (Prisma 7 generates ESM output).\n\n5. If `prisma\u002Fschema.prisma` does not exist, run `npx prisma init` to scaffold the project. This creates both `prisma\u002Fschema.prisma` and `prisma.config.ts`.\n\n6. Ensure `schema.prisma` has the `postgresql` provider and **no** `url` or `directUrl` in the datasource block (Prisma 7 manages connection URLs in `prisma.config.ts`, not in the schema):\n\n```prisma\ndatasource db {\n  provider = \"postgresql\"\n}\n```\n\n7. Ensure `prisma.config.ts` loads the connection URL from the environment:\n\n```typescript\nimport path from 'node:path'\nimport { defineConfig } from 'prisma\u002Fconfig'\nimport 'dotenv\u002Fconfig'\n\nexport default defineConfig({\n  earlyAccess: true,\n  schema: path.join(import.meta.dirname, 'prisma', 'schema.prisma'),\n  datasource: {\n    url: process.env.DATABASE_URL!,\n  },\n})\n```\n\n**Important Prisma 7 notes:**\n- Connection URLs go in `prisma.config.ts`, never in `schema.prisma`\n- The provider in `schema.prisma` must be `\"postgresql\"` (not `\"prismaPostgres\"`)\n- `dotenv\u002Fconfig` must be imported in `prisma.config.ts` to load `.env` variables\n\n### Step 6: Define schema and push\n\nIf the schema already has models, skip to pushing. Otherwise, **present these options as an interactive menu**:\n\n1. **\"I'll define my schema manually\"** — Tell the user to edit `prisma\u002Fschema.prisma` and come back when ready. Wait for them before proceeding.\n2. **\"Give me a starter schema\"** — Add a Blog starter schema (User, Post, Comment with relations) to `prisma\u002Fschema.prisma`. Show the user what was added and ask if they want to adjust it before pushing.\n3. **\"I'll describe what I need\"** — Ask the user to describe their data model in natural language (e.g., \"I'm building a task manager with projects, tasks, and team members\"). Generate a schema from the description, show it, and ask for confirmation before pushing.\n\nOnce the schema has models and the user is ready, create a migration and generate the client:\n\n```bash\nnpx prisma migrate dev --name init\n```\n\nThis creates migration files in `prisma\u002Fmigrations\u002F` **and** generates the client in one step. Migration history is essential for CI\u002FCD workflows (`prisma migrate deploy`) and production deployments.\n\nOnly use `npx prisma db push` if the user explicitly asks for prototyping-only mode (no migration history). In that case, follow it with `npx prisma generate`.\n\n### Step 7: Verify the connection\n\nAfter generating the client, create and run a quick verification script to confirm everything works end-to-end. This is **critical** — do not skip this step.\n\nCreate a file named `test-connection.ts`:\n\n```typescript\nimport 'dotenv\u002Fconfig'\nimport pg from 'pg'\nimport { PrismaPg } from '@prisma\u002Fadapter-pg'\nimport { PrismaClient } from '.\u002Fgenerated\u002Fprisma\u002Fclient.js'\n\nconst pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })\nconst adapter = new PrismaPg(pool)\nconst prisma = new PrismaClient({ adapter })\n\nconst result = await prisma.$queryRawUnsafe('SELECT 1 as connected')\nconsole.log('Connected to Prisma Postgres:', result)\n\nawait prisma.$disconnect()\nawait pool.end()\n```\n\nRun it:\n\n```bash\nnpx tsx test-connection.ts\n```\n\n**Prisma 7 client instantiation rules:**\n- Import from `.\u002Fgenerated\u002Fprisma\u002Fclient.js` (not `.\u002Fgenerated\u002Fprisma`)\n- Create a `pg.Pool` with the `DATABASE_URL` connection string\n- Wrap it in a `PrismaPg` adapter\n- Pass `{ adapter }` to the `PrismaClient` constructor\n- Do **not** use `datasourceUrl` — that option does not exist in Prisma 7\n- Do **not** use `new PrismaClient()` with no arguments — it will throw\n\nAfter verification succeeds, delete `test-connection.ts`.\n\nThen share links for the user to explore their database:\n\n- **Prisma Studio (CLI):** `npx prisma studio` — opens a visual data browser locally\n- **Console:** `https:\u002F\u002Fconsole.prisma.io\u002F\u003CworkspaceId>\u002F\u003CprojectId>\u002F\u003CdatabaseId>\u002Fdashboard` — strip the prefixes (`wksp_`, `proj_`, `db_`) from the IDs returned in Step 3 to build this URL\n\nRead `references\u002Fprisma7-client.md` for the full client instantiation reference.\n\n## Error Handling\n\nRead `references\u002Fapi-basics.md` for the full error reference. Key self-correction patterns:\n\n| HTTP Status | Error Code | Action |\n|---|---|---|\n| 401 | `authentication-failed` | Service token is invalid or expired. Ask the user to create a new one in Console → Workspace Settings → Service Tokens. |\n| 404 | `resource-not-found` | Check that the resource ID includes the correct prefix (`proj_`, `db_`, `con_`). |\n| 422 | `validation-error` | Check request body against the endpoint schema. Common: missing `name`, invalid `region`. |\n| 429 | `rate-limit-exceeded` | Back off and retry after a few seconds. |\n\n## Reference Files\n\nDetailed API and usage information is in:\n\n```\nreferences\u002Fauth.md             — Service token creation and usage\nreferences\u002Fapi-basics.md       — Base URL, envelope, IDs, errors, pagination\nreferences\u002Fendpoints.md        — Endpoint details for projects, databases, connections, regions\nreferences\u002Fprisma7-client.md   — Prisma 7 client instantiation and usage patterns\n```\n",{"name":5,"license":15,"metadata":49,"description":7},{"author":24,"version":50},"1.1.0","claude\u002Finstall-gsd-build-foQdV","d86cd127f527124b5fd0fd0bc679a4d79b7d01d7",".agents\u002Fskills\u002Fprisma-postgres-setup","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik","https:\u002F\u002Fnorvik-orpin.vercel.app","https:\u002F\u002Fgithub.com\u002Fpattanation","2026-07-17 11:17:04",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add pattanation\u002FNorvik --skill prisma-postgres-setup",{"tool":64,"command":65},"bunx","bunx skills add pattanation\u002FNorvik --skill prisma-postgres-setup",{"tool":67,"command":68},"pnpm","pnpm dlx skills add pattanation\u002FNorvik --skill prisma-postgres-setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002FSKILL.md",true,[72,78,82,86],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fapi-basics.md","REFERENCE","参考文档",2582,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002Freferences\u002Fapi-basics.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fauth.md",1521,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002Freferences\u002Fauth.md",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fendpoints.md",4927,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002Freferences\u002Fendpoints.md",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fprisma7-client.md",2690,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fprisma-postgres-setup\u002Freferences\u002Fprisma7-client.md",[91,122,147,169,191,206],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":95,"licenseFileUrl":96,"sourceHtmlUrl":97,"categories":98,"keywords":105,"publishedAt":44},"01M71QDV4DM8T19HEHWATEF1K4","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[99,102],{"categoryNo":100,"categoryName":101,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[106,107,108,109,110,38,111,112,113,114,115,116,117,118,119,120,121],"webapp","testing","webapp testing","for","applications","frontend","debugging","toolkit","logs","browser","with","playwright","web","behavior","ui","screenshots",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":95,"licenseFileUrl":126,"sourceHtmlUrl":127,"categories":128,"keywords":130,"publishedAt":44},"01M71QDH2GGMXGA9105C9W1N7B","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FSKILL.md",[129],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[131,132,133,118,134,135,136,109,137,138,111,139,36,140,141,142,143,144,145,146],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","file","components","react","multi","state","routing","state management",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":151,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":44},"01M71QD9T2XC3EWMQNN9ACNWQ1","vueuse-functions","Apply VueUse composables where appropriate to build concise, maintainable Vue.js \u002F Nuxt features.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FSKILL.md",[154],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[156,157,158,40,159,160,161,162,163,164,165,166,167,168],"functions","vueuse","vueuse functions","nuxt","apply","github","concise","build","https","features","vue","js","composables",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":173,"sourceHtmlUrl":174,"categories":175,"keywords":178,"publishedAt":44},"01M71QD51HWSGYMCMB7RW7PGK8","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FSKILL.md",[176,177],{"categoryNo":100,"categoryName":101,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[179,107,180,166,181,117,182,183,184,161,185,109,186,187,188,36,189,167,190],"vue testing best practices","testing best practices","best practices","test","testing patterns","component","vitest","mocking","e2e","utils","patterns","e2e testing",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":195,"sourceHtmlUrl":196,"categories":197,"keywords":199,"publishedAt":44},"01M71QD358H2DJ9THJRBP77T3T","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FSKILL.md",[198],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[200,166,201,181,202,184,203,161,189,204,205],"router","vue router best practices","route","guards","navigation","lifecycle",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":210,"sourceHtmlUrl":211,"categories":212,"keywords":214,"publishedAt":44},"01M71QCYPNWDE2MQZ1TF3ED5S4","vue-best-practices","MUST be used for Vue.js tasks. Strongly recommends Composition API with `\u003Cscript setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FSKILL.md",[213],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[215,166,181,216,40,217,218,32,200,219,220,221,222,223,224,109,225,36,226,227],"vue best practices","Composition","files","tasks","pinia","work","options","ssr","typescript","as","vite","load","standard"]