[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7FHB4K5DMF6XQ7G3S6KMB":3,"skill-same:01M6F7FHB4K5DMF6XQ7G3S6KMB":73},{"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":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6F7FHB4K5DMF6XQ7G3S6KMB","juicebox-webhooks-events",null,"Implement Juicebox webhook handling.\nUse when setting up event notifications, processing webhooks,\nor integrating real-time updates from Juicebox.\nTrigger with phrases like \"juicebox webhooks\", \"juicebox events\",\n\"juicebox notifications\", \"juicebox real-time\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1991,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-webhooks-events\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"juicebox webhooks events","events","webhooks","time","when","updates","with","event","processing","trigger","io","webhook","implement","up","use","read","curl","gh","webhook handling","Bash","real-time","notifications","2026-11-10 10:12:30",false,"---\nname: juicebox-webhooks-events\ndescription: |\n  Implement Juicebox webhook handling.\n  Use when setting up event notifications, processing webhooks,\n  or integrating real-time updates from Juicebox.\n  Trigger with phrases like \"juicebox webhooks\", \"juicebox events\",\n  \"juicebox notifications\", \"juicebox real-time\".\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 Webhooks & Events\n\n## Overview\nImplement webhook handlers for real-time Juicebox events and notifications.\n\n## Prerequisites\n- Juicebox account with webhooks enabled\n- HTTPS endpoint for webhook delivery\n- Request signature verification capability\n\n## Instructions\n\n### Step 1: Register Webhook Endpoint\n```typescript\n\u002F\u002F First, configure in Juicebox dashboard or via API\nimport { JuiceboxClient } from '@juicebox\u002Fsdk';\n\nconst client = new JuiceboxClient({\n  apiKey: process.env.JUICEBOX_API_KEY!\n});\n\nawait client.webhooks.create({\n  url: 'https:\u002F\u002Fyour-app.com\u002Fwebhooks\u002Fjuicebox',\n  events: [\n    'search.completed',\n    'profile.enriched',\n    'export.ready',\n    'quota.warning'\n  ],\n  secret: process.env.JUICEBOX_WEBHOOK_SECRET\n});\n```\n\n### Step 2: Implement Webhook Handler\n```typescript\n\u002F\u002F routes\u002Fwebhooks.ts\nimport { Router } from 'express';\nimport crypto from 'crypto';\n\nconst router = Router();\n\n\u002F\u002F Verify webhook signature\nfunction verifySignature(payload: string, signature: string, secret: string): boolean {\n  const expected = crypto\n    .createHmac('sha256', secret)\n    .update(payload)\n    .digest('hex');\n  return crypto.timingSafeEqual(\n    Buffer.from(signature),\n    Buffer.from(`sha256=${expected}`)\n  );\n}\n\nrouter.post('\u002Fwebhooks\u002Fjuicebox', express.raw({ type: 'application\u002Fjson' }), async (req, res) => {\n  const signature = req.headers['x-juicebox-signature'] as string;\n  const payload = req.body.toString();\n\n  \u002F\u002F Verify signature\n  if (!verifySignature(payload, signature, process.env.JUICEBOX_WEBHOOK_SECRET!)) {\n    return res.status(401).json({ error: 'Invalid signature' });\n  }\n\n  const event = JSON.parse(payload);\n\n  \u002F\u002F Acknowledge receipt immediately\n  res.status(200).json({ received: true });\n\n  \u002F\u002F Process event asynchronously\n  await processWebhookEvent(event);\n});\n\nexport default router;\n```\n\n### Step 3: Process Different Event Types\n```typescript\n\u002F\u002F services\u002Fwebhook-processor.ts\ninterface WebhookEvent {\n  id: string;\n  type: string;\n  timestamp: string;\n  data: any;\n}\n\nexport async function processWebhookEvent(event: WebhookEvent): Promise\u003Cvoid> {\n  console.log(`Processing event: ${event.type} (${event.id})`);\n\n  switch (event.type) {\n    case 'search.completed':\n      await handleSearchCompleted(event.data);\n      break;\n\n    case 'profile.enriched':\n      await handleProfileEnriched(event.data);\n      break;\n\n    case 'export.ready':\n      await handleExportReady(event.data);\n      break;\n\n    case 'quota.warning':\n      await handleQuotaWarning(event.data);\n      break;\n\n    default:\n      console.warn(`Unknown event type: ${event.type}`);\n  }\n}\n\nasync function handleSearchCompleted(data: { searchId: string; resultCount: number }) {\n  \u002F\u002F Notify user that search is complete\n  await notificationService.send({\n    type: 'search_complete',\n    searchId: data.searchId,\n    message: `Search completed with ${data.resultCount} results`\n  });\n}\n\nasync function handleProfileEnriched(data: { profileId: string; fields: string[] }) {\n  \u002F\u002F Update local cache with enriched data\n  await cacheService.invalidate(`profile:${data.profileId}`);\n  await db.profiles.update({\n    where: { id: data.profileId },\n    data: { enrichedAt: new Date() }\n  });\n}\n\nasync function handleExportReady(data: { exportId: string; downloadUrl: string }) {\n  \u002F\u002F Notify user and store download URL\n  await notificationService.send({\n    type: 'export_ready',\n    exportId: data.exportId,\n    downloadUrl: data.downloadUrl\n  });\n}\n\nasync function handleQuotaWarning(data: { usage: number; limit: number }) {\n  \u002F\u002F Alert team about quota usage\n  const percentage = (data.usage \u002F data.limit) * 100;\n  if (percentage > 80) {\n    await alertService.send({\n      severity: 'warning',\n      message: `Juicebox quota at ${percentage.toFixed(1)}%`\n    });\n  }\n}\n```\n\n### Step 4: Implement Retry Logic\n```typescript\n\u002F\u002F lib\u002Fwebhook-queue.ts\nimport { Queue } from 'bullmq';\n\nconst webhookQueue = new Queue('juicebox-webhooks', {\n  connection: { host: 'localhost', port: 6379 }\n});\n\nexport async function queueWebhookProcessing(event: WebhookEvent): Promise\u003Cvoid> {\n  await webhookQueue.add('process', event, {\n    attempts: 3,\n    backoff: {\n      type: 'exponential',\n      delay: 1000\n    }\n  });\n}\n\n\u002F\u002F Worker\nimport { Worker } from 'bullmq';\n\nnew Worker('juicebox-webhooks', async (job) => {\n  await processWebhookEvent(job.data);\n}, {\n  connection: { host: 'localhost', port: 6379 }\n});\n```\n\n## Webhook Events Reference\n\n| Event | Description | Payload |\n|-------|-------------|---------|\n| `search.completed` | Async search finished | searchId, resultCount |\n| `profile.enriched` | Profile data enriched | profileId, fields |\n| `export.ready` | Bulk export ready | exportId, downloadUrl |\n| `quota.warning` | Approaching quota limit | usage, limit |\n| `key.rotated` | API key rotated | newKeyPrefix |\n\n## Output\n- Webhook endpoint handler\n- Signature verification\n- Event type processors\n- Retry queue with backoff\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Invalid signature | Wrong secret | Verify webhook secret |\n| Duplicate events | Network retry | Implement idempotency |\n| Processing timeout | Slow handler | Use async queue |\n\n## Resources\n- [Webhooks Documentation](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fwebhooks)\n- [Event Reference](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fevents)\n\n## Next Steps\nAfter webhooks, see `juicebox-performance-tuning` for optimization.\n","# Juicebox Webhooks & Events\n\n## Overview\nImplement webhook handlers for real-time Juicebox events and notifications.\n\n## Prerequisites\n- Juicebox account with webhooks enabled\n- HTTPS endpoint for webhook delivery\n- Request signature verification capability\n\n## Instructions\n\n### Step 1: Register Webhook Endpoint\n```typescript\n\u002F\u002F First, configure in Juicebox dashboard or via API\nimport { JuiceboxClient } from '@juicebox\u002Fsdk';\n\nconst client = new JuiceboxClient({\n  apiKey: process.env.JUICEBOX_API_KEY!\n});\n\nawait client.webhooks.create({\n  url: 'https:\u002F\u002Fyour-app.com\u002Fwebhooks\u002Fjuicebox',\n  events: [\n    'search.completed',\n    'profile.enriched',\n    'export.ready',\n    'quota.warning'\n  ],\n  secret: process.env.JUICEBOX_WEBHOOK_SECRET\n});\n```\n\n### Step 2: Implement Webhook Handler\n```typescript\n\u002F\u002F routes\u002Fwebhooks.ts\nimport { Router } from 'express';\nimport crypto from 'crypto';\n\nconst router = Router();\n\n\u002F\u002F Verify webhook signature\nfunction verifySignature(payload: string, signature: string, secret: string): boolean {\n  const expected = crypto\n    .createHmac('sha256', secret)\n    .update(payload)\n    .digest('hex');\n  return crypto.timingSafeEqual(\n    Buffer.from(signature),\n    Buffer.from(`sha256=${expected}`)\n  );\n}\n\nrouter.post('\u002Fwebhooks\u002Fjuicebox', express.raw({ type: 'application\u002Fjson' }), async (req, res) => {\n  const signature = req.headers['x-juicebox-signature'] as string;\n  const payload = req.body.toString();\n\n  \u002F\u002F Verify signature\n  if (!verifySignature(payload, signature, process.env.JUICEBOX_WEBHOOK_SECRET!)) {\n    return res.status(401).json({ error: 'Invalid signature' });\n  }\n\n  const event = JSON.parse(payload);\n\n  \u002F\u002F Acknowledge receipt immediately\n  res.status(200).json({ received: true });\n\n  \u002F\u002F Process event asynchronously\n  await processWebhookEvent(event);\n});\n\nexport default router;\n```\n\n### Step 3: Process Different Event Types\n```typescript\n\u002F\u002F services\u002Fwebhook-processor.ts\ninterface WebhookEvent {\n  id: string;\n  type: string;\n  timestamp: string;\n  data: any;\n}\n\nexport async function processWebhookEvent(event: WebhookEvent): Promise\u003Cvoid> {\n  console.log(`Processing event: ${event.type} (${event.id})`);\n\n  switch (event.type) {\n    case 'search.completed':\n      await handleSearchCompleted(event.data);\n      break;\n\n    case 'profile.enriched':\n      await handleProfileEnriched(event.data);\n      break;\n\n    case 'export.ready':\n      await handleExportReady(event.data);\n      break;\n\n    case 'quota.warning':\n      await handleQuotaWarning(event.data);\n      break;\n\n    default:\n      console.warn(`Unknown event type: ${event.type}`);\n  }\n}\n\nasync function handleSearchCompleted(data: { searchId: string; resultCount: number }) {\n  \u002F\u002F Notify user that search is complete\n  await notificationService.send({\n    type: 'search_complete',\n    searchId: data.searchId,\n    message: `Search completed with ${data.resultCount} results`\n  });\n}\n\nasync function handleProfileEnriched(data: { profileId: string; fields: string[] }) {\n  \u002F\u002F Update local cache with enriched data\n  await cacheService.invalidate(`profile:${data.profileId}`);\n  await db.profiles.update({\n    where: { id: data.profileId },\n    data: { enrichedAt: new Date() }\n  });\n}\n\nasync function handleExportReady(data: { exportId: string; downloadUrl: string }) {\n  \u002F\u002F Notify user and store download URL\n  await notificationService.send({\n    type: 'export_ready',\n    exportId: data.exportId,\n    downloadUrl: data.downloadUrl\n  });\n}\n\nasync function handleQuotaWarning(data: { usage: number; limit: number }) {\n  \u002F\u002F Alert team about quota usage\n  const percentage = (data.usage \u002F data.limit) * 100;\n  if (percentage > 80) {\n    await alertService.send({\n      severity: 'warning',\n      message: `Juicebox quota at ${percentage.toFixed(1)}%`\n    });\n  }\n}\n```\n\n### Step 4: Implement Retry Logic\n```typescript\n\u002F\u002F lib\u002Fwebhook-queue.ts\nimport { Queue } from 'bullmq';\n\nconst webhookQueue = new Queue('juicebox-webhooks', {\n  connection: { host: 'localhost', port: 6379 }\n});\n\nexport async function queueWebhookProcessing(event: WebhookEvent): Promise\u003Cvoid> {\n  await webhookQueue.add('process', event, {\n    attempts: 3,\n    backoff: {\n      type: 'exponential',\n      delay: 1000\n    }\n  });\n}\n\n\u002F\u002F Worker\nimport { Worker } from 'bullmq';\n\nnew Worker('juicebox-webhooks', async (job) => {\n  await processWebhookEvent(job.data);\n}, {\n  connection: { host: 'localhost', port: 6379 }\n});\n```\n\n## Webhook Events Reference\n\n| Event | Description | Payload |\n|-------|-------------|---------|\n| `search.completed` | Async search finished | searchId, resultCount |\n| `profile.enriched` | Profile data enriched | profileId, fields |\n| `export.ready` | Bulk export ready | exportId, downloadUrl |\n| `quota.warning` | Approaching quota limit | usage, limit |\n| `key.rotated` | API key rotated | newKeyPrefix |\n\n## Output\n- Webhook endpoint handler\n- Signature verification\n- Event type processors\n- Retry queue with backoff\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Invalid signature | Wrong secret | Verify webhook secret |\n| Duplicate events | Network retry | Implement idempotency |\n| Processing timeout | Slow handler | Use async queue |\n\n## Resources\n- [Webhooks Documentation](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fwebhooks)\n- [Event Reference](https:\u002F\u002Fjuicebox.ai\u002Fdocs\u002Fevents)\n\n## Next Steps\nAfter webhooks, see `juicebox-performance-tuning` for optimization.\n",{"name":5,"author":46,"license":15,"version":47,"description":48,"allowed-tools":49},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement Juicebox webhook handling.\nUse when setting up event notifications, processing webhooks,\nor integrating real-time updates from Juicebox.\nTrigger with phrases like \"juicebox webhooks\", \"juicebox events\",\n\"juicebox notifications\", \"juicebox real-time\".\n","Read, Write, Edit, Bash(gh:*), Bash(curl:*)","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-webhooks-events",234,"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 11:50:27",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-webhooks-events",{"tool":65,"command":66},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-webhooks-events",{"tool":68,"command":69},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill juicebox-webhooks-events","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fjuicebox-pack\u002Fskills\u002Fjuicebox-webhooks-events\u002FSKILL.md",true,[],[74,114,138,164,191,213],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":78,"licenseFileUrl":79,"sourceHtmlUrl":80,"categories":81,"keywords":87,"publishedAt":41},"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",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,33,106,107,108,109,110,111,112,113],"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":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":78,"licenseFileUrl":118,"sourceHtmlUrl":119,"categories":120,"keywords":125,"publishedAt":41},"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",[121,124],{"categoryNo":122,"categoryName":123,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[126,127,128,93,129,130,89,131,132,133,103,134,135,136,137,25,111],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":142,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":41},"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",[],[146,147,148,149,150,151,152,153,33,154,155,156,157,158,159,160,25,161,162,163,111,23],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":78,"licenseFileUrl":168,"sourceHtmlUrl":169,"categories":170,"keywords":174,"publishedAt":41},"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",[171],{"categoryNo":172,"categoryName":173,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000023","Skill与智能体开发",[175,176,177,178,179,180,181,182,183,184,185,186,187,188,25,111,189,23,190],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","integrations","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":195,"sourceHtmlUrl":196,"categories":197,"keywords":199,"publishedAt":41},"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",[198],{"categoryNo":172,"categoryName":173,"taxonomyType":85,"taxonomyTypeDesc":86},[193,200,201,202,203,204,205,133,206,207,33,208,209,210,211,111,212],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":78,"licenseFileUrl":217,"sourceHtmlUrl":218,"categories":219,"keywords":226,"publishedAt":41},"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",[220,223],{"categoryNo":221,"categoryName":222,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":224,"categoryName":225,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000016","图像与多媒体",[227,228,229,176,230,104,231,232,181,33,233,188,234,235,236,111,237,23],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]