[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F8BYSH47F4E65D6YFA41XM":3,"skill-same:01M6F8BYSH47F4E65D6YFA41XM":82},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":64,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6F8BYSH47F4E65D6YFA41XM","clay-data-handling",null,"Implement GDPR\u002FCCPA-compliant data handling for Clay enrichment pipelines.\nUse when handling PII from enrichments, implementing data retention policies,\nor ensuring regulatory compliance for Clay-enriched lead data.\nTrigger with phrases like \"clay data\", \"clay PII\", \"clay GDPR\",\n\"clay data retention\", \"clay privacy\", \"clay CCPA\", \"clay compliance\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclay-data-handling\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"clay","data","clay data handling","read","with","retention","trigger","io","use","edit","write","openclaw","pii","saas","enrichment","gdpr","ccpa","code","implement","codex","2026-11-10 10:12:30",false,"---\nname: clay-data-handling\ndescription: |\n  Implement GDPR\u002FCCPA-compliant data handling for Clay enrichment pipelines.\n  Use when handling PII from enrichments, implementing data retention policies,\n  or ensuring regulatory compliance for Clay-enriched lead data.\n  Trigger with phrases like \"clay data\", \"clay PII\", \"clay GDPR\",\n  \"clay data retention\", \"clay privacy\", \"clay CCPA\", \"clay compliance\".\nallowed-tools: Read, Write, Edit, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, clay, compliance]\n\n---\n# Clay Data Handling\n\n## Overview\n\nManage lead data through Clay enrichment pipelines in compliance with GDPR, CCPA, and data privacy best practices. Clay enriches records with PII (emails, phone numbers, LinkedIn profiles, job titles), requiring careful handling of consent, retention, and export controls.\n\n## Prerequisites\n\n- Clay account with enriched tables\n- Understanding of GDPR\u002FCCPA requirements for B2B data\n- Data retention policy defined by your legal team\n- CRM or database for enriched data storage\n\n## Instructions\n\n### Step 1: Classify Enriched Data by Sensitivity\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-classification.ts\nenum DataSensitivity {\n  PUBLIC = 'public',       \u002F\u002F Company name, industry, employee count\n  BUSINESS = 'business',   \u002F\u002F Work email, job title, LinkedIn URL\n  PERSONAL = 'personal',   \u002F\u002F Phone number, personal email\n  RESTRICTED = 'restricted' \u002F\u002F Home address, personal phone\n}\n\nconst FIELD_CLASSIFICATION: Record\u003Cstring, DataSensitivity> = {\n  company_name: DataSensitivity.PUBLIC,\n  industry: DataSensitivity.PUBLIC,\n  employee_count: DataSensitivity.PUBLIC,\n  domain: DataSensitivity.PUBLIC,\n  work_email: DataSensitivity.BUSINESS,\n  job_title: DataSensitivity.BUSINESS,\n  linkedin_url: DataSensitivity.BUSINESS,\n  first_name: DataSensitivity.BUSINESS,\n  last_name: DataSensitivity.BUSINESS,\n  phone_number: DataSensitivity.PERSONAL,\n  personal_email: DataSensitivity.RESTRICTED,\n  home_address: DataSensitivity.RESTRICTED,\n};\n\nfunction classifyRow(row: Record\u003Cstring, unknown>): Record\u003CDataSensitivity, string[]> {\n  const classified: Record\u003CDataSensitivity, string[]> = {\n    public: [], business: [], personal: [], restricted: [],\n  };\n  for (const [field, value] of Object.entries(row)) {\n    if (value == null) continue;\n    const sensitivity = FIELD_CLASSIFICATION[field] || DataSensitivity.BUSINESS;\n    classified[sensitivity].push(field);\n  }\n  return classified;\n}\n```\n\n### Step 2: Validate Input Data Before Enrichment\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-validation.ts\nimport { z } from 'zod';\n\nconst ClayInputSchema = z.object({\n  domain: z.string().min(3).refine(d => d.includes('.'), 'Invalid domain'),\n  first_name: z.string().min(1).max(100),\n  last_name: z.string().min(1).max(100),\n  email: z.string().email().optional(),\n  source: z.string().optional(),\n  consent_basis: z.enum(['legitimate_interest', 'consent', 'contract']).optional(),\n});\n\nfunction validateForEnrichment(rows: unknown[]): {\n  valid: z.infer\u003Ctypeof ClayInputSchema>[];\n  invalid: { row: unknown; errors: string[] }[];\n} {\n  const valid: z.infer\u003Ctypeof ClayInputSchema>[] = [];\n  const invalid: { row: unknown; errors: string[] }[] = [];\n\n  for (const row of rows) {\n    const result = ClayInputSchema.safeParse(row);\n    if (result.success) {\n      valid.push(result.data);\n    } else {\n      invalid.push({\n        row,\n        errors: result.error.issues.map(i => `${i.path.join('.')}: ${i.message}`),\n      });\n    }\n  }\n\n  return { valid, invalid };\n}\n```\n\n### Step 3: Deduplicate Before Enrichment\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdedup.ts — prevent credit waste on duplicates\nfunction deduplicateLeads(\n  rows: Record\u003Cstring, unknown>[],\n  keyFields: string[] = ['domain', 'first_name', 'last_name'],\n): { unique: Record\u003Cstring, unknown>[]; duplicates: number } {\n  const seen = new Set\u003Cstring>();\n  const unique: Record\u003Cstring, unknown>[] = [];\n  let duplicates = 0;\n\n  for (const row of rows) {\n    const key = keyFields\n      .map(f => String(row[f] || '').toLowerCase().trim())\n      .join(':');\n\n    if (seen.has(key)) {\n      duplicates++;\n      continue;\n    }\n    seen.add(key);\n    unique.push(row);\n  }\n\n  return { unique, duplicates };\n}\n```\n\n### Step 4: Add Retention Metadata to Enriched Data\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fretention.ts\ninterface EnrichedRecordWithRetention {\n  \u002F\u002F Original enriched data\n  [key: string]: unknown;\n  \u002F\u002F Retention metadata\n  _enriched_at: string;       \u002F\u002F ISO timestamp\n  _retention_expires: string; \u002F\u002F ISO timestamp\n  _enrichment_source: string; \u002F\u002F 'clay'\n  _consent_basis: string;     \u002F\u002F Legal basis for processing\n  _data_subject_rights: string; \u002F\u002F How to handle deletion requests\n}\n\nfunction addRetentionMetadata(\n  enrichedRow: Record\u003Cstring, unknown>,\n  retentionDays: number = 365,\n  consentBasis: string = 'legitimate_interest',\n): EnrichedRecordWithRetention {\n  const now = new Date();\n  const expires = new Date(now.getTime() + retentionDays * 24 * 60 * 60 * 1000);\n\n  return {\n    ...enrichedRow,\n    _enriched_at: now.toISOString(),\n    _retention_expires: expires.toISOString(),\n    _enrichment_source: 'clay',\n    _consent_basis: consentBasis,\n    _data_subject_rights: 'Contact privacy@yourcompany.com for deletion\u002Faccess requests',\n  };\n}\n```\n\n### Step 5: GDPR-Compliant Export\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fexport.ts\n\u002F** Strip PII for analytics\u002Freporting exports *\u002F\nfunction anonymizeForAnalytics(row: Record\u003Cstring, unknown>): Record\u003Cstring, unknown> {\n  const anonymized = { ...row };\n  \u002F\u002F Hash identifiers instead of including plaintext\n  if (anonymized.work_email) {\n    anonymized.email_hash = crypto.createHash('sha256')\n      .update(String(anonymized.work_email).toLowerCase())\n      .digest('hex');\n    delete anonymized.work_email;\n  }\n  \u002F\u002F Remove all personal identifiers\n  delete anonymized.first_name;\n  delete anonymized.last_name;\n  delete anonymized.phone_number;\n  delete anonymized.linkedin_url;\n  delete anonymized.personal_email;\n\n  return anonymized;\n}\n\n\u002F** Full export for CRM push (with consent tracking) *\u002F\nfunction exportForCRM(row: Record\u003Cstring, unknown>): Record\u003Cstring, unknown> {\n  return {\n    ...row,\n    processing_consent: row._consent_basis || 'legitimate_interest',\n    enrichment_date: row._enriched_at,\n    data_source: 'clay_enrichment',\n  };\n}\n```\n\n### Step 6: Data Subject Rights Implementation\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-rights.ts — handle GDPR deletion\u002Faccess requests\nasync function handleDeletionRequest(email: string): Promise\u003C{\n  tablesAffected: string[];\n  recordsDeleted: number;\n}> {\n  \u002F\u002F In Clay: manually delete rows containing this email\n  \u002F\u002F In your database: automated deletion\n  console.log(`Processing deletion request for ${email}`);\n\n  \u002F\u002F 1. Find all records\n  const records = await db.query('SELECT * FROM enriched_leads WHERE email = ?', [email]);\n\n  \u002F\u002F 2. Delete from database\n  await db.query('DELETE FROM enriched_leads WHERE email = ?', [email]);\n\n  \u002F\u002F 3. Log for compliance audit\n  await db.query('INSERT INTO deletion_log (email_hash, deleted_at, record_count) VALUES (?, ?, ?)', [\n    crypto.createHash('sha256').update(email).digest('hex'),\n    new Date().toISOString(),\n    records.length,\n  ]);\n\n  \u002F\u002F 4. Note: Clay table rows must be deleted manually in Clay UI\n  return {\n    tablesAffected: ['enriched_leads'],\n    recordsDeleted: records.length,\n  };\n}\n```\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| High duplicate rate | Same list imported twice | Run dedup before sending to Clay |\n| Invalid emails in export | Bad source data | Validate with Zod before import |\n| Expired data in CRM | No retention cleanup | Schedule weekly expiration check |\n| Missing consent basis | No legal basis tracked | Add consent_basis to all records |\n| GDPR deletion incomplete | Data in multiple systems | Track all systems in data map |\n\n## Resources\n\n- [GDPR Official Text](https:\u002F\u002Fgdpr.eu\u002Fwhat-is-gdpr\u002F)\n- [CCPA Requirements](https:\u002F\u002Foag.ca.gov\u002Fprivacy\u002Fccpa)\n- [Clay Community](https:\u002F\u002Fcommunity.clay.com)\n\n## Next Steps\n\nFor access control, see `clay-enterprise-rbac`.\n\n","# Clay Data Handling\n\n## Overview\n\nManage lead data through Clay enrichment pipelines in compliance with GDPR, CCPA, and data privacy best practices. Clay enriches records with PII (emails, phone numbers, LinkedIn profiles, job titles), requiring careful handling of consent, retention, and export controls.\n\n## Prerequisites\n\n- Clay account with enriched tables\n- Understanding of GDPR\u002FCCPA requirements for B2B data\n- Data retention policy defined by your legal team\n- CRM or database for enriched data storage\n\n## Instructions\n\n### Step 1: Classify Enriched Data by Sensitivity\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-classification.ts\nenum DataSensitivity {\n  PUBLIC = 'public',       \u002F\u002F Company name, industry, employee count\n  BUSINESS = 'business',   \u002F\u002F Work email, job title, LinkedIn URL\n  PERSONAL = 'personal',   \u002F\u002F Phone number, personal email\n  RESTRICTED = 'restricted' \u002F\u002F Home address, personal phone\n}\n\nconst FIELD_CLASSIFICATION: Record\u003Cstring, DataSensitivity> = {\n  company_name: DataSensitivity.PUBLIC,\n  industry: DataSensitivity.PUBLIC,\n  employee_count: DataSensitivity.PUBLIC,\n  domain: DataSensitivity.PUBLIC,\n  work_email: DataSensitivity.BUSINESS,\n  job_title: DataSensitivity.BUSINESS,\n  linkedin_url: DataSensitivity.BUSINESS,\n  first_name: DataSensitivity.BUSINESS,\n  last_name: DataSensitivity.BUSINESS,\n  phone_number: DataSensitivity.PERSONAL,\n  personal_email: DataSensitivity.RESTRICTED,\n  home_address: DataSensitivity.RESTRICTED,\n};\n\nfunction classifyRow(row: Record\u003Cstring, unknown>): Record\u003CDataSensitivity, string[]> {\n  const classified: Record\u003CDataSensitivity, string[]> = {\n    public: [], business: [], personal: [], restricted: [],\n  };\n  for (const [field, value] of Object.entries(row)) {\n    if (value == null) continue;\n    const sensitivity = FIELD_CLASSIFICATION[field] || DataSensitivity.BUSINESS;\n    classified[sensitivity].push(field);\n  }\n  return classified;\n}\n```\n\n### Step 2: Validate Input Data Before Enrichment\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-validation.ts\nimport { z } from 'zod';\n\nconst ClayInputSchema = z.object({\n  domain: z.string().min(3).refine(d => d.includes('.'), 'Invalid domain'),\n  first_name: z.string().min(1).max(100),\n  last_name: z.string().min(1).max(100),\n  email: z.string().email().optional(),\n  source: z.string().optional(),\n  consent_basis: z.enum(['legitimate_interest', 'consent', 'contract']).optional(),\n});\n\nfunction validateForEnrichment(rows: unknown[]): {\n  valid: z.infer\u003Ctypeof ClayInputSchema>[];\n  invalid: { row: unknown; errors: string[] }[];\n} {\n  const valid: z.infer\u003Ctypeof ClayInputSchema>[] = [];\n  const invalid: { row: unknown; errors: string[] }[] = [];\n\n  for (const row of rows) {\n    const result = ClayInputSchema.safeParse(row);\n    if (result.success) {\n      valid.push(result.data);\n    } else {\n      invalid.push({\n        row,\n        errors: result.error.issues.map(i => `${i.path.join('.')}: ${i.message}`),\n      });\n    }\n  }\n\n  return { valid, invalid };\n}\n```\n\n### Step 3: Deduplicate Before Enrichment\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdedup.ts — prevent credit waste on duplicates\nfunction deduplicateLeads(\n  rows: Record\u003Cstring, unknown>[],\n  keyFields: string[] = ['domain', 'first_name', 'last_name'],\n): { unique: Record\u003Cstring, unknown>[]; duplicates: number } {\n  const seen = new Set\u003Cstring>();\n  const unique: Record\u003Cstring, unknown>[] = [];\n  let duplicates = 0;\n\n  for (const row of rows) {\n    const key = keyFields\n      .map(f => String(row[f] || '').toLowerCase().trim())\n      .join(':');\n\n    if (seen.has(key)) {\n      duplicates++;\n      continue;\n    }\n    seen.add(key);\n    unique.push(row);\n  }\n\n  return { unique, duplicates };\n}\n```\n\n### Step 4: Add Retention Metadata to Enriched Data\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fretention.ts\ninterface EnrichedRecordWithRetention {\n  \u002F\u002F Original enriched data\n  [key: string]: unknown;\n  \u002F\u002F Retention metadata\n  _enriched_at: string;       \u002F\u002F ISO timestamp\n  _retention_expires: string; \u002F\u002F ISO timestamp\n  _enrichment_source: string; \u002F\u002F 'clay'\n  _consent_basis: string;     \u002F\u002F Legal basis for processing\n  _data_subject_rights: string; \u002F\u002F How to handle deletion requests\n}\n\nfunction addRetentionMetadata(\n  enrichedRow: Record\u003Cstring, unknown>,\n  retentionDays: number = 365,\n  consentBasis: string = 'legitimate_interest',\n): EnrichedRecordWithRetention {\n  const now = new Date();\n  const expires = new Date(now.getTime() + retentionDays * 24 * 60 * 60 * 1000);\n\n  return {\n    ...enrichedRow,\n    _enriched_at: now.toISOString(),\n    _retention_expires: expires.toISOString(),\n    _enrichment_source: 'clay',\n    _consent_basis: consentBasis,\n    _data_subject_rights: 'Contact privacy@yourcompany.com for deletion\u002Faccess requests',\n  };\n}\n```\n\n### Step 5: GDPR-Compliant Export\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fexport.ts\n\u002F** Strip PII for analytics\u002Freporting exports *\u002F\nfunction anonymizeForAnalytics(row: Record\u003Cstring, unknown>): Record\u003Cstring, unknown> {\n  const anonymized = { ...row };\n  \u002F\u002F Hash identifiers instead of including plaintext\n  if (anonymized.work_email) {\n    anonymized.email_hash = crypto.createHash('sha256')\n      .update(String(anonymized.work_email).toLowerCase())\n      .digest('hex');\n    delete anonymized.work_email;\n  }\n  \u002F\u002F Remove all personal identifiers\n  delete anonymized.first_name;\n  delete anonymized.last_name;\n  delete anonymized.phone_number;\n  delete anonymized.linkedin_url;\n  delete anonymized.personal_email;\n\n  return anonymized;\n}\n\n\u002F** Full export for CRM push (with consent tracking) *\u002F\nfunction exportForCRM(row: Record\u003Cstring, unknown>): Record\u003Cstring, unknown> {\n  return {\n    ...row,\n    processing_consent: row._consent_basis || 'legitimate_interest',\n    enrichment_date: row._enriched_at,\n    data_source: 'clay_enrichment',\n  };\n}\n```\n\n### Step 6: Data Subject Rights Implementation\n\n```typescript\n\u002F\u002F src\u002Fclay\u002Fdata-rights.ts — handle GDPR deletion\u002Faccess requests\nasync function handleDeletionRequest(email: string): Promise\u003C{\n  tablesAffected: string[];\n  recordsDeleted: number;\n}> {\n  \u002F\u002F In Clay: manually delete rows containing this email\n  \u002F\u002F In your database: automated deletion\n  console.log(`Processing deletion request for ${email}`);\n\n  \u002F\u002F 1. Find all records\n  const records = await db.query('SELECT * FROM enriched_leads WHERE email = ?', [email]);\n\n  \u002F\u002F 2. Delete from database\n  await db.query('DELETE FROM enriched_leads WHERE email = ?', [email]);\n\n  \u002F\u002F 3. Log for compliance audit\n  await db.query('INSERT INTO deletion_log (email_hash, deleted_at, record_count) VALUES (?, ?, ?)', [\n    crypto.createHash('sha256').update(email).digest('hex'),\n    new Date().toISOString(),\n    records.length,\n  ]);\n\n  \u002F\u002F 4. Note: Clay table rows must be deleted manually in Clay UI\n  return {\n    tablesAffected: ['enriched_leads'],\n    recordsDeleted: records.length,\n  };\n}\n```\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| High duplicate rate | Same list imported twice | Run dedup before sending to Clay |\n| Invalid emails in export | Bad source data | Validate with Zod before import |\n| Expired data in CRM | No retention cleanup | Schedule weekly expiration check |\n| Missing consent basis | No legal basis tracked | Add consent_basis to all records |\n| GDPR deletion incomplete | Data in multiple systems | Track all systems in data map |\n\n## Resources\n\n- [GDPR Official Text](https:\u002F\u002Fgdpr.eu\u002Fwhat-is-gdpr\u002F)\n- [CCPA Requirements](https:\u002F\u002Foag.ca.gov\u002Fprivacy\u002Fccpa)\n- [Clay Community](https:\u002F\u002Fcommunity.clay.com)\n\n## Next Steps\n\nFor access control, see `clay-enterprise-rbac`.\n\n",{"name":5,"tags":52,"author":54,"license":15,"version":55,"description":56,"allowed-tools":57,"compatible-with":58},[40,27,53],"compliance","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement GDPR\u002FCCPA-compliant data handling for Clay enrichment pipelines.\nUse when handling PII from enrichments, implementing data retention policies,\nor ensuring regulatory compliance for Clay-enriched lead data.\nTrigger with phrases like \"clay data\", \"clay PII\", \"clay GDPR\",\n\"clay data retention\", \"clay privacy\", \"clay CCPA\", \"clay compliance\".\n","Read, Write, Edit, Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclay-data-handling",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill clay-data-handling",{"tool":74,"command":75},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill clay-data-handling",{"tool":77,"command":78},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill clay-data-handling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclay-data-handling\u002FSKILL.md",true,[],[83,97,107,116,122,129],{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":93,"publishedAt":47},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[94,95,96],"model","model hierarchy","model hierarchy skill",{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":103,"publishedAt":47},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[102],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[104,105,106],"MCP","zoom","zoom mcp",{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":47},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[113,114,115,105],"sdk","zoom apps sdk","apps",{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":47},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[118],{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":47},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[127],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[124],{"skillNo":130,"name":131,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":47},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[131]]