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

# ZeroClaw

> Keenable as a built-in web-search provider in ZeroClaw, the Rust agent runtime — the one provider that needs no key.

*Search provider*

Keenable as a built-in web-search provider in ZeroClaw, the Rust agent runtime. Every other real search API in its list wants a key or a self-hosted instance; this one works as soon as you select it.

→ [View the change on GitHub](https://github.com/zeroclaw-labs/zeroclaw/pull/10679)

## Install

### No separate install

Keenable ships as a provider of ZeroClaw's `web_search_tool` (merged upstream on September 17, 2026) — there is no Keenable package to install, just ZeroClaw itself.

<Note>
  The provider is in `master` and ships with **v0.9.0**. Until that release is out, the pre-built binaries the installer downloads (v0.8.5) do not have it, so build from source:

  ```bash theme={"system"}
  curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | sh -s -- --source
  ```
</Note>

### Select Keenable

The default provider stays DuckDuckGo. Switch it in `~/.zeroclaw/config.toml`:

```toml theme={"system"}
[web_search]
search_provider = "keenable"
# Optional; omit to run keyless on the public endpoint.
keenable_api_key = "keen_..."
```

Without a key, searches go to Keenable's public endpoint. With a key, they go to the authenticated endpoint and the per-IP rate limits no longer apply. The key is read from `config.toml` on every call, so adding, rotating, or removing it takes effect without a restart.

### Or set the key from the environment

ZeroClaw's schema-mirror variables override any field at startup:

```bash theme={"system"}
export ZEROCLAW_web_search__keenable_api_key=keen_...
```

A non-empty value wins over the key stored in `config.toml`; an empty value forces keyless search.

### Try it

```text theme={"system"}
> search the web for what changed in Rust 1.95
```

The tool reports `Search results for: ... (via Keenable)` with a title, URL, and a text snippet per result, so the model can answer from the snippets without fetching every page.

<Note>
  Set `KEENABLE_API_KEY` to authenticate — this removes the hourly request cap. Without a key, calls run on the shared public tier at [lower rate limits](/rate-limits).
</Note>
