Exa Web Toolkit
Web toolkit powered by Exa, tuned for scientific and technical content.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit K-Dense-AI/scientific-agent-skills/skills/exa-search#main ~/.claude/skills/exa-searchFor one project only, change the path to .claude/skills/exa-search.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text103 lines
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.
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... | Capability | Where |
|---|---|---|
| Look something up, research a topic, find current info | Web Search | references/web-search.md |
| Fetch content from a specific URL (webpage, article, PDF) | Web Extract | references/web-extract.md |
| Install or authenticate | Setup | Below |
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 "research paper"to bias toward scholarly sources, and/or an academic--include-domainsallowlist. Seereferences/web-search.mdfor 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.
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:
--category "research paper"biases retrieval toward scholarly sources.--include-domainswith a scholarly allowlist (arxiv.org, nature.com, pubmed.ncbi.nlm.nih.gov, etc.) restricts the domain pool.
Combine both for strictly academic results. 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.
Setup
This skill uses the 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 --with exa-py python "$SKILL_PATH/scripts/exa_search.py" --help
If you prefer a persistent install:
uv pip install "exa-py>=1.14.0"
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 --with exa-py python "$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"
Verify by running any script with --help — it will exit cleanly if the key is set and auth-check runs only when a real query is made.
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.
Files in this skill
SKILL.md— this file (routing and setup)references/web-search.md— detailed web search reference with academic strategyreferences/web-extract.md— URL content extraction referencescripts/exa_search.py— CLI wrapper aroundclient.search_and_contentsscripts/exa_extract.py— CLI wrapper aroundclient.get_contents
| 1 | |
| 2 | name exa-search |
| 3 | description "Web toolkit powered by Exa, tuned for scientific and technical content. Use this skill when the user needs to search the web or fetch/extract URL content. Covers: web search (semantic lookups, research, current info — with optional research-paper category and academic domain filtering) and URL extraction (fetching pages, articles, academic PDFs in batch). Use this skill for web-related tasks when the user wants high-quality search or scholarly filtering via category=research paper. Triggers on requests to search, look up, fetch a page, or extract an article." |
| 4 | compatibility Requires exa-py Python SDK, an EXA_API_KEY, and internet access. |
| 5 | license MIT |
| 6 | metadata |
| 7 | version "1.2" |
| 8 | skill-author Exa |
| 9 | website https://exa.ai |
| 10 | docs https://exa.ai/docs |
| 11 | openclaw |
| 12 | primaryEnv EXA_API_KEY |
| 13 | envVars |
| 14 | - name: EXA_API_KEY |
| 15 | required true |
| 16 | description Exa search API key. |
| 17 | |
| 18 | |
| 19 | # Exa Web Toolkit |
| 20 | |
| 21 | 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. |
| 22 | |
| 23 | ## Routing — pick the right capability |
| 24 | |
| 25 | 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. |
| 26 | |
| 27 | | User wants to... | Capability | Where | |
| 28 | |---|---|---| |
| 29 | | Look something up, research a topic, find current info | **Web Search** | `references/web-search.md` | |
| 30 | | Fetch content from a specific URL (webpage, article, PDF) | **Web Extract** | `references/web-extract.md` | |
| 31 | | Install or authenticate | **Setup** | Below | |
| 32 | |
| 33 | ### Decision guide |
| 34 | |
| 35 | **Default to Web Search** for topic lookups, research questions, or "what is X?" queries. When the topic is scientific or technical, pass `--category "research paper"` to bias toward scholarly sources, and/or an academic `--include-domains` allowlist. See `references/web-search.md` for the two-pass academic strategy. |
| 36 | **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. |
| 37 | |
| 38 | ### Academic source priority |
| 39 | |
| 40 | For technical or scientific queries, prefer academic and scientific sources: |
| 41 | Peer-reviewed journal articles and conference proceedings over blog posts or news |
| 42 | Preprints (arXiv, bioRxiv, medRxiv) when peer-reviewed versions aren't available |
| 43 | Institutional and government sources (NIH, WHO, NASA, NIST) over commercial sites |
| 44 | Primary research over secondary summaries |
| 45 | |
| 46 | Two levers to steer Exa toward scholarly content: |
| 47 | `--category "research paper"` biases retrieval toward scholarly sources. |
| 48 | `--include-domains` with a scholarly allowlist (arxiv.org, nature.com, pubmed.ncbi.nlm.nih.gov, etc.) restricts the domain pool. |
| 49 | |
| 50 | Combine both for strictly academic results. See `references/web-search.md` for the full pattern. |
| 51 | |
| 52 | 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. |
| 53 | |
| 54 | |
| 55 | |
| 56 | ## Setup |
| 57 | |
| 58 | This skill uses the [`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: |
| 59 | |
| 60 | |
| 61 | uv run --with exa-py python "$SKILL_PATH/scripts/exa_search.py" --help |
| 62 | |
| 63 | |
| 64 | If you prefer a persistent install: |
| 65 | |
| 66 | |
| 67 | uv pip install "exa-py>=1.14.0" |
| 68 | |
| 69 | |
| 70 | ### Authentication |
| 71 | |
| 72 | All commands read the API key from the `EXA_API_KEY` environment variable. Get your Exa API key at [dashboard.exa.ai/api-keys]. |
| 73 | |
| 74 | First, check if a `.env` file exists in the project root and contains `EXA_API_KEY`. If so, load it: |
| 75 | |
| 76 | |
| 77 | dotenv -f .env run -- uv run --with exa-py python "$SKILL_PATH/scripts/exa_search.py" "your query" |
| 78 | |
| 79 | |
| 80 | If `dotenv` isn't available, install it: `uv pip install python-dotenv[cli]`. |
| 81 | |
| 82 | If there's no `.env`, export the key for the session: |
| 83 | |
| 84 | |
| 85 | export EXA_API_KEY="your-key" |
| 86 | |
| 87 | |
| 88 | Verify by running any script with `--help` — it will exit cleanly if the key is set and auth-check runs only when a real query is made. |
| 89 | |
| 90 | ### Tracking header |
| 91 | |
| 92 | 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. |
| 93 | |
| 94 | |
| 95 | |
| 96 | ## Files in this skill |
| 97 | |
| 98 | `SKILL.md` — this file (routing and setup) |
| 99 | `references/web-search.md` — detailed web search reference with academic strategy |
| 100 | `references/web-extract.md` — URL content extraction reference |
| 101 | `scripts/exa_search.py` — CLI wrapper around `client.search_and_contents` |
| 102 | `scripts/exa_extract.py` — CLI wrapper around `client.get_contents` |
| 103 |