[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FAAS8JF8285DEEY03MGJDM":3,"skill-same:01M6FAAS8JF8285DEEY03MGJDM":80},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":62,"ownerHtmlUrl":63,"ownerBlogUrl":6,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6FAAS8JF8285DEEY03MGJDM","exa-core-workflow-b",null,"Execute Exa findSimilar, getContents, answer, and streaming answer workflows.\nUse when finding pages similar to a URL, retrieving content for known URLs,\nor getting AI-generated answers with citations.\nTrigger with phrases like \"exa find similar\", \"exa get contents\",\n\"exa answer\", \"exa similarity search\", \"findSimilarAndContents\".","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-core-workflow-b\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"workflow","core","exa core workflow b","exa","similarity-search","openclaw","URL","io","get","generated","edit","write","read","node","Bash","Citations","streaming","search","code","workflows","2026-11-10 10:12:30",false,"---\nname: exa-core-workflow-b\ndescription: |\n  Execute Exa findSimilar, getContents, answer, and streaming answer workflows.\n  Use when finding pages similar to a URL, retrieving content for known URLs,\n  or getting AI-generated answers with citations.\n  Trigger with phrases like \"exa find similar\", \"exa get contents\",\n  \"exa answer\", \"exa similarity search\", \"findSimilarAndContents\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Bash(node:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, exa, workflow, similarity-search, answer]\n\n---\n# Exa Core Workflow B — Similarity, Contents & Answer\n\n## Overview\nSecondary Exa workflow covering three endpoints beyond search: `findSimilar` (discover pages semantically related to a URL), `getContents` (retrieve text\u002Fhighlights for known URLs), and `answer` (get AI-generated answers with web citations). These complement the primary search workflow in `exa-core-workflow-a`.\n\n## Prerequisites\n- `exa-js` installed and `EXA_API_KEY` configured\n- Familiarity with `exa-core-workflow-a` search patterns\n\n## Instructions\n\n### Step 1: Find Similar Pages\n```typescript\nimport Exa from \"exa-js\";\n\nconst exa = new Exa(process.env.EXA_API_KEY);\n\n\u002F\u002F findSimilar takes a URL (not a query string) and returns\n\u002F\u002F pages with semantically similar content\nconst similar = await exa.findSimilar(\n  \"https:\u002F\u002Fopenai.com\u002Fresearch\u002Fgpt-4\",\n  {\n    numResults: 10,\n    excludeSourceDomain: true, \u002F\u002F exclude openai.com from results\n    startPublishedDate: \"2024-01-01T00:00:00.000Z\",\n    excludeDomains: [\"reddit.com\", \"twitter.com\"],\n  }\n);\n\nfor (const r of similar.results) {\n  console.log(`${r.title} — ${r.url}`);\n}\n```\n\n### Step 2: Find Similar with Contents\n```typescript\n\u002F\u002F findSimilarAndContents combines similarity search + content extraction\nconst results = await exa.findSimilarAndContents(\n  \"https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fllama3\",\n  {\n    numResults: 5,\n    text: { maxCharacters: 2000 },\n    highlights: { maxCharacters: 500, query: \"open source LLM\" },\n    excludeSourceDomain: true,\n  }\n);\n\nfor (const r of results.results) {\n  console.log(`## ${r.title}`);\n  console.log(`URL: ${r.url}`);\n  console.log(`Highlights: ${r.highlights?.join(\" | \")}`);\n  console.log(`Text preview: ${r.text?.substring(0, 300)}...\\n`);\n}\n```\n\n### Step 3: Get Contents for Known URLs\n```typescript\n\u002F\u002F getContents retrieves page content for a list of URLs you already have\n\u002F\u002F Useful when you have URLs from a previous search or external source\nconst contents = await exa.getContents(\n  [\n    \"https:\u002F\u002Farxiv.org\u002Fabs\u002F2401.00001\",\n    \"https:\u002F\u002Farxiv.org\u002Fabs\u002F2401.00002\",\n    \"https:\u002F\u002Fblog.example.com\u002Farticle\",\n  ],\n  {\n    text: { maxCharacters: 3000 },\n    highlights: { maxCharacters: 500 },\n    summary: { query: \"key findings and methodology\" },\n    livecrawl: \"preferred\",     \u002F\u002F try fresh, fall back to cache\n    livecrawlTimeout: 15000,    \u002F\u002F 15s timeout\n    \u002F\u002F Subpage crawling: retrieve linked pages from each URL\n    subpages: 3,                \u002F\u002F crawl up to 3 subpages per URL\n    subpageTarget: \"documentation\",  \u002F\u002F find subpages matching this term\n  }\n);\n\nfor (const r of contents.results) {\n  console.log(`${r.title}: ${r.text?.length || 0} chars`);\n  if (r.summary) console.log(`Summary: ${r.summary}`);\n}\n```\n\n### Step 4: AI-Powered Answer with Citations\n```typescript\n\u002F\u002F answer() searches the web and returns an AI-generated answer with sources\nconst answer = await exa.answer(\n  \"What are the key differences between RAG and fine-tuning for LLMs?\",\n  {\n    text: true,\n    \u002F\u002F The answer response includes citations linking to source results\n  }\n);\n\nconsole.log(\"Answer:\", answer.answer);\nconsole.log(\"\\nSources:\");\nfor (const r of answer.results) {\n  console.log(`  - ${r.title}: ${r.url}`);\n}\n```\n\n### Step 5: Streaming Answer\n```typescript\n\u002F\u002F streamAnswer returns chunks as they're generated\nfor await (const chunk of exa.streamAnswer(\n  \"What is the current state of quantum computing in 2025?\"\n)) {\n  if (chunk.content) {\n    process.stdout.write(chunk.content);\n  }\n  if (chunk.citations) {\n    console.log(\"\\n\\nCitations:\", JSON.stringify(chunk.citations, null, 2));\n  }\n}\n```\n\n## Output\n- Similar pages discovered from a seed URL\n- Page content (text, highlights, summary) for known URLs\n- AI-generated answers with web source citations\n- Streaming answer chunks for real-time display\n\n## Error Handling\n| Error | HTTP Code | Cause | Solution |\n|-------|-----------|-------|----------|\n| `INVALID_URLS` | 400 | Malformed URLs in getContents | Validate URLs have protocol |\n| `CRAWL_NOT_FOUND` | 404 | Content unavailable at URL | Verify URL is accessible |\n| `CRAWL_TIMEOUT` | 504 | Live crawl exceeded timeout | Increase `livecrawlTimeout` |\n| `SOURCE_NOT_AVAILABLE` | 403 | Paywalled or blocked content | Try without `livecrawl: \"always\"` |\n| `UNABLE_TO_GENERATE_RESPONSE` | 501 | Insufficient data for answer | Rephrase query or add context |\n| Empty `similar.results` | 200 | Seed URL not indexed | Try a more popular seed URL |\n\n## Examples\n\n### Competitive Intelligence Pipeline\n```typescript\nasync function findCompetitors(companyUrl: string) {\n  \u002F\u002F Find companies similar to a given company\n  const similar = await exa.findSimilarAndContents(companyUrl, {\n    numResults: 10,\n    excludeSourceDomain: true,\n    text: { maxCharacters: 500 },\n    category: \"company\",\n  });\n\n  return similar.results.map(r => ({\n    name: r.title,\n    url: r.url,\n    description: r.text?.substring(0, 200),\n  }));\n}\n```\n\n### Batch URL Content Retrieval\n```typescript\nasync function enrichUrls(urls: string[]) {\n  \u002F\u002F Process URLs in batches to stay within rate limits\n  const batchSize = 10;\n  const allContents = [];\n\n  for (let i = 0; i \u003C urls.length; i += batchSize) {\n    const batch = urls.slice(i, i + batchSize);\n    const contents = await exa.getContents(batch, {\n      text: { maxCharacters: 1500 },\n      summary: { query: \"main topic and key points\" },\n    });\n    allContents.push(...contents.results);\n  }\n\n  return allContents;\n}\n```\n\n## Resources\n- [Exa Find Similar](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Ffind-similar-links)\n- [Exa Get Contents](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fget-contents)\n- [Exa Contents Retrieval](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fcontents-retrieval)\n\n## Next Steps\nFor common errors, see `exa-common-errors`. For SDK patterns, see `exa-sdk-patterns`.\n\n","# Exa Core Workflow B — Similarity, Contents & Answer\n\n## Overview\nSecondary Exa workflow covering three endpoints beyond search: `findSimilar` (discover pages semantically related to a URL), `getContents` (retrieve text\u002Fhighlights for known URLs), and `answer` (get AI-generated answers with web citations). These complement the primary search workflow in `exa-core-workflow-a`.\n\n## Prerequisites\n- `exa-js` installed and `EXA_API_KEY` configured\n- Familiarity with `exa-core-workflow-a` search patterns\n\n## Instructions\n\n### Step 1: Find Similar Pages\n```typescript\nimport Exa from \"exa-js\";\n\nconst exa = new Exa(process.env.EXA_API_KEY);\n\n\u002F\u002F findSimilar takes a URL (not a query string) and returns\n\u002F\u002F pages with semantically similar content\nconst similar = await exa.findSimilar(\n  \"https:\u002F\u002Fopenai.com\u002Fresearch\u002Fgpt-4\",\n  {\n    numResults: 10,\n    excludeSourceDomain: true, \u002F\u002F exclude openai.com from results\n    startPublishedDate: \"2024-01-01T00:00:00.000Z\",\n    excludeDomains: [\"reddit.com\", \"twitter.com\"],\n  }\n);\n\nfor (const r of similar.results) {\n  console.log(`${r.title} — ${r.url}`);\n}\n```\n\n### Step 2: Find Similar with Contents\n```typescript\n\u002F\u002F findSimilarAndContents combines similarity search + content extraction\nconst results = await exa.findSimilarAndContents(\n  \"https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fllama3\",\n  {\n    numResults: 5,\n    text: { maxCharacters: 2000 },\n    highlights: { maxCharacters: 500, query: \"open source LLM\" },\n    excludeSourceDomain: true,\n  }\n);\n\nfor (const r of results.results) {\n  console.log(`## ${r.title}`);\n  console.log(`URL: ${r.url}`);\n  console.log(`Highlights: ${r.highlights?.join(\" | \")}`);\n  console.log(`Text preview: ${r.text?.substring(0, 300)}...\\n`);\n}\n```\n\n### Step 3: Get Contents for Known URLs\n```typescript\n\u002F\u002F getContents retrieves page content for a list of URLs you already have\n\u002F\u002F Useful when you have URLs from a previous search or external source\nconst contents = await exa.getContents(\n  [\n    \"https:\u002F\u002Farxiv.org\u002Fabs\u002F2401.00001\",\n    \"https:\u002F\u002Farxiv.org\u002Fabs\u002F2401.00002\",\n    \"https:\u002F\u002Fblog.example.com\u002Farticle\",\n  ],\n  {\n    text: { maxCharacters: 3000 },\n    highlights: { maxCharacters: 500 },\n    summary: { query: \"key findings and methodology\" },\n    livecrawl: \"preferred\",     \u002F\u002F try fresh, fall back to cache\n    livecrawlTimeout: 15000,    \u002F\u002F 15s timeout\n    \u002F\u002F Subpage crawling: retrieve linked pages from each URL\n    subpages: 3,                \u002F\u002F crawl up to 3 subpages per URL\n    subpageTarget: \"documentation\",  \u002F\u002F find subpages matching this term\n  }\n);\n\nfor (const r of contents.results) {\n  console.log(`${r.title}: ${r.text?.length || 0} chars`);\n  if (r.summary) console.log(`Summary: ${r.summary}`);\n}\n```\n\n### Step 4: AI-Powered Answer with Citations\n```typescript\n\u002F\u002F answer() searches the web and returns an AI-generated answer with sources\nconst answer = await exa.answer(\n  \"What are the key differences between RAG and fine-tuning for LLMs?\",\n  {\n    text: true,\n    \u002F\u002F The answer response includes citations linking to source results\n  }\n);\n\nconsole.log(\"Answer:\", answer.answer);\nconsole.log(\"\\nSources:\");\nfor (const r of answer.results) {\n  console.log(`  - ${r.title}: ${r.url}`);\n}\n```\n\n### Step 5: Streaming Answer\n```typescript\n\u002F\u002F streamAnswer returns chunks as they're generated\nfor await (const chunk of exa.streamAnswer(\n  \"What is the current state of quantum computing in 2025?\"\n)) {\n  if (chunk.content) {\n    process.stdout.write(chunk.content);\n  }\n  if (chunk.citations) {\n    console.log(\"\\n\\nCitations:\", JSON.stringify(chunk.citations, null, 2));\n  }\n}\n```\n\n## Output\n- Similar pages discovered from a seed URL\n- Page content (text, highlights, summary) for known URLs\n- AI-generated answers with web source citations\n- Streaming answer chunks for real-time display\n\n## Error Handling\n| Error | HTTP Code | Cause | Solution |\n|-------|-----------|-------|----------|\n| `INVALID_URLS` | 400 | Malformed URLs in getContents | Validate URLs have protocol |\n| `CRAWL_NOT_FOUND` | 404 | Content unavailable at URL | Verify URL is accessible |\n| `CRAWL_TIMEOUT` | 504 | Live crawl exceeded timeout | Increase `livecrawlTimeout` |\n| `SOURCE_NOT_AVAILABLE` | 403 | Paywalled or blocked content | Try without `livecrawl: \"always\"` |\n| `UNABLE_TO_GENERATE_RESPONSE` | 501 | Insufficient data for answer | Rephrase query or add context |\n| Empty `similar.results` | 200 | Seed URL not indexed | Try a more popular seed URL |\n\n## Examples\n\n### Competitive Intelligence Pipeline\n```typescript\nasync function findCompetitors(companyUrl: string) {\n  \u002F\u002F Find companies similar to a given company\n  const similar = await exa.findSimilarAndContents(companyUrl, {\n    numResults: 10,\n    excludeSourceDomain: true,\n    text: { maxCharacters: 500 },\n    category: \"company\",\n  });\n\n  return similar.results.map(r => ({\n    name: r.title,\n    url: r.url,\n    description: r.text?.substring(0, 200),\n  }));\n}\n```\n\n### Batch URL Content Retrieval\n```typescript\nasync function enrichUrls(urls: string[]) {\n  \u002F\u002F Process URLs in batches to stay within rate limits\n  const batchSize = 10;\n  const allContents = [];\n\n  for (let i = 0; i \u003C urls.length; i += batchSize) {\n    const batch = urls.slice(i, i + batchSize);\n    const contents = await exa.getContents(batch, {\n      text: { maxCharacters: 1500 },\n      summary: { query: \"main topic and key points\" },\n    });\n    allContents.push(...contents.results);\n  }\n\n  return allContents;\n}\n```\n\n## Resources\n- [Exa Find Similar](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Ffind-similar-links)\n- [Exa Get Contents](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fget-contents)\n- [Exa Contents Retrieval](https:\u002F\u002Fdocs.exa.ai\u002Freference\u002Fcontents-retrieval)\n\n## Next Steps\nFor common errors, see `exa-common-errors`. For SDK patterns, see `exa-sdk-patterns`.\n\n",{"name":5,"tags":49,"author":52,"license":15,"version":53,"description":54,"allowed-tools":55,"compatible-with":56},[50,27,24,28,51],"saas","answer","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Execute Exa findSimilar, getContents, answer, and streaming answer workflows.\nUse when finding pages similar to a URL, retrieving content for known URLs,\nor getting AI-generated answers with citations.\nTrigger with phrases like \"exa find similar\", \"exa get contents\",\n\"exa answer\", \"exa similarity search\", \"findSimilarAndContents\".\n","Read, Write, Edit, Bash(npm:*), Bash(node:*), Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-core-workflow-b",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":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill exa-core-workflow-b",{"tool":72,"command":73},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill exa-core-workflow-b",{"tool":75,"command":76},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill exa-core-workflow-b","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fexa-core-workflow-b\u002FSKILL.md",true,[],[81,91,101,110,116,123],{"skillNo":82,"name":83,"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":84,"categories":85,"keywords":87,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[86],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[88,89,90],"model","model hierarchy","model hierarchy skill",{"skillNo":92,"name":93,"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":94,"categories":95,"keywords":97,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[96],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[98,99,100],"MCP","zoom","zoom mcp",{"skillNo":102,"name":103,"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":104,"categories":105,"keywords":106,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[107,108,109,99],"sdk","zoom apps sdk","apps",{"skillNo":111,"name":112,"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":113,"categories":114,"keywords":115,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[112],{"skillNo":117,"name":118,"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":119,"categories":120,"keywords":122,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[121],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[118],{"skillNo":124,"name":125,"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":126,"categories":127,"keywords":128,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[125]]