Exa - Search + Research
Use this skill for web search, code-context search, URL content extraction, and async research workflows.
What This Skill Does
- Run Exa web search with optional category and domain filters.
- Retrieve full page content (and optional subpage crawling).
- Find code and docs context for programming queries.
- Run async research tasks (one-shot or create/poll workflows).
- Support optional structured outputs via
outputSchema.
Setup
Set EXA_API_KEY using one of these methods.
export EXA_API_KEY="your-exa-api-key"
# .env next to SKILL.md
EXA_API_KEY=your-exa-api-key
Behavior:
- If
EXA_API_KEY is missing in the environment, scripts load only EXA_API_KEY from .env.
- Other
.env variables are ignored by the loader.
Safety and Data Handling
SCHEMA_FILE content is sent to https://api.exa.ai/research/v1 as outputSchema.
- Never use sensitive local files for
SCHEMA_FILE (for example: .env, key/cert files, secrets, internal confidential docs).
research_create.sh blocks obvious sensitive paths/suffixes (for example: .env, .pem, .key, .p12, .pfx, id_rsa).
Command Quick Reference
Search
bash scripts/search.sh "query"
Main env vars:
NUM=10 (max 100)
TYPE=auto (auto, neural, fast, deep, instant)
CATEGORY= (company, research paper, news, tweet, personal site, financial report, people)
DOMAINS=domain1.com,domain2.com
EXCLUDE=domain1.com,domain2.com
SINCE=YYYY-MM-DD
UNTIL=YYYY-MM-DD
LOCATION=NL
Constraints:
EXCLUDE is not supported when CATEGORY=company or CATEGORY=people.
SINCE and UNTIL are not supported when CATEGORY=company or CATEGORY=people.
- When
CATEGORY=people, DOMAINS accepts LinkedIn domains only (linkedin.com, www.linkedin.com, *.linkedin.com).
Content Extraction
bash scripts/content.sh "url1" "url2"
Main env vars:
MAX_CHARACTERS=2000
HIGHLIGHT_SENTENCES=3
HIGHLIGHTS_PER_URL=2
SUBPAGES=10
SUBPAGE_TARGET="docs,reference,api"
LIVECRAWL=preferred (preferred, always, fallback)
LIVECRAWL_TIMEOUT=12000
Code Context Search
bash scripts/code.sh "query" [num_results]
Research (One-shot)
bash scripts/research.sh "instructions"
Main env vars:
MODEL=exa-research or MODEL=exa-research-pro
SCHEMA_FILE=path/to/schema.json
POLL_INTERVAL=2
MAX_WAIT_SECONDS=240
EVENTS=true
Research (Create/Poll)
bash scripts/research_create.sh "instructions" | jq
bash scripts/research_poll.sh "researchId" | jq
Agent Decision Rules
Choose TYPE for Search
Use this decision order:
- User explicitly asks for realtime or autocomplete ->
TYPE=instant.
- Task needs broad coverage or deeper synthesis ->
TYPE=deep.
- User asks for speed/quality balance ->
TYPE=fast.
- Otherwise ->
TYPE=auto (default).
Fallback/escalation:
- If too slow or time-sensitive:
deep -> auto -> fast -> instant.
- If too shallow:
instant -> fast -> auto -> deep.
- Explicit user requirement always wins.
Recommended pattern:
TYPE=auto bash scripts/search.sh "query"
Common Pitfalls
- Do not pass sensitive files to
SCHEMA_FILE.
- Do not combine
CATEGORY=people|company with EXCLUDE, SINCE, or UNTIL.
- Prefer
https://docs.exa.ai/ for subpage crawling seeds (more reliable than https://exa.ai/docs/reference/).
More Examples
See EXAMPLES.md for grouped command examples and edge-case workflows.
1---2name: exa-full3description: Exa AI search + Research API. Supports web/code search, content extraction, and async multi-step research tasks with outputSchema.4---5
6# Exa - Search + Research
7
8Use this skill for web search, code-context search, URL content extraction, and async research workflows.
9
10## What This Skill Does
11
12- Run Exa web search with optional category and domain filters.
13- Retrieve full page content (and optional subpage crawling).
14- Find code and docs context for programming queries.
15- Run async research tasks (one-shot or create/poll workflows).
16- Support optional structured outputs via `outputSchema`.
17
18## Setup
19
20Set `EXA_API_KEY` using one of these methods.
21
22```bash
23export EXA_API_KEY="your-exa-api-key"
24```
25
26```bash
27# .env next to SKILL.md
28EXA_API_KEY=your-exa-api-key
29```
30
31Behavior:
32- If `EXA_API_KEY` is missing in the environment, scripts load only `EXA_API_KEY` from `.env`.
33- Other `.env` variables are ignored by the loader.
34
35## Safety and Data Handling
36
37- `SCHEMA_FILE` content is sent to `https://api.exa.ai/research/v1` as `outputSchema`.
38- Never use sensitive local files for `SCHEMA_FILE` (for example: `.env`, key/cert files, secrets, internal confidential docs).
39- `research_create.sh` blocks obvious sensitive paths/suffixes (for example: `.env`, `.pem`, `.key`, `.p12`, `.pfx`, `id_rsa`).
40
41## Command Quick Reference
42
43### Search
44
45```bash
46bash scripts/search.sh "query"
47```
48
49Main env vars:
50- `NUM=10` (max 100)
51- `TYPE=auto` (`auto`, `neural`, `fast`, `deep`, `instant`)
52- `CATEGORY=` (`company`, `research paper`, `news`, `tweet`, `personal site`, `financial report`, `people`)
53- `DOMAINS=domain1.com,domain2.com`
54- `EXCLUDE=domain1.com,domain2.com`
55- `SINCE=YYYY-MM-DD`
56- `UNTIL=YYYY-MM-DD`
57- `LOCATION=NL`
58
59Constraints:
60- `EXCLUDE` is not supported when `CATEGORY=company` or `CATEGORY=people`.
61- `SINCE` and `UNTIL` are not supported when `CATEGORY=company` or `CATEGORY=people`.
62- When `CATEGORY=people`, `DOMAINS` accepts LinkedIn domains only (`linkedin.com`, `www.linkedin.com`, `*.linkedin.com`).
63
64### Content Extraction
65
66```bash
67bash scripts/content.sh "url1" "url2"
68```
69
70Main env vars:
71- `MAX_CHARACTERS=2000`
72- `HIGHLIGHT_SENTENCES=3`
73- `HIGHLIGHTS_PER_URL=2`
74- `SUBPAGES=10`
75- `SUBPAGE_TARGET="docs,reference,api"`
76- `LIVECRAWL=preferred` (`preferred`, `always`, `fallback`)
77- `LIVECRAWL_TIMEOUT=12000`
78
79### Code Context Search
80
81```bash
82bash scripts/code.sh "query" [num_results]
83```
84
85### Research (One-shot)
86
87```bash
88bash scripts/research.sh "instructions"
89```
90
91Main env vars:
92- `MODEL=exa-research` or `MODEL=exa-research-pro`
93- `SCHEMA_FILE=path/to/schema.json`
94- `POLL_INTERVAL=2`
95- `MAX_WAIT_SECONDS=240`
96- `EVENTS=true`
97
98### Research (Create/Poll)
99
100```bash
101bash scripts/research_create.sh "instructions" | jq
102bash scripts/research_poll.sh "researchId" | jq
103```
104
105## Agent Decision Rules
106
107### Choose `TYPE` for Search
108
109Use this decision order:
1101. User explicitly asks for realtime or autocomplete -> `TYPE=instant`.
1112. Task needs broad coverage or deeper synthesis -> `TYPE=deep`.
1123. User asks for speed/quality balance -> `TYPE=fast`.
1134. Otherwise -> `TYPE=auto` (default).
114
115Fallback/escalation:
116- If too slow or time-sensitive: `deep -> auto -> fast -> instant`.
117- If too shallow: `instant -> fast -> auto -> deep`.
118- Explicit user requirement always wins.
119
120Recommended pattern:
121
122```bash
123TYPE=auto bash scripts/search.sh "query"
124```
125
126## Common Pitfalls
127
128- Do not pass sensitive files to `SCHEMA_FILE`.
129- Do not combine `CATEGORY=people|company` with `EXCLUDE`, `SINCE`, or `UNTIL`.
130- Prefer `https://docs.exa.ai/` for subpage crawling seeds (more reliable than `https://exa.ai/docs/reference/`).
131
132## More Examples
133
134See [EXAMPLES.md](EXAMPLES.md) for grouped command examples and edge-case workflows.