[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6WPD9MSYGZ52KGATFDXMW":3,"skill-same:01M6F6WPD9MSYGZ52KGATFDXMW":74},{"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":18,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6F6WPD9MSYGZ52KGATFDXMW","gamma-enterprise-rbac",null,"Implement enterprise role-based access control for Gamma integrations.\nUse when configuring team permissions, multi-tenant access,\nor enterprise authorization patterns.\nTrigger with phrases like \"gamma RBAC\", \"gamma permissions\",\n\"gamma access control\", \"gamma enterprise\", \"gamma roles\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1981,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fgamma-pack\u002Fskills\u002Fgamma-enterprise-rbac\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"rbac","Enterprise","gamma enterprise rbac","gamma","when","implement","tenant","for","with","Role-Based","multi","trigger","io","roles","control","Access Control","use","write","read","integrations","access","team","permissions","2026-11-10 10:12:30",false,"---\nname: gamma-enterprise-rbac\ndescription: |\n  Implement enterprise role-based access control for Gamma integrations.\n  Use when configuring team permissions, multi-tenant access,\n  or enterprise authorization patterns.\n  Trigger with phrases like \"gamma RBAC\", \"gamma permissions\",\n  \"gamma access control\", \"gamma enterprise\", \"gamma roles\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Gamma Enterprise RBAC\n\n## Overview\nImplement enterprise-grade role-based access control for Gamma integrations with multi-tenant support.\n\n## Prerequisites\n- Enterprise Gamma subscription\n- Identity provider (IdP) integration\n- Database for permission storage\n- Understanding of RBAC concepts\n\n## RBAC Model\n\n### Role Hierarchy\n```\nOrganization Admin\n    └── Workspace Admin\n        └── Team Lead\n            └── Editor\n                └── Viewer\n```\n\n### Permission Matrix\n| Permission | Viewer | Editor | Team Lead | Workspace Admin | Org Admin |\n|------------|--------|--------|-----------|-----------------|-----------|\n| View presentations | Yes | Yes | Yes | Yes | Yes |\n| Create presentations | No | Yes | Yes | Yes | Yes |\n| Edit own presentations | No | Yes | Yes | Yes | Yes |\n| Edit team presentations | No | No | Yes | Yes | Yes |\n| Delete presentations | No | No | Yes | Yes | Yes |\n| Manage team members | No | No | Yes | Yes | Yes |\n| Manage workspace | No | No | No | Yes | Yes |\n| Manage billing | No | No | No | No | Yes |\n| Manage API keys | No | No | No | No | Yes |\n\n## Instructions\n\n### Step 1: Define Roles and Permissions\n```typescript\n\u002F\u002F models\u002Frbac.ts\nenum Permission {\n  \u002F\u002F Presentation permissions\n  PRESENTATION_VIEW = 'presentation:view',\n  PRESENTATION_CREATE = 'presentation:create',\n  PRESENTATION_EDIT_OWN = 'presentation:edit:own',\n  PRESENTATION_EDIT_TEAM = 'presentation:edit:team',\n  PRESENTATION_EDIT_ALL = 'presentation:edit:all',\n  PRESENTATION_DELETE = 'presentation:delete',\n  PRESENTATION_EXPORT = 'presentation:export',\n\n  \u002F\u002F Team permissions\n  TEAM_VIEW = 'team:view',\n  TEAM_MANAGE = 'team:manage',\n\n  \u002F\u002F Workspace permissions\n  WORKSPACE_VIEW = 'workspace:view',\n  WORKSPACE_MANAGE = 'workspace:manage',\n\n  \u002F\u002F Admin permissions\n  BILLING_VIEW = 'billing:view',\n  BILLING_MANAGE = 'billing:manage',\n  API_KEYS_MANAGE = 'api_keys:manage',\n}\n\ninterface Role {\n  name: string;\n  permissions: Permission[];\n  inherits?: string;\n}\n\nconst roles: Record\u003Cstring, Role> = {\n  viewer: {\n    name: 'Viewer',\n    permissions: [\n      Permission.PRESENTATION_VIEW,\n      Permission.TEAM_VIEW,\n      Permission.WORKSPACE_VIEW,\n    ],\n  },\n  editor: {\n    name: 'Editor',\n    permissions: [\n      Permission.PRESENTATION_CREATE,\n      Permission.PRESENTATION_EDIT_OWN,\n      Permission.PRESENTATION_EXPORT,\n    ],\n    inherits: 'viewer',\n  },\n  team_lead: {\n    name: 'Team Lead',\n    permissions: [\n      Permission.PRESENTATION_EDIT_TEAM,\n      Permission.PRESENTATION_DELETE,\n      Permission.TEAM_MANAGE,\n    ],\n    inherits: 'editor',\n  },\n  workspace_admin: {\n    name: 'Workspace Admin',\n    permissions: [\n      Permission.PRESENTATION_EDIT_ALL,\n      Permission.WORKSPACE_MANAGE,\n      Permission.BILLING_VIEW,\n    ],\n    inherits: 'team_lead',\n  },\n  org_admin: {\n    name: 'Organization Admin',\n    permissions: [\n      Permission.BILLING_MANAGE,\n      Permission.API_KEYS_MANAGE,\n    ],\n    inherits: 'workspace_admin',\n  },\n};\n```\n\n### Step 2: Permission Resolution\n```typescript\n\u002F\u002F services\u002Frbac-service.ts\nclass RBACService {\n  private rolePermissions: Map\u003Cstring, Set\u003CPermission>> = new Map();\n\n  constructor() {\n    this.resolveRoleHierarchy();\n  }\n\n  private resolveRoleHierarchy() {\n    const resolve = (roleName: string): Set\u003CPermission> => {\n      if (this.rolePermissions.has(roleName)) {\n        return this.rolePermissions.get(roleName)!;\n      }\n\n      const role = roles[roleName];\n      const permissions = new Set\u003CPermission>(role.permissions);\n\n      if (role.inherits) {\n        const inherited = resolve(role.inherits);\n        inherited.forEach(p => permissions.add(p));\n      }\n\n      this.rolePermissions.set(roleName, permissions);\n      return permissions;\n    };\n\n    Object.keys(roles).forEach(resolve);\n  }\n\n  hasPermission(userRole: string, permission: Permission): boolean {\n    const permissions = this.rolePermissions.get(userRole);\n    return permissions?.has(permission) ?? false;\n  }\n\n  getAllPermissions(userRole: string): Permission[] {\n    return Array.from(this.rolePermissions.get(userRole) ?? []);\n  }\n}\n\nexport const rbac = new RBACService();\n```\n\n### Step 3: Authorization Middleware\n```typescript\n\u002F\u002F middleware\u002Fauthorize.ts\nimport { rbac } from '..\u002Fservices\u002Frbac-service';\n\nfunction authorize(...requiredPermissions: Permission[]) {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    const user = req.user;\n\n    if (!user) {\n      return res.status(401).json({ error: 'Unauthorized' });\n    }\n\n    const userRole = await getUserRole(user.id, req.params.workspaceId);\n\n    const hasAllPermissions = requiredPermissions.every(permission =>\n      rbac.hasPermission(userRole, permission)\n    );\n\n    if (!hasAllPermissions) {\n      return res.status(403).json({\n        error: 'Forbidden',\n        required: requiredPermissions,\n        userRole,\n      });\n    }\n\n    next();\n  };\n}\n\n\u002F\u002F Usage in routes\napp.post('\u002Fapi\u002Fpresentations',\n  authorize(Permission.PRESENTATION_CREATE),\n  async (req, res) => {\n    const presentation = await gamma.presentations.create(req.body);\n    res.json(presentation);\n  }\n);\n\napp.delete('\u002Fapi\u002Fpresentations\u002F:id',\n  authorize(Permission.PRESENTATION_DELETE),\n  async (req, res) => {\n    await gamma.presentations.delete(req.params.id);\n    res.status(204).send();\n  }\n);\n```\n\n### Step 4: Resource-Level Authorization\n```typescript\n\u002F\u002F services\u002Fresource-auth.ts\ninterface ResourcePolicy {\n  action: string;\n  conditions: (user: User, resource: any) => boolean;\n}\n\nconst presentationPolicies: ResourcePolicy[] = [\n  {\n    action: 'edit',\n    conditions: (user, presentation) => {\n      \u002F\u002F Owner can always edit\n      if (presentation.ownerId === user.id) return true;\n\n      \u002F\u002F Team leads can edit team presentations\n      if (user.role === 'team_lead' && presentation.teamId === user.teamId) {\n        return true;\n      }\n\n      \u002F\u002F Workspace admins can edit all\n      if (user.role === 'workspace_admin' || user.role === 'org_admin') {\n        return true;\n      }\n\n      return false;\n    },\n  },\n];\n\nasync function canPerformAction(\n  user: User,\n  action: string,\n  resource: any\n): Promise\u003Cboolean> {\n  const policy = presentationPolicies.find(p => p.action === action);\n  return policy?.conditions(user, resource) ?? false;\n}\n\n\u002F\u002F Usage\napp.put('\u002Fapi\u002Fpresentations\u002F:id', async (req, res) => {\n  const presentation = await db.presentations.findUnique({\n    where: { id: req.params.id },\n  });\n\n  if (!await canPerformAction(req.user, 'edit', presentation)) {\n    return res.status(403).json({ error: 'Cannot edit this presentation' });\n  }\n\n  \u002F\u002F Proceed with edit\n});\n```\n\n### Step 5: Multi-Tenant Isolation\n```typescript\n\u002F\u002F middleware\u002Ftenant.ts\nasync function tenantIsolation(req: Request, res: Response, next: NextFunction) {\n  const user = req.user;\n  const workspaceId = req.params.workspaceId || req.headers['x-workspace-id'];\n\n  \u002F\u002F Verify user belongs to workspace\n  const membership = await db.workspaceMemberships.findUnique({\n    where: {\n      userId_workspaceId: {\n        userId: user.id,\n        workspaceId: workspaceId,\n      },\n    },\n  });\n\n  if (!membership) {\n    return res.status(403).json({ error: 'Not a member of this workspace' });\n  }\n\n  \u002F\u002F Attach workspace context\n  req.workspace = await db.workspaces.findUnique({\n    where: { id: workspaceId },\n  });\n\n  req.userRole = membership.role;\n\n  next();\n}\n\n\u002F\u002F All workspace routes use tenant isolation\napp.use('\u002Fapi\u002Fworkspaces\u002F:workspaceId', tenantIsolation);\n```\n\n### Step 6: Audit Authorization Events\n```typescript\n\u002F\u002F lib\u002Fauth-audit.ts\nasync function logAuthorizationEvent(\n  userId: string,\n  action: string,\n  resource: string,\n  resourceId: string,\n  granted: boolean,\n  reason?: string\n) {\n  await db.authAuditLog.create({\n    data: {\n      userId,\n      action,\n      resource,\n      resourceId,\n      granted,\n      reason,\n      timestamp: new Date(),\n    },\n  });\n\n  if (!granted) {\n    \u002F\u002F Alert on suspicious denied access\n    metrics.increment('authorization.denied', {\n      action,\n      resource,\n    });\n  }\n}\n```\n\n## Resources\n- [Gamma Enterprise Features](https:\u002F\u002Fgamma.app\u002Fenterprise)\n- [RBAC Best Practices](https:\u002F\u002Fcsrc.nist.gov\u002Fprojects\u002Frole-based-access-control)\n\n## Next Steps\nProceed to `gamma-migration-deep-dive` for migration strategies.\n","# Gamma Enterprise RBAC\n\n## Overview\nImplement enterprise-grade role-based access control for Gamma integrations with multi-tenant support.\n\n## Prerequisites\n- Enterprise Gamma subscription\n- Identity provider (IdP) integration\n- Database for permission storage\n- Understanding of RBAC concepts\n\n## RBAC Model\n\n### Role Hierarchy\n```\nOrganization Admin\n    └── Workspace Admin\n        └── Team Lead\n            └── Editor\n                └── Viewer\n```\n\n### Permission Matrix\n| Permission | Viewer | Editor | Team Lead | Workspace Admin | Org Admin |\n|------------|--------|--------|-----------|-----------------|-----------|\n| View presentations | Yes | Yes | Yes | Yes | Yes |\n| Create presentations | No | Yes | Yes | Yes | Yes |\n| Edit own presentations | No | Yes | Yes | Yes | Yes |\n| Edit team presentations | No | No | Yes | Yes | Yes |\n| Delete presentations | No | No | Yes | Yes | Yes |\n| Manage team members | No | No | Yes | Yes | Yes |\n| Manage workspace | No | No | No | Yes | Yes |\n| Manage billing | No | No | No | No | Yes |\n| Manage API keys | No | No | No | No | Yes |\n\n## Instructions\n\n### Step 1: Define Roles and Permissions\n```typescript\n\u002F\u002F models\u002Frbac.ts\nenum Permission {\n  \u002F\u002F Presentation permissions\n  PRESENTATION_VIEW = 'presentation:view',\n  PRESENTATION_CREATE = 'presentation:create',\n  PRESENTATION_EDIT_OWN = 'presentation:edit:own',\n  PRESENTATION_EDIT_TEAM = 'presentation:edit:team',\n  PRESENTATION_EDIT_ALL = 'presentation:edit:all',\n  PRESENTATION_DELETE = 'presentation:delete',\n  PRESENTATION_EXPORT = 'presentation:export',\n\n  \u002F\u002F Team permissions\n  TEAM_VIEW = 'team:view',\n  TEAM_MANAGE = 'team:manage',\n\n  \u002F\u002F Workspace permissions\n  WORKSPACE_VIEW = 'workspace:view',\n  WORKSPACE_MANAGE = 'workspace:manage',\n\n  \u002F\u002F Admin permissions\n  BILLING_VIEW = 'billing:view',\n  BILLING_MANAGE = 'billing:manage',\n  API_KEYS_MANAGE = 'api_keys:manage',\n}\n\ninterface Role {\n  name: string;\n  permissions: Permission[];\n  inherits?: string;\n}\n\nconst roles: Record\u003Cstring, Role> = {\n  viewer: {\n    name: 'Viewer',\n    permissions: [\n      Permission.PRESENTATION_VIEW,\n      Permission.TEAM_VIEW,\n      Permission.WORKSPACE_VIEW,\n    ],\n  },\n  editor: {\n    name: 'Editor',\n    permissions: [\n      Permission.PRESENTATION_CREATE,\n      Permission.PRESENTATION_EDIT_OWN,\n      Permission.PRESENTATION_EXPORT,\n    ],\n    inherits: 'viewer',\n  },\n  team_lead: {\n    name: 'Team Lead',\n    permissions: [\n      Permission.PRESENTATION_EDIT_TEAM,\n      Permission.PRESENTATION_DELETE,\n      Permission.TEAM_MANAGE,\n    ],\n    inherits: 'editor',\n  },\n  workspace_admin: {\n    name: 'Workspace Admin',\n    permissions: [\n      Permission.PRESENTATION_EDIT_ALL,\n      Permission.WORKSPACE_MANAGE,\n      Permission.BILLING_VIEW,\n    ],\n    inherits: 'team_lead',\n  },\n  org_admin: {\n    name: 'Organization Admin',\n    permissions: [\n      Permission.BILLING_MANAGE,\n      Permission.API_KEYS_MANAGE,\n    ],\n    inherits: 'workspace_admin',\n  },\n};\n```\n\n### Step 2: Permission Resolution\n```typescript\n\u002F\u002F services\u002Frbac-service.ts\nclass RBACService {\n  private rolePermissions: Map\u003Cstring, Set\u003CPermission>> = new Map();\n\n  constructor() {\n    this.resolveRoleHierarchy();\n  }\n\n  private resolveRoleHierarchy() {\n    const resolve = (roleName: string): Set\u003CPermission> => {\n      if (this.rolePermissions.has(roleName)) {\n        return this.rolePermissions.get(roleName)!;\n      }\n\n      const role = roles[roleName];\n      const permissions = new Set\u003CPermission>(role.permissions);\n\n      if (role.inherits) {\n        const inherited = resolve(role.inherits);\n        inherited.forEach(p => permissions.add(p));\n      }\n\n      this.rolePermissions.set(roleName, permissions);\n      return permissions;\n    };\n\n    Object.keys(roles).forEach(resolve);\n  }\n\n  hasPermission(userRole: string, permission: Permission): boolean {\n    const permissions = this.rolePermissions.get(userRole);\n    return permissions?.has(permission) ?? false;\n  }\n\n  getAllPermissions(userRole: string): Permission[] {\n    return Array.from(this.rolePermissions.get(userRole) ?? []);\n  }\n}\n\nexport const rbac = new RBACService();\n```\n\n### Step 3: Authorization Middleware\n```typescript\n\u002F\u002F middleware\u002Fauthorize.ts\nimport { rbac } from '..\u002Fservices\u002Frbac-service';\n\nfunction authorize(...requiredPermissions: Permission[]) {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    const user = req.user;\n\n    if (!user) {\n      return res.status(401).json({ error: 'Unauthorized' });\n    }\n\n    const userRole = await getUserRole(user.id, req.params.workspaceId);\n\n    const hasAllPermissions = requiredPermissions.every(permission =>\n      rbac.hasPermission(userRole, permission)\n    );\n\n    if (!hasAllPermissions) {\n      return res.status(403).json({\n        error: 'Forbidden',\n        required: requiredPermissions,\n        userRole,\n      });\n    }\n\n    next();\n  };\n}\n\n\u002F\u002F Usage in routes\napp.post('\u002Fapi\u002Fpresentations',\n  authorize(Permission.PRESENTATION_CREATE),\n  async (req, res) => {\n    const presentation = await gamma.presentations.create(req.body);\n    res.json(presentation);\n  }\n);\n\napp.delete('\u002Fapi\u002Fpresentations\u002F:id',\n  authorize(Permission.PRESENTATION_DELETE),\n  async (req, res) => {\n    await gamma.presentations.delete(req.params.id);\n    res.status(204).send();\n  }\n);\n```\n\n### Step 4: Resource-Level Authorization\n```typescript\n\u002F\u002F services\u002Fresource-auth.ts\ninterface ResourcePolicy {\n  action: string;\n  conditions: (user: User, resource: any) => boolean;\n}\n\nconst presentationPolicies: ResourcePolicy[] = [\n  {\n    action: 'edit',\n    conditions: (user, presentation) => {\n      \u002F\u002F Owner can always edit\n      if (presentation.ownerId === user.id) return true;\n\n      \u002F\u002F Team leads can edit team presentations\n      if (user.role === 'team_lead' && presentation.teamId === user.teamId) {\n        return true;\n      }\n\n      \u002F\u002F Workspace admins can edit all\n      if (user.role === 'workspace_admin' || user.role === 'org_admin') {\n        return true;\n      }\n\n      return false;\n    },\n  },\n];\n\nasync function canPerformAction(\n  user: User,\n  action: string,\n  resource: any\n): Promise\u003Cboolean> {\n  const policy = presentationPolicies.find(p => p.action === action);\n  return policy?.conditions(user, resource) ?? false;\n}\n\n\u002F\u002F Usage\napp.put('\u002Fapi\u002Fpresentations\u002F:id', async (req, res) => {\n  const presentation = await db.presentations.findUnique({\n    where: { id: req.params.id },\n  });\n\n  if (!await canPerformAction(req.user, 'edit', presentation)) {\n    return res.status(403).json({ error: 'Cannot edit this presentation' });\n  }\n\n  \u002F\u002F Proceed with edit\n});\n```\n\n### Step 5: Multi-Tenant Isolation\n```typescript\n\u002F\u002F middleware\u002Ftenant.ts\nasync function tenantIsolation(req: Request, res: Response, next: NextFunction) {\n  const user = req.user;\n  const workspaceId = req.params.workspaceId || req.headers['x-workspace-id'];\n\n  \u002F\u002F Verify user belongs to workspace\n  const membership = await db.workspaceMemberships.findUnique({\n    where: {\n      userId_workspaceId: {\n        userId: user.id,\n        workspaceId: workspaceId,\n      },\n    },\n  });\n\n  if (!membership) {\n    return res.status(403).json({ error: 'Not a member of this workspace' });\n  }\n\n  \u002F\u002F Attach workspace context\n  req.workspace = await db.workspaces.findUnique({\n    where: { id: workspaceId },\n  });\n\n  req.userRole = membership.role;\n\n  next();\n}\n\n\u002F\u002F All workspace routes use tenant isolation\napp.use('\u002Fapi\u002Fworkspaces\u002F:workspaceId', tenantIsolation);\n```\n\n### Step 6: Audit Authorization Events\n```typescript\n\u002F\u002F lib\u002Fauth-audit.ts\nasync function logAuthorizationEvent(\n  userId: string,\n  action: string,\n  resource: string,\n  resourceId: string,\n  granted: boolean,\n  reason?: string\n) {\n  await db.authAuditLog.create({\n    data: {\n      userId,\n      action,\n      resource,\n      resourceId,\n      granted,\n      reason,\n      timestamp: new Date(),\n    },\n  });\n\n  if (!granted) {\n    \u002F\u002F Alert on suspicious denied access\n    metrics.increment('authorization.denied', {\n      action,\n      resource,\n    });\n  }\n}\n```\n\n## Resources\n- [Gamma Enterprise Features](https:\u002F\u002Fgamma.app\u002Fenterprise)\n- [RBAC Best Practices](https:\u002F\u002Fcsrc.nist.gov\u002Fprojects\u002Frole-based-access-control)\n\n## Next Steps\nProceed to `gamma-migration-deep-dive` for migration strategies.\n",{"name":5,"author":47,"license":15,"version":48,"description":49,"allowed-tools":50},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement enterprise role-based access control for Gamma integrations.\nUse when configuring team permissions, multi-tenant access,\nor enterprise authorization patterns.\nTrigger with phrases like \"gamma RBAC\", \"gamma permissions\",\n\"gamma access control\", \"gamma enterprise\", \"gamma roles\".\n","Read, Write, Edit","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fgamma-pack\u002Fskills\u002Fgamma-enterprise-rbac",231,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-12 03:15:57",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill gamma-enterprise-rbac",{"tool":66,"command":67},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill gamma-enterprise-rbac",{"tool":69,"command":70},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill gamma-enterprise-rbac","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fgamma-pack\u002Fskills\u002Fgamma-enterprise-rbac\u002FSKILL.md",true,[],[75,113,137,163,189,211],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":79,"licenseFileUrl":80,"sourceHtmlUrl":81,"categories":82,"keywords":88,"publishedAt":42},"01M6FEGPPK0ZTKCCM0R3E3KS33","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.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[83],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,35,107,108,109,110,29,26,111,112],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","component","routing","state management","state","shadcn","file","ui","Tools","Tailwind","html","single-file","simple","ui components","jsx","suite",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":79,"licenseFileUrl":117,"sourceHtmlUrl":118,"categories":119,"keywords":124,"publishedAt":42},"01M6FEE9VTK1W4GY21AKREJXRG","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.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[120,123],{"categoryNo":121,"categoryName":122,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[125,126,127,94,128,129,90,130,131,132,104,133,134,135,136,27,26],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":141,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":42},"01M6FE20F7ZTQBFWKF4MPJ2SBX","neuropixels-analysis","Neuropixels neural recording analysis. Load SpikeGLX\u002FOpenEphys data, preprocess, motion correction, Kilosort4 spike sorting, quality metrics, Allen\u002FIBL curation, AI-assisted visual analysis, for Neuropixels 1.0\u002F2.0 extracellular electrophysiology. Use when working with neural recordings, spike sorting, extracellular electrophysiology, or when the user mentions Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, or unit curation.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FSKILL.md",[],[145,146,147,148,149,150,151,152,35,153,154,155,156,157,158,159,27,160,161,162,26,23],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"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":79,"licenseFileUrl":167,"sourceHtmlUrl":168,"categories":169,"keywords":173,"publishedAt":42},"01M6FDP0PDK6F1GGX395C7625Z","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FSKILL.md",[170],{"categoryNo":171,"categoryName":172,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000023","Skill与智能体开发",[174,175,176,177,178,179,180,181,38,182,183,184,185,186,27,26,187,23,188],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":193,"sourceHtmlUrl":194,"categories":195,"keywords":197,"publishedAt":42},"01M6FDM8Y7VK7NYG9SM7QPA3PW","notebooklm","Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FSKILL.md",[196],{"categoryNo":171,"categoryName":172,"taxonomyType":86,"taxonomyTypeDesc":87},[191,198,199,200,201,202,203,132,204,205,35,206,207,208,209,26,210],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":212,"name":213,"nameZh":6,"description":214,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":79,"licenseFileUrl":215,"sourceHtmlUrl":216,"categories":217,"keywords":224,"publishedAt":42},"01M6FDHPXE10J3XGTCH5HBHS1M","slack-gif-creator","Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\"","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FSKILL.md",[218,221],{"categoryNo":219,"categoryName":220,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":222,"categoryName":223,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000016","图像与多媒体",[225,226,227,175,228,105,229,230,180,35,231,186,232,233,234,26,235,23],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]