Exa Search Skill
5 specialized scripts for Exa AI search API—neural search, content extraction, similar pages, research with citations, and async pro research.
Prerequisite: EXA_API_KEY environment variable. Get key at https://dashboard.exa.ai
Token-Efficient Search
Inspired by Anthropic's dynamic filtering—always filter before reasoning. ~24% fewer tokens, ~11% better accuracy.
The Principle: Search Cheaply → Filter → Extract Selectively → Reason
DO:
Step 1: Search with --no-text (titles/URLs only — cheapest)
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "query" -n 20 --no-text
Step 2: Evaluate titles, pick best 3-5 URLs
Step 3: Extract only those URLs with bounded content
python3 ~/.claude/skills/exa-search/scripts/exa_contents.py URL1 URL2 --highlights --max-chars 3000
DON'T: Search with full text for 50 results, then reason over all of it.
Use API-Level Filters First (Free Filtering)
These reduce results at the API level before you ever see them:
-
--must-include "term" — results must contain this string
-
--must-exclude "term" — removes irrelevant results
-
--domains site1.com site2.com — restrict to authoritative sources
-
--category "research paper" — eliminate irrelevant content types
-
--after 2025-01-01 / --before — temporal filtering
Use Summaries Over Full Text
When you need the gist, not raw content:
AI-distilled summaries — much smaller than full text
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "query" --summary "Key findings" -n 5
Use Bounded Context for RAG
Capped context string — prevents unbounded token usage
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "query" --context --context-chars 5000
Post-Process with filter_web_results.py
Pipe Exa JSON output through the Firecrawl filter script for additional reduction:
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "query" --json |
python3 ~/.claude/skills/firecrawl/scripts/filter_web_results.py
--fields "title,url,text" --max-chars 3000
Cost Tiers — Match to Task
Type Latency Cost/1k When
--instant
<150ms Cheapest Real-time lookups, autocomplete
--fast
~500ms Low Quick checks, confirmations
auto (default)
Medium General search
--deep
4-12s $12 Comprehensive research
--deep-reasoning
12-50s $15 Maximum depth + synthesis
Structured Deep Search (Exa Deep)
Deep and deep-reasoning searches support structured JSON output via outputSchema . The API returns parsed content in output.content with per-field grounding citations and confidence scores.
Quick Example Purpose
... --deep --text-output "Short answer"
Simple text answer
... --deep-reasoning --schema-preset company
Structured company research
... --deep --output-schema '{"type":"object","properties":{"answer":{"type":"string"}}}'
Custom schema
... --deep --schema-file ~/schemas/analysis.json
Schema from file
Presets: company , paper-survey , competitor-analysis , person , news-digest
Output includes field-level grounding: per-field citations with [H]igh/[M]edium/[L]ow confidence.
Available Scripts
- exa_search.py — Neural Web Search
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "query" [options]
Quick Example Purpose
... exa_search.py "AI frameworks"
Basic search
... exa_search.py "transformers" --category "research paper" -n 20
Academic papers
... exa_search.py "query" --deep --additional-queries "alt query"
Deep search
... exa_search.py "query" --domains docs.python.org
Domain-filtered
... exa_search.py "query" --after 2025-01-01 --category news
Recent news
... exa_search.py "query" --context --context-chars 10000
RAG context
... exa_search.py "query" --instant -n 5
Sub-150ms lookup
... exa_search.py "Top AI startups" --deep-reasoning --schema-preset company
Structured company research
... exa_search.py "Who is CEO of Stripe?" --deep --text-output "Short answer"
Quick factual answer
Categories: company, research paper, news, pdf, github, tweet, personal site, people, financial report
- exa_contents.py — URL Content Extraction
python3 ~/.claude/skills/exa-search/scripts/exa_contents.py URL [URL2...] [options]
Quick Example Purpose
... exa_contents.py "https://arxiv.org/abs/2307.06435"
Extract paper
... exa_contents.py URL --summary "Key methods" --highlights
Summarized extraction
... exa_contents.py URL --livecrawl always
Fresh content
... exa_contents.py URL --max-chars 5000
Bounded extraction
- exa_similar.py — Find Similar Pages
python3 ~/.claude/skills/exa-search/scripts/exa_similar.py URL [options]
Quick Example Purpose
... exa_similar.py "https://stripe.com" --category company --exclude-source
Find competitors
... exa_similar.py "https://arxiv.org/abs/..." -n 15
Related papers
... exa_similar.py URL --summary "How different?"
Comparison summaries
- exa_research.py — AI-Powered Research
python3 ~/.claude/skills/exa-search/scripts/exa_research.py "question" [options]
Quick Example Purpose
... exa_research.py "React vs Vue differences?" --sources
Research with citations
... exa_research.py "query" --stream
Real-time streaming
... exa_research.py "query" --domains docs.python.org
Authoritative sources
... exa_research.py "query" --markdown
Markdown with citations
... exa_research.py "query" --answer-only
Pipe-friendly output
- exa_research_async.py — Async Pro Research
python3 ~/.claude/skills/exa-search/scripts/exa_research_async.py "question" [options]
Quick Example Purpose
... exa_research_async.py "Compare AI frameworks" --pro --wait
Pro model
... exa_research_async.py "Quick overview" --fast
Fast model
... exa_research_async.py "query" --schema '{...}'
Structured output
... exa_research_async.py status r_abc123
Check job
... exa_research_async.py list
List jobs
Script Selection Guide
Task Best Script
Web search with filters exa_search.py
Research papers exa_search.py --category "research paper"
Company/startup info exa_search.py --category company
GitHub repos/code exa_search.py --category github
Extract known URL content exa_contents.py
Find competitors exa_similar.py --exclude-source
Quick answers with citations exa_research.py --sources
Complex structured research exa_research_async.py --pro
Real-time search exa_search.py --instant
RAG context building exa_search.py --context
Structured research with grounding exa_search.py --deep-reasoning --schema-preset company
Quick factual answer exa_search.py --deep --text-output "Short answer"
Exa vs Firecrawl vs Native Claude Tools
Need Best Tool Why
Semantic/neural search Exa exa_search.py
AI-powered relevance
Find research papers Exa --category "research paper"
Academic index
Quick research answer Exa exa_research.py
Citations + synthesis
Find similar pages Exa exa_similar.py
Semantic similarity
Single page → markdown Firecrawl scrape --only-main-content
Cleanest output
Crawl entire site Firecrawl crawl --wait --progress
Link following
Autonomous data finding Firecrawl agent
No URLs needed
Search + scrape combined Firecrawl search --scrape
One operation
Claude API agent building Native web_search_20260209
Built-in dynamic filtering
Twitter/X content jina URL
Only tool that works
Common Workflows
Research a Topic
python3 ~/.claude/skills/exa-search/scripts/exa_research.py "How does RAG work?" --sources --markdown
Literature Review
Find papers, then find similar to best hit
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "transformer optimization" --category "research paper" -n 20 --summary "Key contributions" python3 ~/.claude/skills/exa-search/scripts/exa_similar.py "https://arxiv.org/abs/1706.03762" --category "research paper" -n 15
Documentation Research
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "React useEffect cleanup" --domains react.dev developer.mozilla.org --context
Build RAG Context
python3 ~/.claude/skills/exa-search/scripts/exa_search.py "Python async patterns" --context --context-chars 15000 --domains docs.python.org
Reference Documentation
File Contents
references/exa-scripts-reference.md
Full parameter reference for all 5 scripts, cost table, MCP comparison, test suite
Test Suite
python3 ~/.claude/skills/exa-search/scripts/test_exa.py --quick # Quick validation python3 ~/.claude/skills/exa-search/scripts/test_exa.py # Full suite python3 ~/.claude/skills/exa-search/scripts/test_exa.py --endpoint search # Specific endpoint