Guide · Agent skill
How to use the Exa Web Search and Extract agent skill
Updated · written with AI from the project's own documentation and checked against our catalogue data
The exa-search skill is a packaged set of instructions and Python scripts that lets an AI agent run web searches and pull readable text from web pages or PDFs using the Exa search service. It is aimed at researchers, students and developers who want a quick scholarly sweep or want to read many links at once. By the end of this guide you will know what the skill does, how to install it, how to ask for it in plain language, and what it needs to run safely.
Quick start
- 1Download and unzip. Download the skill ZIP from this page and unzip it into ~/.claude/skills/ or a project's .claude/skills/ folder.
- 2Or upload in the Claude apps. In the Claude apps, go to Settings → Capabilities → Skills and upload the ZIP.
- 3Install Python and uv. Make sure Python 3.11 or newer is available and install uv, which is recommended for running the scripts.
- 4Add your Exa API key. Get a key from dashboard.exa.ai/api-keys and store it as EXA_API_KEY in a .env file or export it for the session.
- 5Check the install. Run the scripts with --help to confirm they parse correctly. This does not need a key.
- 6Ask in plain language. Request a web search for a scientific topic, or give a URL and ask for its text to be extracted.
- 7Review the results. Check peer-review status and publication type on each source before relying on it, and cite authors and years.
What is an agent skill, and what does exa-search make the agent do?
An agent skill is a folder containing a SKILL.md file with instructions, plus optional reference files and scripts that an AI agent can use when a request matches the skill's description. This one is from the K-Dense-AI scientific-agent-skills collection and is released under the MIT licence.
Once installed, the agent can run web searches through Exa and extract the text of URLs. For research requests it is steered toward scholarly sources, using the publication category and optional academic domain filters. It follows a routing guide that prefers peer-reviewed work, preprints and institutional sources, and asks the agent to cite authors and years where available.
- Web Search: topic lookups and research questions, run through the bundled scripts/exa_search.py wrapper.
- Web Extract: reading specific URLs, including articles and PDFs, run through scripts/exa_extract.py.
- Results can be saved to JSON files so follow-up questions do not need a new query.
How do you install the exa-search skill?
Download the skill ZIP from this page and unzip it. For a personal setup, place the folder in ~/.claude/skills/. For a single project, place it in that project's .claude/skills/ folder. In the Claude apps you can instead upload the ZIP under Settings → Capabilities → Skills.
The scripts declare their dependencies with PEP 723 inline metadata, so they can run directly with uv. Check that the entry point responds with the help flag. This does not require an API key.
- Install location (personal): ~/.claude/skills/
- Install location (project): .claude/skills/ inside your project
- Claude apps: Settings → Capabilities → Skills, then upload the ZIP
uv run "$SKILL_PATH/scripts/exa_search.py" --helpHow do you set up the Exa API key?
Every command reads the key from the EXA_API_KEY environment variable. Create or copy your key from the Exa dashboard at dashboard.exa.ai/api-keys. If your project has a .env file containing EXA_API_KEY, the skill is designed to load it with dotenv. If there is no .env file, export the key for the current session.
Authentication is only checked when a real query runs, so the --help check will pass even without a key.
export EXA_API_KEY="your-key"How do you trigger the skill with natural requests?
You do not need to type commands. Describe what you want and mention searching the web, looking up current research, fetching a page, or extracting an article using Exa. The skill's description matches those kinds of requests.
For scientific or technical topics, say so and ask for papers or peer-reviewed sources. The agent will then pass the publication category and, where suitable, an academic domain allowlist. For a specific link, give the URL and ask it to extract the text.
- Search the web with Exa for recent peer-reviewed work on perovskite solar cell stability and cite authors and years.
- Extract the article text from this URL and save it as a JSON file.
- Fetch these five arXiv and PDF links in one batch and tell me which ones failed.
What can the extractor do with URLs?
The extractor accepts 1 to 100 URLs per call and rejects larger batches, so split long lists into several runs. Use --text for full page text, or --highlights for extracted passages. Each URL's status is exported, and failures are reported without an invented cause because the SDK drops per-URL error details.
You can control cache behaviour with --max-age-hours: 0 requests fresh content, -1 uses cache only, and a positive value sets a maximum age up to 720 hours. For arXiv, an /abs/ link is an abstract page, so it is not proof that the full paper was extracted.
- Up to 100 URLs per call; larger lists must be split.
- --text returns full text; --highlights returns passages.
- published_date is estimated publication metadata, not the retrieval time.
uv run "$SKILL_PATH/scripts/exa_extract.py" "$URL" \
--text \
-o "$FILENAME.json"What should you check before trusting the results?
Search returns candidate sources, not verified facts. Check each source's publication type and peer-review status, and confirm claims against the original text. The skill's guidance asks the agent to prefer peer-reviewed journals and conference proceedings over blogs, and preprints such as arXiv, bioRxiv or medRxiv when no peer-reviewed version exists.
If a DOI is present, the guidance prefers the DOI link when citing.
- Verify peer-review status yourself; the search is a starting point.
- Prefer primary research over secondary summaries.
- Use institutional sources such as NIH, WHO, NASA or NIST where relevant.
What about safety, scripts and network use?
This skill runs Python scripts and uses the network. Each request sends your search terms and the URLs you extract to Exa's API. Do not use it where you cannot send queries or URLs to a third-party service. Review the scripts before running them if your environment requires that.
The scripts set an x-exa-integration header to identify the K-Dense AI repository for usage attribution. The source says not to remove or rename this header when adapting the scripts.
- Runs scripts: yes. Uses network: yes.
- Search terms and URLs are sent to Exa's API.
- Keep the x-exa-integration header if you modify the scripts.
What people use it for
- Literature sweep: find recent scholarly sources on a narrow technical topic using the publication category.
- Reading list building: extract the text of several article or PDF links in one batch and save them as JSON.
- Source checking: fetch a specific page or paper and confirm what it actually says before citing it.
- Batch reading for developers: have the agent read many URLs in one call instead of fetching them one at a time.
Frequently asked questions
Is the exa-search skill free?
The skill is released under the MIT licence, as stated in its metadata. Exa is a separate service that requires an EXA_API_KEY from your Exa account, and this page does not state Exa's pricing, so check Exa's own documentation for costs.
What do I need to run exa-search?
You need Python 3.11 or newer, the exa-py SDK at version 2.23.0 or higher but below 3, an EXA_API_KEY from an Exa account, uv (recommended) or pip, and internet access. The scripts also run Python code and make network calls.
How do I install exa-search in Claude?
Download the ZIP from this page and unzip it into ~/.claude/skills/ for personal use or a project's .claude/skills/ folder. In the Claude apps you can upload the ZIP under Settings → Capabilities → Skills.
Why does the skill say my search returned nothing or failed?
Check that EXA_API_KEY is set, since authentication is only checked when a real query runs. For extraction, the SDK drops per-URL error details, so the skill reports failures without guessing a cause. Also confirm that your batch has no more than 100 URLs.
Can I use exa-search instead of the built-in web fetch?
The skill's guidance says to prefer it for batch extraction of several URLs in one call and for academic PDFs. For a single simple page, either approach may work, and the choice depends on your needs.
Does the skill send my data anywhere?
Yes. Search terms and extracted URLs are sent to Exa's API, so do not use the skill where you cannot share those with a third-party service.
New agent skills, repos and AI tools — every week
The best new skills and open-source projects, the fastest-growing repos, and one free prompt. Five minutes to read. Unsubscribe anytime.
Our verdict
Choose exa-search if you need quick scholarly web sweeps with academic filters, or want an agent to read many article and PDF links in one batch, and you already have or are willing to get an Exa API key. Pick something else if you cannot send queries or URLs to a third-party service, or if you need verified facts without reviewing sources yourself.
Download the skill