[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7EMJVYDNVMJT5R2D7ZF3V":3,"skill-same:01M6F7EMJVYDNVMJT5R2D7ZF3V":72},{"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":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6F7EMJVYDNVMJT5R2D7ZF3V","juicebox-performance-tuning",null,"Optimize Juicebox API performance.\nUse when improving response times, reducing latency,\nor optimizing Juicebox integration throughput.\nTrigger with phrases like \"juicebox performance\", \"optimize juicebox\",\n\"juicebox speed\", \"juicebox latency\".","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\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-performance-tuning\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"tuning","juicebox performance tuning","performance tuning","performance","use","when","with","throughput","trigger","io","latency","speed","optimize","edit","write","read","curl","gh","Bash","api","integration","2026-11-10 10:12:30",false,"---\nname: juicebox-performance-tuning\ndescription: |\n  Optimize Juicebox API performance.\n  Use when improving response times, reducing latency,\n  or optimizing Juicebox integration throughput.\n  Trigger with phrases like \"juicebox performance\", \"optimize juicebox\",\n  \"juicebox speed\", \"juicebox latency\".\nallowed-tools: Read, Write, Edit, Bash(gh:*), Bash(curl:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Juicebox Performance Tuning\n\n## Overview\nOptimize Juicebox API integration for maximum performance and minimal latency.\n\n## Prerequisites\n- Working Juicebox integration\n- Performance monitoring in place\n- Baseline metrics established\n\n## Instructions\n\n### Step 1: Implement Response Caching\n```typescript\n\u002F\u002F lib\u002Fjuicebox-cache.ts\nimport { Redis } from 'ioredis';\n\nconst redis = new Redis(process.env.REDIS_URL);\n\ninterface CacheOptions {\n  ttl: number; \u002F\u002F seconds\n  prefix?: string;\n}\n\nexport class JuiceboxCache {\n  constructor(private options: CacheOptions = { ttl: 300 }) {}\n\n  private getKey(type: string, params: any): string {\n    const hash = crypto\n      .createHash('md5')\n      .update(JSON.stringify(params))\n      .digest('hex');\n    return `${this.options.prefix || 'jb'}:${type}:${hash}`;\n  }\n\n  async get\u003CT>(type: string, params: any): Promise\u003CT | null> {\n    const key = this.getKey(type, params);\n    const cached = await redis.get(key);\n    return cached ? JSON.parse(cached) : null;\n  }\n\n  async set\u003CT>(type: string, params: any, data: T): Promise\u003Cvoid> {\n    const key = this.getKey(type, params);\n    await redis.setex(key, this.options.ttl, JSON.stringify(data));\n  }\n\n  async invalidate(type: string, params: any): Promise\u003Cvoid> {\n    const key = this.getKey(type, params);\n    await redis.del(key);\n  }\n}\n\n\u002F\u002F Usage\nconst cache = new JuiceboxCache({ ttl: 300 });\n\nasync function searchWithCache(query: string, options: SearchOptions) {\n  const cached = await cache.get('search', { query, ...options });\n  if (cached) return cached;\n\n  const results = await client.search.people({ query, ...options });\n  await cache.set('search', { query, ...options }, results);\n  return results;\n}\n```\n\n### Step 2: Optimize Request Batching\n```typescript\n\u002F\u002F lib\u002Fbatch-processor.ts\nexport class BatchProcessor\u003CT, R> {\n  private queue: Array\u003C{\n    item: T;\n    resolve: (result: R) => void;\n    reject: (error: Error) => void;\n  }> = [];\n  private timeout: NodeJS.Timeout | null = null;\n\n  constructor(\n    private processBatch: (items: T[]) => Promise\u003CR[]>,\n    private options: { maxSize: number; maxWait: number }\n  ) {}\n\n  async add(item: T): Promise\u003CR> {\n    return new Promise((resolve, reject) => {\n      this.queue.push({ item, resolve, reject });\n\n      if (this.queue.length >= this.options.maxSize) {\n        this.flush();\n      } else if (!this.timeout) {\n        this.timeout = setTimeout(() => this.flush(), this.options.maxWait);\n      }\n    });\n  }\n\n  private async flush(): Promise\u003Cvoid> {\n    if (this.timeout) {\n      clearTimeout(this.timeout);\n      this.timeout = null;\n    }\n\n    if (this.queue.length === 0) return;\n\n    const batch = this.queue.splice(0, this.options.maxSize);\n    const items = batch.map(b => b.item);\n\n    try {\n      const results = await this.processBatch(items);\n      batch.forEach((b, i) => b.resolve(results[i]));\n    } catch (error) {\n      batch.forEach(b => b.reject(error as Error));\n    }\n  }\n}\n\n\u002F\u002F Usage for profile enrichment\nconst enrichmentBatcher = new BatchProcessor\u003Cstring, Profile>(\n  async (profileIds) => {\n    return client.profiles.batchGet(profileIds);\n  },\n  { maxSize: 50, maxWait: 100 }\n);\n\n\u002F\u002F Automatic batching\nconst profile = await enrichmentBatcher.add(profileId);\n```\n\n### Step 3: Connection Pooling\n```typescript\n\u002F\u002F lib\u002Fconnection-pool.ts\nimport { JuiceboxClient } from '@juicebox\u002Fsdk';\n\nclass ClientPool {\n  private clients: JuiceboxClient[] = [];\n  private currentIndex = 0;\n\n  constructor(size: number, apiKey: string) {\n    for (let i = 0; i \u003C size; i++) {\n      this.clients.push(new JuiceboxClient({\n        apiKey,\n        keepAlive: true,\n        timeout: 30000\n      }));\n    }\n  }\n\n  getClient(): JuiceboxClient {\n    const client = this.clients[this.currentIndex];\n    this.currentIndex = (this.currentIndex + 1) % this.clients.length;\n    return client;\n  }\n}\n\nconst pool = new ClientPool(5, process.env.JUICEBOX_API_KEY!);\n```\n\n### Step 4: Query Optimization\n```typescript\n\u002F\u002F lib\u002Fquery-optimizer.ts\nexport function optimizeSearchQuery(params: SearchParams): SearchParams {\n  return {\n    ...params,\n    \u002F\u002F Only request needed fields\n    fields: params.fields || ['id', 'name', 'title', 'company'],\n    \u002F\u002F Use reasonable page size\n    limit: Math.min(params.limit || 20, 100),\n    \u002F\u002F Disable expensive features if not needed\n    includeScores: params.includeScores ?? false,\n    includeHighlights: params.includeHighlights ?? false\n  };\n}\n\n\u002F\u002F Pagination optimization\nasync function* streamResults(query: string) {\n  let cursor: string | undefined;\n\n  do {\n    const results = await client.search.people({\n      query,\n      limit: 100,\n      cursor,\n      fields: ['id', 'name', 'title'] \u002F\u002F Minimal fields for listing\n    });\n\n    for (const profile of results.profiles) {\n      yield profile;\n    }\n\n    cursor = results.nextCursor;\n  } while (cursor);\n}\n```\n\n### Step 5: Monitor Performance\n```typescript\n\u002F\u002F lib\u002Fperformance-monitor.ts\nimport { metrics } from '.\u002Fmetrics';\n\nexport function wrapWithMetrics\u003CT extends (...args: any[]) => Promise\u003Cany>>(\n  name: string,\n  fn: T\n): T {\n  return (async (...args: Parameters\u003CT>) => {\n    const start = Date.now();\n    try {\n      const result = await fn(...args);\n      metrics.histogram(`juicebox.${name}.duration`, Date.now() - start);\n      metrics.increment(`juicebox.${name}.success`);\n      return result;\n    } catch (error) {\n      metrics.increment(`juicebox.${name}.error`);\n      throw error;\n    }\n  }) as T;\n}\n\n\u002F\u002F Dashboard query\nconst performanceQuery = `\n  SELECT\n    date_trunc('hour', timestamp) as hour,\n    avg(duration_ms) as avg_latency,\n    percentile_cont(0.95) within group (order by duration_ms) as p95,\n    count(*) as requests\n  FROM juicebox_metrics\n  WHERE timestamp > now() - interval '24 hours'\n  GROUP BY 1\n  ORDER BY 1\n`;\n```\n\n## Performance Benchmarks\n\n| Operation | Target | Optimization |\n|-----------|--------|--------------|\n| Search (cold) | \u003C 500ms | Query optimization |\n| Search (cached) | \u003C 50ms | Redis cache |\n| Profile fetch | \u003C 200ms | Batch requests |\n| Bulk enrichment | \u003C 2s\u002F100 | Connection pool |\n\n## Output\n- Response caching layer\n- Request batching system\n- Connection pool\n- Performance monitoring\n\n## Resources\n- [Performance Guide](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fperformance)\n- [Best Practices](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fbest-practices)\n\n## Next Steps\nAfter performance tuning, see `juicebox-cost-tuning` for cost optimization.\n","# Juicebox Performance Tuning\n\n## Overview\nOptimize Juicebox API integration for maximum performance and minimal latency.\n\n## Prerequisites\n- Working Juicebox integration\n- Performance monitoring in place\n- Baseline metrics established\n\n## Instructions\n\n### Step 1: Implement Response Caching\n```typescript\n\u002F\u002F lib\u002Fjuicebox-cache.ts\nimport { Redis } from 'ioredis';\n\nconst redis = new Redis(process.env.REDIS_URL);\n\ninterface CacheOptions {\n  ttl: number; \u002F\u002F seconds\n  prefix?: string;\n}\n\nexport class JuiceboxCache {\n  constructor(private options: CacheOptions = { ttl: 300 }) {}\n\n  private getKey(type: string, params: any): string {\n    const hash = crypto\n      .createHash('md5')\n      .update(JSON.stringify(params))\n      .digest('hex');\n    return `${this.options.prefix || 'jb'}:${type}:${hash}`;\n  }\n\n  async get\u003CT>(type: string, params: any): Promise\u003CT | null> {\n    const key = this.getKey(type, params);\n    const cached = await redis.get(key);\n    return cached ? JSON.parse(cached) : null;\n  }\n\n  async set\u003CT>(type: string, params: any, data: T): Promise\u003Cvoid> {\n    const key = this.getKey(type, params);\n    await redis.setex(key, this.options.ttl, JSON.stringify(data));\n  }\n\n  async invalidate(type: string, params: any): Promise\u003Cvoid> {\n    const key = this.getKey(type, params);\n    await redis.del(key);\n  }\n}\n\n\u002F\u002F Usage\nconst cache = new JuiceboxCache({ ttl: 300 });\n\nasync function searchWithCache(query: string, options: SearchOptions) {\n  const cached = await cache.get('search', { query, ...options });\n  if (cached) return cached;\n\n  const results = await client.search.people({ query, ...options });\n  await cache.set('search', { query, ...options }, results);\n  return results;\n}\n```\n\n### Step 2: Optimize Request Batching\n```typescript\n\u002F\u002F lib\u002Fbatch-processor.ts\nexport class BatchProcessor\u003CT, R> {\n  private queue: Array\u003C{\n    item: T;\n    resolve: (result: R) => void;\n    reject: (error: Error) => void;\n  }> = [];\n  private timeout: NodeJS.Timeout | null = null;\n\n  constructor(\n    private processBatch: (items: T[]) => Promise\u003CR[]>,\n    private options: { maxSize: number; maxWait: number }\n  ) {}\n\n  async add(item: T): Promise\u003CR> {\n    return new Promise((resolve, reject) => {\n      this.queue.push({ item, resolve, reject });\n\n      if (this.queue.length >= this.options.maxSize) {\n        this.flush();\n      } else if (!this.timeout) {\n        this.timeout = setTimeout(() => this.flush(), this.options.maxWait);\n      }\n    });\n  }\n\n  private async flush(): Promise\u003Cvoid> {\n    if (this.timeout) {\n      clearTimeout(this.timeout);\n      this.timeout = null;\n    }\n\n    if (this.queue.length === 0) return;\n\n    const batch = this.queue.splice(0, this.options.maxSize);\n    const items = batch.map(b => b.item);\n\n    try {\n      const results = await this.processBatch(items);\n      batch.forEach((b, i) => b.resolve(results[i]));\n    } catch (error) {\n      batch.forEach(b => b.reject(error as Error));\n    }\n  }\n}\n\n\u002F\u002F Usage for profile enrichment\nconst enrichmentBatcher = new BatchProcessor\u003Cstring, Profile>(\n  async (profileIds) => {\n    return client.profiles.batchGet(profileIds);\n  },\n  { maxSize: 50, maxWait: 100 }\n);\n\n\u002F\u002F Automatic batching\nconst profile = await enrichmentBatcher.add(profileId);\n```\n\n### Step 3: Connection Pooling\n```typescript\n\u002F\u002F lib\u002Fconnection-pool.ts\nimport { JuiceboxClient } from '@juicebox\u002Fsdk';\n\nclass ClientPool {\n  private clients: JuiceboxClient[] = [];\n  private currentIndex = 0;\n\n  constructor(size: number, apiKey: string) {\n    for (let i = 0; i \u003C size; i++) {\n      this.clients.push(new JuiceboxClient({\n        apiKey,\n        keepAlive: true,\n        timeout: 30000\n      }));\n    }\n  }\n\n  getClient(): JuiceboxClient {\n    const client = this.clients[this.currentIndex];\n    this.currentIndex = (this.currentIndex + 1) % this.clients.length;\n    return client;\n  }\n}\n\nconst pool = new ClientPool(5, process.env.JUICEBOX_API_KEY!);\n```\n\n### Step 4: Query Optimization\n```typescript\n\u002F\u002F lib\u002Fquery-optimizer.ts\nexport function optimizeSearchQuery(params: SearchParams): SearchParams {\n  return {\n    ...params,\n    \u002F\u002F Only request needed fields\n    fields: params.fields || ['id', 'name', 'title', 'company'],\n    \u002F\u002F Use reasonable page size\n    limit: Math.min(params.limit || 20, 100),\n    \u002F\u002F Disable expensive features if not needed\n    includeScores: params.includeScores ?? false,\n    includeHighlights: params.includeHighlights ?? false\n  };\n}\n\n\u002F\u002F Pagination optimization\nasync function* streamResults(query: string) {\n  let cursor: string | undefined;\n\n  do {\n    const results = await client.search.people({\n      query,\n      limit: 100,\n      cursor,\n      fields: ['id', 'name', 'title'] \u002F\u002F Minimal fields for listing\n    });\n\n    for (const profile of results.profiles) {\n      yield profile;\n    }\n\n    cursor = results.nextCursor;\n  } while (cursor);\n}\n```\n\n### Step 5: Monitor Performance\n```typescript\n\u002F\u002F lib\u002Fperformance-monitor.ts\nimport { metrics } from '.\u002Fmetrics';\n\nexport function wrapWithMetrics\u003CT extends (...args: any[]) => Promise\u003Cany>>(\n  name: string,\n  fn: T\n): T {\n  return (async (...args: Parameters\u003CT>) => {\n    const start = Date.now();\n    try {\n      const result = await fn(...args);\n      metrics.histogram(`juicebox.${name}.duration`, Date.now() - start);\n      metrics.increment(`juicebox.${name}.success`);\n      return result;\n    } catch (error) {\n      metrics.increment(`juicebox.${name}.error`);\n      throw error;\n    }\n  }) as T;\n}\n\n\u002F\u002F Dashboard query\nconst performanceQuery = `\n  SELECT\n    date_trunc('hour', timestamp) as hour,\n    avg(duration_ms) as avg_latency,\n    percentile_cont(0.95) within group (order by duration_ms) as p95,\n    count(*) as requests\n  FROM juicebox_metrics\n  WHERE timestamp > now() - interval '24 hours'\n  GROUP BY 1\n  ORDER BY 1\n`;\n```\n\n## Performance Benchmarks\n\n| Operation | Target | Optimization |\n|-----------|--------|--------------|\n| Search (cold) | \u003C 500ms | Query optimization |\n| Search (cached) | \u003C 50ms | Redis cache |\n| Profile fetch | \u003C 200ms | Batch requests |\n| Bulk enrichment | \u003C 2s\u002F100 | Connection pool |\n\n## Output\n- Response caching layer\n- Request batching system\n- Connection pool\n- Performance monitoring\n\n## Resources\n- [Performance Guide](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fperformance)\n- [Best Practices](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fbest-practices)\n\n## Next Steps\nAfter performance tuning, see `juicebox-cost-tuning` for cost optimization.\n",{"name":5,"author":45,"license":15,"version":46,"description":47,"allowed-tools":48},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Juicebox API performance.\nUse when improving response times, reducing latency,\nor optimizing Juicebox integration throughput.\nTrigger with phrases like \"juicebox performance\", \"optimize juicebox\",\n\"juicebox speed\", \"juicebox latency\".\n","Read, Write, Edit, Bash(gh:*), Bash(curl:*)","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-performance-tuning",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":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-performance-tuning",{"tool":64,"command":65},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-performance-tuning",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-performance-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-performance-tuning\u002FSKILL.md",true,[],[73,113,137,163,190,212],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":77,"licenseFileUrl":78,"sourceHtmlUrl":79,"categories":80,"keywords":86,"publishedAt":40},"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",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,23,105,106,107,108,109,110,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","multi","for","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":77,"licenseFileUrl":117,"sourceHtmlUrl":118,"categories":119,"keywords":124,"publishedAt":40},"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":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[125,126,127,92,128,129,88,130,131,132,102,133,134,135,136,25,110],"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":40},"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,23,153,154,155,156,157,158,159,25,160,161,162,110,24],"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":77,"licenseFileUrl":167,"sourceHtmlUrl":168,"categories":169,"keywords":173,"publishedAt":40},"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":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发",[174,175,176,177,178,179,180,181,182,183,184,185,186,187,25,110,188,24,189],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","integrations","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":194,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":40},"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",[197],{"categoryNo":171,"categoryName":172,"taxonomyType":84,"taxonomyTypeDesc":85},[192,199,200,201,202,203,204,132,205,206,23,207,208,209,210,110,211],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":77,"licenseFileUrl":216,"sourceHtmlUrl":217,"categories":218,"keywords":225,"publishedAt":40},"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",[219,222],{"categoryNo":220,"categoryName":221,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":223,"categoryName":224,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000016","图像与多媒体",[226,227,228,175,229,103,230,231,180,23,232,187,233,234,235,110,236,24],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]