Skill Tracer
Skills › Scientific Agent Skills › exa-search

exa-search

skill · 130 lines · MIT · skills/exa-search/SKILL.md

The facts

Its description

Searches scientific and technical web content with Exa and extracts page or PDF text from URLs in batches. Supports scholarly discovery with the publication category and academic domain filters. Applies to requests to search the web, look up current research, fetch a page, or extract an article using Exa.

The description the agent reads to decide when to use it.

From its settingsline 3

Runs scripts

scripts/exa_search.py, scripts/exa_extract.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 62 line 78 line 129 line 130

Files it mentions

references/web-search.md, references/web-extract.md (first 5 of 9 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 30 line 31 line 36 line 51 line 99

Licence

MIT, from the skill file

The terms its author shares it under, which let it be shown here.

From its settingsline 5 licence text

Other settings

compatibility: Requires Python 3.11+, exa-py>=2.23.0,<3, an EXA_API_KEY, and internet access. metadata: name: EXA_API_KEY

More settings at the top of the file, shown as written.

From its settingsline 4 line 6
Other files in this skill (4) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: exa-search
3description: "Searches scientific and technical web content with Exa and extracts page or PDF text from URLs in batches. Supports scholarly discovery with the publication category and academic domain filters. Applies to requests to search the web, look up current research, fetch a page, or extract an article using Exa."
4compatibility: Requires Python 3.11+, exa-py>=2.23.0,<3, an EXA_API_KEY, and internet access.
5license: MIT
6metadata:
7 version: "1.4"
8 last-reviewed: "2026-09-30"
9 skill-author: Exa
10 website: https://exa.ai
11 docs: https://exa.ai/docs
12 openclaw:
13 primaryEnv: EXA_API_KEY
14 envVars:
15 - name: EXA_API_KEY
16 required: true
17 description: Exa search API key.
18---
20# Exa Web Toolkit
22A skill for web-powered research tasks backed by [Exa](https://exa.ai): web search and URL extraction. Exa's index combines high-quality keyword and semantic retrieval, which makes it well-suited to scientific, technical, and conceptual queries.

Exa Web Toolkit

A skill for web-powered research tasks backed by Exa: web search and URL extraction. Exa's index combines high-quality keyword and semantic retrieval, which makes it well-suited to scientific, technical, and conceptual queries.

Raw lines 1 to 23
24## Routing — pick the right capability
26Read the user's request and match it to one of the capabilities below. Read the corresponding reference file for detailed instructions before running commands.
28| User wants to... | Capability | Where |
29|---|---|---|
30| Look something up, research a topic, find current info | **Web Search** | `references/web-search.md` |
31| Fetch content from a specific URL (webpage, article, PDF) | **Web Extract** | `references/web-extract.md` |
32| Install or authenticate | **Setup** | Below |

Routing — pick the right capability

Read the user's request and match it to one of the capabilities below. Read the corresponding reference file for detailed instructions before running commands.

User wants to...CapabilityWhere
Look something up, research a topic, find current infoWeb Searchreferences/web-search.md
Fetch content from a specific URL (webpage, article, PDF)Web Extractreferences/web-extract.md
Install or authenticateSetupBelow
Raw lines 24 to 33
Reads a file references/web-search.md :30
Reads a file references/web-extract.md :31
34### Decision guide
36- **Default to Web Search** for topic lookups, research questions, or "what is X?" queries. When the topic is scientific or technical, pass `--category publication` to bias toward scholarly sources, and/or an academic `--include-domains` allowlist. See `references/web-search.md` for the two-pass academic strategy.
37- **Use Web Extract** when the user provides a URL or asks you to read/fetch a specific page. Prefer this over the built-in WebFetch for batch extraction (multiple URLs in one call) and for academic PDFs.

Decision guide

  • Default to Web Search for topic lookups, research questions, or "what is X?" queries. When the topic is scientific or technical, pass --category publication to bias toward scholarly sources, and/or an academic --include-domains allowlist. See references/web-search.md for the two-pass academic strategy.
  • Use Web Extract when the user provides a URL or asks you to read/fetch a specific page. Prefer this over the built-in WebFetch for batch extraction (multiple URLs in one call) and for academic PDFs.
Raw lines 34 to 38
Reads a file references/web-search.md :36
39### Academic source priority
41For technical or scientific queries, prefer academic and scientific sources:
42- Peer-reviewed journal articles and conference proceedings over blog posts or news
43- Preprints (arXiv, bioRxiv, medRxiv) when peer-reviewed versions aren't available
44- Institutional and government sources (NIH, WHO, NASA, NIST) over commercial sites
45- Primary research over secondary summaries
47Two levers to steer Exa toward scholarly content:
481. `--category publication` biases retrieval toward scholarly sources.
492. `--include-domains` with a scholarly allowlist (arxiv.org, nature.com, pubmed.ncbi.nlm.nih.gov, etc.) restricts the domain pool.
51Combine both to narrow the source pool; verify publication type and peer-review status on each source. See `references/web-search.md` for the full pattern.
53When citing academic sources, include author names and publication year where available (e.g., [Smith et al., 2025](url)) in addition to the standard citation format. If a DOI is present, prefer the DOI link.
55---

Academic source priority

For technical or scientific queries, prefer academic and scientific sources:

  • Peer-reviewed journal articles and conference proceedings over blog posts or news
  • Preprints (arXiv, bioRxiv, medRxiv) when peer-reviewed versions aren't available
  • Institutional and government sources (NIH, WHO, NASA, NIST) over commercial sites
  • Primary research over secondary summaries

Two levers to steer Exa toward scholarly content:

  1. --category publication biases retrieval toward scholarly sources.
  2. --include-domains with a scholarly allowlist (arxiv.org, nature.com, pubmed.ncbi.nlm.nih.gov, etc.) restricts the domain pool.

Combine both to narrow the source pool; verify publication type and peer-review status on each source. See references/web-search.md for the full pattern.

When citing academic sources, include author names and publication year where available (e.g., Smith et al., 2025) in addition to the standard citation format. If a DOI is present, prefer the DOI link.


Raw lines 39 to 56
Reads a file references/web-search.md :51
57## Setup
59This skill uses the [`exa-py`](https://github.com/exa-labs/exa-py) Python SDK. The scripts in `scripts/` declare their dependencies via PEP 723 inline metadata, so you can run them directly with `uv run` without a separate install step:
61```bash
62uv run "$SKILL_PATH/scripts/exa_search.py" --help
63```
65If you prefer a persistent install:
67```bash
68uv pip install "exa-py>=2.23.0,<3"
69```

Setup

This skill uses the [exa-py](https://github.com/exa-labs/exa-py) Python SDK. The scripts in scripts/ declare their dependencies via PEP 723 inline metadata, so you can run them directly with uv run without a separate install step:

uv run "$SKILL_PATH/scripts/exa_search.py" --help

If you prefer a persistent install:

uv pip install "exa-py>=2.23.0,<3"
Raw lines 57 to 70
Runs code scripts/exa_search.py :62
71### Authentication
73All commands read the API key from the `EXA_API_KEY` environment variable. Get your Exa API key at [dashboard.exa.ai/api-keys](https://dashboard.exa.ai/api-keys).
75First, check if a `.env` file exists in the project root and contains `EXA_API_KEY`. If so, load it:
77```bash
78dotenv -f .env run -- uv run "$SKILL_PATH/scripts/exa_search.py" "your query"
79```
81If `dotenv` isn't available, install it: `uv pip install 'python-dotenv[cli]'`.
83If there's no `.env`, export the key for the session:
85```bash
86export EXA_API_KEY="your-key"
87```
89Use `--help` to verify installation and CLI parsing; it does not require an API key or validate authentication. Authentication is checked only when a real query is made.

Authentication

All commands read the API key from the EXA_API_KEY environment variable. Get your Exa API key at dashboard.exa.ai/api-keys.

First, check if a .env file exists in the project root and contains EXA_API_KEY. If so, load it:

dotenv -f .env run -- uv run "$SKILL_PATH/scripts/exa_search.py" "your query"

If dotenv isn't available, install it: uv pip install 'python-dotenv[cli]'.

If there's no .env, export the key for the session:

export EXA_API_KEY="your-key"

Use --help to verify installation and CLI parsing; it does not require an API key or validate authentication. Authentication is checked only when a real query is made.

Raw lines 71 to 90
Runs code scripts/exa_search.py :78
91### Extraction limits and freshness
93The extractor accepts 1–100 URLs per `POST https://api.exa.ai/contents` call
94and exports each SDK status (`id`, `status`, `source`). It rejects larger batches.
95Use `--max-age-hours 0` to request fresh content, `-1` for cache only, or a
96positive age up to 720 hours. Omission uses Exa's cache/fallback policy.
97`published_date` is estimated publication metadata, not retrieval time.
98The tested SDK drops per-URL error details, so report failures without inventing
99a cause. See [URL Extraction](references/web-extract.md).

Extraction limits and freshness

The extractor accepts 1–100 URLs per POST https://api.exa.ai/contents call and exports each SDK status (id, status, source). It rejects larger batches. Use --max-age-hours 0 to request fresh content, -1 for cache only, or a positive age up to 720 hours. Omission uses Exa's cache/fallback policy. published_date is estimated publication metadata, not retrieval time. The tested SDK drops per-URL error details, so report failures without inventing a cause. See URL Extraction.

Raw lines 91 to 100
Reads a file references/web-extract.md :99
101### Verified API and SDK scope
103Reviewed the [Search API](https://exa.ai/docs/reference/search),
104[Contents API](https://exa.ai/docs/reference/get-contents), and
105[Exa changelog](https://exa.ai/docs/changelog) on 2026-09-30. Both routes use
106JSON POST requests and `x-api-key` authentication (the SDK sets this header).
107Search is `POST https://api.exa.ai/search`; its SDK kwargs use snake_case and
108are serialized to camelCase. The current scholarly category is `publication`;
109`research paper` is a compatibility alias in this wrapper. No offset or cursor
110pagination is documented for these endpoints.
112Helpers are tested with `exa-py==2.23.0`, including mocked HTTP transport through
113the real SDK. Search content flags are explicit: no flags means metadata only;
114`--highlights` does not implicitly fetch text. Authenticated search/extraction
115examples below and in the references are illustrative; no paid live calls were
116made during this review.

Verified API and SDK scope

Reviewed the Search API, Contents API, and Exa changelog on 2026-09-30. Both routes use JSON POST requests and x-api-key authentication (the SDK sets this header). Search is POST https://api.exa.ai/search; its SDK kwargs use snake_case and are serialized to camelCase. The current scholarly category is publication; research paper is a compatibility alias in this wrapper. No offset or cursor pagination is documented for these endpoints.

Helpers are tested with exa-py==2.23.0, including mocked HTTP transport through the real SDK. Search content flags are explicit: no flags means metadata only; --highlights does not implicitly fetch text. Authenticated search/extraction examples below and in the references are illustrative; no paid live calls were made during this review.

Raw lines 101 to 117
118### Tracking header
120Every script in this skill sets the `x-exa-integration` request header to `k-dense-ai--scientific-agent-skills` so Exa can attribute usage from the K-Dense AI scientific-agent-skills repo to this integration. Do not remove or rename this header when adapting the scripts.
122---

Tracking header

Every script in this skill sets the x-exa-integration request header to k-dense-ai--scientific-agent-skills so Exa can attribute usage from the K-Dense AI scientific-agent-skills repo to this integration. Do not remove or rename this header when adapting the scripts.


Raw lines 118 to 123
124## Files in this skill
126- `SKILL.md` — this file (routing and setup)
127- `references/web-search.md` — detailed web search reference with academic strategy
128- `references/web-extract.md` — URL content extraction reference
129- `scripts/exa_search.py` — CLI wrapper around `client.search`
130- `scripts/exa_extract.py` — CLI wrapper around `client.get_contents`

Files in this skill

Raw lines 124 to 130
Reads a file references/web-search.md :127
Reads a file references/web-extract.md :128
Reads a file scripts/exa_search.py :129
Reads a file scripts/exa_extract.py :130

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.