[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F65BNEYHWMNXD7P820VAYQ":3,"skill-same:01M6F65BNEYHWMNXD7P820VAYQ":75},{"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":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":58,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M6F65BNEYHWMNXD7P820VAYQ","customerio-sdk-patterns",null,"Apply production-ready Customer.io SDK patterns.\nUse when implementing best practices, refactoring integrations,\nor optimizing Customer.io usage in your application.\nTrigger with phrases like \"customer.io best practices\", \"customer.io patterns\",\n\"production customer.io\", \"customer.io architecture\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1986,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fcustomerio-pack\u002Fskills\u002Fcustomerio-sdk-patterns\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,42],"customerio sdk patterns","patterns","sdk","edit","when","implementing","production-ready","usage","with","trigger","io","ready","use","write","read","grep","integrations","refactoring","Bash","Production","npm","best practices","architecture","customer","2026-11-10 10:12:30",false,"---\nname: customerio-sdk-patterns\ndescription: |\n  Apply production-ready Customer.io SDK patterns.\n  Use when implementing best practices, refactoring integrations,\n  or optimizing Customer.io usage in your application.\n  Trigger with phrases like \"customer.io best practices\", \"customer.io patterns\",\n  \"production customer.io\", \"customer.io architecture\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Customer.io SDK Patterns\n\n## Overview\nProduction-ready patterns for Customer.io SDK usage including error handling, batching, and type safety.\n\n## Prerequisites\n- Customer.io SDK installed\n- TypeScript project (recommended)\n- Understanding of async\u002Fawait patterns\n\n## Instructions\n\n### Pattern 1: Type-Safe Client\n```typescript\n\u002F\u002F types\u002Fcustomerio.ts\nexport interface UserAttributes {\n  email: string;\n  first_name?: string;\n  last_name?: string;\n  created_at?: number;\n  plan?: 'free' | 'pro' | 'enterprise';\n  [key: string]: string | number | boolean | undefined;\n}\n\nexport interface EventData {\n  [key: string]: string | number | boolean | object;\n}\n\nexport type EventName =\n  | 'signed_up'\n  | 'subscription_started'\n  | 'subscription_cancelled'\n  | 'feature_used'\n  | 'email_verified';\n\n\u002F\u002F lib\u002Fcustomerio-client.ts\nimport { TrackClient, RegionUS } from '@customerio\u002Ftrack';\nimport type { UserAttributes, EventData, EventName } from '..\u002Ftypes\u002Fcustomerio';\n\nexport class TypedCustomerIO {\n  private client: TrackClient;\n\n  constructor() {\n    this.client = new TrackClient(\n      process.env.CUSTOMERIO_SITE_ID!,\n      process.env.CUSTOMERIO_API_KEY!,\n      { region: RegionUS }\n    );\n  }\n\n  async identify(userId: string, attributes: UserAttributes): Promise\u003Cvoid> {\n    await this.client.identify(userId, {\n      ...attributes,\n      _updated_at: Math.floor(Date.now() \u002F 1000)\n    });\n  }\n\n  async track(userId: string, event: EventName, data?: EventData): Promise\u003Cvoid> {\n    await this.client.track(userId, { name: event, data });\n  }\n}\n```\n\n### Pattern 2: Retry with Exponential Backoff\n```typescript\n\u002F\u002F lib\u002Fcustomerio-resilient.ts\nimport { TrackClient } from '@customerio\u002Ftrack';\n\ninterface RetryConfig {\n  maxRetries: number;\n  baseDelay: number;\n  maxDelay: number;\n}\n\nconst defaultRetryConfig: RetryConfig = {\n  maxRetries: 3,\n  baseDelay: 1000,\n  maxDelay: 10000\n};\n\nasync function withRetry\u003CT>(\n  operation: () => Promise\u003CT>,\n  config: RetryConfig = defaultRetryConfig\n): Promise\u003CT> {\n  let lastError: Error | undefined;\n\n  for (let attempt = 0; attempt \u003C= config.maxRetries; attempt++) {\n    try {\n      return await operation();\n    } catch (error) {\n      lastError = error as Error;\n\n      if (attempt === config.maxRetries) break;\n\n      \u002F\u002F Don't retry on 4xx errors (client errors)\n      if (error instanceof Error && error.message.includes('4')) {\n        throw error;\n      }\n\n      const delay = Math.min(\n        config.baseDelay * Math.pow(2, attempt),\n        config.maxDelay\n      );\n      await new Promise(resolve => setTimeout(resolve, delay));\n    }\n  }\n\n  throw lastError;\n}\n\nexport class ResilientCustomerIO {\n  private client: TrackClient;\n\n  constructor(siteId: string, apiKey: string) {\n    this.client = new TrackClient(siteId, apiKey, { region: RegionUS });\n  }\n\n  async identify(userId: string, attributes: Record\u003Cstring, any>) {\n    return withRetry(() => this.client.identify(userId, attributes));\n  }\n\n  async track(userId: string, event: string, data?: Record\u003Cstring, any>) {\n    return withRetry(() => this.client.track(userId, { name: event, data }));\n  }\n}\n```\n\n### Pattern 3: Event Queue with Batching\n```typescript\n\u002F\u002F lib\u002Fcustomerio-queue.ts\ninterface QueuedEvent {\n  userId: string;\n  event: string;\n  data?: Record\u003Cstring, any>;\n  timestamp: number;\n}\n\nexport class CustomerIOQueue {\n  private queue: QueuedEvent[] = [];\n  private flushInterval: NodeJS.Timer | null = null;\n  private maxBatchSize = 100;\n  private flushIntervalMs = 5000;\n\n  constructor(private client: TrackClient) {\n    this.startAutoFlush();\n  }\n\n  enqueue(userId: string, event: string, data?: Record\u003Cstring, any>) {\n    this.queue.push({\n      userId,\n      event,\n      data,\n      timestamp: Date.now()\n    });\n\n    if (this.queue.length >= this.maxBatchSize) {\n      this.flush();\n    }\n  }\n\n  async flush(): Promise\u003Cvoid> {\n    if (this.queue.length === 0) return;\n\n    const batch = this.queue.splice(0, this.maxBatchSize);\n\n    await Promise.allSettled(\n      batch.map(item =>\n        this.client.track(item.userId, {\n          name: item.event,\n          data: { ...item.data, _queued_at: item.timestamp }\n        })\n      )\n    );\n  }\n\n  private startAutoFlush() {\n    this.flushInterval = setInterval(() => this.flush(), this.flushIntervalMs);\n  }\n\n  async shutdown(): Promise\u003Cvoid> {\n    if (this.flushInterval) {\n      clearInterval(this.flushInterval);\n    }\n    await this.flush();\n  }\n}\n```\n\n### Pattern 4: Singleton with Lazy Initialization\n```typescript\n\u002F\u002F lib\u002Fcustomerio-singleton.ts\nimport { TrackClient, RegionUS } from '@customerio\u002Ftrack';\n\nlet instance: TrackClient | null = null;\n\nexport function getCustomerIO(): TrackClient {\n  if (!instance) {\n    if (!process.env.CUSTOMERIO_SITE_ID || !process.env.CUSTOMERIO_API_KEY) {\n      throw new Error('Customer.io credentials not configured');\n    }\n    instance = new TrackClient(\n      process.env.CUSTOMERIO_SITE_ID,\n      process.env.CUSTOMERIO_API_KEY,\n      { region: RegionUS }\n    );\n  }\n  return instance;\n}\n\n\u002F\u002F Usage\nimport { getCustomerIO } from '.\u002Flib\u002Fcustomerio-singleton';\nawait getCustomerIO().identify('user-123', { email: 'user@example.com' });\n```\n\n## Output\n- Type-safe Customer.io client\n- Resilient error handling with retries\n- Event batching for high-volume scenarios\n- Singleton pattern for resource efficiency\n\n## Error Handling\n| Error | Cause | Solution |\n|-------|-------|----------|\n| Type mismatch | Invalid attribute type | Use TypeScript interfaces |\n| Queue overflow | Too many events | Increase flush frequency or batch size |\n| Retry exhausted | Persistent failure | Check network and credentials |\n\n## Resources\n- [Customer.io SDK GitHub](https:\u002F\u002Fgithub.com\u002Fcustomerio\u002Fcustomerio-node)\n- [API Rate Limits](https:\u002F\u002Fcustomer.io\u002Fdocs\u002Fapi\u002Ftrack\u002F#section\u002FLimits)\n\n## Next Steps\nAfter implementing patterns, proceed to `customerio-primary-workflow` to implement messaging workflows.\n","# Customer.io SDK Patterns\n\n## Overview\nProduction-ready patterns for Customer.io SDK usage including error handling, batching, and type safety.\n\n## Prerequisites\n- Customer.io SDK installed\n- TypeScript project (recommended)\n- Understanding of async\u002Fawait patterns\n\n## Instructions\n\n### Pattern 1: Type-Safe Client\n```typescript\n\u002F\u002F types\u002Fcustomerio.ts\nexport interface UserAttributes {\n  email: string;\n  first_name?: string;\n  last_name?: string;\n  created_at?: number;\n  plan?: 'free' | 'pro' | 'enterprise';\n  [key: string]: string | number | boolean | undefined;\n}\n\nexport interface EventData {\n  [key: string]: string | number | boolean | object;\n}\n\nexport type EventName =\n  | 'signed_up'\n  | 'subscription_started'\n  | 'subscription_cancelled'\n  | 'feature_used'\n  | 'email_verified';\n\n\u002F\u002F lib\u002Fcustomerio-client.ts\nimport { TrackClient, RegionUS } from '@customerio\u002Ftrack';\nimport type { UserAttributes, EventData, EventName } from '..\u002Ftypes\u002Fcustomerio';\n\nexport class TypedCustomerIO {\n  private client: TrackClient;\n\n  constructor() {\n    this.client = new TrackClient(\n      process.env.CUSTOMERIO_SITE_ID!,\n      process.env.CUSTOMERIO_API_KEY!,\n      { region: RegionUS }\n    );\n  }\n\n  async identify(userId: string, attributes: UserAttributes): Promise\u003Cvoid> {\n    await this.client.identify(userId, {\n      ...attributes,\n      _updated_at: Math.floor(Date.now() \u002F 1000)\n    });\n  }\n\n  async track(userId: string, event: EventName, data?: EventData): Promise\u003Cvoid> {\n    await this.client.track(userId, { name: event, data });\n  }\n}\n```\n\n### Pattern 2: Retry with Exponential Backoff\n```typescript\n\u002F\u002F lib\u002Fcustomerio-resilient.ts\nimport { TrackClient } from '@customerio\u002Ftrack';\n\ninterface RetryConfig {\n  maxRetries: number;\n  baseDelay: number;\n  maxDelay: number;\n}\n\nconst defaultRetryConfig: RetryConfig = {\n  maxRetries: 3,\n  baseDelay: 1000,\n  maxDelay: 10000\n};\n\nasync function withRetry\u003CT>(\n  operation: () => Promise\u003CT>,\n  config: RetryConfig = defaultRetryConfig\n): Promise\u003CT> {\n  let lastError: Error | undefined;\n\n  for (let attempt = 0; attempt \u003C= config.maxRetries; attempt++) {\n    try {\n      return await operation();\n    } catch (error) {\n      lastError = error as Error;\n\n      if (attempt === config.maxRetries) break;\n\n      \u002F\u002F Don't retry on 4xx errors (client errors)\n      if (error instanceof Error && error.message.includes('4')) {\n        throw error;\n      }\n\n      const delay = Math.min(\n        config.baseDelay * Math.pow(2, attempt),\n        config.maxDelay\n      );\n      await new Promise(resolve => setTimeout(resolve, delay));\n    }\n  }\n\n  throw lastError;\n}\n\nexport class ResilientCustomerIO {\n  private client: TrackClient;\n\n  constructor(siteId: string, apiKey: string) {\n    this.client = new TrackClient(siteId, apiKey, { region: RegionUS });\n  }\n\n  async identify(userId: string, attributes: Record\u003Cstring, any>) {\n    return withRetry(() => this.client.identify(userId, attributes));\n  }\n\n  async track(userId: string, event: string, data?: Record\u003Cstring, any>) {\n    return withRetry(() => this.client.track(userId, { name: event, data }));\n  }\n}\n```\n\n### Pattern 3: Event Queue with Batching\n```typescript\n\u002F\u002F lib\u002Fcustomerio-queue.ts\ninterface QueuedEvent {\n  userId: string;\n  event: string;\n  data?: Record\u003Cstring, any>;\n  timestamp: number;\n}\n\nexport class CustomerIOQueue {\n  private queue: QueuedEvent[] = [];\n  private flushInterval: NodeJS.Timer | null = null;\n  private maxBatchSize = 100;\n  private flushIntervalMs = 5000;\n\n  constructor(private client: TrackClient) {\n    this.startAutoFlush();\n  }\n\n  enqueue(userId: string, event: string, data?: Record\u003Cstring, any>) {\n    this.queue.push({\n      userId,\n      event,\n      data,\n      timestamp: Date.now()\n    });\n\n    if (this.queue.length >= this.maxBatchSize) {\n      this.flush();\n    }\n  }\n\n  async flush(): Promise\u003Cvoid> {\n    if (this.queue.length === 0) return;\n\n    const batch = this.queue.splice(0, this.maxBatchSize);\n\n    await Promise.allSettled(\n      batch.map(item =>\n        this.client.track(item.userId, {\n          name: item.event,\n          data: { ...item.data, _queued_at: item.timestamp }\n        })\n      )\n    );\n  }\n\n  private startAutoFlush() {\n    this.flushInterval = setInterval(() => this.flush(), this.flushIntervalMs);\n  }\n\n  async shutdown(): Promise\u003Cvoid> {\n    if (this.flushInterval) {\n      clearInterval(this.flushInterval);\n    }\n    await this.flush();\n  }\n}\n```\n\n### Pattern 4: Singleton with Lazy Initialization\n```typescript\n\u002F\u002F lib\u002Fcustomerio-singleton.ts\nimport { TrackClient, RegionUS } from '@customerio\u002Ftrack';\n\nlet instance: TrackClient | null = null;\n\nexport function getCustomerIO(): TrackClient {\n  if (!instance) {\n    if (!process.env.CUSTOMERIO_SITE_ID || !process.env.CUSTOMERIO_API_KEY) {\n      throw new Error('Customer.io credentials not configured');\n    }\n    instance = new TrackClient(\n      process.env.CUSTOMERIO_SITE_ID,\n      process.env.CUSTOMERIO_API_KEY,\n      { region: RegionUS }\n    );\n  }\n  return instance;\n}\n\n\u002F\u002F Usage\nimport { getCustomerIO } from '.\u002Flib\u002Fcustomerio-singleton';\nawait getCustomerIO().identify('user-123', { email: 'user@example.com' });\n```\n\n## Output\n- Type-safe Customer.io client\n- Resilient error handling with retries\n- Event batching for high-volume scenarios\n- Singleton pattern for resource efficiency\n\n## Error Handling\n| Error | Cause | Solution |\n|-------|-------|----------|\n| Type mismatch | Invalid attribute type | Use TypeScript interfaces |\n| Queue overflow | Too many events | Increase flush frequency or batch size |\n| Retry exhausted | Persistent failure | Check network and credentials |\n\n## Resources\n- [Customer.io SDK GitHub](https:\u002F\u002Fgithub.com\u002Fcustomerio\u002Fcustomerio-node)\n- [API Rate Limits](https:\u002F\u002Fcustomer.io\u002Fdocs\u002Fapi\u002Ftrack\u002F#section\u002FLimits)\n\n## Next Steps\nAfter implementing patterns, proceed to `customerio-primary-workflow` to implement messaging workflows.\n",{"name":5,"author":48,"license":15,"version":49,"description":50,"allowed-tools":51},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Apply production-ready Customer.io SDK patterns.\nUse when implementing best practices, refactoring integrations,\nor optimizing Customer.io usage in your application.\nTrigger with phrases like \"customer.io best practices\", \"customer.io patterns\",\n\"production customer.io\", \"customer.io architecture\".\n","Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fcustomerio-pack\u002Fskills\u002Fcustomerio-sdk-patterns",233,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-13 03:33:43",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill customerio-sdk-patterns",{"tool":67,"command":68},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill customerio-sdk-patterns",{"tool":70,"command":71},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill customerio-sdk-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fcustomerio-pack\u002Fskills\u002Fcustomerio-sdk-patterns\u002FSKILL.md",true,[],[76,116,140,166,192,214],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":80,"licenseFileUrl":81,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":43},"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",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,31,108,109,110,111,112,113,114,115],"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","multi","for","jsx","suite",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":80,"licenseFileUrl":120,"sourceHtmlUrl":121,"categories":122,"keywords":127,"publishedAt":43},"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",[123,126],{"categoryNo":124,"categoryName":125,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[128,129,130,95,131,132,91,133,134,135,105,136,137,138,139,27,113],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":144,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":43},"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",[],[148,149,150,151,152,153,154,155,31,156,157,158,159,160,161,162,27,163,164,165,113,23],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":80,"licenseFileUrl":170,"sourceHtmlUrl":171,"categories":172,"keywords":176,"publishedAt":43},"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",[173],{"categoryNo":174,"categoryName":175,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发",[177,178,179,180,181,182,183,184,35,185,186,187,188,189,27,113,190,23,191],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":196,"sourceHtmlUrl":197,"categories":198,"keywords":200,"publishedAt":43},"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",[199],{"categoryNo":174,"categoryName":175,"taxonomyType":87,"taxonomyTypeDesc":88},[194,201,202,203,204,205,206,135,207,208,31,209,210,211,212,113,213],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":80,"licenseFileUrl":218,"sourceHtmlUrl":219,"categories":220,"keywords":227,"publishedAt":43},"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",[221,224],{"categoryNo":222,"categoryName":223,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":225,"categoryName":226,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000016","图像与多媒体",[228,229,230,178,231,106,232,233,183,31,234,189,235,236,237,113,238,23],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]