[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6PTPTTAGD0Z8D72PDGRQW":3,"skill-same:01M6F6PTPTTAGD0Z8D72PDGRQW":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},"01M6F6PTPTTAGD0Z8D72PDGRQW","firecrawl-known-pitfalls",null,"Identify and avoid FireCrawl anti-patterns and common integration mistakes.\nUse when reviewing FireCrawl code for issues, onboarding new developers,\nor auditing existing FireCrawl integrations for best practices violations.\nTrigger with phrases like \"firecrawl mistakes\", \"firecrawl anti-patterns\",\n\"firecrawl pitfalls\", \"firecrawl what not to do\", \"firecrawl code review\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1992,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Ffirecrawl-pack\u002Fskills\u002Ffirecrawl-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","firecrawl known pitfalls","firecrawl","use","new","when","mistakes","for","with","trigger","io","patterns","do","anti-patterns","code review","read","grep","common","integrations","integration","onboarding","issues","best practices","code","review","2026-11-10 10:12:30",false,"---\nname: firecrawl-known-pitfalls\ndescription: |\n  Identify and avoid FireCrawl anti-patterns and common integration mistakes.\n  Use when reviewing FireCrawl code for issues, onboarding new developers,\n  or auditing existing FireCrawl integrations for best practices violations.\n  Trigger with phrases like \"firecrawl mistakes\", \"firecrawl anti-patterns\",\n  \"firecrawl pitfalls\", \"firecrawl what not to do\", \"firecrawl code review\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# FireCrawl Known Pitfalls\n\n## Overview\nCommon mistakes and anti-patterns when integrating with FireCrawl.\n\n## Prerequisites\n- Access to FireCrawl 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 FireCrawl API call\napp.post('\u002Fcheckout', async (req, res) => {\n  const payment = await firecrawlClient.processPayment(req.body);  \u002F\u002F 2-5s latency\n  const notification = await firecrawlClient.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 firecrawlClient.processPayment(data);\n  await firecrawlClient.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 firecrawlClient.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(() => firecrawlClient.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 FireCrawlClient({\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 FireCrawlClient({\n  apiKey: process.env.FIRECRAWL_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 firecrawlClient.charge(order);\n} catch (error) {\n  if (error.code === 'NETWORK_ERROR') {\n    await firecrawlClient.charge(order);  \u002F\u002F Charged twice!\n  }\n}\n```\n\n### ✅ Better Approach\n```typescript\nconst idempotencyKey = `order-${order.id}-${Date.now()}`;\n\nawait firecrawlClient.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-firecrawl-signature'];\n    if (!verifyFireCrawlSignature(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 firecrawlClient.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 firecrawlClient.get(id);\n  console.log(result?.data?.nested?.value ?? 'default');\n} catch (error) {\n  if (error instanceof FireCrawlNotFoundError) {\n    return null;\n  }\n  if (error instanceof FireCrawlRateLimitError) {\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 FireCrawlClient({\n  timeout: 5000,  \u002F\u002F Too short for some operations\n  baseUrl: 'https:\u002F\u002Fapi.firecrawl.com',  \u002F\u002F Can't change for staging\n});\n```\n\n### ✅ Better Approach\n```typescript\nconst client = new FireCrawlClient({\n  timeout: parseInt(process.env.FIRECRAWL_TIMEOUT || '30000'),\n  baseUrl: process.env.FIRECRAWL_BASE_URL || 'https:\u002F\u002Fapi.firecrawl.com',\n});\n```\n\n---\n\n## Pitfall #8: Not Implementing Circuit Breaker\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F When FireCrawl is down, every request hangs\nfor (const user of users) {\n  await firecrawlClient.sync(user);  \u002F\u002F All timeout sequentially\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport CircuitBreaker from 'opossum';\n\nconst breaker = new CircuitBreaker(firecrawlClient.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 FireCrawl is down\nconst recommendations = await firecrawlClient.getRecommendations(userId);\nreturn renderPage({ recommendations });  \u002F\u002F Page crashes\n```\n\n### ✅ Better Approach\n```typescript\nlet recommendations;\ntry {\n  recommendations = await firecrawlClient.getRecommendations(userId);\n} catch (error) {\n  recommendations = await getFallbackRecommendations(userId);\n  reportDegradedService('firecrawl', 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- [FireCrawl Security Guide](https:\u002F\u002Fdocs.firecrawl.com\u002Fsecurity)\n- [FireCrawl Best Practices](https:\u002F\u002Fdocs.firecrawl.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 |","# FireCrawl Known Pitfalls\n\n## Overview\nCommon mistakes and anti-patterns when integrating with FireCrawl.\n\n## Prerequisites\n- Access to FireCrawl 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 FireCrawl API call\napp.post('\u002Fcheckout', async (req, res) => {\n  const payment = await firecrawlClient.processPayment(req.body);  \u002F\u002F 2-5s latency\n  const notification = await firecrawlClient.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 firecrawlClient.processPayment(data);\n  await firecrawlClient.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 firecrawlClient.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(() => firecrawlClient.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 FireCrawlClient({\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 FireCrawlClient({\n  apiKey: process.env.FIRECRAWL_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 firecrawlClient.charge(order);\n} catch (error) {\n  if (error.code === 'NETWORK_ERROR') {\n    await firecrawlClient.charge(order);  \u002F\u002F Charged twice!\n  }\n}\n```\n\n### ✅ Better Approach\n```typescript\nconst idempotencyKey = `order-${order.id}-${Date.now()}`;\n\nawait firecrawlClient.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-firecrawl-signature'];\n    if (!verifyFireCrawlSignature(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 firecrawlClient.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 firecrawlClient.get(id);\n  console.log(result?.data?.nested?.value ?? 'default');\n} catch (error) {\n  if (error instanceof FireCrawlNotFoundError) {\n    return null;\n  }\n  if (error instanceof FireCrawlRateLimitError) {\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 FireCrawlClient({\n  timeout: 5000,  \u002F\u002F Too short for some operations\n  baseUrl: 'https:\u002F\u002Fapi.firecrawl.com',  \u002F\u002F Can't change for staging\n});\n```\n\n### ✅ Better Approach\n```typescript\nconst client = new FireCrawlClient({\n  timeout: parseInt(process.env.FIRECRAWL_TIMEOUT || '30000'),\n  baseUrl: process.env.FIRECRAWL_BASE_URL || 'https:\u002F\u002Fapi.firecrawl.com',\n});\n```\n\n---\n\n## Pitfall #8: Not Implementing Circuit Breaker\n\n### ❌ Anti-Pattern\n```typescript\n\u002F\u002F When FireCrawl is down, every request hangs\nfor (const user of users) {\n  await firecrawlClient.sync(user);  \u002F\u002F All timeout sequentially\n}\n```\n\n### ✅ Better Approach\n```typescript\nimport CircuitBreaker from 'opossum';\n\nconst breaker = new CircuitBreaker(firecrawlClient.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 FireCrawl is down\nconst recommendations = await firecrawlClient.getRecommendations(userId);\nreturn renderPage({ recommendations });  \u002F\u002F Page crashes\n```\n\n### ✅ Better Approach\n```typescript\nlet recommendations;\ntry {\n  recommendations = await firecrawlClient.getRecommendations(userId);\n} catch (error) {\n  recommendations = await getFallbackRecommendations(userId);\n  reportDegradedService('firecrawl', 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- [FireCrawl Security Guide](https:\u002F\u002Fdocs.firecrawl.com\u002Fsecurity)\n- [FireCrawl Best Practices](https:\u002F\u002Fdocs.firecrawl.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 FireCrawl anti-patterns and common integration mistakes.\nUse when reviewing FireCrawl code for issues, onboarding new developers,\nor auditing existing FireCrawl integrations for best practices violations.\nTrigger with phrases like \"firecrawl mistakes\", \"firecrawl anti-patterns\",\n\"firecrawl pitfalls\", \"firecrawl what not to do\", \"firecrawl code review\".\n","Read, Grep","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Ffirecrawl-pack\u002Fskills\u002Ffirecrawl-known-pitfalls",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-15 01:54:15",{"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 firecrawl-known-pitfalls",{"tool":78,"command":79},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill firecrawl-known-pitfalls",{"tool":81,"command":82},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill firecrawl-known-pitfalls","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Ffirecrawl-pack\u002Fskills\u002Ffirecrawl-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,32,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,32,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,32,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,32,240,197,241,242,243,36,244,34],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]