Exa Search

SkillSearch

High-precision semantic search and content retrieval via Exa API. Use when: (1) Deep research requiring semantic understanding, (2) Code documentation and examples lookup, (3) Company/professional research, (4) AI-powered comprehensive research tasks, (5) URL content extraction with structured output. Triggers: "research", "find papers", "code examples", "company info", "LinkedIn profiles", "deep analysis". Differentiator: Exa excels at semantic/neural search while grok-search is better for real-time news and general web content.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Exa Search skill

What this skill tells your AI

The instructions your AI receives, as published by dianel555/dskills in skills/exa/SKILL.md and read by ahel’s review.

High-precision semantic search via Exa API. Standalone CLI only (no MCP dependency).

Execution Method

# Prerequisites: pip install httpx tenacity
# Environment: EXA_API_KEY (required), EXA_API_URL (optional, default: https://api.exa.ai)

# All examples assume cwd == skills/exa/. The shim auto-chdirs if you launch
# it from elsewhere (e.g., the repo root).
cd skills/exa
python scripts/exa_cli.py --help

Available Tools

# Basic semantic search (highlights always on; supports inline category:<type>)
python scripts/exa_cli.py web_search_exa --query "TypeScript design patterns" [--num-results 10]
python scripts/exa_cli.py web_search_exa --query "category:company Anthropic AI safety"

# Batch URL fetch (urls is a repeatable flag; payload field is upstream `ids`)
python scripts/exa_cli.py web_fetch_exa \
  --urls "https://a.com" --urls "https://b.com" \
  [--max-chars 3000] [--out content.json]

# Advanced filtered search (list params are repeatable flags, no comma syntax)
python scripts/exa_cli.py web_search_advanced_exa --query "transformer" \
  [--type auto|fast|instant] [--category research\ paper] \
  [--include-domains arxiv.org --include-domains papers.nips.cc] \
  [--exclude-domains medium.com] \
  [--include-text "attention"] [--exclude-text "tutorial"] \
  [--start-date 2024-01-01] [--end-date 2024-12-31] \
  [--num-results 10] [--max-age-hours 168] \
  [--text] [--highlights] [--summary] \
  [--max-chars 5000]   # only effective when --text is set; emits stderr warning otherwise
  [--out results.json]

# Configuration / connectivity probe (omit --no-test to run a numResults=1 ping)
python scripts/exa_cli.py get_config_info [--no-test]

# Create an Agent run or resume the same retained run
python scripts/exa_cli.py agent_run --query "Research an evidence-backed market map" [--effort low]
python scripts/exa_cli.py agent_run --run-id agent_run_123 [--wait-seconds 750]

Tool Capability Matrix

ToolRequiredOptionalOutput
web_search_exa--query--num-results (1-100)Search results JSON (highlights always present)
web_fetch_exa--urls (repeatable, ≥1)--max-chars (default 3000), --out/contents response JSON
web_search_advanced_exa--query--type, --category, repeatable --include-domains/--exclude-domains/--include-text/--exclude-text, --start-date, --end-date, --num-results, --max-age-hours, --text, --highlights, --summary, --max-chars, --outFiltered search results JSON
get_config_info--no-testConfig + (default) connection_test
agent_runexactly one of --query / --run-idschema/input files, data sources, prior-run continuation, effort, wait controls, --outNormalized retained-run lifecycle JSON

Global Options

Place before the subcommand:

OptionPurpose
--api-urlOverride EXA_API_URL (does not write to os.environ)
--api-keyOverride EXA_API_KEY
--debugEnable JSON debug events on stderr (EXA_DEBUG=true) — never logs auth values
--max-retry-wait <s>Cap (seconds) for single retry wait + exponential backoff (default 60, env: EXA_MAX_RETRY_WAIT)
--auth-scheme <scheme>Authentication scheme: x-api-key (default) or bearer for third-party endpoints (env: EXA_AUTH_SCHEME)

Tool Routing Guide

Use CaseRecommended Tool
Real-time news, current eventsgrok-search
Semantic/conceptual researchexa (web_search_exa)
Domain or date-bounded researchexa (web_search_advanced_exa)
Read full content of one or more URLsexa (web_fetch_exa)
Academic papers, technical docsexa (web_search_advanced_exa --include-domains arxiv.org ...)
Open-ended discovery, multi-hop research, structured list building, prior-run follow-upexa-agent (agent_run)
Homogeneous enrichment over known rowsDeterministic script with bounded concurrency, backoff, checkpoint, and stable output file

Workflow Patterns

Pattern 1: Quick Semantic Search

python scripts/exa_cli.py web_search_exa --query "best practices for React hooks" --num-results 5

Pattern 2: Filtered Research (repeatable flags)

python scripts/exa_cli.py web_search_advanced_exa --query "transformer architecture" \
  --include-domains arxiv.org --include-domains papers.nips.cc \
  --start-date 2023-01-01 --text --summary

Pattern 3: Batch URL Read

python scripts/exa_cli.py web_fetch_exa \
  --urls "https://example.com/a" --urls "https://example.com/b" \
  --max-chars 4000 --out batch.json

Pattern 4: Third-Party Endpoint (Bearer Auth)

# Connect to exa-pool or other Exa-compatible proxy
export EXA_API_URL=https://pool.example.com
export EXA_AUTH_SCHEME=bearer
export EXA_API_KEY=your-bearer-token

python scripts/exa_cli.py web_search_exa --query "AI agents" --num-results 5

# Or use CLI flags for one-off requests
python scripts/exa_cli.py --auth-scheme bearer --api-url https://pool.example.com \
  web_search_exa --query "AI agents"

Pattern 5: Exa Agent

Read exa-agent.md before creating a run. It defines objective/schema/coverage checks, --run-id versus --previous-run-id, evidence validation, and ZDR limits without duplicating that workflow here.

References

The references/ directory carries 11 prompt-engineering guides. Open them on demand when crafting queries:

FileWhen to read
searching.mdCrafting web_search_exa queries (semantic phrasing, category usage)
extraction.mdChoosing between highlights / text / summary on advanced search
filtering.mdBuilding include/exclude domain & date filters
synthesis.mdAggregating multiple result sets into a coherent answer
source-quality.mdVetting source credibility
patterns-code.mdCode/library research recipes
patterns-companies.mdCompany research recipes
patterns-news.mdCurrent-events research recipes
patterns-papers.mdAcademic paper recipes
patterns-people.mdPeople search recipes
patterns-relationships.mdMulti-entity relationship research

Error Handling

ErrorRecovery
EXA_API_KEY not configuredSet environment variable or pass --api-key
Search/fetch HTTP 408/429/5xxAutomatic retry with exponential backoff (max 4 attempts, capped by --max-retry-wait)
Agent create network/408/429/5xxSingle attempt; report uncertain upstream state and do not create a duplicate
Agent running deadlineResume the same ID with agent_run --run-id ...
HTTP 401Verify API key
TimeoutReduce --num-results or retry

Output Format

All commands print JSON (ensure_ascii=False, indent 2) to stdout. With --out <file>, the response JSON is written to that path and stdout becomes {"status":"ok","file":"<file>"}. Errors go to stderr as {"error":"<message>"} with non-zero exit.

Agent creation and interruption additionally emit one-line JSON progress events to stderr so the retained run ID remains recoverable without corrupting stdout.

Signals

GitHub stars
64
Forks
6
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
exa
Source
github.com/dianel555/dskills