[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FABVV8BAK4MBHMBEA6PJYN":3,"skill-same:01M6FABVV8BAK4MBHMBEA6PJYN":83},{"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":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":65,"ownerHtmlUrl":66,"ownerBlogUrl":6,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6FABVV8BAK4MBHMBEA6PJYN","exa-known-pitfalls",null,"Identify and avoid Exa anti-patterns and common integration mistakes.\nUse when reviewing Exa code, onboarding new developers,\nor auditing existing Exa integrations for correctness.\nTrigger with phrases like \"exa mistakes\", \"exa anti-patterns\",\n\"exa pitfalls\", \"exa what not to do\", \"exa code review\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\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],"pitfalls","exa known pitfalls","exa","anti-patterns","correctness","trigger","io","patterns","do","best-practices","code review","use","read","common","integrations","saas","audit","code","review","openclaw","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, onboarding new developers,\n  or auditing existing Exa integrations for correctness.\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>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, exa, audit, best-practices]\n\n---\n# Exa Known Pitfalls\n\n## Overview\nReal gotchas when integrating Exa's neural search API. Exa uses embeddings-based search rather than keyword matching, which creates a different class of failure modes than traditional search APIs. This skill covers the top pitfalls with wrong\u002Fright examples.\n\n## Pitfall 1: Keyword-Style Queries\n\nExa's neural search interprets natural language semantically. Boolean operators and keyword syntax degrade results.\n\n```typescript\nimport Exa from \"exa-js\";\nconst exa = new Exa(process.env.EXA_API_KEY);\n\n\u002F\u002F BAD: keyword\u002Fboolean style — Exa ignores AND\u002FOR\nconst bad = await exa.search(\n  \"python AND machine learning OR deep learning 2024\"\n);\n\n\u002F\u002F GOOD: natural language statement\nconst good = await exa.search(\n  \"recent tutorials on building ML models with Python\",\n  { type: \"neural\", numResults: 10 }\n);\n```\n\n## Pitfall 2: Wrong Search Type\n\nUsing neural search for exact lookups (URLs, names) or keyword search for conceptual queries silently degrades quality.\n\n```typescript\n\u002F\u002F BAD: neural search for a specific URL\u002Fidentifier\nconst bad = await exa.search(\"arxiv.org\u002Fabs\u002F2301.00001\", { type: \"neural\" });\n\n\u002F\u002F GOOD: keyword for exact terms, neural for concepts\nconst exactMatch = await exa.search(\"arxiv.org\u002Fabs\u002F2301.00001\", {\n  type: \"keyword\",\n});\nconst conceptual = await exa.search(\n  \"transformer architecture improvements for long context\",\n  { type: \"neural\" }\n);\n```\n\n## Pitfall 3: Expecting Content from search()\n\n`search()` returns metadata only (URL, title, score). Content requires `searchAndContents()` or `getContents()`.\n\n```typescript\n\u002F\u002F BAD: accessing .text from search() — it's undefined\nconst results = await exa.search(\"AI safety research\");\nconst text = results.results[0].text;  \u002F\u002F undefined!\n\n\u002F\u002F GOOD: use searchAndContents for text\u002Fhighlights\nconst withContent = await exa.searchAndContents(\"AI safety research\", {\n  numResults: 5,\n  text: { maxCharacters: 2000 },\n  highlights: { maxCharacters: 500 },\n});\nconsole.log(withContent.results[0].text);       \u002F\u002F actual content\nconsole.log(withContent.results[0].highlights);  \u002F\u002F key excerpts\n```\n\n## Pitfall 4: Narrow Date Filters Return Empty\n\nDate filters silently exclude results. A single-day window often returns nothing without error.\n\n```typescript\n\u002F\u002F BAD: too narrow, likely returns empty array\nconst bad = await exa.search(\"AI news\", {\n  startPublishedDate: \"2025-03-15T00:00:00.000Z\",\n  endPublishedDate: \"2025-03-15T23:59:59.000Z\",\n});\n\n\u002F\u002F GOOD: reasonable window with fallback\nlet results = await exa.search(\"AI news\", {\n  startPublishedDate: \"2025-03-01T00:00:00.000Z\",\n  endPublishedDate: \"2025-03-31T23:59:59.000Z\",\n  numResults: 10,\n});\n\u002F\u002F Fallback if no results\nif (results.results.length === 0) {\n  results = await exa.search(\"AI news\", { numResults: 10 });\n}\n```\n\n## Pitfall 5: findSimilar Takes a URL, Not a Query\n\n`findSimilar` expects a URL as its first argument. Passing a query string gives meaningless results.\n\n```typescript\n\u002F\u002F BAD: passing a query string to findSimilar\nconst bad = await exa.findSimilar(\"machine learning research papers\");\n\n\u002F\u002F GOOD: pass a URL — findSimilar finds pages semantically similar to it\nconst good = await exa.findSimilar(\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2301.00001\", {\n  numResults: 10,\n  excludeSourceDomain: true,\n});\n```\n\n## Pitfall 6: Date Filters with company\u002Fpeople Categories\n\nThe `company` and `people` categories do NOT support date filters. Using them returns a 400 error.\n\n```typescript\n\u002F\u002F BAD: date filter with company category → 400 error\nconst bad = await exa.search(\"AI startups\", {\n  category: \"company\",\n  startPublishedDate: \"2024-01-01T00:00:00.000Z\",  \u002F\u002F not supported!\n});\n\n\u002F\u002F GOOD: company search without date filters\nconst good = await exa.search(\"AI startups\", {\n  category: \"company\",\n  numResults: 10,\n});\n```\n\n## Pitfall 7: Not Limiting Content Size\n\nRequesting full text without `maxCharacters` can return massive payloads, increasing latency and cost.\n\n```typescript\n\u002F\u002F BAD: unlimited text retrieval\nconst bad = await exa.searchAndContents(\"topic\", {\n  numResults: 20,\n  text: true,  \u002F\u002F could return megabytes of content\n});\n\n\u002F\u002F GOOD: limit content size\nconst good = await exa.searchAndContents(\"topic\", {\n  numResults: 10,\n  text: { maxCharacters: 2000 },  \u002F\u002F cap at 2000 chars per result\n  highlights: { maxCharacters: 500 },\n});\n```\n\n## Pitfall 8: Creating New Client Per Request\n\nEach `new Exa()` call creates a new HTTP client. Reuse a singleton for connection pooling.\n\n```typescript\n\u002F\u002F BAD: new client every request (in a route handler)\napp.get(\"\u002Fsearch\", async (req, res) => {\n  const exa = new Exa(process.env.EXA_API_KEY);  \u002F\u002F wasteful!\n  const results = await exa.search(req.query.q);\n  res.json(results);\n});\n\n\u002F\u002F GOOD: singleton client\nconst exa = new Exa(process.env.EXA_API_KEY);\napp.get(\"\u002Fsearch\", async (req, res) => {\n  const results = await exa.search(req.query.q);\n  res.json(results);\n});\n```\n\n## Pitfall 9: Ignoring the requestId in Errors\n\nExa error responses include `requestId` for support debugging. Always log it.\n\n```typescript\n\u002F\u002F BAD: generic error handling\ntry {\n  await exa.search(\"query\");\n} catch (err) {\n  console.error(\"Search failed\");  \u002F\u002F loses diagnostic info\n}\n\n\u002F\u002F GOOD: capture requestId\ntry {\n  await exa.search(\"query\");\n} catch (err: any) {\n  console.error(\"Search failed:\", {\n    status: err.status,\n    message: err.message,\n    requestId: err.requestId,  \u002F\u002F include when contacting support\n    tag: err.error_tag,\n  });\n}\n```\n\n## Quick Review Checklist\n- [ ] Queries are natural language, not keyword\u002Fboolean syntax\n- [ ] Search type matches the query intent (neural vs keyword)\n- [ ] Using `searchAndContents` when page content is needed\n- [ ] Date filter windows are wide enough (7+ days)\n- [ ] `findSimilar` receives URLs, not query strings\n- [ ] No date filters on `company` or `people` categories\n- [ ] `maxCharacters` set on text and highlights\n- [ ] Exa client is a singleton, not created per request\n- [ ] Error handling captures `requestId`\n\n## Resources\n- [Exa Search Reference](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fsearch)\n- [Exa Error Codes](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Ferror-codes)\n- [Exa Contents Retrieval](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fcontents-retrieval)\n\n## Next Steps\nFor SDK patterns, see `exa-sdk-patterns`. For common errors, see `exa-common-errors`.\n\n","# Exa Known Pitfalls\n\n## Overview\nReal gotchas when integrating Exa's neural search API. Exa uses embeddings-based search rather than keyword matching, which creates a different class of failure modes than traditional search APIs. This skill covers the top pitfalls with wrong\u002Fright examples.\n\n## Pitfall 1: Keyword-Style Queries\n\nExa's neural search interprets natural language semantically. Boolean operators and keyword syntax degrade results.\n\n```typescript\nimport Exa from \"exa-js\";\nconst exa = new Exa(process.env.EXA_API_KEY);\n\n\u002F\u002F BAD: keyword\u002Fboolean style — Exa ignores AND\u002FOR\nconst bad = await exa.search(\n  \"python AND machine learning OR deep learning 2024\"\n);\n\n\u002F\u002F GOOD: natural language statement\nconst good = await exa.search(\n  \"recent tutorials on building ML models with Python\",\n  { type: \"neural\", numResults: 10 }\n);\n```\n\n## Pitfall 2: Wrong Search Type\n\nUsing neural search for exact lookups (URLs, names) or keyword search for conceptual queries silently degrades quality.\n\n```typescript\n\u002F\u002F BAD: neural search for a specific URL\u002Fidentifier\nconst bad = await exa.search(\"arxiv.org\u002Fabs\u002F2301.00001\", { type: \"neural\" });\n\n\u002F\u002F GOOD: keyword for exact terms, neural for concepts\nconst exactMatch = await exa.search(\"arxiv.org\u002Fabs\u002F2301.00001\", {\n  type: \"keyword\",\n});\nconst conceptual = await exa.search(\n  \"transformer architecture improvements for long context\",\n  { type: \"neural\" }\n);\n```\n\n## Pitfall 3: Expecting Content from search()\n\n`search()` returns metadata only (URL, title, score). Content requires `searchAndContents()` or `getContents()`.\n\n```typescript\n\u002F\u002F BAD: accessing .text from search() — it's undefined\nconst results = await exa.search(\"AI safety research\");\nconst text = results.results[0].text;  \u002F\u002F undefined!\n\n\u002F\u002F GOOD: use searchAndContents for text\u002Fhighlights\nconst withContent = await exa.searchAndContents(\"AI safety research\", {\n  numResults: 5,\n  text: { maxCharacters: 2000 },\n  highlights: { maxCharacters: 500 },\n});\nconsole.log(withContent.results[0].text);       \u002F\u002F actual content\nconsole.log(withContent.results[0].highlights);  \u002F\u002F key excerpts\n```\n\n## Pitfall 4: Narrow Date Filters Return Empty\n\nDate filters silently exclude results. A single-day window often returns nothing without error.\n\n```typescript\n\u002F\u002F BAD: too narrow, likely returns empty array\nconst bad = await exa.search(\"AI news\", {\n  startPublishedDate: \"2025-03-15T00:00:00.000Z\",\n  endPublishedDate: \"2025-03-15T23:59:59.000Z\",\n});\n\n\u002F\u002F GOOD: reasonable window with fallback\nlet results = await exa.search(\"AI news\", {\n  startPublishedDate: \"2025-03-01T00:00:00.000Z\",\n  endPublishedDate: \"2025-03-31T23:59:59.000Z\",\n  numResults: 10,\n});\n\u002F\u002F Fallback if no results\nif (results.results.length === 0) {\n  results = await exa.search(\"AI news\", { numResults: 10 });\n}\n```\n\n## Pitfall 5: findSimilar Takes a URL, Not a Query\n\n`findSimilar` expects a URL as its first argument. Passing a query string gives meaningless results.\n\n```typescript\n\u002F\u002F BAD: passing a query string to findSimilar\nconst bad = await exa.findSimilar(\"machine learning research papers\");\n\n\u002F\u002F GOOD: pass a URL — findSimilar finds pages semantically similar to it\nconst good = await exa.findSimilar(\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2301.00001\", {\n  numResults: 10,\n  excludeSourceDomain: true,\n});\n```\n\n## Pitfall 6: Date Filters with company\u002Fpeople Categories\n\nThe `company` and `people` categories do NOT support date filters. Using them returns a 400 error.\n\n```typescript\n\u002F\u002F BAD: date filter with company category → 400 error\nconst bad = await exa.search(\"AI startups\", {\n  category: \"company\",\n  startPublishedDate: \"2024-01-01T00:00:00.000Z\",  \u002F\u002F not supported!\n});\n\n\u002F\u002F GOOD: company search without date filters\nconst good = await exa.search(\"AI startups\", {\n  category: \"company\",\n  numResults: 10,\n});\n```\n\n## Pitfall 7: Not Limiting Content Size\n\nRequesting full text without `maxCharacters` can return massive payloads, increasing latency and cost.\n\n```typescript\n\u002F\u002F BAD: unlimited text retrieval\nconst bad = await exa.searchAndContents(\"topic\", {\n  numResults: 20,\n  text: true,  \u002F\u002F could return megabytes of content\n});\n\n\u002F\u002F GOOD: limit content size\nconst good = await exa.searchAndContents(\"topic\", {\n  numResults: 10,\n  text: { maxCharacters: 2000 },  \u002F\u002F cap at 2000 chars per result\n  highlights: { maxCharacters: 500 },\n});\n```\n\n## Pitfall 8: Creating New Client Per Request\n\nEach `new Exa()` call creates a new HTTP client. Reuse a singleton for connection pooling.\n\n```typescript\n\u002F\u002F BAD: new client every request (in a route handler)\napp.get(\"\u002Fsearch\", async (req, res) => {\n  const exa = new Exa(process.env.EXA_API_KEY);  \u002F\u002F wasteful!\n  const results = await exa.search(req.query.q);\n  res.json(results);\n});\n\n\u002F\u002F GOOD: singleton client\nconst exa = new Exa(process.env.EXA_API_KEY);\napp.get(\"\u002Fsearch\", async (req, res) => {\n  const results = await exa.search(req.query.q);\n  res.json(results);\n});\n```\n\n## Pitfall 9: Ignoring the requestId in Errors\n\nExa error responses include `requestId` for support debugging. Always log it.\n\n```typescript\n\u002F\u002F BAD: generic error handling\ntry {\n  await exa.search(\"query\");\n} catch (err) {\n  console.error(\"Search failed\");  \u002F\u002F loses diagnostic info\n}\n\n\u002F\u002F GOOD: capture requestId\ntry {\n  await exa.search(\"query\");\n} catch (err: any) {\n  console.error(\"Search failed:\", {\n    status: err.status,\n    message: err.message,\n    requestId: err.requestId,  \u002F\u002F include when contacting support\n    tag: err.error_tag,\n  });\n}\n```\n\n## Quick Review Checklist\n- [ ] Queries are natural language, not keyword\u002Fboolean syntax\n- [ ] Search type matches the query intent (neural vs keyword)\n- [ ] Using `searchAndContents` when page content is needed\n- [ ] Date filter windows are wide enough (7+ days)\n- [ ] `findSimilar` receives URLs, not query strings\n- [ ] No date filters on `company` or `people` categories\n- [ ] `maxCharacters` set on text and highlights\n- [ ] Exa client is a singleton, not created per request\n- [ ] Error handling captures `requestId`\n\n## Resources\n- [Exa Search Reference](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fsearch)\n- [Exa Error Codes](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Ferror-codes)\n- [Exa Contents Retrieval](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fcontents-retrieval)\n\n## Next Steps\nFor SDK patterns, see `exa-sdk-patterns`. For common errors, see `exa-common-errors`.\n\n",{"name":5,"tags":54,"author":55,"license":15,"version":56,"description":57,"allowed-tools":58,"compatible-with":59},[44,31,45,38],"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Identify and avoid Exa anti-patterns and common integration mistakes.\nUse when reviewing Exa code, onboarding new developers,\nor auditing existing Exa integrations for correctness.\nTrigger with phrases like \"exa mistakes\", \"exa anti-patterns\",\n\"exa pitfalls\", \"exa what not to do\", \"exa code review\".\n","Read, Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-known-pitfalls",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":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill exa-known-pitfalls",{"tool":75,"command":76},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill exa-known-pitfalls",{"tool":78,"command":79},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill exa-known-pitfalls","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-known-pitfalls\u002FSKILL.md",true,[],[84,96,106,115,121,128],{"skillNo":85,"name":86,"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":87,"categories":88,"keywords":92,"publishedAt":49},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[93,94,95],"model","model hierarchy","model hierarchy skill",{"skillNo":97,"name":98,"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":99,"categories":100,"keywords":102,"publishedAt":49},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[101],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},[103,104,105],"MCP","zoom","zoom mcp",{"skillNo":107,"name":108,"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":109,"categories":110,"keywords":111,"publishedAt":49},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[112,113,114,104],"sdk","zoom apps sdk","apps",{"skillNo":116,"name":117,"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":118,"categories":119,"keywords":120,"publishedAt":49},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[117],{"skillNo":122,"name":123,"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":124,"categories":125,"keywords":127,"publishedAt":49},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[126],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},[123],{"skillNo":129,"name":130,"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":131,"categories":132,"keywords":133,"publishedAt":49},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[130]]