# 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](/main/getting-started/tabnine-cli/features/settings/settings-reference.md).

## 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](/main/getting-started/tabnine-cli/features/settings/settings-reference.md) 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](/main/getting-started/tabnine-cli/features/themes.md) 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](/main/getting-started/tabnine-cli/features/model-selection.md).

**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](/main/getting-started/tabnine-cli/features/mcp-server-config.md) 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](/main/getting-started/tabnine-cli/features/telemetry.md) 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](/main/getting-started/tabnine-cli/features/settings/settings-reference.md) — Complete list of all settings
* [Themes](/main/getting-started/tabnine-cli/features/themes.md) — Visual themes and custom theme creation
* [MCP Server Config](/main/getting-started/tabnine-cli/features/mcp-server-config.md) — Detailed MCP server setup
* [Hooks](/main/getting-started/tabnine-cli/features/hooks.md) — Automate workflows with hooks
* [Keyboard Shortcuts](/main/getting-started/tabnine-cli/features/keyboard-shortcuts.md) — All available keybindings
* [Commands](/main/getting-started/tabnine-cli/features/commands.md) — Command-line flags and options


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
