# Settings

Tabnine CLI provides a comprehensive settings system that allows you to customize the agent's behavior, appearance, and security posture. You can configure settings through two methods:

* **Interactive settings command** — Type `/settings` in the chat to open a searchable settings editor
* **Manual file editing** — Edit the settings JSON files directly (see [Settings files](#settings-files) below)

For the complete list of all available settings, see [Settings Reference](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference).

## Settings files

Tabnine CLI loads settings from multiple files, merged in the following order (highest number wins):

| # | Level               | Path                                     | Purpose                                            |
| - | ------------------- | ---------------------------------------- | -------------------------------------------------- |
| 1 | **System Defaults** | `<system-defaults-path>`                 | Organization-wide defaults that users can override |
| 2 | **User**            | `~/.tabnine/agent/settings.json`         | Personal defaults across all projects              |
| 3 | **Workspace**       | `<project>/.tabnine/agent/settings.json` | Project-specific overrides                         |
| 4 | **System**          | `<system-settings-path>`                 | Admin-enforced overrides (highest priority)        |

{% hint style="info" %}
**System Defaults** vs **System Settings:** System Defaults provide organization-wide baseline configuration that individual users can override with their own settings. System Settings have the **highest priority** and override everything — use them for admin-enforced policies that users cannot change.
{% endhint %}

**System file paths by platform:**

| Platform    | System Settings                                         | System Defaults                                                |
| ----------- | ------------------------------------------------------- | -------------------------------------------------------------- |
| **Windows** | `C:\ProgramData\tabnine-cli\settings.json`              | `C:\ProgramData\tabnine-cli\system-defaults.json`              |
| **macOS**   | `/Library/Application Support/TabnineCli/settings.json` | `/Library/Application Support/TabnineCli/system-defaults.json` |
| **Linux**   | `/etc/tabnine-cli/settings.json`                        | `/etc/tabnine-cli/system-defaults.json`                        |

System file paths can be overridden with the `TABNINE_CLI_SYSTEM_SETTINGS_PATH` and `TABNINE_CLI_SYSTEM_DEFAULTS_PATH` environment variables.

{% hint style="info" %}
All settings files use the same JSON format. Workspace settings from untrusted folders are ignored.
{% endhint %}

{% hint style="warning" %}
Changes made via `/settings` take effect immediately. Manual edits to the JSON files require restarting the CLI. Some settings always require a restart regardless of how they are changed — see the [Settings Reference](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference) for details.
{% endhint %}

## Core settings

### Approval mode

Controls whether the agent asks for confirmation before running shell commands and making file changes.

| Value       | Description                                                  |
| ----------- | ------------------------------------------------------------ |
| `default`   | Always ask for confirmation (default)                        |
| `auto_edit` | Auto-approve file edit tools; ask for shell commands         |
| `plan`      | Read-only mode — the agent can only read and plan, not write |

**Key:** `general.defaultApprovalMode`

```json
{
  "general": {
    "defaultApprovalMode": "auto_edit"
  }
}
```

{% hint style="danger" %}
**YOLO mode** (auto-approve everything) can only be enabled via the command line with `--yolo` or `--approval-mode=yolo`. It cannot be set in the settings file. To block YOLO mode entirely (even from the command line), set `security.disableYoloMode` to `true`.
{% endhint %}

### Theme

Controls the visual theme of the CLI interface. See [Themes](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/themes) for the full list and customization options.

**Key:** `ui.theme`

Built-in dark themes: `Default`, `Atom One`, `Ayu`, `Dracula`, `GitHub`, `Holiday`, `Shades Of Purple`, `Solarized Dark`, `ANSI`

Built-in light themes: `Default Light`, `Ayu Light`, `GitHub Light`, `Google Code`, `Solarized Light`, `Xcode`, `ANSI Light`

```json
{
  "ui": {
    "theme": "Dracula"
  }
}
```

When no theme is explicitly set, the CLI automatically switches between `Default` (dark) and `Default Light` based on your terminal background color. Disable this with `ui.autoThemeSwitching: false`.

### Model

Override the model used for conversations. You can also switch models during a session with the `/model` command or the `-m` CLI flag. See [Model Selection](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/model-selection).

**Key:** `model.name`

```json
{
  "model": {
    "name": "your-model-identifier"
  }
}
```

### MCP servers

Configure external [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) servers to extend the agent with additional tools and context sources. See [MCP Server Config](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/mcp-server-config) for full details.

**Key:** `mcpServers`

```json
{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "@my-org/mcp-server"],
      "env": {
        "API_KEY": "your-api-key"
      }
    }
  }
}
```

{% hint style="info" %}
MCP server changes always require restarting the CLI.
{% endhint %}

### Telemetry

Telemetry is configured as an object.

See [Telemetry](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/telemetry) for collection behavior and configuration details.

**Key:** `telemetry`

```json
{
  "telemetry": {
    "enabled": false
  }
}
```

## Full example

A settings file showing commonly customized options:

```json
{
  "general": {
    "defaultApprovalMode": "auto_edit",
    "vimMode": false,
    "tabnineHost": "https://console.tabnine.com"
  },
  "ui": {
    "theme": "Dracula",
    "autoThemeSwitching": false,
    "showLineNumbers": true,
    "inlineThinkingMode": "full"
  },
  "model": {
    "name": "your-model-identifier",
    "compressionThreshold": 0.7
  },
  "tools": {
    "enableWebFetchTool": true,
    "enableRemoteCodeSearch": true
  },
  "security": {
    "enablePermanentToolApproval": true
  },
  "telemetry": {
    "enabled": true
  },
  "mcpServers": {}
}
```

## Related

* [Settings Reference](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference) — Complete list of all settings
* [Themes](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/themes) — Visual themes and custom theme creation
* [MCP Server Config](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/mcp-server-config) — Detailed MCP server setup
* [Hooks](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/hooks) — Automate workflows with hooks
* [Keyboard Shortcuts](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/keyboard-shortcuts) — All available keybindings
* [CLI Commands](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/cli-commands) — Command-line flags and options
