| name | exa-tools |
| user-invocable | false |
| description | Executes semantic web search via Exa AI Python CLI. Use when searching for current information, code examples, API documentation, finding similar pages, or generating AI answers with citations. Supports fast/deep/neural search. |
[H1][EXA-TOOLS]
Dictum: Semantic search surfaces relevant content.
Execute Exa AI search queries via Python CLI. API key auto-injected via 1Password.
[IMPORTANT] Exa 2.0 introduced three search tiers: fast (sub-350ms), auto (balanced), deep (agentic, highest quality). Default: auto.
[1][COMMANDS]
| [CMD] | [ARGS] | [RETURNS] |
|---|
| search | <query> [type] [num] | Web results with text content |
| code | <query> [num] | GitHub code context |
| find-similar | <url> [num] | Pages similar to given URL |
| answer | <query> | AI-generated answer with sources |
[2][USAGE]
uv run .claude/skills/exa-tools/scripts/exa.py search "Vite 7 new features"
uv run .claude/skills/exa-tools/scripts/exa.py search "Effect-TS best practices" neural
uv run .claude/skills/exa-tools/scripts/exa.py search "React 19 release notes" fast 15
uv run .claude/skills/exa-tools/scripts/exa.py search "Nx workspace optimization" deep
uv run .claude/skills/exa-tools/scripts/exa.py code "React useState hook examples"
uv run .claude/skills/exa-tools/scripts/exa.py code "Effect pipe examples" 20
uv run .claude/skills/exa-tools/scripts/exa.py find-similar "https://effect.website/docs/guides/essentials/pipeline"
uv run .claude/skills/exa-tools/scripts/exa.py answer "What are the breaking changes in Vite 7?"
[3][ARGUMENTS]
search: <query> [type] [num]
query — Search query (required)
type — Search type: auto, neural, keyword, fast, deep (default: auto)
num — Number of results (default: 8)
code: <query> [num]
query — Code search query (required)
num — Number of results (default: 10)
find-similar: <url> [num]
url — Source URL to find similar pages for (required)
num — Number of results (default: 10)
answer: <query>
query — Question to answer with web sources (required)
[4][OUTPUT]
Commands return: {"status": "success|error", ...}.
| [INDEX] | [CMD] | [RESPONSE] |
|---|
| [1] | search | {query, results[]} |
| [2] | code | {query, context[]} |
| [3] | find-similar | {url, results[]} |
| [4] | answer | {query, answer, sources[]} |
[5][ENVIRONMENT]
| [VAR] | [REQUIRED] | [DESCRIPTION] |
|---|
EXA_API_KEY | Yes | Exa API key (1Password injected) |
[6][ERROR_HANDLING]
- HTTP errors print
[ERROR] <status>: <body> and exit 1
- Rate limit (429): retry after
Retry-After header value
- Invalid API key:
[ERROR] 401: Unauthorized
- Empty results: returns
{"status": "success", "results": []} (not an error)