[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6R20VQ98KDX4J37TGE0FNHW":3,"skill-same:01M6R20VQ98KDX4J37TGE0FNHW":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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6R20VQ98KDX4J37TGE0FNHW","exa-rate-limits",null,"Implement Exa rate limiting, backoff, and idempotency patterns.\nUse when handling rate limit errors, implementing retry logic,\nor optimizing API request throughput for Exa.\nTrigger with phrases like \"exa rate limit\", \"exa throttling\",\n\"exa 429\", \"exa retry\", \"exa backoff\".","VRIL-LABS\u002Fskill-jam","VRIL-LABS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F272046472?v=4","01M6QR9PNWM28WZYJJASER1RG2","𝗩𝗥𝗜𝗟 𝗟𝗔𝗕𝗦","01M6QR9PT6Q6JDCQ97EQBDX6E4",2,"MIT","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fsearch-research\u002Fjeremylongshore-claude-code-plugins-plus-skills-exa-rate-limits-1.0.0\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"limits","rate","exa","exa rate limits","when","throttling","request","rate limit","for","implementing","limit","errors","retry","throughput","io","patterns","edit","write","read","api","2026-11-10 10:12:30",false,"---\nname: exa-rate-limits\ndescription: |\n  Implement Exa rate limiting, backoff, and idempotency patterns.\n  Use when handling rate limit errors, implementing retry logic,\n  or optimizing API request throughput for Exa.\n  Trigger with phrases like \"exa rate limit\", \"exa throttling\",\n  \"exa 429\", \"exa retry\", \"exa backoff\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Exa Rate Limits\n\n## Overview\nHandle Exa rate limits gracefully with exponential backoff and idempotency.\n\n## Prerequisites\n- Exa SDK installed\n- Understanding of async\u002Fawait patterns\n- Access to rate limit headers\n\n## Instructions\n\n### Step 1: Understand Rate Limit Tiers\n\n| Tier | Requests\u002Fmin | Requests\u002Fday | Burst |\n|------|-------------|--------------|-------|\n| Free | 60 | 1,000 | 10 |\n| Pro | 300 | 10,000 | 50 |\n| Enterprise | 1,000 | 100,000 | 200 |\n\n### Step 2: Implement Exponential Backoff with Jitter\n\n```typescript\nasync function withExponentialBackoff\u003CT>(\n  operation: () => Promise\u003CT>,\n  config = { maxRetries: 5, baseDelayMs: 1000, maxDelayMs: 32000, jitterMs: 500 }\n): Promise\u003CT> {\n  for (let attempt = 0; attempt \u003C= config.maxRetries; attempt++) {\n    try {\n      return await operation();\n    } catch (error: any) {\n      if (attempt === config.maxRetries) throw error;\n      const status = error.status || error.response?.status;\n      if (status !== 429 && (status \u003C 500 || status >= 600)) throw error;\n\n      \u002F\u002F Exponential delay with jitter to prevent thundering herd\n      const exponentialDelay = config.baseDelayMs * Math.pow(2, attempt);\n      const jitter = Math.random() * config.jitterMs;\n      const delay = Math.min(exponentialDelay + jitter, config.maxDelayMs);\n\n      console.log(`Rate limited. Retrying in ${delay.toFixed(0)}ms...`);\n      await new Promise(r => setTimeout(r, delay));\n    }\n  }\n  throw new Error('Unreachable');\n}\n```\n\n### Step 3: Add Idempotency Keys\n\n```typescript\nimport { v4 as uuidv4 } from 'uuid';\nimport crypto from 'crypto';\n\n\u002F\u002F Generate deterministic key from operation params (for safe retries)\nfunction generateIdempotencyKey(operation: string, params: Record\u003Cstring, any>): string {\n  const data = JSON.stringify({ operation, params });\n  return crypto.createHash('sha256').update(data).digest('hex');\n}\n\nasync function idempotentRequest\u003CT>(\n  client: ExaClient,\n  params: Record\u003Cstring, any>,\n  idempotencyKey?: string  \u002F\u002F Pass existing key for retries\n): Promise\u003CT> {\n  \u002F\u002F Use provided key (for retries) or generate deterministic key from params\n  const key = idempotencyKey || generateIdempotencyKey(params.method || 'POST', params);\n  return client.request({\n    ...params,\n    headers: { 'Idempotency-Key': key, ...params.headers },\n  });\n}\n```\n\n## Output\n- Reliable API calls with automatic retry\n- Idempotent requests preventing duplicates\n- Rate limit headers properly handled\n\n## Error Handling\n| Header | Description | Action |\n|--------|-------------|--------|\n| X-RateLimit-Limit | Max requests | Monitor usage |\n| X-RateLimit-Remaining | Remaining requests | Throttle if low |\n| X-RateLimit-Reset | Reset timestamp | Wait until reset |\n| Retry-After | Seconds to wait | Honor this value |\n\n## Examples\n\n### Queue-Based Rate Limiting\n```typescript\nimport PQueue from 'p-queue';\n\nconst queue = new PQueue({\n  concurrency: 5,\n  interval: 1000,\n  intervalCap: 10,\n});\n\nasync function queuedRequest\u003CT>(operation: () => Promise\u003CT>): Promise\u003CT> {\n  return queue.add(operation);\n}\n```\n\n### Monitor Rate Limit Usage\n```typescript\nclass RateLimitMonitor {\n  private remaining: number = 60;\n  private resetAt: Date = new Date();\n\n  updateFromHeaders(headers: Headers) {\n    this.remaining = parseInt(headers.get('X-RateLimit-Remaining') || '60');\n    const resetTimestamp = headers.get('X-RateLimit-Reset');\n    if (resetTimestamp) {\n      this.resetAt = new Date(parseInt(resetTimestamp) * 1000);\n    }\n  }\n\n  shouldThrottle(): boolean {\n    \u002F\u002F Only throttle if low remaining AND reset hasn't happened yet\n    return this.remaining \u003C 5 && new Date() \u003C this.resetAt;\n  }\n\n  getWaitTime(): number {\n    return Math.max(0, this.resetAt.getTime() - Date.now());\n  }\n}\n```\n\n## Resources\n- [Exa Rate Limits](https:\u002F\u002Fdocs.exa.com\u002Frate-limits)\n- [p-queue Documentation](https:\u002F\u002Fgithub.com\u002Fsindresorhus\u002Fp-queue)\n\n## Next Steps\nFor security configuration, see `exa-security-basics`.","# Exa Rate Limits\n\n## Overview\nHandle Exa rate limits gracefully with exponential backoff and idempotency.\n\n## Prerequisites\n- Exa SDK installed\n- Understanding of async\u002Fawait patterns\n- Access to rate limit headers\n\n## Instructions\n\n### Step 1: Understand Rate Limit Tiers\n\n| Tier | Requests\u002Fmin | Requests\u002Fday | Burst |\n|------|-------------|--------------|-------|\n| Free | 60 | 1,000 | 10 |\n| Pro | 300 | 10,000 | 50 |\n| Enterprise | 1,000 | 100,000 | 200 |\n\n### Step 2: Implement Exponential Backoff with Jitter\n\n```typescript\nasync function withExponentialBackoff\u003CT>(\n  operation: () => Promise\u003CT>,\n  config = { maxRetries: 5, baseDelayMs: 1000, maxDelayMs: 32000, jitterMs: 500 }\n): Promise\u003CT> {\n  for (let attempt = 0; attempt \u003C= config.maxRetries; attempt++) {\n    try {\n      return await operation();\n    } catch (error: any) {\n      if (attempt === config.maxRetries) throw error;\n      const status = error.status || error.response?.status;\n      if (status !== 429 && (status \u003C 500 || status >= 600)) throw error;\n\n      \u002F\u002F Exponential delay with jitter to prevent thundering herd\n      const exponentialDelay = config.baseDelayMs * Math.pow(2, attempt);\n      const jitter = Math.random() * config.jitterMs;\n      const delay = Math.min(exponentialDelay + jitter, config.maxDelayMs);\n\n      console.log(`Rate limited. Retrying in ${delay.toFixed(0)}ms...`);\n      await new Promise(r => setTimeout(r, delay));\n    }\n  }\n  throw new Error('Unreachable');\n}\n```\n\n### Step 3: Add Idempotency Keys\n\n```typescript\nimport { v4 as uuidv4 } from 'uuid';\nimport crypto from 'crypto';\n\n\u002F\u002F Generate deterministic key from operation params (for safe retries)\nfunction generateIdempotencyKey(operation: string, params: Record\u003Cstring, any>): string {\n  const data = JSON.stringify({ operation, params });\n  return crypto.createHash('sha256').update(data).digest('hex');\n}\n\nasync function idempotentRequest\u003CT>(\n  client: ExaClient,\n  params: Record\u003Cstring, any>,\n  idempotencyKey?: string  \u002F\u002F Pass existing key for retries\n): Promise\u003CT> {\n  \u002F\u002F Use provided key (for retries) or generate deterministic key from params\n  const key = idempotencyKey || generateIdempotencyKey(params.method || 'POST', params);\n  return client.request({\n    ...params,\n    headers: { 'Idempotency-Key': key, ...params.headers },\n  });\n}\n```\n\n## Output\n- Reliable API calls with automatic retry\n- Idempotent requests preventing duplicates\n- Rate limit headers properly handled\n\n## Error Handling\n| Header | Description | Action |\n|--------|-------------|--------|\n| X-RateLimit-Limit | Max requests | Monitor usage |\n| X-RateLimit-Remaining | Remaining requests | Throttle if low |\n| X-RateLimit-Reset | Reset timestamp | Wait until reset |\n| Retry-After | Seconds to wait | Honor this value |\n\n## Examples\n\n### Queue-Based Rate Limiting\n```typescript\nimport PQueue from 'p-queue';\n\nconst queue = new PQueue({\n  concurrency: 5,\n  interval: 1000,\n  intervalCap: 10,\n});\n\nasync function queuedRequest\u003CT>(operation: () => Promise\u003CT>): Promise\u003CT> {\n  return queue.add(operation);\n}\n```\n\n### Monitor Rate Limit Usage\n```typescript\nclass RateLimitMonitor {\n  private remaining: number = 60;\n  private resetAt: Date = new Date();\n\n  updateFromHeaders(headers: Headers) {\n    this.remaining = parseInt(headers.get('X-RateLimit-Remaining') || '60');\n    const resetTimestamp = headers.get('X-RateLimit-Reset');\n    if (resetTimestamp) {\n      this.resetAt = new Date(parseInt(resetTimestamp) * 1000);\n    }\n  }\n\n  shouldThrottle(): boolean {\n    \u002F\u002F Only throttle if low remaining AND reset hasn't happened yet\n    return this.remaining \u003C 5 && new Date() \u003C this.resetAt;\n  }\n\n  getWaitTime(): number {\n    return Math.max(0, this.resetAt.getTime() - Date.now());\n  }\n}\n```\n\n## Resources\n- [Exa Rate Limits](https:\u002F\u002Fdocs.exa.com\u002Frate-limits)\n- [p-queue Documentation](https:\u002F\u002Fgithub.com\u002Fsindresorhus\u002Fp-queue)\n\n## Next Steps\nFor security configuration, see `exa-security-basics`.",{"name":5,"author":44,"license":15,"version":45,"description":46,"allowed-tools":47},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement Exa rate limiting, backoff, and idempotency patterns.\nUse when handling rate limit errors, implementing retry logic,\nor optimizing API request throughput for Exa.\nTrigger with phrases like \"exa rate limit\", \"exa throttling\",\n\"exa 429\", \"exa retry\", \"exa backoff\".\n","Read, Write, Edit","main","5b00ad8b9f0787969474ff5e9ec417bb55f23827","skills\u002Fsearch-research\u002Fjeremylongshore-claude-code-plugins-plus-skills-exa-rate-limits-1.0.0",0,"https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam","https:\u002F\u002Fvril.li","https:\u002F\u002Fgithub.com\u002FVRIL-LABS","vril.li","𝗥𝗲𝘀𝗲𝗮𝗿𝗰𝗵 𝗮𝗻𝗱 𝗗𝗲𝘃𝗲𝗹𝗼𝗽𝗺𝗲𝗻𝘁 𝗖𝗼𝗻𝘀𝗼𝗿𝘁𝗶𝘂𝗺","2026-08-24 09:21:38",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add VRIL-LABS\u002Fskill-jam --skill exa-rate-limits",{"tool":64,"command":65},"bunx","bunx skills add VRIL-LABS\u002Fskill-jam --skill exa-rate-limits",{"tool":67,"command":68},"pnpm","pnpm dlx skills add VRIL-LABS\u002Fskill-jam --skill exa-rate-limits","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fsearch-research\u002Fjeremylongshore-claude-code-plugins-plus-skills-exa-rate-limits-1.0.0\u002FSKILL.md",true,[],[73,104,117,132,168,192],{"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":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":39},"01M6R2CQRG190P09DAHMF8M5QP","three-best-practices","Three.js performance optimization and best practices guidelines. Use when writing, reviewing, or optimizing Three.js code. Triggers on tasks involving 3D scenes, WebGL\u002FWebGPU rendering, geometries, materials, textures, lighting, shaders, or TSL.","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fweb-frontend\u002Fneversight-skills_feed-three-best-practices-1.0.2\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,23,103],"best practices","three","three best practices","writing","performance","webgpu","guidelines","tasks","code","shaders","Optimization","3D","use","agent-skills","scenes","lighting","triggers","rendering","best practices guidelines",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":39},"01M6R2BPMDYK9XKWPARY0S5MS3","javascript-best-practices","Modern JavaScript best practices and performance optimization guidelines. Use when writing, reviewing, or refactoring JavaScript code to ensure optimal performance, maintainability, and modern patterns.","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fweb-frontend\u002Fneversight-skills_feed-javascript-best-practices-1.0.2\u002FSKILL.md",[],[111,85,112,88,89,91,93,95,113,114,97,34,115,116,23],"javascript","JavaScript Best Practices","refactoring","performance optimization","maintainability","name",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":126,"publishedAt":39},"01M6R2B41BN09FYH76BAC5FT7X","css-best-practices","Guidelines for building modern, performant, and accessible CSS using MDN best practices. Use this when styling components, fixing layout shifts, or optimizing CSS performance.","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fweb-frontend\u002Fneversight-skills_feed-css-best-practices-1.0.3\u002FSKILL.md",[123],{"categoryNo":124,"categoryName":125,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000009","前端开发",[127,85,128,89,129,91,97,130,131,27,23],"css","css best practices","components","styling","layout",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":150,"publishedAt":39},"01M6R2A1CEF123TZCNM1XJ2XQ4","frontend-dev","Full-stack frontend development combining premium UI design, cinematic animations,\nAI-generated media assets, persuasive copywriting, and visual art. Builds complete,\nvisually striking web pages with real media, advanced motion, and compelling copy.\nUse when: building landing pages, marketing sites, product pages, dashboards,\ngenerating media assets (image\u002Fvideo\u002Faudio\u002Fmusic), writing conversion copy,\ncreating generative art, or implementing cinematic scroll animations.","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fweb-frontend\u002Fminimax-ai-skills-frontend-dev-1.0.1\u002FSKILL.md",[138,139,142,145],{"categoryNo":124,"categoryName":125,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":140,"categoryName":141,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":143,"categoryName":144,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[151,152,153,154,88,155,127,156,157,158,159,160,161,162,163,164,165,28,166,167],"frontend","dev","frontend dev","design","image","react","ui","Video","Media","Audio","Tailwind","stack","music","aida","framer motion","framer","generative",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":177,"publishedAt":39},"01M6R20FV0TM7ZZTZNG7JQ1A82","exa-deploy-integration","Deploy Exa integrations to Vercel, Fly.io, and Cloud Run platforms.\nUse when deploying Exa-powered applications to production,\nconfiguring platform-specific secrets, or setting up deployment pipelines.\nTrigger with phrases like \"deploy exa\", \"exa Vercel\",\n\"exa production deploy\", \"exa Cloud Run\", \"exa Fly.io\".","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fsearch-research\u002Fjeremylongshore-claude-code-plugins-plus-skills-exa-deploy-integration-1.0.0\u002FSKILL.md",[174],{"categoryNo":175,"categoryName":176,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000011","运维与部署",[178,179,21,180,181,182,183,184,185,186,37,36,35,187,188,189,33,190,191,23],"deploy","integration","exa deploy integration","deployment","run","secrets","fly","Bash","integrations","vercel","up","platform","trigger","cloud run",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":199,"publishedAt":39},"01M6R20A4AFVVEX6952MKH9HMM","exa-core-workflow-a","Execute Exa primary workflow: Core Workflow A.\nUse when implementing primary use case,\nbuilding main features, or core integration tasks.\nTrigger with phrases like \"exa main workflow\",\n\"primary task with exa\".","https:\u002F\u002Fgithub.com\u002FVRIL-LABS\u002Fskill-jam\u002Fblob\u002Fmain\u002Fskills\u002Fsearch-research\u002Fjeremylongshore-claude-code-plugins-plus-skills-exa-core-workflow-a-1.0.0\u002FSKILL.md",[198],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[200,201,21,202,203,92,93,185,37,36,35,97,204,48,33,190,205,28,206,23],"workflow","core","exa core workflow a","openclaw","task","with","features"]