[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FACATBS3MWWMVG3VJ6DKV9":3,"skill-same:01M6FACATBS3MWWMVG3VJ6DKV9":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":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":66,"repositoryHtmlUrl":67,"repositoryHomepageUrl":68,"ownerHtmlUrl":69,"ownerBlogUrl":6,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M6FACATBS3MWWMVG3VJ6DKV9","exa-multi-env-setup",null,"Configure Exa across development, staging, and production environments.\nUse when setting up multi-environment search pipelines, managing API key isolation,\nor configuring per-environment search limits and caching.\nTrigger with phrases like \"exa environments\", \"exa staging\", \"exa dev prod\",\n\"exa environment setup\", \"exa multi-env\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-multi-env-setup\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","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],"setup","exa multi env setup","multi","env setup","env","exa","configure","read","write","edit","up","multi-environment","Bash","caching","across","api","io","search","code","openclaw","2026-11-10 10:12:30",false,"---\nname: exa-multi-env-setup\ndescription: |\n  Configure Exa across development, staging, and production environments.\n  Use when setting up multi-environment search pipelines, managing API key isolation,\n  or configuring per-environment search limits and caching.\n  Trigger with phrases like \"exa environments\", \"exa staging\", \"exa dev prod\",\n  \"exa environment setup\", \"exa multi-env\".\nallowed-tools: Read, Write, Edit, Bash(aws:*), Bash(gcloud:*), Bash(vault:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, exa, deployment, api, environments]\n\n---\n# Exa Multi-Environment Setup\n\n## Overview\nExa charges per search request at `api.exa.ai`. Multi-environment setup focuses on API key isolation per environment, request limits and caching to control costs in staging, and appropriate `numResults`\u002Fcontent settings per tier.\n\n## Prerequisites\n- Exa API key(s) from dashboard.exa.ai\n- `exa-js` installed (`npm install exa-js`)\n- Optional: Redis for search result caching in staging\u002Fproduction\n\n## Environment Strategy\n\n| Environment | Key Isolation | numResults | Content | Cache TTL |\n|-------------|---------------|------------|---------|-----------|\n| Development | Shared dev key | 3 | highlights only | None |\n| Staging | Staging key | 5 | text (1000 chars) | 5 min |\n| Production | Prod key | 10 | text (2000 chars) | 1 hour |\n\n## Instructions\n\n### Step 1: Environment-Aware Configuration\n```typescript\n\u002F\u002F config\u002Fexa.ts\nimport Exa from \"exa-js\";\n\ntype Env = \"development\" | \"staging\" | \"production\";\n\ninterface ExaEnvConfig {\n  apiKey: string;\n  defaultNumResults: number;\n  maxCharacters: number;\n  searchType: \"auto\" | \"neural\" | \"keyword\";\n  cacheEnabled: boolean;\n  cacheTtlSeconds: number;\n}\n\nconst configs: Record\u003CEnv, Omit\u003CExaEnvConfig, \"apiKey\"> & { keyVar: string }> = {\n  development: {\n    keyVar: \"EXA_API_KEY\",\n    defaultNumResults: 3,\n    maxCharacters: 500,\n    searchType: \"auto\",\n    cacheEnabled: false,\n    cacheTtlSeconds: 0,\n  },\n  staging: {\n    keyVar: \"EXA_API_KEY_STAGING\",\n    defaultNumResults: 5,\n    maxCharacters: 1000,\n    searchType: \"auto\",\n    cacheEnabled: true,\n    cacheTtlSeconds: 300,  \u002F\u002F 5 minutes\n  },\n  production: {\n    keyVar: \"EXA_API_KEY_PROD\",\n    defaultNumResults: 10,\n    maxCharacters: 2000,\n    searchType: \"neural\",\n    cacheEnabled: true,\n    cacheTtlSeconds: 3600,  \u002F\u002F 1 hour\n  },\n};\n\nexport function getExaConfig(): ExaEnvConfig {\n  const env = (process.env.NODE_ENV || \"development\") as Env;\n  const config = configs[env] || configs.development;\n  const apiKey = process.env[config.keyVar];\n  if (!apiKey) {\n    throw new Error(`${config.keyVar} not set for ${env} environment`);\n  }\n  return { ...config, apiKey };\n}\n\nexport function getExaClient(): Exa {\n  return new Exa(getExaConfig().apiKey);\n}\n```\n\n### Step 2: Search Service with Config-Driven Defaults\n```typescript\n\u002F\u002F lib\u002Fexa-search.ts\nimport { getExaClient, getExaConfig } from \"..\u002Fconfig\u002Fexa\";\n\nexport async function search(query: string, numResults?: number) {\n  const exa = getExaClient();\n  const cfg = getExaConfig();\n  const n = numResults ?? cfg.defaultNumResults;\n\n  return exa.searchAndContents(query, {\n    type: cfg.searchType,\n    numResults: n,\n    text: { maxCharacters: cfg.maxCharacters },\n  });\n}\n```\n\n### Step 3: Redis Cache Layer (Staging\u002FProduction)\n```typescript\n\u002F\u002F lib\u002Fexa-cache.ts\nimport { Redis } from \"ioredis\";\nimport { getExaClient, getExaConfig } from \"..\u002Fconfig\u002Fexa\";\n\nconst redis = process.env.REDIS_URL ? new Redis(process.env.REDIS_URL) : null;\n\nexport async function cachedSearch(query: string, numResults?: number) {\n  const exa = getExaClient();\n  const cfg = getExaConfig();\n  const n = numResults ?? cfg.defaultNumResults;\n\n  if (cfg.cacheEnabled && redis) {\n    const cacheKey = `exa:${Buffer.from(`${query}:${n}:${cfg.searchType}`).toString(\"base64\")}`;\n    const cached = await redis.get(cacheKey);\n    if (cached) return JSON.parse(cached);\n\n    const results = await exa.searchAndContents(query, {\n      type: cfg.searchType,\n      numResults: n,\n      text: { maxCharacters: cfg.maxCharacters },\n    });\n\n    await redis.set(cacheKey, JSON.stringify(results), \"EX\", cfg.cacheTtlSeconds);\n    return results;\n  }\n\n  return exa.searchAndContents(query, {\n    type: cfg.searchType,\n    numResults: n,\n    text: { maxCharacters: cfg.maxCharacters },\n  });\n}\n```\n\n### Step 4: Environment Variables\n```bash\n# .env.local (development)\nEXA_API_KEY=exa-dev-key-here\n\n# .env.staging\nEXA_API_KEY_STAGING=exa-staging-key-here\nREDIS_URL=redis:\u002F\u002Fstaging-redis:6379\n\n# .env.production\nEXA_API_KEY_PROD=exa-prod-key-here\nREDIS_URL=redis:\u002F\u002Fprod-redis:6379\n```\n\n### Step 5: CI\u002FCD Secret Configuration\n```yaml\n# .github\u002Fworkflows\u002Fdeploy.yml\njobs:\n  deploy-staging:\n    environment: staging\n    env:\n      EXA_API_KEY_STAGING: ${{ secrets.EXA_API_KEY_STAGING }}\n      NODE_ENV: staging\n    steps:\n      - run: npm ci && npm run build && npm run deploy:staging\n\n  deploy-production:\n    environment: production\n    env:\n      EXA_API_KEY_PROD: ${{ secrets.EXA_API_KEY_PROD }}\n      NODE_ENV: production\n    steps:\n      - run: npm ci && npm run build && npm run deploy:prod\n```\n\n### Step 6: Health Check Per Environment\n```typescript\nexport async function checkExaHealth(): Promise\u003C{\n  status: string;\n  env: string;\n  latencyMs: number;\n}> {\n  const start = performance.now();\n  try {\n    const exa = getExaClient();\n    await exa.search(\"health check\", { numResults: 1 });\n    return {\n      status: \"healthy\",\n      env: process.env.NODE_ENV || \"development\",\n      latencyMs: Math.round(performance.now() - start),\n    };\n  } catch {\n    return {\n      status: \"unhealthy\",\n      env: process.env.NODE_ENV || \"development\",\n      latencyMs: Math.round(performance.now() - start),\n    };\n  }\n}\n```\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| `401 Unauthorized` | Wrong API key for environment | Verify correct env var name |\n| `429 rate_limit_exceeded` | Too many requests | Enable caching and request queuing |\n| High API costs in staging | No caching enabled | Enable Redis cache with 5-min TTL |\n| Empty results in dev | numResults too low | Increase from 3 to 5 |\n\n## Resources\n- [Exa API Documentation](https:\u002F\u002Fdocs.exa.ai)\n- [Exa Pricing](https:\u002F\u002Fexa.ai\u002Fpricing)\n- [exa-js SDK](https:\u002F\u002Fgithub.com\u002Fexa-labs\u002Fexa-js)\n\n## Next Steps\nFor deployment configuration, see `exa-deploy-integration`.\n\n","# Exa Multi-Environment Setup\n\n## Overview\nExa charges per search request at `api.exa.ai`. Multi-environment setup focuses on API key isolation per environment, request limits and caching to control costs in staging, and appropriate `numResults`\u002Fcontent settings per tier.\n\n## Prerequisites\n- Exa API key(s) from dashboard.exa.ai\n- `exa-js` installed (`npm install exa-js`)\n- Optional: Redis for search result caching in staging\u002Fproduction\n\n## Environment Strategy\n\n| Environment | Key Isolation | numResults | Content | Cache TTL |\n|-------------|---------------|------------|---------|-----------|\n| Development | Shared dev key | 3 | highlights only | None |\n| Staging | Staging key | 5 | text (1000 chars) | 5 min |\n| Production | Prod key | 10 | text (2000 chars) | 1 hour |\n\n## Instructions\n\n### Step 1: Environment-Aware Configuration\n```typescript\n\u002F\u002F config\u002Fexa.ts\nimport Exa from \"exa-js\";\n\ntype Env = \"development\" | \"staging\" | \"production\";\n\ninterface ExaEnvConfig {\n  apiKey: string;\n  defaultNumResults: number;\n  maxCharacters: number;\n  searchType: \"auto\" | \"neural\" | \"keyword\";\n  cacheEnabled: boolean;\n  cacheTtlSeconds: number;\n}\n\nconst configs: Record\u003CEnv, Omit\u003CExaEnvConfig, \"apiKey\"> & { keyVar: string }> = {\n  development: {\n    keyVar: \"EXA_API_KEY\",\n    defaultNumResults: 3,\n    maxCharacters: 500,\n    searchType: \"auto\",\n    cacheEnabled: false,\n    cacheTtlSeconds: 0,\n  },\n  staging: {\n    keyVar: \"EXA_API_KEY_STAGING\",\n    defaultNumResults: 5,\n    maxCharacters: 1000,\n    searchType: \"auto\",\n    cacheEnabled: true,\n    cacheTtlSeconds: 300,  \u002F\u002F 5 minutes\n  },\n  production: {\n    keyVar: \"EXA_API_KEY_PROD\",\n    defaultNumResults: 10,\n    maxCharacters: 2000,\n    searchType: \"neural\",\n    cacheEnabled: true,\n    cacheTtlSeconds: 3600,  \u002F\u002F 1 hour\n  },\n};\n\nexport function getExaConfig(): ExaEnvConfig {\n  const env = (process.env.NODE_ENV || \"development\") as Env;\n  const config = configs[env] || configs.development;\n  const apiKey = process.env[config.keyVar];\n  if (!apiKey) {\n    throw new Error(`${config.keyVar} not set for ${env} environment`);\n  }\n  return { ...config, apiKey };\n}\n\nexport function getExaClient(): Exa {\n  return new Exa(getExaConfig().apiKey);\n}\n```\n\n### Step 2: Search Service with Config-Driven Defaults\n```typescript\n\u002F\u002F lib\u002Fexa-search.ts\nimport { getExaClient, getExaConfig } from \"..\u002Fconfig\u002Fexa\";\n\nexport async function search(query: string, numResults?: number) {\n  const exa = getExaClient();\n  const cfg = getExaConfig();\n  const n = numResults ?? cfg.defaultNumResults;\n\n  return exa.searchAndContents(query, {\n    type: cfg.searchType,\n    numResults: n,\n    text: { maxCharacters: cfg.maxCharacters },\n  });\n}\n```\n\n### Step 3: Redis Cache Layer (Staging\u002FProduction)\n```typescript\n\u002F\u002F lib\u002Fexa-cache.ts\nimport { Redis } from \"ioredis\";\nimport { getExaClient, getExaConfig } from \"..\u002Fconfig\u002Fexa\";\n\nconst redis = process.env.REDIS_URL ? new Redis(process.env.REDIS_URL) : null;\n\nexport async function cachedSearch(query: string, numResults?: number) {\n  const exa = getExaClient();\n  const cfg = getExaConfig();\n  const n = numResults ?? cfg.defaultNumResults;\n\n  if (cfg.cacheEnabled && redis) {\n    const cacheKey = `exa:${Buffer.from(`${query}:${n}:${cfg.searchType}`).toString(\"base64\")}`;\n    const cached = await redis.get(cacheKey);\n    if (cached) return JSON.parse(cached);\n\n    const results = await exa.searchAndContents(query, {\n      type: cfg.searchType,\n      numResults: n,\n      text: { maxCharacters: cfg.maxCharacters },\n    });\n\n    await redis.set(cacheKey, JSON.stringify(results), \"EX\", cfg.cacheTtlSeconds);\n    return results;\n  }\n\n  return exa.searchAndContents(query, {\n    type: cfg.searchType,\n    numResults: n,\n    text: { maxCharacters: cfg.maxCharacters },\n  });\n}\n```\n\n### Step 4: Environment Variables\n```bash\n# .env.local (development)\nEXA_API_KEY=exa-dev-key-here\n\n# .env.staging\nEXA_API_KEY_STAGING=exa-staging-key-here\nREDIS_URL=redis:\u002F\u002Fstaging-redis:6379\n\n# .env.production\nEXA_API_KEY_PROD=exa-prod-key-here\nREDIS_URL=redis:\u002F\u002Fprod-redis:6379\n```\n\n### Step 5: CI\u002FCD Secret Configuration\n```yaml\n# .github\u002Fworkflows\u002Fdeploy.yml\njobs:\n  deploy-staging:\n    environment: staging\n    env:\n      EXA_API_KEY_STAGING: ${{ secrets.EXA_API_KEY_STAGING }}\n      NODE_ENV: staging\n    steps:\n      - run: npm ci && npm run build && npm run deploy:staging\n\n  deploy-production:\n    environment: production\n    env:\n      EXA_API_KEY_PROD: ${{ secrets.EXA_API_KEY_PROD }}\n      NODE_ENV: production\n    steps:\n      - run: npm ci && npm run build && npm run deploy:prod\n```\n\n### Step 6: Health Check Per Environment\n```typescript\nexport async function checkExaHealth(): Promise\u003C{\n  status: string;\n  env: string;\n  latencyMs: number;\n}> {\n  const start = performance.now();\n  try {\n    const exa = getExaClient();\n    await exa.search(\"health check\", { numResults: 1 });\n    return {\n      status: \"healthy\",\n      env: process.env.NODE_ENV || \"development\",\n      latencyMs: Math.round(performance.now() - start),\n    };\n  } catch {\n    return {\n      status: \"unhealthy\",\n      env: process.env.NODE_ENV || \"development\",\n      latencyMs: Math.round(performance.now() - start),\n    };\n  }\n}\n```\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| `401 Unauthorized` | Wrong API key for environment | Verify correct env var name |\n| `429 rate_limit_exceeded` | Too many requests | Enable caching and request queuing |\n| High API costs in staging | No caching enabled | Enable Redis cache with 5-min TTL |\n| Empty results in dev | numResults too low | Increase from 3 to 5 |\n\n## Resources\n- [Exa API Documentation](https:\u002F\u002Fdocs.exa.ai)\n- [Exa Pricing](https:\u002F\u002Fexa.ai\u002Fpricing)\n- [exa-js SDK](https:\u002F\u002Fgithub.com\u002Fexa-labs\u002Fexa-js)\n\n## Next Steps\nFor deployment configuration, see `exa-deploy-integration`.\n\n",{"name":5,"tags":54,"author":58,"license":15,"version":59,"description":60,"allowed-tools":61,"compatible-with":62},[55,34,56,44,57],"saas","deployment","environments","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure Exa across development, staging, and production environments.\nUse when setting up multi-environment search pipelines, managing API key isolation,\nor configuring per-environment search limits and caching.\nTrigger with phrases like \"exa environments\", \"exa staging\", \"exa dev prod\",\n\"exa environment setup\", \"exa multi-env\".\n","Read, Write, Edit, Bash(aws:*), Bash(gcloud:*), Bash(vault:*)","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-multi-env-setup",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill exa-multi-env-setup",{"tool":78,"command":79},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill exa-multi-env-setup",{"tool":81,"command":82},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill exa-multi-env-setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-multi-env-setup\u002FSKILL.md",true,[],[87,99,109,118,124,131],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":95,"publishedAt":49},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[92],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[96,97,98],"model","model hierarchy","model hierarchy skill",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":105,"publishedAt":49},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[104],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},[106,107,108],"MCP","zoom","zoom mcp",{"skillNo":110,"name":111,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":49},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[115,116,117,107],"sdk","zoom apps sdk","apps",{"skillNo":119,"name":120,"nameZh":6,"description":6,"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":123,"publishedAt":49},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[120],{"skillNo":125,"name":126,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":130,"publishedAt":49},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[129],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},[126],{"skillNo":132,"name":133,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":49},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[133]]