Exa AI is a web_search provider. It offers the auto, neural, fast, deep, deep-reasoning, and instant search modes described in Search modes. It also has built-in content extraction (highlights, text, summaries).

Install plugin

apus plugins install @openclaw/exa-plugin

Installation applies to a running Gateway automatically; otherwise it takes effect on the next startup. See Apply changes and inspect.

Get an API key

Create an account

Sign up at [exa.ai](https://exa.ai/) and generate an API key from your
dashboard.

Store the key

Set `EXA_API_KEY` in the Gateway environment, or configure via:

```bash
apus configure --section web
```

Config

{
  plugins: {
    entries: {
      exa: {
        config: {
          webSearch: {
            apiKey: "exa-...", // optional if EXA_API_KEY is set
            baseUrl: "https://api.exa.ai", // optional; Apus appends /search
          },
        },
      },
    },
  },
  tools: {
    web: {
      search: {
        provider: "exa",
      },
    },
  },
}

Environment alternative: set EXA_API_KEY in the Gateway environment. For a gateway install, put it in ~/.apus/.env. See Env vars.

Base URL override

Set plugins.entries.exa.config.webSearch.baseUrl to route Exa search requests through a compatible proxy or alternate endpoint. Apus normalizes bare hosts by prepending https:// and appends /search unless the path already ends there. The resolved endpoint is part of the search cache key, so results from different endpoints are never shared.

Tool parameters

query string

Search query.

count number

Results to return (1-100, subject to Exa search-type limits).

type 'auto' | 'neural' | 'fast' | 'deep' | 'deep-reasoning' | 'instant'

Search mode.

freshness 'day' | 'week' | 'month' | 'year'

Time filter. Cannot be combined with date_after/date_before.

date_after string

Results after this date (YYYY-MM-DD).

date_before string

Results before this date (YYYY-MM-DD).

contents object

Content extraction options (see below).

Content extraction

Pass a contents object to control extracted content in results:

await web_search({
  query: "transformer architecture explained",
  type: "neural",
  contents: {
    text: true, // full page text
    highlights: { numSentences: 3 }, // key sentences
    summary: true, // AI summary
  },
});
Contents option Type Description
text boolean | { maxCharacters } Extract full page text
highlights boolean | { maxCharacters, query, numSentences, highlightsPerUrl } Extract key sentences
summary boolean | { query } AI-generated summary

If contents is omitted, Exa defaults to { highlights: true } so results include key-sentence excerpts. Result descriptions resolve from highlights first, then summary, then full text -- whichever is available first. Results also preserve the raw highlightScores and summary fields from the Exa API response when available.

Search modes

Mode Description
auto Exa picks the best mode (default)
neural Semantic/meaning-based search
fast Quick keyword search
deep Thorough deep search
deep-reasoning Deep search with reasoning
instant Fastest results

Notes

Related