> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keenable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# CowAgent

> Keenable is a built-in web search provider in CowAgent that can run without an API key.

*Search provider*

[CowAgent](https://github.com/zhayujie/CowAgent) is an open-source AI assistant that plans tasks, runs Skills, and works from a web console and the major IM platforms. Keenable is one of the backends of its built-in `web_search` tool. Turn it on with an empty key field and searches go to Keenable's public endpoint, no account needed.

→ [The Keenable provider in CowAgent](https://github.com/zhayujie/CowAgent/pull/3122)

> [!NOTE]
>
> Keenable ships with CowAgent **2.1.8** and later. Install CowAgent with the [quick start](https://docs.cowagent.ai/guide/quick-start), or bring an existing install up to date with `cow update` ([upgrade guide](https://docs.cowagent.ai/guide/upgrade)).

## Turn it on

**1. Open the search settings**

In the [web console](https://docs.cowagent.ai/channels/web) (`http://localhost:9899` by default), open **Config**, switch to the **Models** tab, and find the **Web Search** card.

**2. Add Keenable**

Click **Add provider** and pick **Keenable**. Leave **API Key** empty and click **Save**. The card now lists **Keenable · anonymous**.

**3. Ask the agent**

Ask something that needs the web. The agent calls its `web_search` tool, which answers from Keenable when no other search provider is set up.

The console saves this to `config.json` (`~/CowAgent/config.json` for a script install, `~/.cow/config.json` for the desktop app). To set it by hand, add this block and run `cow restart`:

```json theme={"system"}
{
  "tools": {
    "web_search": {
      "keenable_anonymous": true
    }
  }
}
```

## Which provider answers

The search strategy defaults to `auto`, which uses the first configured provider in this order: Bocha, Baidu Qianfan, Zhipu, LinkAI, AnySearch, Serply, Tavily, SearXNG, Keenable. Keenable comes last, so a provider you already set up keeps answering; with two or more configured, the agent can still pick Keenable for a single call. To always search with Keenable, set **Strategy** to **Pinned** and **Provider** to **Keenable** in the same card and click **Save**, or in `config.json`:

```json theme={"system"}
{
  "tools": {
    "web_search": {
      "strategy": "fixed",
      "provider": "keenable",
      "keenable_anonymous": true
    }
  }
}
```

## What the tool returns

Each call returns up to 50 results (10 by default), each with a `title`, `url`, `snippet`, and `datePublished`. Snippets run about 300 characters, or about 1,000 when the agent asks for summaries. The tool's `freshness` filter (`oneDay`, `oneWeek`, `oneMonth`, `oneYear`, or a range such as `2025-01-01..2025-02-01`) limits results by publish date.

## Use your API key

Paste your key (`keen_<your_key>`, from the [console](https://app.keenable.ai/console)) into **API Key** in the same dialog, or set `tools.web_search.keenable_api_key` in `config.json`. When that value is empty, CowAgent reads the `KEENABLE_API_KEY` environment variable instead. With a key, Keenable counts as configured without `keenable_anonymous`.

> [!NOTE]
>
> Without a key, searches run on the shared public tier at [lower rate limits](/rate-limits). A key moves them to the authenticated endpoint and your organization's limits, and removes the hourly cap.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.