Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

exa-search · k-dense-ai — Claude Code skill: search and extract scientific content

Skill for searching scientific and technical content via Exa with text extraction from pages and PDFs in batches. Supports filtering by publication category and academic domains.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add K-Dense-AI/scientific-agent-skills --skill exa-search -a claude-code
Open on GitHub

What exa-search does

exa-search wraps Exa Search and Contents API into a CLI interface for agents. Two main capabilities: topic search (with bias toward scholarly sources via --category publication) and batch text extraction from URL lists. Under the hood are Python scripts exa_search.py and exa_extract.py that run via uv run without a separate install step.

For scientific queries, the skill recommends a two-pass approach: first --category publication to bias toward peer-reviewed sources, then --include-domains with an allowlist (arxiv.org, nature.com, pubmed.ncbi.nlm.nih.gov, etc.) to narrow the pool. For extracting text from specific URLs, it handles batches up to 100 addresses per call.

Requires Python 3.11+, the exa-py>=2.23.0,<3 library, and an Exa API key (in the EXA_API_KEY environment variable). Get a key at dashboard.exa.ai/api-keys. If your project has a .env file, the skill loads the key from there.

What it helps with

  • find recent research papers on a topic
  • extract text from multiple URLs at once
  • filter search results to academic sources only
  • get the full text of a PDF from a link

Example prompts for the agent

  • Search for recent quantum computing papers on arxiv
  • Extract text from these three URLs: [url1], [url2], [url3]
  • Search with publication category for machine learning methods

How to install exa-search

1Skills CLI (Vercel)

npx skills add K-Dense-AI/scientific-agent-skills --skill exa-search -a claude-code

2Manually: put the files in place

~/.claude/skills/exa-search/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/exa-search/

From the same set120

The whole set →
scientific-visualization K-Dense-AI Generates and audits publication-ready scientific figures in Matplotlib, Seaborn, and Plotly, focusing on truthful data encoding and accessibility. Claude Code CX Codex Cursor +1 2,400installs scientific-writing K-Dense-AI This skill drafts and audits scientific manuscripts and reports while tying claims to verified evidence. Use it for sections, references, declarations, and submission checks. Claude Code CX Codex Cursor +1 2,400installs statistical-analysis K-Dense-AI Runs hypothesis tests with assumption checking, effect sizes, and APA-formatted reports. Covers t-tests, ANOVA, correlation, regression, non-parametric and Bayesian methods. Claude Code CX Codex Cursor +1 2,300installs scientific-brainstorming K-Dense-AI Structures early-stage research ideation through independent idea generation, transparent scoring, and adversarial review. Useful for ranking hypotheses without premature consensus. Claude Code CX Codex Cursor +1 2,300installs literature-review K-Dense-AI This skill searches and synthesizes research literature, checks citations, and prepares Markdown or PDF reviews. Use it for reproducible searches and screening. Claude Code CX Codex Cursor +1 2,300installs scientific-critical-thinking K-Dense-AI Evaluates scientific claims, research methodology, and evidence quality. Applies GRADE and Cochrane Risk of Bias frameworks. Claude Code CX Codex Cursor +1 2,300installs scientific-schematics K-Dense-AI Creates PNG drafts of scientific diagrams and runs a separate quality review. Use it for neural network architectures, flowcharts, system diagrams, and biological pathways. Claude Code CX Codex Cursor +1 2,200installs scikit-learn K-Dense-AI A skill for Python machine learning tasks: classification, regression, clustering, preprocessing, and building ML pipelines with scikit-learn 1.9.1. Claude Code CX Codex Cursor +1 2,200installs

Other versions of exa-search

Similar

workflow Vercel Inc. Builds durable, resumable tasks with the Vercel Workflow SDK when operations must survive server restarts or pause for external events. Claude Code CX Codex Cursor +1 5,300installs mcp-developer https://github.com/Jeffallan A skill for building and debugging MCP servers and clients in TypeScript or Python, with tool schemas, transport setup and protocol checks in the inspector. Claude Code CX Codex Cursor +1 4,200installs feature-forge https://github.com/Jeffallan A skill that runs a requirements interview and turns a feature idea into a spec: EARS requirements, acceptance criteria and an implementation checklist. Claude Code CX Codex Cursor +1 4,200installs stream-chain ruvnet Chains sequential agent steps together using streaming JSON flow and provides ready-to-run pipelines. Claude Code CX Codex Cursor +1 1,200installs flow-nexus-swarm ruvnet Deploy cloud-based AI agent swarms and define event-driven workflows with message queues. Use it to coordinate tasks, inspect runs, and scale a swarm. Claude Code CX Codex Cursor +1 1,200installs performance-analysis ruvnet Detects bottlenecks in Claude Flow swarms, profiles agent operations, and generates reports with actionable optimization recommendations. Claude Code CX Codex Cursor +1 1,200installs setup-matt-pocock-skills Matt Pocock This skill configures a repository for Matt Pocock's engineering skills by setting its issue tracker, triage labels, and domain docs layout. Run it before using the other skills. Claude Code 1,052,851installs to-tickets Matt Pocock Turns a plan, spec, or conversation into small end-to-end tickets with explicit blockers. Use it to agree on the work breakdown before tickets go to a tracker. Claude Code 711,230installs

Questions about exa-search

How do I install exa-search in Claude Code?

Run npx skills add K-Dense-AI/scientific-agent-skills --skill exa-search -a claude-code. Then check ~/.claude/skills/exa-search/SKILL.md. You'll need Python 3.11+, exa-py>=2.23.0,<3, and an Exa API key in the EXA_API_KEY environment variable.

What does exa-search do?

The skill wraps Exa's search and content extraction APIs. Search finds scientific and technical content with optional filtering by publication type and domain. Extraction fetches text from pages and PDFs in batches up to 100 URLs per call.

Where do I get an Exa API key?

Sign up at dashboard.exa.ai/api-keys and copy your key. Set it as the EXA_API_KEY environment variable or add it to your project's .env file as EXA_API_KEY=<your-key>.

Source text

SKILL.md · MIT
---
name: exa-search
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."
compatibility: Requires Python 3.11+, exa-py>=2.23.0,<3, an EXA_API_KEY, and internet access.
license: MIT
metadata:
  version: "1.4"
  last-reviewed: "2026-09-30"
  skill-author: Exa
  website: https://exa.ai
  docs: https://exa.ai/docs
  openclaw:
    primaryEnv: EXA_API_KEY
    envVars:
    - name: EXA_API_KEY
      required: true
      description: Exa search API key.
---

# Exa Web Toolkit

A 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.

## 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 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.

### 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](url)) in addition to the standard citation format. If a DOI is present, prefer the DOI link.

---

## 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:

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

If you prefer a persistent install:

```bash
uv pip install "exa-py>=2.23.0,<3"
```

### 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](https://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:

```bash
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:

```bash
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.

### 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](references/web-extract.md).

### Verified API and SDK scope

Reviewed the [Search API](https://exa.ai/docs/reference/search),
[Contents API](https://exa.ai/docs/reference/get-contents), and
[Exa changelog](https://exa.ai/docs/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.

### 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 strategy
- `references/web-extract.md` — URL content extraction reference
- `scripts/exa_search.py` — CLI wrapper around `client.search`
- `scripts/exa_extract.py` — CLI wrapper around `client.get_contents`

© K-Dense-AI · MIT · K-Dense-AI/scientific-agent-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor