[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6K2VZNPE60KMEVMP6M9AC":3,"skill-same:01M6F6K2VZNPE60KMEVMP6M9AC":86},{"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":28,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":66,"repositoryHtmlUrl":67,"repositoryHomepageUrl":6,"ownerHtmlUrl":68,"ownerBlogUrl":69,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M6F6K2VZNPE60KMEVMP6M9AC","exa-known-pitfalls",null,"Identify and avoid Exa anti-patterns and common integration mistakes.\nUse when reviewing Exa code for issues, onboarding new developers,\nor auditing existing Exa integrations for best practices violations.\nTrigger with phrases like \"exa mistakes\", \"exa anti-patterns\",\n\"exa pitfalls\", \"exa what not to do\", \"exa code review\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1981,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fexa-pack\u002Fskills\u002Fexa-known-pitfalls\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"pitfalls","exa known pitfalls","exa","anti-patterns","new","when","mistakes","for","with","trigger","io","patterns","do","code review","use","read","grep","common","integrations","integration","onboarding","issues","best practices","code","review","2026-11-10 10:12:30",false,"---\nname: exa-known-pitfalls\ndescription: |\n  Identify and avoid Exa anti-patterns and common integration mistakes.\n  Use when reviewing Exa code for issues, onboarding new developers,\n  or auditing existing Exa integrations for best practices violations.\n  Trigger with phrases like \"exa mistakes\", \"exa anti-patterns\",\n  \"exa pitfalls\", \"exa what not to do\", \"exa code review\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Exa Known Pitfalls\n\n## Overview\nCommon mistakes and anti-patterns when integrating with Exa.\n\n## Prerequisites\n- Access to Exa codebase for review\n- Understanding of async\u002Fawait patterns\n- Knowledge of security best practices\n- Familiarity with rate limiting concepts\n\n## Pitfall #1: Synchronous API Calls in Request Path\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F User waits for Exa API call\napp.post('\u002Fcheckout', async (req, res) => {\n  const payment = await exaClient.processPayment(req.body);  \u002F\u002F 2-5s latency\n  const notification = await exaClient.sendEmail(payment);   \u002F\u002F Another 1-2s\n  res.json({ success: true });  \u002F\u002F User waited 3-7s\n});\n```\n\n### ✅ Better Approach\n```typescript\n\u002F\u002F Return immediately, process async\napp.post('\u002Fcheckout', async (req, res) => {\n  const jobId = await queue.enqueue('process-checkout', req.body);\n  res.json({ jobId, status: 'processing' });  \u002F\u002F 50ms response\n});\n\n\u002F\u002F Background job\nasync function processCheckout(data) {\n  const payment = await exaClient.processPayment(data);\n  await exaClient.sendEmail(payment);\n}\n```\n\n---\n\n## Pitfall #2: Not Handling Rate Limits\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Blast requests, crash on 429\nfor (const item of items) {\n  await exaClient.process(item);  \u002F\u002F Will hit rate limit\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport pLimit from 'p-limit';\n\nconst limit = pLimit(5);  \u002F\u002F Max 5 concurrent\nconst rateLimiter = new RateLimiter({ tokensPerSecond: 10 });\n\nfor (const item of items) {\n  await rateLimiter.acquire();\n  await limit(() => exaClient.process(item));\n}\n```\n\n---\n\n## Pitfall #3: Leaking API Keys\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F In frontend code (visible to users!)\nconst client = new ExaClient({\n  apiKey: 'sk_live_ACTUAL_KEY_HERE',  \u002F\u002F Anyone can see this\n});\n\n\u002F\u002F In git history\ngit commit -m \"add API key\"  \u002F\u002F Exposed forever\n```\n\n### ✅ Better Approach\n```typescript\n\u002F\u002F Backend only, environment variable\nconst client = new ExaClient({\n  apiKey: process.env.EXA_API_KEY,\n});\n\n\u002F\u002F Use .gitignore\n.env\n.env.local\n.env.*.local\n```\n\n---\n\n## Pitfall #4: Ignoring Idempotency\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Network error on response = duplicate charge!\ntry {\n  await exaClient.charge(order);\n} catch (error) {\n  if (error.code === 'NETWORK_ERROR') {\n    await exaClient.charge(order);  \u002F\u002F Charged twice!\n  }\n}\n```\n\n### ✅ Better Approach\n```typescript\nconst idempotencyKey = `order-${order.id}-${Date.now()}`;\n\nawait exaClient.charge(order, {\n  idempotencyKey,  \u002F\u002F Safe to retry\n});\n```\n\n---\n\n## Pitfall #5: Not Validating Webhooks\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Trust any incoming request\napp.post('\u002Fwebhook', (req, res) => {\n  processWebhook(req.body);  \u002F\u002F Attacker can send fake events\n  res.sendStatus(200);\n});\n```\n\n### ✅ Better Approach\n```typescript\napp.post('\u002Fwebhook',\n  express.raw({ type: 'application\u002Fjson' }),\n  (req, res) => {\n    const signature = req.headers['x-exa-signature'];\n    if (!verifyExaSignature(req.body, signature)) {\n      return res.sendStatus(401);\n    }\n    processWebhook(JSON.parse(req.body));\n    res.sendStatus(200);\n  }\n);\n```\n\n---\n\n## Pitfall #6: Missing Error Handling\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Crashes on any error\nconst result = await exaClient.get(id);\nconsole.log(result.data.nested.value);  \u002F\u002F TypeError if missing\n```\n\n### ✅ Better Approach\n```typescript\ntry {\n  const result = await exaClient.get(id);\n  console.log(result?.data?.nested?.value ?? 'default');\n} catch (error) {\n  if (error instanceof ExaNotFoundError) {\n    return null;\n  }\n  if (error instanceof ExaRateLimitError) {\n    await sleep(error.retryAfter);\n    return this.get(id);  \u002F\u002F Retry\n  }\n  throw error;  \u002F\u002F Rethrow unknown errors\n}\n```\n\n---\n\n## Pitfall #7: Hardcoding Configuration\n\n### ❌ Anti-Pattern\n```typescript\nconst client = new ExaClient({\n  timeout: 5000,  \u002F\u002F Too short for some operations\n  baseUrl: 'https:\u002F\u002Fapi.exa.com',  \u002F\u002F Can't change for staging\n});\n```\n\n### ✅ Better Approach\n```typescript\nconst client = new ExaClient({\n  timeout: parseInt(process.env.EXA_TIMEOUT || '30000'),\n  baseUrl: process.env.EXA_BASE_URL || 'https:\u002F\u002Fapi.exa.com',\n});\n```\n\n---\n\n## Pitfall #8: Not Implementing Circuit Breaker\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F When Exa is down, every request hangs\nfor (const user of users) {\n  await exaClient.sync(user);  \u002F\u002F All timeout sequentially\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport CircuitBreaker from 'opossum';\n\nconst breaker = new CircuitBreaker(exaClient.sync, {\n  timeout: 10000,\n  errorThresholdPercentage: 50,\n  resetTimeout: 30000,\n});\n\n\u002F\u002F Fails fast when circuit is open\nfor (const user of users) {\n  await breaker.fire(user).catch(handleFailure);\n}\n```\n\n---\n\n## Pitfall #9: Logging Sensitive Data\n\n### ❌ Anti-Pattern\n```typescript\nconsole.log('Request:', JSON.stringify(request));  \u002F\u002F Logs API key, PII\nconsole.log('User:', user);  \u002F\u002F Logs email, phone\n```\n\n### ✅ Better Approach\n```typescript\nconst redacted = {\n  ...request,\n  apiKey: '[REDACTED]',\n  user: { id: user.id },  \u002F\u002F Only non-sensitive fields\n};\nconsole.log('Request:', JSON.stringify(redacted));\n```\n\n---\n\n## Pitfall #10: No Graceful Degradation\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Entire feature broken if Exa is down\nconst recommendations = await exaClient.getRecommendations(userId);\nreturn renderPage({ recommendations });  \u002F\u002F Page crashes\n```\n\n### ✅ Better Approach\n```typescript\nlet recommendations;\ntry {\n  recommendations = await exaClient.getRecommendations(userId);\n} catch (error) {\n  recommendations = await getFallbackRecommendations(userId);\n  reportDegradedService('exa', error);\n}\nreturn renderPage({ recommendations, degraded: !recommendations });\n```\n\n---\n\n## Instructions\n\n### Step 1: Review for Anti-Patterns\nScan codebase for each pitfall pattern.\n\n### Step 2: Prioritize Fixes\nAddress security issues first, then performance.\n\n### Step 3: Implement Better Approach\nReplace anti-patterns with recommended patterns.\n\n### Step 4: Add Prevention\nSet up linting and CI checks to prevent recurrence.\n\n## Output\n- Anti-patterns identified\n- Fixes prioritized and implemented\n- Prevention measures in place\n- Code quality improved\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Too many findings | Legacy codebase | Prioritize security first |\n| Pattern not detected | Complex code | Manual review |\n| False positive | Similar code | Whitelist exceptions |\n| Fix breaks tests | Behavior change | Update tests |\n\n## Examples\n\n### Quick Pitfall Scan\n```bash\n# Check for common pitfalls\ngrep -r \"sk_live_\" --include=\"*.ts\" src\u002F        # Key leakage\ngrep -r \"console.log\" --include=\"*.ts\" src\u002F     # Potential PII logging\n```\n\n## Resources\n- [Exa Security Guide](https:\u002F\u002Fdocs.exa.com\u002Fsecurity)\n- [Exa Best Practices](https:\u002F\u002Fdocs.exa.com\u002Fbest-practices)\n\n## Quick Reference Card\n\n| Pitfall | Detection | Prevention |\n|---------|-----------|------------|\n| Sync in request | High latency | Use queues |\n| Rate limit ignore | 429 errors | Implement backoff |\n| Key leakage | Git history scan | Env vars, .gitignore |\n| No idempotency | Duplicate records | Idempotency keys |\n| Unverified webhooks | Security audit | Signature verification |\n| Missing error handling | Crashes | Try-catch, types |\n| Hardcoded config | Code review | Environment variables |\n| No circuit breaker | Cascading failures | opossum, resilience4j |\n| Logging PII | Log audit | Redaction middleware |\n| No degradation | Total outages | Fallback systems |","# Exa Known Pitfalls\n\n## Overview\nCommon mistakes and anti-patterns when integrating with Exa.\n\n## Prerequisites\n- Access to Exa codebase for review\n- Understanding of async\u002Fawait patterns\n- Knowledge of security best practices\n- Familiarity with rate limiting concepts\n\n## Pitfall #1: Synchronous API Calls in Request Path\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F User waits for Exa API call\napp.post('\u002Fcheckout', async (req, res) => {\n  const payment = await exaClient.processPayment(req.body);  \u002F\u002F 2-5s latency\n  const notification = await exaClient.sendEmail(payment);   \u002F\u002F Another 1-2s\n  res.json({ success: true });  \u002F\u002F User waited 3-7s\n});\n```\n\n### ✅ Better Approach\n```typescript\n\u002F\u002F Return immediately, process async\napp.post('\u002Fcheckout', async (req, res) => {\n  const jobId = await queue.enqueue('process-checkout', req.body);\n  res.json({ jobId, status: 'processing' });  \u002F\u002F 50ms response\n});\n\n\u002F\u002F Background job\nasync function processCheckout(data) {\n  const payment = await exaClient.processPayment(data);\n  await exaClient.sendEmail(payment);\n}\n```\n\n---\n\n## Pitfall #2: Not Handling Rate Limits\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Blast requests, crash on 429\nfor (const item of items) {\n  await exaClient.process(item);  \u002F\u002F Will hit rate limit\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport pLimit from 'p-limit';\n\nconst limit = pLimit(5);  \u002F\u002F Max 5 concurrent\nconst rateLimiter = new RateLimiter({ tokensPerSecond: 10 });\n\nfor (const item of items) {\n  await rateLimiter.acquire();\n  await limit(() => exaClient.process(item));\n}\n```\n\n---\n\n## Pitfall #3: Leaking API Keys\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F In frontend code (visible to users!)\nconst client = new ExaClient({\n  apiKey: 'sk_live_ACTUAL_KEY_HERE',  \u002F\u002F Anyone can see this\n});\n\n\u002F\u002F In git history\ngit commit -m \"add API key\"  \u002F\u002F Exposed forever\n```\n\n### ✅ Better Approach\n```typescript\n\u002F\u002F Backend only, environment variable\nconst client = new ExaClient({\n  apiKey: process.env.EXA_API_KEY,\n});\n\n\u002F\u002F Use .gitignore\n.env\n.env.local\n.env.*.local\n```\n\n---\n\n## Pitfall #4: Ignoring Idempotency\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Network error on response = duplicate charge!\ntry {\n  await exaClient.charge(order);\n} catch (error) {\n  if (error.code === 'NETWORK_ERROR') {\n    await exaClient.charge(order);  \u002F\u002F Charged twice!\n  }\n}\n```\n\n### ✅ Better Approach\n```typescript\nconst idempotencyKey = `order-${order.id}-${Date.now()}`;\n\nawait exaClient.charge(order, {\n  idempotencyKey,  \u002F\u002F Safe to retry\n});\n```\n\n---\n\n## Pitfall #5: Not Validating Webhooks\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Trust any incoming request\napp.post('\u002Fwebhook', (req, res) => {\n  processWebhook(req.body);  \u002F\u002F Attacker can send fake events\n  res.sendStatus(200);\n});\n```\n\n### ✅ Better Approach\n```typescript\napp.post('\u002Fwebhook',\n  express.raw({ type: 'application\u002Fjson' }),\n  (req, res) => {\n    const signature = req.headers['x-exa-signature'];\n    if (!verifyExaSignature(req.body, signature)) {\n      return res.sendStatus(401);\n    }\n    processWebhook(JSON.parse(req.body));\n    res.sendStatus(200);\n  }\n);\n```\n\n---\n\n## Pitfall #6: Missing Error Handling\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Crashes on any error\nconst result = await exaClient.get(id);\nconsole.log(result.data.nested.value);  \u002F\u002F TypeError if missing\n```\n\n### ✅ Better Approach\n```typescript\ntry {\n  const result = await exaClient.get(id);\n  console.log(result?.data?.nested?.value ?? 'default');\n} catch (error) {\n  if (error instanceof ExaNotFoundError) {\n    return null;\n  }\n  if (error instanceof ExaRateLimitError) {\n    await sleep(error.retryAfter);\n    return this.get(id);  \u002F\u002F Retry\n  }\n  throw error;  \u002F\u002F Rethrow unknown errors\n}\n```\n\n---\n\n## Pitfall #7: Hardcoding Configuration\n\n### ❌ Anti-Pattern\n```typescript\nconst client = new ExaClient({\n  timeout: 5000,  \u002F\u002F Too short for some operations\n  baseUrl: 'https:\u002F\u002Fapi.exa.com',  \u002F\u002F Can't change for staging\n});\n```\n\n### ✅ Better Approach\n```typescript\nconst client = new ExaClient({\n  timeout: parseInt(process.env.EXA_TIMEOUT || '30000'),\n  baseUrl: process.env.EXA_BASE_URL || 'https:\u002F\u002Fapi.exa.com',\n});\n```\n\n---\n\n## Pitfall #8: Not Implementing Circuit Breaker\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F When Exa is down, every request hangs\nfor (const user of users) {\n  await exaClient.sync(user);  \u002F\u002F All timeout sequentially\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport CircuitBreaker from 'opossum';\n\nconst breaker = new CircuitBreaker(exaClient.sync, {\n  timeout: 10000,\n  errorThresholdPercentage: 50,\n  resetTimeout: 30000,\n});\n\n\u002F\u002F Fails fast when circuit is open\nfor (const user of users) {\n  await breaker.fire(user).catch(handleFailure);\n}\n```\n\n---\n\n## Pitfall #9: Logging Sensitive Data\n\n### ❌ Anti-Pattern\n```typescript\nconsole.log('Request:', JSON.stringify(request));  \u002F\u002F Logs API key, PII\nconsole.log('User:', user);  \u002F\u002F Logs email, phone\n```\n\n### ✅ Better Approach\n```typescript\nconst redacted = {\n  ...request,\n  apiKey: '[REDACTED]',\n  user: { id: user.id },  \u002F\u002F Only non-sensitive fields\n};\nconsole.log('Request:', JSON.stringify(redacted));\n```\n\n---\n\n## Pitfall #10: No Graceful Degradation\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F Entire feature broken if Exa is down\nconst recommendations = await exaClient.getRecommendations(userId);\nreturn renderPage({ recommendations });  \u002F\u002F Page crashes\n```\n\n### ✅ Better Approach\n```typescript\nlet recommendations;\ntry {\n  recommendations = await exaClient.getRecommendations(userId);\n} catch (error) {\n  recommendations = await getFallbackRecommendations(userId);\n  reportDegradedService('exa', error);\n}\nreturn renderPage({ recommendations, degraded: !recommendations });\n```\n\n---\n\n## Instructions\n\n### Step 1: Review for Anti-Patterns\nScan codebase for each pitfall pattern.\n\n### Step 2: Prioritize Fixes\nAddress security issues first, then performance.\n\n### Step 3: Implement Better Approach\nReplace anti-patterns with recommended patterns.\n\n### Step 4: Add Prevention\nSet up linting and CI checks to prevent recurrence.\n\n## Output\n- Anti-patterns identified\n- Fixes prioritized and implemented\n- Prevention measures in place\n- Code quality improved\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Too many findings | Legacy codebase | Prioritize security first |\n| Pattern not detected | Complex code | Manual review |\n| False positive | Similar code | Whitelist exceptions |\n| Fix breaks tests | Behavior change | Update tests |\n\n## Examples\n\n### Quick Pitfall Scan\n```bash\n# Check for common pitfalls\ngrep -r \"sk_live_\" --include=\"*.ts\" src\u002F        # Key leakage\ngrep -r \"console.log\" --include=\"*.ts\" src\u002F     # Potential PII logging\n```\n\n## Resources\n- [Exa Security Guide](https:\u002F\u002Fdocs.exa.com\u002Fsecurity)\n- [Exa Best Practices](https:\u002F\u002Fdocs.exa.com\u002Fbest-practices)\n\n## Quick Reference Card\n\n| Pitfall | Detection | Prevention |\n|---------|-----------|------------|\n| Sync in request | High latency | Use queues |\n| Rate limit ignore | 429 errors | Implement backoff |\n| Key leakage | Git history scan | Env vars, .gitignore |\n| No idempotency | Duplicate records | Idempotency keys |\n| Unverified webhooks | Security audit | Signature verification |\n| Missing error handling | Crashes | Try-catch, types |\n| Hardcoded config | Code review | Environment variables |\n| No circuit breaker | Cascading failures | opossum, resilience4j |\n| Logging PII | Log audit | Redaction middleware |\n| No degradation | Total outages | Fallback systems |",{"name":5,"author":59,"license":15,"version":60,"description":61,"allowed-tools":62},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Identify and avoid Exa anti-patterns and common integration mistakes.\nUse when reviewing Exa code for issues, onboarding new developers,\nor auditing existing Exa integrations for best practices violations.\nTrigger with phrases like \"exa mistakes\", \"exa anti-patterns\",\n\"exa pitfalls\", \"exa what not to do\", \"exa code review\".\n","Read, Grep","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fexa-pack\u002Fskills\u002Fexa-known-pitfalls",231,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-12 03:15:57",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill exa-known-pitfalls",{"tool":78,"command":79},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill exa-known-pitfalls",{"tool":81,"command":82},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill exa-known-pitfalls","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fexa-pack\u002Fskills\u002Fexa-known-pitfalls\u002FSKILL.md",true,[],[87,124,148,174,199,220],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":91,"licenseFileUrl":92,"sourceHtmlUrl":93,"categories":94,"keywords":98,"publishedAt":54},"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",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,43,117,118,119,120,121,36,122,123],"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","jsx","suite",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":91,"licenseFileUrl":128,"sourceHtmlUrl":129,"categories":130,"keywords":135,"publishedAt":54},"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",[131,134],{"categoryNo":132,"categoryName":133,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},[136,137,138,104,139,140,100,141,142,143,114,144,145,146,147,37,36],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":152,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":54},"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",[],[156,157,158,159,160,161,162,163,43,164,165,166,167,168,169,170,37,171,172,173,36,34],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":91,"licenseFileUrl":178,"sourceHtmlUrl":179,"categories":180,"keywords":184,"publishedAt":54},"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",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[185,186,187,188,189,190,191,192,47,193,194,195,196,197,37,36,198,34,33],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","specialized","guide","new skill","existing skill","users","Existing",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":203,"sourceHtmlUrl":204,"categories":205,"keywords":207,"publishedAt":54},"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",[206],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},[201,208,209,210,211,212,52,143,213,214,43,215,216,217,218,36,219],"google","browser automation","gemini","automation","auth","library","management","only","document","query","Citation","source",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":91,"licenseFileUrl":224,"sourceHtmlUrl":225,"categories":226,"keywords":233,"publishedAt":54},"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",[227,230],{"categoryNo":228,"categoryName":229,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":231,"categoryName":232,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[234,235,236,186,237,115,238,239,191,43,240,197,241,242,243,36,244,34],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]