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

# PraisonAI

> keenable_search, a web-search tool for PraisonAI agents from praisonai-tools, with no API key required.

*Tool in praisonai-tools*

`keenable_search` gives PraisonAI agents Keenable web search. It ships in [praisonai-tools](https://github.com/MervinPraison/PraisonAI-Tools), the official tools package for PraisonAI, and runs without an API key.

→ [praisonai-tools on PyPI](https://pypi.org/project/praisonai-tools/)

## Install

```bash theme={"system"}
pip install "praisonai-tools>=0.2.45" praisonaiagents
```

## Give it to an agent

`keenable_search` is a plain function, so it goes straight into an agent's `tools`:

```python theme={"system"}
from praisonaiagents import Agent
from praisonai_tools import keenable_search

agent = Agent(
    instructions="You are a research assistant. Cite the pages you use.",
    tools=[keenable_search],
)

agent.start("What changed in the latest Python release?")
```

Each result is a dict with `title`, `url` and `snippet`, the page text as a short excerpt. The agent picks `max_results` itself (5 by default, up to 50).

## Call it directly

For search outside an agent, use the tool class:

```python theme={"system"}
from praisonai_tools import KeenableSearchTool

results = KeenableSearchTool().search("vector database benchmarks", max_results=5)
for r in results:
    print(r["title"], r["url"])
```

An error comes back as a single `{"error": "..."}` item instead of an exception, so an agent can read it and move on.

<Note>
  Without a key, calls run on the shared public tier at [lower rate limits](/rate-limits). Set `KEENABLE_API_KEY`, or pass `KeenableSearchTool(api_key=...)`, to use your organization's limits and remove the hourly cap.
</Note>


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