[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K6C6RSGZX5VQ8ZFYCPF3M6":3,"skill-same:01M6K6C6RSGZX5VQ8ZFYCPF3M6":60},{"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":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M6K6C6RSGZX5VQ8ZFYCPF3M6","commit",null,"Create a git commit with a summary of changes","Windy3f3f3f3f\u002Fclaude-code-from-scratch","Windy3f3f3f3f","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F101924422?v=4","01M6K6A7WF1MGJSVH56PAG50NH","Di Wang","01M6K6A813C44VWKE2DM5GEY4Q",2832,"MIT","https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch\u002Fblob\u002Fmain\u002Ftest\u002Fskills\u002Fcommit\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26],"git commit","create","git","summary","with","true","inline","changes","2026-11-10 10:12:30",false,"---\nname: clay-enterprise-rbac\ndescription: |\n  Configure Clay enterprise SSO, role-based access control, and organization management.\n  Use when implementing SSO integration, configuring role-based permissions,\n  or setting up organization-level controls for Clay.\n  Trigger with phrases like \"clay SSO\", \"clay RBAC\",\n  \"clay enterprise\", \"clay roles\", \"clay permissions\", \"clay SAML\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Clay Enterprise RBAC\n\n## Overview\nConfigure enterprise-grade access control for Clay integrations.\n\n## Prerequisites\n- Clay Enterprise tier subscription\n- Identity Provider (IdP) with SAML\u002FOIDC support\n- Understanding of role-based access patterns\n- Audit logging infrastructure\n\n## Role Definitions\n\n| Role | Permissions | Use Case |\n|------|-------------|----------|\n| Admin | Full access | Platform administrators |\n| Developer | Read\u002Fwrite, no delete | Active development |\n| Viewer | Read-only | Stakeholders, auditors |\n| Service | API access only | Automated systems |\n\n## Role Implementation\n\n```typescript\nenum ClayRole {\n  Admin = 'admin',\n  Developer = 'developer',\n  Viewer = 'viewer',\n  Service = 'service',\n}\n\ninterface ClayPermissions {\n  read: boolean;\n  write: boolean;\n  delete: boolean;\n  admin: boolean;\n}\n\nconst ROLE_PERMISSIONS: Record\u003CClayRole, ClayPermissions> = {\n  admin: { read: true, write: true, delete: true, admin: true },\n  developer: { read: true, write: true, delete: false, admin: false },\n  viewer: { read: true, write: false, delete: false, admin: false },\n  service: { read: true, write: true, delete: false, admin: false },\n};\n\nfunction checkPermission(\n  role: ClayRole,\n  action: keyof ClayPermissions\n): boolean {\n  return ROLE_PERMISSIONS[role][action];\n}\n```\n\n## SSO Integration\n\n### SAML Configuration\n\n```typescript\n\u002F\u002F Clay SAML setup\nconst samlConfig = {\n  entryPoint: 'https:\u002F\u002Fidp.company.com\u002Fsaml\u002Fsso',\n  issuer: 'https:\u002F\u002Fclay.com\u002Fsaml\u002Fmetadata',\n  cert: process.env.SAML_CERT,\n  callbackUrl: 'https:\u002F\u002Fapp.yourcompany.com\u002Fauth\u002Fclay\u002Fcallback',\n};\n\n\u002F\u002F Map IdP groups to Clay roles\nconst groupRoleMapping: Record\u003Cstring, ClayRole> = {\n  'Engineering': ClayRole.Developer,\n  'Platform-Admins': ClayRole.Admin,\n  'Data-Team': ClayRole.Viewer,\n};\n```\n\n### OAuth2\u002FOIDC Integration\n\n```typescript\nimport { OAuth2Client } from '@clay\u002Fsdk';\n\nconst oauthClient = new OAuth2Client({\n  clientId: process.env.CLAY_OAUTH_CLIENT_ID!,\n  clientSecret: process.env.CLAY_OAUTH_CLIENT_SECRET!,\n  redirectUri: 'https:\u002F\u002Fapp.yourcompany.com\u002Fauth\u002Fclay\u002Fcallback',\n  scopes: ['read', 'write'],\n});\n```\n\n## Organization Management\n\n```typescript\ninterface ClayOrganization {\n  id: string;\n  name: string;\n  ssoEnabled: boolean;\n  enforceSso: boolean;\n  allowedDomains: string[];\n  defaultRole: ClayRole;\n}\n\nasync function createOrganization(\n  config: ClayOrganization\n): Promise\u003Cvoid> {\n  await clayClient.organizations.create({\n    ...config,\n    settings: {\n      sso: {\n        enabled: config.ssoEnabled,\n        enforced: config.enforceSso,\n        domains: config.allowedDomains,\n      },\n    },\n  });\n}\n```\n\n## Access Control Middleware\n\n```typescript\nfunction requireClayPermission(\n  requiredPermission: keyof ClayPermissions\n) {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    const user = req.user as { clayRole: ClayRole };\n\n    if (!checkPermission(user.clayRole, requiredPermission)) {\n      return res.status(403).json({\n        error: 'Forbidden',\n        message: `Missing permission: ${requiredPermission}`,\n      });\n    }\n\n    next();\n  };\n}\n\n\u002F\u002F Usage\napp.delete('\u002Fclay\u002Fresource\u002F:id',\n  requireClayPermission('delete'),\n  deleteResourceHandler\n);\n```\n\n## Audit Trail\n\n```typescript\ninterface ClayAuditEntry {\n  timestamp: Date;\n  userId: string;\n  role: ClayRole;\n  action: string;\n  resource: string;\n  success: boolean;\n  ipAddress: string;\n}\n\nasync function logClayAccess(entry: ClayAuditEntry): Promise\u003Cvoid> {\n  await auditDb.insert(entry);\n\n  \u002F\u002F Alert on suspicious activity\n  if (entry.action === 'delete' && !entry.success) {\n    await alertOnSuspiciousActivity(entry);\n  }\n}\n```\n\n## Instructions\n\n### Step 1: Define Roles\nMap organizational roles to Clay permissions.\n\n### Step 2: Configure SSO\nSet up SAML or OIDC integration with your IdP.\n\n### Step 3: Implement Middleware\nAdd permission checks to API endpoints.\n\n### Step 4: Enable Audit Logging\nTrack all access for compliance.\n\n## Output\n- Role definitions implemented\n- SSO integration configured\n- Permission middleware active\n- Audit trail enabled\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| SSO login fails | Wrong callback URL | Verify IdP config |\n| Permission denied | Missing role mapping | Update group mappings |\n| Token expired | Short TTL | Refresh token logic |\n| Audit gaps | Async logging failed | Check log pipeline |\n\n## Examples\n\n### Quick Permission Check\n```typescript\nif (!checkPermission(user.role, 'write')) {\n  throw new ForbiddenError('Write permission required');\n}\n```\n\n## Resources\n- [Clay Enterprise Guide](https:\u002F\u002Fdocs.clay.com\u002Fenterprise)\n- [SAML 2.0 Specification](https:\u002F\u002Fwiki.oasis-open.org\u002Fsecurity\u002FFrontPage)\n- [OpenID Connect Spec](https:\u002F\u002Fopenid.net\u002Fspecs\u002Fopenid-connect-core-1_0.html)\n\n## Next Steps\nFor major migrations, see `clay-migration-deep-dive`.","# Clay Enterprise RBAC\n\n## Overview\nConfigure enterprise-grade access control for Clay integrations.\n\n## Prerequisites\n- Clay Enterprise tier subscription\n- Identity Provider (IdP) with SAML\u002FOIDC support\n- Understanding of role-based access patterns\n- Audit logging infrastructure\n\n## Role Definitions\n\n| Role | Permissions | Use Case |\n|------|-------------|----------|\n| Admin | Full access | Platform administrators |\n| Developer | Read\u002Fwrite, no delete | Active development |\n| Viewer | Read-only | Stakeholders, auditors |\n| Service | API access only | Automated systems |\n\n## Role Implementation\n\n```typescript\nenum ClayRole {\n  Admin = 'admin',\n  Developer = 'developer',\n  Viewer = 'viewer',\n  Service = 'service',\n}\n\ninterface ClayPermissions {\n  read: boolean;\n  write: boolean;\n  delete: boolean;\n  admin: boolean;\n}\n\nconst ROLE_PERMISSIONS: Record\u003CClayRole, ClayPermissions> = {\n  admin: { read: true, write: true, delete: true, admin: true },\n  developer: { read: true, write: true, delete: false, admin: false },\n  viewer: { read: true, write: false, delete: false, admin: false },\n  service: { read: true, write: true, delete: false, admin: false },\n};\n\nfunction checkPermission(\n  role: ClayRole,\n  action: keyof ClayPermissions\n): boolean {\n  return ROLE_PERMISSIONS[role][action];\n}\n```\n\n## SSO Integration\n\n### SAML Configuration\n\n```typescript\n\u002F\u002F Clay SAML setup\nconst samlConfig = {\n  entryPoint: 'https:\u002F\u002Fidp.company.com\u002Fsaml\u002Fsso',\n  issuer: 'https:\u002F\u002Fclay.com\u002Fsaml\u002Fmetadata',\n  cert: process.env.SAML_CERT,\n  callbackUrl: 'https:\u002F\u002Fapp.yourcompany.com\u002Fauth\u002Fclay\u002Fcallback',\n};\n\n\u002F\u002F Map IdP groups to Clay roles\nconst groupRoleMapping: Record\u003Cstring, ClayRole> = {\n  'Engineering': ClayRole.Developer,\n  'Platform-Admins': ClayRole.Admin,\n  'Data-Team': ClayRole.Viewer,\n};\n```\n\n### OAuth2\u002FOIDC Integration\n\n```typescript\nimport { OAuth2Client } from '@clay\u002Fsdk';\n\nconst oauthClient = new OAuth2Client({\n  clientId: process.env.CLAY_OAUTH_CLIENT_ID!,\n  clientSecret: process.env.CLAY_OAUTH_CLIENT_SECRET!,\n  redirectUri: 'https:\u002F\u002Fapp.yourcompany.com\u002Fauth\u002Fclay\u002Fcallback',\n  scopes: ['read', 'write'],\n});\n```\n\n## Organization Management\n\n```typescript\ninterface ClayOrganization {\n  id: string;\n  name: string;\n  ssoEnabled: boolean;\n  enforceSso: boolean;\n  allowedDomains: string[];\n  defaultRole: ClayRole;\n}\n\nasync function createOrganization(\n  config: ClayOrganization\n): Promise\u003Cvoid> {\n  await clayClient.organizations.create({\n    ...config,\n    settings: {\n      sso: {\n        enabled: config.ssoEnabled,\n        enforced: config.enforceSso,\n        domains: config.allowedDomains,\n      },\n    },\n  });\n}\n```\n\n## Access Control Middleware\n\n```typescript\nfunction requireClayPermission(\n  requiredPermission: keyof ClayPermissions\n) {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    const user = req.user as { clayRole: ClayRole };\n\n    if (!checkPermission(user.clayRole, requiredPermission)) {\n      return res.status(403).json({\n        error: 'Forbidden',\n        message: `Missing permission: ${requiredPermission}`,\n      });\n    }\n\n    next();\n  };\n}\n\n\u002F\u002F Usage\napp.delete('\u002Fclay\u002Fresource\u002F:id',\n  requireClayPermission('delete'),\n  deleteResourceHandler\n);\n```\n\n## Audit Trail\n\n```typescript\ninterface ClayAuditEntry {\n  timestamp: Date;\n  userId: string;\n  role: ClayRole;\n  action: string;\n  resource: string;\n  success: boolean;\n  ipAddress: string;\n}\n\nasync function logClayAccess(entry: ClayAuditEntry): Promise\u003Cvoid> {\n  await auditDb.insert(entry);\n\n  \u002F\u002F Alert on suspicious activity\n  if (entry.action === 'delete' && !entry.success) {\n    await alertOnSuspiciousActivity(entry);\n  }\n}\n```\n\n## Instructions\n\n### Step 1: Define Roles\nMap organizational roles to Clay permissions.\n\n### Step 2: Configure SSO\nSet up SAML or OIDC integration with your IdP.\n\n### Step 3: Implement Middleware\nAdd permission checks to API endpoints.\n\n### Step 4: Enable Audit Logging\nTrack all access for compliance.\n\n## Output\n- Role definitions implemented\n- SSO integration configured\n- Permission middleware active\n- Audit trail enabled\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| SSO login fails | Wrong callback URL | Verify IdP config |\n| Permission denied | Missing role mapping | Update group mappings |\n| Token expired | Short TTL | Refresh token logic |\n| Audit gaps | Async logging failed | Check log pipeline |\n\n## Examples\n\n### Quick Permission Check\n```typescript\nif (!checkPermission(user.role, 'write')) {\n  throw new ForbiddenError('Write permission required');\n}\n```\n\n## Resources\n- [Clay Enterprise Guide](https:\u002F\u002Fdocs.clay.com\u002Fenterprise)\n- [SAML 2.0 Specification](https:\u002F\u002Fwiki.oasis-open.org\u002Fsecurity\u002FFrontPage)\n- [OpenID Connect Spec](https:\u002F\u002Fopenid.net\u002Fspecs\u002Fopenid-connect-core-1_0.html)\n\n## Next Steps\nFor major migrations, see `clay-migration-deep-dive`.",{"name":32,"author":33,"license":15,"version":34,"description":35,"allowed-tools":36},"clay-enterprise-rbac","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure Clay enterprise SSO, role-based access control, and organization management.\nUse when implementing SSO integration, configuring role-based permissions,\nor setting up organization-level controls for Clay.\nTrigger with phrases like \"clay SSO\", \"clay RBAC\",\n\"clay enterprise\", \"clay roles\", \"clay permissions\", \"clay SAML\".\n","Read, Write, Edit","main","7439377908fdee98c9bb5863391212b95453de95","test\u002Fskills\u002Fcommit",560,"https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch","https:\u002F\u002Fwindy3f3f3f3f.github.io\u002Fclaude-code-from-scratch\u002F#\u002F","https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f","I'm Windy","2026-11-09 13:43:12",{"source":8,"skillName":32,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add Windy3f3f3f3f\u002Fclaude-code-from-scratch --skill clay-enterprise-rbac",{"tool":52,"command":53},"bunx","bunx skills add Windy3f3f3f3f\u002Fclaude-code-from-scratch --skill clay-enterprise-rbac",{"tool":55,"command":56},"pnpm","pnpm dlx skills add Windy3f3f3f3f\u002Fclaude-code-from-scratch --skill clay-enterprise-rbac","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch\u002Fblob\u002Fmain\u002Ftest\u002Fskills\u002Fcommit\u002FSKILL.md",true,[],[61,73,78],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":27},"01M6K6CPX5ND7ZE0VYREZ3121E","greet","Generate a creative greeting for the user","https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch\u002Fblob\u002Fmain\u002Ftest\u002Fskills\u002Fgreet\u002FSKILL.md",[],[63,25,68,24,69,70,71,72],"for","greeting","creative","user","generate",{"skillNo":74,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":27},"01M6K6BP8QE0Q57ZNWPR1X7VY3","https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgreet\u002FSKILL.md",[],[63,70,25,68,24,69,71,72],{"skillNo":79,"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":80,"categories":81,"keywords":82,"publishedAt":27},"01M6K6BFV808FDC5FBQE5PDYBM","https:\u002F\u002Fgithub.com\u002FWindy3f3f3f3f\u002Fclaude-code-from-scratch\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcommit\u002FSKILL.md",[],[5,26,25,24,23,22,21,20,19]]