[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H8AF870QJRESJ14E2F8AMG":3,"skill-same:01M6H8AF870QJRESJ14E2F8AMG":91},{"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":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6H8AF870QJRESJ14E2F8AMG","data-modeler",null,"Design database schemas with Prisma for AI and Web3 applications. Define models, relations, indexes, and migrations. Use when designing databases, creating Prisma schemas, or when the user mentions database, schema, model, prisma, or migration.","rotifer-protocol\u002Frotifer-playground","rotifer-protocol","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F262854335?v=4","01M6H88XQBWNQXVGHBCGZZCQVX","Rotifer Protocol","01M6H88XVXE7GHR06H8E1SP311",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fgenes\u002Fdata-modeler\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"data","data modeler","databases","when","for","with","define","prisma","indexes","migrations","models","design","migration","schema","use","user","model","applications","web3","database","2026-11-10 10:12:30",false,"---\nname: data-modeler\ndescription: Design database schemas with Prisma for AI and Web3 applications. Define models, relations, indexes, and migrations. Use when designing databases, creating Prisma schemas, or when the user mentions database, schema, model, prisma, or migration.\n---\n\n# Data Modeler (数据建模师)\n\n**Goal**: 设计清晰、高效、可扩展的数据库结构。\n\n**技术栈**: Prisma + PostgreSQL (主要) \u002F SQLite (开发)\n\n---\n\n## 1. Schema Design Principles\n\n### 命名规范\n\n```prisma\n\u002F\u002F 模型: PascalCase (单数)\nmodel User {}\nmodel ChatMessage {}\n\n\u002F\u002F 字段: camelCase\nmodel User {\n  id        String\n  createdAt DateTime\n  firstName String\n}\n\n\u002F\u002F 关系字段: 描述关系\nmodel Post {\n  author    User    @relation(...)\n  authorId  String\n}\n```\n\n### 必备字段\n\n```prisma\nmodel BaseModel {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\n\u002F\u002F 所有模型都应包含这三个字段\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F 业务字段...\n}\n```\n\n### 软删除 (推荐)\n\n```prisma\nmodel User {\n  \u002F\u002F ...\n  deletedAt DateTime?  \u002F\u002F null = 未删除\n  \n  @@index([deletedAt])\n}\n\n\u002F\u002F 查询时过滤\nconst users = await prisma.user.findMany({\n  where: { deletedAt: null }\n})\n```\n\n---\n\n## 2. Common Patterns\n\n### 用户认证\n\n```prisma\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F 认证\n  email         String    @unique\n  emailVerified DateTime?\n  passwordHash  String?   \u002F\u002F null if OAuth only\n  \n  \u002F\u002F 资料\n  name      String?\n  image     String?\n  \n  \u002F\u002F 关系\n  accounts  Account[]\n  sessions  Session[]\n}\n\nmodel Account {\n  id                String  @id @default(cuid())\n  userId            String\n  type              String\n  provider          String\n  providerAccountId String\n  \n  \u002F\u002F OAuth tokens\n  accessToken  String?\n  refreshToken String?\n  expiresAt    Int?\n  \n  user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n  \n  @@unique([provider, providerAccountId])\n}\n\nmodel Session {\n  id           String   @id @default(cuid())\n  sessionToken String   @unique\n  userId       String\n  expires      DateTime\n  \n  user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n```\n\n### AI 对话\n\n```prisma\nmodel Conversation {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  title     String?\n  userId    String\n  \n  user      User      @relation(fields: [userId], references: [id], onDelete: Cascade)\n  messages  Message[]\n  \n  @@index([userId])\n}\n\nmodel Message {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  role           String   \u002F\u002F 'user' | 'assistant' | 'system'\n  content        String   @db.Text\n  conversationId String\n  \n  \u002F\u002F Token 统计\n  promptTokens     Int?\n  completionTokens Int?\n  \n  \u002F\u002F AI 元数据\n  model     String?\n  finishReason String?\n  \n  conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n  \n  @@index([conversationId])\n}\n```\n\n### Web3 用户\n\n```prisma\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F Web3\n  address   String   @unique  \u002F\u002F 0x...\n  chainId   Int      @default(1)\n  \n  \u002F\u002F ENS (缓存)\n  ensName   String?\n  ensAvatar String?\n  ensUpdatedAt DateTime?\n  \n  \u002F\u002F 关系\n  wallets   Wallet[]\n  \n  @@index([address])\n}\n\nmodel Wallet {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  address   String\n  chainId   Int\n  label     String?  \u002F\u002F \"Main\", \"Trading\", etc.\n  \n  userId    String\n  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)\n  \n  @@unique([userId, address, chainId])\n}\n```\n\n### 交易记录\n\n```prisma\nmodel Transaction {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  hash      String   @unique\n  chainId   Int\n  \n  from      String\n  to        String?\n  value     Decimal  @db.Decimal(78, 0)  \u002F\u002F BigInt as Decimal\n  \n  status    TransactionStatus @default(PENDING)\n  \n  \u002F\u002F Gas\n  gasLimit  Decimal? @db.Decimal(78, 0)\n  gasUsed   Decimal? @db.Decimal(78, 0)\n  gasPrice  Decimal? @db.Decimal(78, 0)\n  \n  \u002F\u002F 关系\n  userId    String\n  user      User     @relation(fields: [userId], references: [id])\n  \n  @@index([userId])\n  @@index([hash])\n  @@index([status])\n}\n\nenum TransactionStatus {\n  PENDING\n  CONFIRMED\n  FAILED\n}\n```\n\n---\n\n## 3. Relations\n\n### 一对多\n\n```prisma\nmodel User {\n  id    String @id\n  posts Post[]\n}\n\nmodel Post {\n  id       String @id\n  author   User   @relation(fields: [authorId], references: [id])\n  authorId String\n  \n  @@index([authorId])\n}\n```\n\n### 多对多 (显式)\n\n```prisma\nmodel User {\n  id          String       @id\n  memberships Membership[]\n}\n\nmodel Team {\n  id          String       @id\n  memberships Membership[]\n}\n\nmodel Membership {\n  id     String @id @default(cuid())\n  role   String @default(\"member\")  \u002F\u002F \"owner\" | \"admin\" | \"member\"\n  \n  userId String\n  teamId String\n  user   User   @relation(fields: [userId], references: [id], onDelete: Cascade)\n  team   Team   @relation(fields: [teamId], references: [id], onDelete: Cascade)\n  \n  @@unique([userId, teamId])\n}\n```\n\n### 自引用\n\n```prisma\nmodel Category {\n  id       String     @id\n  name     String\n  \n  parentId String?\n  parent   Category?  @relation(\"CategoryHierarchy\", fields: [parentId], references: [id])\n  children Category[] @relation(\"CategoryHierarchy\")\n}\n```\n\n---\n\n## 4. Indexes & Performance\n\n### 索引策略\n\n```prisma\nmodel User {\n  id        String   @id\n  email     String   @unique  \u002F\u002F 自动索引\n  createdAt DateTime\n  status    String\n  \n  \u002F\u002F 复合索引 (常用查询)\n  @@index([status, createdAt])\n  \n  \u002F\u002F 单字段索引\n  @@index([createdAt])\n}\n```\n\n### 何时添加索引\n\n| 场景 | 需要索引 |\n|------|----------|\n| WHERE 条件字段 | ✅ |\n| ORDER BY 字段 | ✅ |\n| 外键字段 | ✅ (手动添加) |\n| JOIN 条件 | ✅ |\n| 唯一约束字段 | 自动 |\n\n### BigInt 处理\n\n```prisma\n\u002F\u002F 方式 1: Decimal (推荐)\nmodel Token {\n  balance Decimal @db.Decimal(78, 0)  \u002F\u002F 最大 uint256\n}\n\n\u002F\u002F 方式 2: BigInt (Prisma 4.x+)\nmodel Token {\n  balance BigInt\n}\n```\n\n---\n\n## 5. Migrations\n\n### 开发流程\n\n```bash\n# 1. 修改 schema.prisma\n\n# 2. 创建迁移\npnpm prisma migrate dev --name add_user_avatar\n\n# 3. 应用到开发库 (自动)\n```\n\n### 生产部署\n\n```bash\n# CI\u002FCD 中运行\npnpm prisma migrate deploy\n```\n\n### 迁移最佳实践\n\n```bash\n# ✅ 小步迁移\nadd_user_table\nadd_user_email_index\nadd_user_avatar_field\n\n# ❌ 大爆炸迁移\ninitial_schema_with_everything\n```\n\n### 数据迁移\n\n```typescript\n\u002F\u002F prisma\u002Fmigrations\u002Fxxx\u002Fdata-migration.ts\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  \u002F\u002F 填充默认值\n  await prisma.user.updateMany({\n    where: { role: null },\n    data: { role: 'user' }\n  })\n}\n\nmain()\n```\n\n---\n\n## 6. Query Patterns\n\n### 常用查询\n\n```typescript\n\u002F\u002F 分页\nconst users = await prisma.user.findMany({\n  skip: (page - 1) * pageSize,\n  take: pageSize,\n  orderBy: { createdAt: 'desc' },\n})\n\n\u002F\u002F 包含关系\nconst user = await prisma.user.findUnique({\n  where: { id },\n  include: { posts: true },\n})\n\n\u002F\u002F 选择字段\nconst user = await prisma.user.findUnique({\n  where: { id },\n  select: { id: true, name: true, email: true },\n})\n\n\u002F\u002F 统计\nconst count = await prisma.user.count({\n  where: { status: 'active' },\n})\n```\n\n### 事务\n\n```typescript\n\u002F\u002F 隐式事务\nconst [user, post] = await prisma.$transaction([\n  prisma.user.create({ data: userData }),\n  prisma.post.create({ data: postData }),\n])\n\n\u002F\u002F 交互式事务\nawait prisma.$transaction(async (tx) => {\n  const user = await tx.user.create({ data: userData })\n  await tx.post.create({ \n    data: { ...postData, authorId: user.id } \n  })\n})\n```\n\n---\n\n## 7. Schema Checklist\n\n```markdown\n## 数据模型检查清单\n\n### 基础\n- [ ] 所有模型有 id, createdAt, updatedAt\n- [ ] 使用正确的命名规范\n- [ ] 外键字段有索引\n\n### 关系\n- [ ] onDelete 策略明确 (Cascade\u002FSetNull\u002FRestrict)\n- [ ] 多对多使用显式中间表\n- [ ] 自引用关系正确\n\n### 性能\n- [ ] 常用查询字段有索引\n- [ ] 复合索引顺序正确\n- [ ] BigInt 使用 Decimal\n\n### 安全\n- [ ] 敏感字段不直接暴露\n- [ ] 软删除用于重要数据\n- [ ] 审计字段 (createdBy, updatedBy)\n```\n\n---\n\n## Quick Reference\n\n### Prisma CLI\n\n```bash\nprisma generate      # 生成客户端\nprisma migrate dev   # 创建迁移\nprisma migrate deploy # 部署迁移\nprisma studio        # 可视化界面\n```\n","# Data Modeler (数据建模师)\n\n**Goal**: 设计清晰、高效、可扩展的数据库结构。\n\n**技术栈**: Prisma + PostgreSQL (主要) \u002F SQLite (开发)\n\n---\n\n## 1. Schema Design Principles\n\n### 命名规范\n\n```prisma\n\u002F\u002F 模型: PascalCase (单数)\nmodel User {}\nmodel ChatMessage {}\n\n\u002F\u002F 字段: camelCase\nmodel User {\n  id        String\n  createdAt DateTime\n  firstName String\n}\n\n\u002F\u002F 关系字段: 描述关系\nmodel Post {\n  author    User    @relation(...)\n  authorId  String\n}\n```\n\n### 必备字段\n\n```prisma\nmodel BaseModel {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\n\u002F\u002F 所有模型都应包含这三个字段\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F 业务字段...\n}\n```\n\n### 软删除 (推荐)\n\n```prisma\nmodel User {\n  \u002F\u002F ...\n  deletedAt DateTime?  \u002F\u002F null = 未删除\n  \n  @@index([deletedAt])\n}\n\n\u002F\u002F 查询时过滤\nconst users = await prisma.user.findMany({\n  where: { deletedAt: null }\n})\n```\n\n---\n\n## 2. Common Patterns\n\n### 用户认证\n\n```prisma\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F 认证\n  email         String    @unique\n  emailVerified DateTime?\n  passwordHash  String?   \u002F\u002F null if OAuth only\n  \n  \u002F\u002F 资料\n  name      String?\n  image     String?\n  \n  \u002F\u002F 关系\n  accounts  Account[]\n  sessions  Session[]\n}\n\nmodel Account {\n  id                String  @id @default(cuid())\n  userId            String\n  type              String\n  provider          String\n  providerAccountId String\n  \n  \u002F\u002F OAuth tokens\n  accessToken  String?\n  refreshToken String?\n  expiresAt    Int?\n  \n  user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n  \n  @@unique([provider, providerAccountId])\n}\n\nmodel Session {\n  id           String   @id @default(cuid())\n  sessionToken String   @unique\n  userId       String\n  expires      DateTime\n  \n  user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n```\n\n### AI 对话\n\n```prisma\nmodel Conversation {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  title     String?\n  userId    String\n  \n  user      User      @relation(fields: [userId], references: [id], onDelete: Cascade)\n  messages  Message[]\n  \n  @@index([userId])\n}\n\nmodel Message {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  role           String   \u002F\u002F 'user' | 'assistant' | 'system'\n  content        String   @db.Text\n  conversationId String\n  \n  \u002F\u002F Token 统计\n  promptTokens     Int?\n  completionTokens Int?\n  \n  \u002F\u002F AI 元数据\n  model     String?\n  finishReason String?\n  \n  conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n  \n  @@index([conversationId])\n}\n```\n\n### Web3 用户\n\n```prisma\nmodel User {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  \n  \u002F\u002F Web3\n  address   String   @unique  \u002F\u002F 0x...\n  chainId   Int      @default(1)\n  \n  \u002F\u002F ENS (缓存)\n  ensName   String?\n  ensAvatar String?\n  ensUpdatedAt DateTime?\n  \n  \u002F\u002F 关系\n  wallets   Wallet[]\n  \n  @@index([address])\n}\n\nmodel Wallet {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  address   String\n  chainId   Int\n  label     String?  \u002F\u002F \"Main\", \"Trading\", etc.\n  \n  userId    String\n  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)\n  \n  @@unique([userId, address, chainId])\n}\n```\n\n### 交易记录\n\n```prisma\nmodel Transaction {\n  id        String   @id @default(cuid())\n  createdAt DateTime @default(now())\n  \n  hash      String   @unique\n  chainId   Int\n  \n  from      String\n  to        String?\n  value     Decimal  @db.Decimal(78, 0)  \u002F\u002F BigInt as Decimal\n  \n  status    TransactionStatus @default(PENDING)\n  \n  \u002F\u002F Gas\n  gasLimit  Decimal? @db.Decimal(78, 0)\n  gasUsed   Decimal? @db.Decimal(78, 0)\n  gasPrice  Decimal? @db.Decimal(78, 0)\n  \n  \u002F\u002F 关系\n  userId    String\n  user      User     @relation(fields: [userId], references: [id])\n  \n  @@index([userId])\n  @@index([hash])\n  @@index([status])\n}\n\nenum TransactionStatus {\n  PENDING\n  CONFIRMED\n  FAILED\n}\n```\n\n---\n\n## 3. Relations\n\n### 一对多\n\n```prisma\nmodel User {\n  id    String @id\n  posts Post[]\n}\n\nmodel Post {\n  id       String @id\n  author   User   @relation(fields: [authorId], references: [id])\n  authorId String\n  \n  @@index([authorId])\n}\n```\n\n### 多对多 (显式)\n\n```prisma\nmodel User {\n  id          String       @id\n  memberships Membership[]\n}\n\nmodel Team {\n  id          String       @id\n  memberships Membership[]\n}\n\nmodel Membership {\n  id     String @id @default(cuid())\n  role   String @default(\"member\")  \u002F\u002F \"owner\" | \"admin\" | \"member\"\n  \n  userId String\n  teamId String\n  user   User   @relation(fields: [userId], references: [id], onDelete: Cascade)\n  team   Team   @relation(fields: [teamId], references: [id], onDelete: Cascade)\n  \n  @@unique([userId, teamId])\n}\n```\n\n### 自引用\n\n```prisma\nmodel Category {\n  id       String     @id\n  name     String\n  \n  parentId String?\n  parent   Category?  @relation(\"CategoryHierarchy\", fields: [parentId], references: [id])\n  children Category[] @relation(\"CategoryHierarchy\")\n}\n```\n\n---\n\n## 4. Indexes & Performance\n\n### 索引策略\n\n```prisma\nmodel User {\n  id        String   @id\n  email     String   @unique  \u002F\u002F 自动索引\n  createdAt DateTime\n  status    String\n  \n  \u002F\u002F 复合索引 (常用查询)\n  @@index([status, createdAt])\n  \n  \u002F\u002F 单字段索引\n  @@index([createdAt])\n}\n```\n\n### 何时添加索引\n\n| 场景 | 需要索引 |\n|------|----------|\n| WHERE 条件字段 | ✅ |\n| ORDER BY 字段 | ✅ |\n| 外键字段 | ✅ (手动添加) |\n| JOIN 条件 | ✅ |\n| 唯一约束字段 | 自动 |\n\n### BigInt 处理\n\n```prisma\n\u002F\u002F 方式 1: Decimal (推荐)\nmodel Token {\n  balance Decimal @db.Decimal(78, 0)  \u002F\u002F 最大 uint256\n}\n\n\u002F\u002F 方式 2: BigInt (Prisma 4.x+)\nmodel Token {\n  balance BigInt\n}\n```\n\n---\n\n## 5. Migrations\n\n### 开发流程\n\n```bash\n# 1. 修改 schema.prisma\n\n# 2. 创建迁移\npnpm prisma migrate dev --name add_user_avatar\n\n# 3. 应用到开发库 (自动)\n```\n\n### 生产部署\n\n```bash\n# CI\u002FCD 中运行\npnpm prisma migrate deploy\n```\n\n### 迁移最佳实践\n\n```bash\n# ✅ 小步迁移\nadd_user_table\nadd_user_email_index\nadd_user_avatar_field\n\n# ❌ 大爆炸迁移\ninitial_schema_with_everything\n```\n\n### 数据迁移\n\n```typescript\n\u002F\u002F prisma\u002Fmigrations\u002Fxxx\u002Fdata-migration.ts\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  \u002F\u002F 填充默认值\n  await prisma.user.updateMany({\n    where: { role: null },\n    data: { role: 'user' }\n  })\n}\n\nmain()\n```\n\n---\n\n## 6. Query Patterns\n\n### 常用查询\n\n```typescript\n\u002F\u002F 分页\nconst users = await prisma.user.findMany({\n  skip: (page - 1) * pageSize,\n  take: pageSize,\n  orderBy: { createdAt: 'desc' },\n})\n\n\u002F\u002F 包含关系\nconst user = await prisma.user.findUnique({\n  where: { id },\n  include: { posts: true },\n})\n\n\u002F\u002F 选择字段\nconst user = await prisma.user.findUnique({\n  where: { id },\n  select: { id: true, name: true, email: true },\n})\n\n\u002F\u002F 统计\nconst count = await prisma.user.count({\n  where: { status: 'active' },\n})\n```\n\n### 事务\n\n```typescript\n\u002F\u002F 隐式事务\nconst [user, post] = await prisma.$transaction([\n  prisma.user.create({ data: userData }),\n  prisma.post.create({ data: postData }),\n])\n\n\u002F\u002F 交互式事务\nawait prisma.$transaction(async (tx) => {\n  const user = await tx.user.create({ data: userData })\n  await tx.post.create({ \n    data: { ...postData, authorId: user.id } \n  })\n})\n```\n\n---\n\n## 7. Schema Checklist\n\n```markdown\n## 数据模型检查清单\n\n### 基础\n- [ ] 所有模型有 id, createdAt, updatedAt\n- [ ] 使用正确的命名规范\n- [ ] 外键字段有索引\n\n### 关系\n- [ ] onDelete 策略明确 (Cascade\u002FSetNull\u002FRestrict)\n- [ ] 多对多使用显式中间表\n- [ ] 自引用关系正确\n\n### 性能\n- [ ] 常用查询字段有索引\n- [ ] 复合索引顺序正确\n- [ ] BigInt 使用 Decimal\n\n### 安全\n- [ ] 敏感字段不直接暴露\n- [ ] 软删除用于重要数据\n- [ ] 审计字段 (createdBy, updatedBy)\n```\n\n---\n\n## Quick Reference\n\n### Prisma CLI\n\n```bash\nprisma generate      # 生成客户端\nprisma migrate dev   # 创建迁移\nprisma migrate deploy # 部署迁移\nprisma studio        # 可视化界面\n```\n",{"name":5,"description":7},"main","4a618da5d2528627c4728e9aab7d602f9d00b649","genes\u002Fdata-modeler",1,"https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground","https:\u002F\u002Fgithub.com\u002Frotifer-protocol","https:\u002F\u002Frotifer.dev","Open-source evolution framework for AI agents","2026-11-12 02:04:26",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add rotifer-protocol\u002Frotifer-playground --skill data-modeler",{"tool":69,"command":70},"bunx","bunx skills add rotifer-protocol\u002Frotifer-playground --skill data-modeler",{"tool":72,"command":73},"pnpm","pnpm dlx skills add rotifer-protocol\u002Frotifer-playground --skill data-modeler","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fgenes\u002Fdata-modeler\u002FSKILL.md",true,[77,83,87],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},".cloud-manifest.json","REFERENCE","参考文档",156,"https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fgenes\u002Fdata-modeler\u002F.cloud-manifest.json",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},".gene-manifest.json",264,"https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fgenes\u002Fdata-modeler\u002F.gene-manifest.json",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"phenotype.json",2255,"https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fgenes\u002Fdata-modeler\u002Fphenotype.json",[92,108,135,163,185,205],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":101,"publishedAt":49},"01M6H8FTYPK400JGQDW57GM49R","fixture-skill","A synthetic ClawHub skill for wrap --from-clawhub tests","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fclawhub\u002Ffixture-skill\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[102,103,104,105,106,33,107],"fixture","fixture skill","wrap","tests","clawhub","synthetic",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":115,"publishedAt":49},"01M6H8FPX91FF5FH8PPEW7HQSZ","rotifer-self-evolving-agent","Rank an Agent's Rotifer Genes against the Arena and swap in stronger ones. Invoked explicitly via \u002Fevolve — scan local capabilities, compare Genes, inspect fitness scores, and replace weak ones with user approval. Not for capabilities outside Rotifer.","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fskills\u002Frotifer-self-evolving-agent\u002FSKILL.md",[114],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[116,117,118,119,120,121,122,123,124,125,126,127,128,129,33,130,66,131,132,34,133,134],"rotifer self evolving agent","self","self evolving","inspect","local","MCP","access","capabilities","server","run","gene","evolve","network","arena","scan","compare","swap","mcp-server","fitness",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":144,"publishedAt":49},"01M6H8FGNKE933Q2JAAB7JY43V","rotifer-guide","Entry point for Rotifer Protocol — onboarding to Rotifer Genes, scaffolding a Gene from a description, diagnosing a Gene's F(g) or compile failure, searching the Rotifer Gene registry, and upgrading a Gene's fidelity from Wrapped to Native. Invoke explicitly when starting with Rotifer, or when unsure which Rotifer capability to use. Do NOT use for general onboarding, tutorials, troubleshooting, or search — every capability here operates on Rotifer Genes and the Rotifer CLI, and nothing else.","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fskills\u002Frotifer-guide\u002FSKILL.md",[141],{"categoryNo":142,"categoryName":143,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000038","人力资源",[145,146,147,148,149,150,151,126,152,153,33,154,155,43,34,156,157,158,159,160,32,161,162],"rotifer guide","guide","which","scaffolding","search","cli","native","registry","do","compile","general","protocol","troubleshooting","onboarding","rotifer gene","invoke","capability","point",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":49},"01M6H8FBXGQM2RH27G0S6XMQ34","rotifer-gene","The Gene manual for Rotifer Protocol — write a Gene's express function and phenotype schema, run the four-layer security audit before publishing, and migrate a Gene's fidelity from Wrapped to Hybrid or Native. Invoke explicitly when building, auditing, or upgrading a Rotifer Gene. Do NOT use for general code review, dependency auditing, or framework migration — every procedure here operates on Rotifer Genes, their phenotype schemas, and the Rotifer CLI, and nothing else.","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fskills\u002Frotifer-gene\u002FSKILL.md",[169],{"categoryNo":170,"categoryName":171,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",[159,126,153,129,173,33,174,175,155,176,177,42,66,43,122,178,179,180,181,182,183,184,160,32],"security audit","code review","manual","publishing","yes","version","migrate","code","express","review","hybrid","submission",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":49},"01M6H8F7DZPN54N2AQC32BWEKV","rotifer-arena","Benchmark Rotifer Genes against each other in the Arena — import from ClawHub \u002F local \u002F scratch, compile, match opponents, run Arena evaluation, and produce a Markdown report with F(g) fitness and V(g) security grades. Invoke explicitly to compare or benchmark Rotifer Genes. Do NOT use for general benchmarking, load testing, or comparing anything that is not a Rotifer Gene or Agent.","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fskills\u002Frotifer-arena\u002FSKILL.md",[191],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[193,129,153,194,33,154,195,120,155,106,196,43,197,131,34,198,199,200,125,126,159,160,201,202,134,203,204],"rotifer arena","import","testing","produce","load","benchmarking","load testing","markdown","Evaluation","benchmark","security","scratch",{"skillNo":206,"name":207,"nameZh":6,"description":208,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":212,"publishedAt":49},"01M6H8F0WWXMTDWXQMQYC3PGPW","rotifer-agent","Build a Rotifer Agent from Genes — decompose intent into capability units, pick Genes by Arena F(g), compose a Rotifer Genome, create the Agent and test it. Use when the user is working with Rotifer specifically: \"Rotifer Agent\", \"compose Genes\", \"Rotifer Genome\", \"Gene composition\", \"rotifer agent create\". Do NOT use for general agent frameworks, or when the words Seq \u002F Par \u002F Cond \u002F Try appear as ordinary programming terms — in Rotifer those name Genome composition strategies, and this Skill applies only when the user is composing Rotifer Genes.","https:\u002F\u002Fgithub.com\u002Frotifer-protocol\u002Frotifer-playground\u002Fblob\u002Fmain\u002Fskills\u002Frotifer-agent\u002FSKILL.md",[211],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[213,214,215,216,217,218,219,126,220,221,222,153,129,223,33,224,155,43,225,34,32,226,161],"rotifer agent","Composition","pick","only","create","strategies","intent","seq","decompose","as","compose","frameworks","programming","agent frameworks"]