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

# Configuration

<Note>Bruno AI is available from **v4.0.0** and higher.</Note>

## How to enable Bruno AI

1. Open **Preferences** from the bottom-left corner of the app
2. Go to the **AI** section and click the **Enable** button.

The **AI** tab has three sections: **Configuration**, **Autocomplete**, and **Security**.

<img src="https://mintcdn.com/bruno-a6972042-reform-ai-docs/uYi087gw4-8Kf_Id/images/screenshots/v4/ai/ai-preferences.webp?fit=max&auto=format&n=uYi087gw4-8Kf_Id&q=85&s=1346e21a8516eece93bf96c361b06de8" alt="ai-configuration" width="2602" height="1578" data-path="images/screenshots/v4/ai/ai-preferences.webp" />

***

## Configuration

### Enable AI Features

Toggle **AI Features** on at the top of the Configuration tab.

<Warning>
  **Bruno never stores your API keys.**

  The keys stay on your machine and are not written to collections or Git. Bruno saves them locally in the same application-data folder as `preferences.json`, and they never leave your machine except when Bruno talks to the provider you configured.

  * macOS: `~/Library/Application Support/bruno/`
  * Windows: `%APPDATA%\bruno\`
  * Linux: `~/.config/bruno/`
</Warning>

### Add a provider

Choose the provider you want to connect:

* [OpenAI](/ai/bruno-ai/openai) - add an OpenAI API key and select OpenAI models
* [Anthropic](/ai/bruno-ai/anthropic) - add an Anthropic API key and select Claude models
* [Custom AI providers](/ai/bruno-ai/custom-providers) - connect an OpenAI-compatible hosted or local endpoint

Each provider page includes setup, connection testing, model selection, and troubleshooting details.

***

## Autocomplete

### Enable Autocomplete

Toggle **Inline Autocomplete** on to activate ghost-text suggestions in script and test editors.

<img src="https://mintcdn.com/bruno-a6972042-reform-ai-docs/uYi087gw4-8Kf_Id/images/screenshots/v4/ai/ai-autocomplete.webp?fit=max&auto=format&n=uYi087gw4-8Kf_Id&q=85&s=047cd41bf41b92ee93c3bd5d65928b3a" alt="ai-autocomplete" width="2602" height="1432" data-path="images/screenshots/v4/ai/ai-autocomplete.webp" />

### Model

Select which model handles suggestions. **Auto (fastest available)** picks the lightest model from your active providers and is recommended for keeping suggestions fast.

### Trigger mode

| Mode       | Behavior                                  |
| ---------- | ----------------------------------------- |
| Aggressive | Suggests on every keystroke               |
| Debounced  | Suggests after you pause typing (default) |
| Manual     | Only suggests when you press `⌘ \`        |

### Keymap

| Key   | Action                     |
| ----- | -------------------------- |
| `Tab` | Accept the full suggestion |
| `⌘ →` | Accept one word at a time  |
| `Esc` | Dismiss the suggestion     |
| `⌘ \` | Trigger manually           |

***

## Security

Bruno automatically redacts sensitive data before sending context to any provider. All protections are on by default.

<img src="https://mintcdn.com/bruno-a6972042-reform-ai-docs/uYi087gw4-8Kf_Id/images/screenshots/v4/ai/ai-security.webp?fit=max&auto=format&n=uYi087gw4-8Kf_Id&q=85&s=107f6ba3bb3ae09f4b552913a58fbc57" alt="ai-security" width="2602" height="1576" data-path="images/screenshots/v4/ai/ai-security.webp" />

### Redact sensitive header values

Masks `Authorization`, cookies, API keys, and other credential-bearing headers. Non-sensitive headers pass through unchanged.

**Request headers sent to Bruno:**

```
Authorization: Bearer eyJhbGci...
Content-Type: application/json
X-Request-Id: req_abc123
```

**What the AI receives:**

```
Authorization: <redacted>
Content-Type: application/json
X-Request-Id: req_abc123
```

### Redact sensitive body keys

Masks values under keys like `password`, `*_token`, and `secret` in JSON and GraphQL variables. Structure and non-sensitive fields still pass through.

**Request body sent to Bruno:**

```json theme={null}
{
  "username": "usebruno",
  "password": "mypassword",
  "access_token": "abc123",
  "email": "usebruno@example.com"
}
```

**What the AI receives:**

```json theme={null}
{
  "username": "usebruno",
  "password": "<redacted>",
  "access_token": "<redacted>",
  "email": "usebruno@example.com"
}
```

### Redact response values

Sends the response as a shape only. Real values are replaced with type placeholders. Turn this off to send the actual response body.

**Actual response:**

```json theme={null}
{
  "id": 42,
  "name": "usebruno",
  "token": "eyJhbGci..."
}
```

**What the AI receives:**

```json theme={null}
{
  "id": "<number>",
  "name": "<string>",
  "token": "<string>"
}
```

### Redact secret variable values

Masks values of variables whose names look like secrets. Variables explicitly marked `secret` are always redacted regardless of this toggle.

**Environment variables:**

```
baseUrl = https://api.example.com
api_key = sk-abc123
```

**What the AI receives:**

```
baseUrl = https://api.example.com
api_key = <redacted>
```

### Custom redacted headers

Add header names to always mask on top of the built-in list. Matching is exact and case-insensitive.

### Custom redacted variables

Add variable names whose values should always be masked when Bruno sends context to the model.

### Covered by default

`Authorization`, `Proxy-Authorization`, `Cookie`, `Set-Cookie`, `X-API-Key`, `X-Auth-Token`, `X-Access-Token`, `X-CSRF-Token`, plus any name matching `token`, `secret`, `password`, or `api_key`.
