exa-search
Skill67 starsChanged 2 months agoMITView on GitHub
Call Exa Search directly with cURL or raw HTTP. Use when an agent needs Exa semantic web retrieval from POST /search without an SDK, including ranked results, domain or category filters, freshness-aware result content, highlights or text extraction, structured output, or streaming search responses.
- Reads credentials
- Sends data out
64 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- Rojios/everything-claude-codetheir own version, first seen Nov 8, 2026
- compozy/compozyedited, first seen Nov 7, 2026
- pankaj-mahaur/Agent-Daemontheir own version, first seen Nov 6, 2026
- claude-world/claude-agenttheir own version, first seen Nov 1, 2026
- MoizIbnYousaf/marketing-cliedited, first seen Nov 1, 2026
- renepf/claude-skillstheir own version, first seen Oct 25, 2026
Used with
Projects with it also use deepxiv, figure-description and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
raja21068Skilldeepxiv
Search and progressively read open-access academic papers through DeepXiv. Use when the user wants layered paper access, section-level reading, trending papers, or DeepXiv-backed literature retrieval.
Also in 4 projects that use this
raja21068Skillfigure-description
Process user-provided patent figures and generate formal drawing descriptions. Use when user says \"附图处理\", \"figure description\", \"附图说明\", \"drawings description\", or wants to describe patent figures with reference numerals.
Also in 5 projects that use this
tpavanipradeepSkillbun-runtime
Bun as runtime, package manager, bundler, and test runner. When to choose Bun vs Node, migration notes, and Vercel support.
Also in 22 projects that use this
niloykumarbarmanSkillagent-sort
Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.
Also in 10 projects that use this
junimnjwSkillralphinho-rfc-pipeline
RFC-driven multi-agent DAG execution pattern with quality gates, merge queues, and work unit orchestration.
Also in 9 projects that use this
mryeastcodeSkilleverything-claude-code-conventions
Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.
Also in 8 projects that use this
- +2 more from raja21068
Other versions64 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- compozy/compozy★ 2.9k94% same
- MoizIbnYousaf/marketing-cli★ 3378% same
Wrote their own version · 62
- affaan-m/ECC★ 246ksame name
- wanshuiyin/Auto-claude-code-research-in-sleep★ 19ksame name
- OpenMinis/MinisSkills★ 602same name
- mxyhi/ok-skills★ 511same name
- loulanyue/awesome-claude-notes★ 272same name
- tpavanipradeep/everything-claude-code★ 104same name
- jikssha/openclaw-dae-skills★ 98same name
- mturac/everything-openai-codex★ 89same name
- mit-network/everything-claude-code★ 76same name
- Fmarzochi/EGC★ 61same name
52 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- build-with-exaSkill
- company-researchSkill
- exa-contentsSkill
- lead-generationSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 0 are distinctive, and 14 are very specific to this project.
0
Common
Most of the 63 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
14
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Use POST https://api.exa.ai/search for semantic web retrieval, ranked results, and optional result-level extraction in one raw HTTP call.
- Very specific: line 89
Use this endpoint when the agent needs search results.
- Very specific: line 141
Prefer contents.highlights: true for the highest-quality default.
- Very specific: line 157
Search type controls the retrieval and synthesis mode.
- Very specific: line 169
Use auto unless latency or reasoning depth is the primary constraint.
- Very specific: line 227
Keep schemas compact and bounded.
- Very specific: line 255
Treat streaming as SSE rather than JSON.
- Very specific: line 279
Keep text, highlights, and summary inside contents on /search.
- Very specific: line 280
Do not send top-level text, highlights, or summary.
- Very specific: line 281
Do not send tokensNum; use contents.text.maxCharacters to cap extracted text.
- Very specific: line 282
Do not use useAutoprompt, numSentences, or highlightsPerUrl in new requests.
- Very specific: line 283
Use contents.maxAgeHours instead of livecrawl.
- Very specific: line 284
Use documented categories only: company, people, research paper, news, personal site, and financial report.
- Very specific: line 285
Avoid invalid category/filter combinations.
“Common” is measured: kept by at least 6 in 10 of the 63 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Exa Search
Requires API key: Get one at https://dashboard.exa.ai/api-keys
Header:
x-api-key: $EXA_API_KEY
Use POST https://api.exa.ai/search for semantic web retrieval, ranked results, and optional result-level extraction in one raw HTTP call. Start with type: "auto" for general retrieval. Add contents only when the caller needs page text, highlights, summaries, freshness-controlled crawling, subpages, or extracted links.
Quick Start (cURL)
Basic search
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "latest developments in LLMs",
"type": "auto",
"numResults": 10
}'Search with highlights
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "latest developments in LLMs",
"type": "auto",
"numResults": 5,
"contents": {
"highlights": true
}
}'With filters and freshness
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "AI regulation policy updates",
"type": "auto",
"category": "news",
"numResults": 10,
"includeDomains": ["reuters.com", "bbc.com"],
"startPublishedDate": "2025-01-01",
"contents": {
"text": {
"maxCharacters": 2000
},
"maxAgeHours": 24,
"livecrawlTimeout": 12000
}
}'Deep search
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "map the major technical and commercial tradeoffs in sodium-ion batteries for grid storage",
"type": "deep",
"numResults": 8
}'Endpoint
POST https://api.exa.ai/searchAuthentication: x-api-key: <API_KEY> header. Exa also accepts Authorization: Bearer <API_KEY>, but prefer x-api-key in cURL examples for consistency.
Use this endpoint when the agent needs search results. If the agent already has URLs and only needs extraction, use POST /contents instead.
Parameters
Core request parameters
| Parameter | Type | Required | Default | Description |
query | string | Yes | - | Natural-language search query. Long, semantically rich descriptions work well. |
type | string | No | auto | Search method: auto, lite, deep-lite, deep, or deep-reasoning. |
numResults | integer | No | 10 | Number of results to return. Use small values for agent loops; maximum is 100. |
category | string | No | - | Specialized result type: company, people, research paper, news, personal site, or financial report. |
includeDomains | string[] | No | - | Only return results from these domains, paths, or wildcard patterns. Max 1200. |
excludeDomains | string[] | No | - | Exclude these domains, paths, or wildcard patterns. Max 1200. |
startPublishedDate | string | No | - | ISO 8601 lower bound for result publication date. |
endPublishedDate | string | No | - | ISO 8601 upper bound for result publication date. |
userLocation | string | No | - | Two-letter ISO country code such as US or GB. |
moderation | boolean | No | false | Filter unsafe content from results. |
additionalQueries | string[] | No | - | Extra query variants for deep-search variants. Use alongside the main query. |
systemPrompt | string | No | - | Instructions for synthesized output and deep-search planning, such as source preferences. |
outputSchema | object | No | - | JSON Schema controlling output.content. Adds synthesized output and grounding. |
stream | boolean | No | false | If true, returns SSE instead of a single JSON response. |
compliance | string | No | - | Enterprise-only compliance mode, such as hipaa, when enabled for the account. |
Content parameters nested under contents
On /search, text, highlights, and summary must be nested under contents.
| Parameter | Type | Required | Default | Description |
contents.text | boolean or object | No | - | Return full page text as markdown. Object form supports maxCharacters, includeHtmlTags, verbosity, includeSections, and excludeSections. |
contents.highlights | boolean or object | No | - | Return query-relevant excerpts. Prefer true for agent workflows unless a fixed character budget is required. |
contents.summary | boolean or object | No | - | Return per-result LLM summaries. Use sparingly because each result adds synthesis work. |
contents.maxAgeHours | integer | No | - | Freshness control. 0 always live crawls; -1 uses cache only; omit for default cache-first behavior with crawl fallback. |
contents.livecrawlTimeout | integer | No | 10000 | Timeout for live crawling in milliseconds. Use 10000 to 15000 for most freshness-sensitive calls. |
contents.subpages | integer | No | 0 | Number of linked subpages to crawl per result. |
contents.subpageTarget | string or string[] | No | - | Terms used to prioritize which subpages matter, such as ["api", "pricing"]. |
contents.extras.links | integer | No | 0 | Number of links to extract from each result page. |
contents.extras.imageLinks | integer | No | 0 | Number of image URLs to extract from each result page. |
Text object options
| Parameter | Type | Default | Description |
maxCharacters | integer | - | Character limit for returned text. Use this instead of tokensNum. |
includeHtmlTags | boolean | false | Preserve HTML tags in output. |
verbosity | string | compact | compact, standard, or full. Pair fresh section-aware extraction with contents.maxAgeHours: 0. |
includeSections | string[] | - | Only include selected sections: header, navigation, banner, body, sidebar, footer, metadata. |
excludeSections | string[] | - | Exclude selected sections from the same section list. |
Highlights object options
Prefer contents.highlights: true for the highest-quality default. Only use object form when the agent needs a custom focus or budget.
| Parameter | Type | Default | Description |
query | string | - | Custom query guiding which excerpts are returned. |
maxCharacters | integer | - | Cap highlight characters per URL. Omit unless the caller has a strict budget. |
Summary object options
| Parameter | Type | Default | Description |
query | string | - | Custom query for the summary. |
schema | object | - | JSON Schema for structured per-result summaries. |
Search Types
Search type controls the retrieval and synthesis mode. Pick the mode for the workflow, not just the output format. Use auto or a deep variant for outputSchema, not lite. Use deeper modes when the search process itself needs more planning, synthesis, or reasoning.
| Type | Best for | Tradeoff |
auto | General default search and most new integrations | Balances speed and quality without requiring the caller to tune retrieval strategy. |
lite | Low-latency, low-cost chat, voice, autocomplete, and agent loops | Cached retrieval with a reduced parameter set |
deep-lite | Lightweight research or synthesis | Adds more planning and synthesis than auto while staying lighter than full deep. |
deep | Multi-step research, comparisons, and synthesis-heavy retrieval | Higher latency; better when the query needs exploration across several sources. |
deep-reasoning | Hard research tasks with high ambiguity or complex tradeoffs | Highest latency and reasoning depth. |
With type: "lite", supported parameters are query (a single string), objective, userIdentifier, metadata, category, numResults, contents.highlights, contents.text, contents.snapshotAsOf, userLocation, includeDomains, excludeDomains, startPublishedDate, endPublishedDate, moderation, and compliance. Other documented search parameters are rejected, including outputSchema, systemPrompt, stream, and freshness options such as contents.maxAgeHours. Lite serves cached content without fetching pages at query time.
Use auto unless latency or reasoning depth is the primary constraint. Use lite for time-sensitive or cost-sensitive calls. Use deep, deep-lite, or deep-reasoning when the query needs multi-step source discovery, comparison, or synthesis.
Mode-only examples
{
"query": "recent product launches from major AI chip companies",
"type": "lite",
"numResults": 5
}{
"query": "compare competing explanations for the recent rise in grid-scale battery deployments",
"type": "deep",
"numResults": 8
}Structured Output
Use systemPrompt for behavior and outputSchema for shape. Keep the schema compact: a handful of named fields, shallow nesting, arrays that declare items. The example below is about as wide as /search wants. If you need more columns, drop the least important ones rather than grow the schema.
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "compare the latest frontier AI model releases",
"type": "deep",
"systemPrompt": "Prefer official sources and avoid duplicate results.",
"outputSchema": {
"type": "object",
"properties": {
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"notable_claims": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "notable_claims"]
}
}
},
"required": ["models"]
},
"contents": {
"highlights": true
}
}'Keep schemas compact and bounded. Do not add citation fields to the schema; grounding is returned separately in output.grounding.
Streaming
Streaming applies to synthesized output, so include outputSchema along with -N, Accept: text/event-stream, and stream: true. Without outputSchema, the endpoint returns the normal JSON search response even when stream is true.
curl -sS -N -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "recent grid-scale battery deployments",
"type": "deep",
"stream": true,
"outputSchema": {
"type": "object",
"properties": {
"summary": { "type": "string" }
},
"required": ["summary"]
},
"contents": {
"highlights": true
}
}'Treat streaming as SSE rather than JSON. Each data: frame contains an OpenAI-compatible chat completion chunk; read partial text from choices[0].delta.content and handle completion or error frames defensively.
Response Fields
| Field | Type | Description |
requestId | string | Unique request identifier. |
results | array | Ranked result objects. |
results[].title | string | Page title. |
results[].url | string | Page URL. |
results[].publishedDate | string or null | Estimated publication date when available. |
results[].author | string or null | Author when available. |
results[].text | string | Returned when contents.text is requested. |
results[].highlights | string[] | Returned when contents.highlights is requested. |
results[].summary | string | Returned when contents.summary is requested. |
results[].subpages | array | Nested result objects from subpage crawling. |
results[].extras.links | string[] | Extracted links when requested. |
output.content | string or object | Synthesized output when outputSchema is provided. |
output.grounding | array | Citations and confidence labels for synthesized fields. |
costDollars.total | number | Total request cost when returned. |
searchTime | number | Search latency when returned. |
Critical Pitfalls
- Keep
text,highlights, andsummaryinsidecontentson/search. - Do not send top-level
text,highlights, orsummary; that shape belongs to/contents. - Do not send
tokensNum; usecontents.text.maxCharactersto cap extracted text. - Do not use
useAutoprompt,numSentences, orhighlightsPerUrlin new requests. - Use
contents.maxAgeHoursinstead oflivecrawl. - Use documented categories only:
company,people,research paper,news,personal site, andfinancial report. - Avoid invalid category/filter combinations.
companyandpeopledo not supportstartPublishedDateorendPublishedDate.companysupportsexcludeDomains;peopledoes not, andpeopleonly accepts LinkedIn domains inincludeDomains. - Pick one of
contents.highlights,contents.text, orcontents.summaryby default. Stack modes only when the caller truly needs multiple views of each page. - Expect SSE only when
stream: trueis paired withoutputSchema; otherwise/searchreturns its normal JSON response.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

