exa-search
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
1. 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
2. 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 |
3. 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 |
4. 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 |
5. 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
More from tdimino/claude-code-minoan
academic-research
Search academic papers, build literature reviews, and synthesize research findings — combines Exa MCP (research_paper category, arxiv filtering) with arxiv-mcp-server for paper discovery, download, and deep analysis. Triggers on academic paper, literature review, research synthesis, arxiv, find papers, scholarly search.
69travel-requirements-expert
Plan a trip, create an itinerary, or research a destination through a structured 5-phase workflow---discovery questions, Exa/Firecrawl research, expert detail gathering, and a day-by-day requirements spec. This skill should be used when a user says "plan a trip," "create an itinerary," "help me visit [place]," or needs travel research with specific venues, safety protocols, and dietary accommodations.
67twilio-api
Use this skill when working with Twilio communication APIs for SMS/MMS messaging, voice calls, phone number management, TwiML, webhook integration, two-way SMS conversations, bulk sending, or production deployment of telephony features. Includes official Twilio patterns, production code examples from Twilio-Aldea (provider-agnostic webhooks, signature validation, TwiML responses), and comprehensive TypeScript examples.
65figma-mcp
Convert Figma designs into production-ready code using MCP server tools. Use this skill when users provide Figma URLs, request design-to-code conversion, ask to implement Figma mockups, or need to extract design tokens and system values from Figma files. Works with frames, components, and entire design files to generate HTML, CSS, React, or other frontend code.
61firecrawl
Scrape web pages to clean markdown using Firecrawl v2 — handles JS-heavy pages, site crawls, URL mapping, document parsing (PDF/DOCX/XLSX), LLM-powered extraction, autonomous agent scraping, and post-scrape browser interaction (Interact API). Prefer over WebFetch for quality and completeness. Triggers on scrape URL, fetch page, crawl site, extract content, parse document, web to markdown, DeepWiki, Firecrawl.
51scrapling
Scrape pages locally with anti-bot bypass, TLS impersonation, and adaptive element tracking — no API keys, no cloud. Handles Cloudflare protection, CSS/XPath element extraction, and survives site redesigns. Complements firecrawl (cloud) with 100% local execution. Triggers on Cloudflare bypass, anti-bot scraping, stealth fetch, local scraping, Scrapling.
47