fabro/docs/public/integrations/brave-search.mdx

95 lines
3.7 KiB
Text

---
title: "Brave Search"
description: "Give Fabro agents web search capabilities via the Brave Search API"
---
Fabro's [`web_search`](/agents/tools#web_search) tool lets agents search the web during workflow execution. It uses the [Brave Search API](https://brave.com/search/api/) to return titles, URLs, and descriptions for any query.
Fabro selects the backend from the credentials in its vault. Direct Brave Search is preferred whenever `BRAVE_SEARCH_API_KEY` is present. When that key is absent, Fabro can use [Venice Search](/integrations/venice-search) with `VENICE_API_KEY` instead.
## Setup
1. Get a Brave Search API key from the [Brave Search API dashboard](https://brave.com/search/api/)
2. Store it on the Fabro server:
```bash
fabro secret set BRAVE_SEARCH_API_KEY BSA...
```
3. Verify the key is working:
```bash
fabro doctor
```
The doctor output should show **Web Search** as `brave: configured and reachable`. If the Brave key is missing but a Venice key exists, Fabro checks Venice instead. If neither key exists, web search is reported as a warning. Workflows still run, but the `web_search` tool is omitted from the agent's tool set and its system prompt.
The Fabro server reads this key from the vault only. It does not read `BRAVE_SEARCH_API_KEY` from process env or `server.env`.
## How it works
Agents call the `web_search` tool with a query string. Fabro sends the query to the Brave Web Search API (`/res/v1/web/search`) and returns numbered results with title, URL, and description:
```
1. Rust Lang
https://rust-lang.org
A systems language
2. Rust Book
https://doc.rust-lang.org/book
The Rust book
```
If `BRAVE_SEARCH_API_KEY` is not configured, Fabro uses Venice when `VENICE_API_KEY` is available. If neither key is configured, the tool is not registered.
See the [`web_search` tool reference](/agents/tools#web_search) for parameters and details.
## Permissions
`web_search` is classified as a `shell` category tool, requiring the `full` [permission level](/agents/permissions) for auto-approval. At lower permission levels:
- **Interactive mode** — the user is prompted to approve each call
- **Non-interactive mode** (`--auto-approve`) — calls are denied
## Example workflow
A workflow that researches a topic before writing about it:
<Frame>
<img src="/images/brave-search-research.svg" alt="Research workflow: Start → Research → Summarize → Exit" />
</Frame>
```dot title="research.fabro"
digraph Research {
graph [goal="Research and summarize a topic"]
rankdir=LR
start [shape=Mdiamond, label="Start"]
exit [shape=Msquare, label="Exit"]
research [label="Research", prompt="Use web_search to find recent information about {{ goal }}. Save your findings to research.md."]
summarize [label="Summarize", shape=tab, prompt="Read research.md and write a concise summary of the key findings."]
start -> research -> summarize -> exit
}
```
## Troubleshooting
**"BRAVE_SEARCH_API_KEY is not configured"** — Add the key with `fabro secret set BRAVE_SEARCH_API_KEY <key>`. Run `fabro doctor` to verify.
**"Brave Search API returned status 401"** — The API key is invalid or expired. Generate a new key from the [Brave Search API dashboard](https://brave.com/search/api/).
**"Brave Search API returned status 429"** — Rate limit exceeded. The Brave Search free tier has usage limits. Upgrade your plan or reduce the frequency of `web_search` calls.
## Further reading
<Columns cols={2}>
<Card title="Tools" icon="wrench" href="/agents/tools#web_search">
Full `web_search` tool reference — parameters, output format, and error handling.
</Card>
<Card title="Permissions" icon="lock" href="/agents/permissions">
How tool permissions control web search access.
</Card>
</Columns>