# Settings Reference

Complete reference of all Tabnine CLI settings. For an overview and getting started guide, see [Settings](/main/getting-started/tabnine-cli/features/settings.md).

Settings are read from `settings.json` files in order of precedence (highest first):

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

Settings are deep-merged — you only need to specify overrides. System file paths vary by platform and can be overridden with `TABNINE_CLI_SYSTEM_SETTINGS_PATH` and `TABNINE_CLI_SYSTEM_DEFAULTS_PATH` environment variables.

**Legend:**

* ⟳ = requires restart to take effect

**System file paths:**

| 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`                        |

### General Settings

| Setting                         | Type    | Description                                                                                                                                                               | Default   |
| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| `general.defaultApprovalMode`   | enum    | You can control how tool execution is approved by choosing `default` (prompts for approval), `auto_edit` (automatically approves edit tools), or `plan` (read-only mode). | `default` |
| `general.vimMode`               | boolean | You can use Vim keybindings for navigation and editing when this is enabled.                                                                                              | `false`   |
| `general.enableNotifications`   | boolean | You will receive desktop notifications for action-required prompts and session completion when this is enabled.                                                           | `false`   |
| `general.retryFetchErrors`      | boolean | The CLI will automatically retry network fetch errors when this is enabled.                                                                                               | `true`    |
| `general.maxAttempts`           | number  | You can set the maximum number of retry attempts for model requests (this cannot be set higher than 10).                                                                  | `10`      |
| `general.debugKeystrokeLogging` | boolean | Keystrokes are logged to the console for debugging purposes when this is enabled.                                                                                         | `false`   |
| `general.preferredEditor`       | string  | You can specify the editor you prefer to use for opening files.                                                                                                           | —         |
| `general.devtools`              | boolean | DevTools inspector opens on launch when this is enabled (you can access it by pressing F12).                                                                              | `false`   |
| `general.tabnineHost`           | string  | You can specify the Tabnine host URL you want to use for authentication. ⟳                                                                                                | —         |
| `general.checkpointing.enabled` | boolean | Session checkpointing is available for recovery when this is enabled. See [Checkpointing](/main/getting-started/tabnine-cli/features/checkpointing.md). ⟳                 | `false`   |

#### Session Retention Settings

Automatic cleanup of old chat sessions:

| Setting                                 | Type    | Description                                                                                                        | Default |
| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------ | ------- |
| `general.sessionRetention.enabled`      | boolean | Old chat sessions are automatically cleaned up when this is enabled.                                               | `true`  |
| `general.sessionRetention.maxAge`       | string  | Sessions older than this time period are deleted (you can use formats like `7d`, `24h`, `1w`).                     | `30d`   |
| `general.sessionRetention.maxCount`     | number  | You can specify the maximum number of sessions to keep as an alternative to `maxAge` (keeps the most recent ones). | —       |
| `general.sessionRetention.minRetention` | string  | You can set the safety minimum retention period that prevents accidental deletion of very recent sessions.         | `1d`    |

#### Plan Mode Settings

| Setting                     | Type    | Description                                                                                                         | Default |
| --------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------- | ------- |
| `general.plan.directory`    | string  | You can specify the directory where planning artifacts are stored (defaults to system temp dir if not specified). ⟳ | —       |
| `general.plan.modelRouting` | boolean | Automatically switches between Pro (planning) and Flash (implementation) models when this is enabled.               | `true`  |

### Output Settings

| Setting         | Type | Description                                                             | Default |
| --------------- | ---- | ----------------------------------------------------------------------- | ------- |
| `output.format` | enum | You can choose the format for CLI output by selecting `text` or `json`. | `text`  |

### User Interface Settings

All UI settings are nested under the `ui` key.

| Setting                                | Type    | Description                                                                                                                   | Default |
| -------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- | ------- |
| `ui.theme`                             | string  | You can specify the color theme you want to use (see [Themes](/main/getting-started/tabnine-cli/features/themes.md)).         | (auto)  |
| `ui.autoThemeSwitching`                | boolean | Automatically switches between light and dark themes based on your terminal background when this is enabled.                  | `true`  |
| `ui.terminalBackgroundPollingInterval` | number  | You can set how often (in seconds) the CLI checks your terminal background color.                                             | `60`    |
| `ui.customThemes`                      | object  | You can define your custom theme definitions (see [Themes](/main/getting-started/tabnine-cli/features/themes.md) for schema). | `{}`    |
| `ui.showLineNumbers`                   | boolean | Line numbers are displayed in chat when this is enabled.                                                                      | `true`  |
| `ui.hideBanner`                        | boolean | The startup banner is hidden when this is enabled.                                                                            | `false` |
| `ui.hideTips`                          | boolean | Helpful tips are hidden when this is enabled.                                                                                 | `false` |
| `ui.hideFooter`                        | boolean | The footer bar is hidden when this is enabled.                                                                                | `false` |
| `ui.showMemoryUsage`                   | boolean | Memory usage information is shown when this is enabled.                                                                       | `false` |
| `ui.showSpinner`                       | boolean | A spinner is shown during operations when this is enabled.                                                                    | `true`  |
| `ui.inlineThinkingMode`                | enum    | You can control how model thinking is displayed by choosing `off` or `full`.                                                  | `off`   |
| `ui.loadingPhrases`                    | enum    | You can choose what you see while the CLI is working by selecting `tips`, `witty`, `all`, or `off`.                           | `tips`  |
| `ui.customWittyPhrases`                | array   | You can specify custom phrases to cycle through during loading (replaces defaults when provided).                             | `[]`    |
| `ui.errorVerbosity`                    | enum    | You can choose the level of error details you want to see by selecting `low` or `full`.                                       | `low`   |
| `ui.showStatusInTitle`                 | boolean | Model thoughts are shown in your terminal title when this is enabled.                                                         | `false` |
| `ui.dynamicWindowTitle`                | boolean | Your terminal title is updated with status icons when this is enabled.                                                        | `true`  |
| `ui.hideWindowTitle`                   | boolean | The window title bar is hidden when this is enabled. ⟳                                                                        | `false` |
| `ui.useAlternateBuffer`                | boolean | Alternate screen buffer is used when this is enabled. ⟳                                                                       | `false` |
| `ui.incrementalRendering`              | boolean | Flickering is reduced when this is enabled (requires `useAlternateBuffer`). ⟳                                                 | `true`  |
| `ui.showCitations`                     | boolean | Citations for generated text are shown when this is enabled.                                                                  | `false` |
| `ui.showModelInfoInChat`               | boolean | The model name for each response is shown when this is enabled.                                                               | `false` |
| `ui.showUserIdentity`                  | boolean | Your signed-in user identity is shown when this is enabled.                                                                   | `true`  |
| `ui.showShortcutsHint`                 | boolean | The "? for shortcuts" hint is shown when this is enabled.                                                                     | `true`  |
| `ui.hideContextSummary`                | boolean | The context summary above the input is hidden when this is enabled.                                                           | `false` |
| `ui.escapePastedAtSymbols`             | boolean | `@` symbols in pasted text are escaped when this is enabled.                                                                  | `false` |
| `ui.useBackgroundColor`                | boolean | Background colors are used in the UI when this is enabled.                                                                    | `true`  |
| `ui.showHomeDirectoryWarning`          | boolean | You are warned when running in your home directory when this is enabled. ⟳                                                    | `true`  |
| `ui.showCompatibilityWarnings`         | boolean | Terminal compatibility warnings are shown when this is enabled. ⟳                                                             | `true`  |
| `ui.accessibility.screenReader`        | boolean | Screen reader mode with plain text output is activated when this is enabled. ⟳                                                | `false` |

#### Footer customization

| Setting                           | Type    | Description                                                                      | Default |
| --------------------------------- | ------- | -------------------------------------------------------------------------------- | ------- |
| `ui.footer.items`                 | array   | You can specify a list of item IDs to display in the footer (rendered in order). | —       |
| `ui.footer.showLabels`            | boolean | Descriptive headers are displayed above footer items when this is enabled.       | `true`  |
| `ui.footer.hideCWD`               | boolean | The working directory is hidden when this is enabled.                            | `false` |
| `ui.footer.hideModelInfo`         | boolean | The model name and context usage are hidden when this is enabled.                | `false` |
| `ui.footer.hideSandboxStatus`     | boolean | The sandbox indicator is hidden when this is enabled.                            | `false` |
| `ui.footer.hideContextPercentage` | boolean | The context window usage percentage is hidden when this is enabled.              | `true`  |

### Model Settings

| Setting                      | Type    | Description                                                                                                                                 | Default |
| ---------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `model.name`                 | string  | You can specify the model identifier you want to use. See [Model Selection](/main/getting-started/tabnine-cli/features/model-selection.md). | —       |
| `model.maxSessionTurns`      | number  | You can set the maximum number of turns per session (`-1` means unlimited).                                                                 | `-1`    |
| `model.compressionThreshold` | number  | You can specify the context usage fraction that triggers compression. ⟳                                                                     | `0.7`   |
| `model.disableLoopDetection` | boolean | Infinite loop detection is disabled when this is enabled. ⟳                                                                                 | `false` |
| `model.skipNextSpeakerCheck` | boolean | The next speaker check is skipped when this is enabled.                                                                                     | `true`  |
| `model.summarizeToolOutput`  | object  | You can configure per-tool summarization settings (e.g., `{\"run_shell_command\": {\"tokenBudget\": 2000}}`).                               | —       |

### Tools Settings

| Setting                             | Type    | Description                                                                                                                                                                        | Default |
| ----------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `tools.enableRemoteCodeSearch`      | boolean | Tabnine Remote Code Search is enabled when this is enabled. ⟳                                                                                                                      | `true`  |
| `tools.enableCoaching`              | boolean | Tabnine Coaching Guidelines are enabled when this is enabled. See [Coaching Guidelines](/main/administering-tabnine/managing-your-team/context-engine/coaching-guidelines-v.md). ⟳ | `true`  |
| `tools.useRipgrep`                  | boolean | Ripgrep is used for faster file search when this is enabled.                                                                                                                       | `true`  |
| `tools.truncateToolOutputThreshold` | number  | You can specify the maximum number of characters before tool output is truncated. ⟳                                                                                                | `40000` |
| `tools.disableLLMCorrection`        | boolean | LLM error correction for edits is disabled when this is enabled. ⟳                                                                                                                 | `true`  |
| `tools.searchOutputLimitEnabled`    | boolean | Search tool output size is limited when this is enabled.                                                                                                                           | `true`  |
| `tools.searchMaxChars`              | number  | You can specify the maximum number of characters from search tools.                                                                                                                | `50000` |
| `tools.core`                        | array   | You can restrict built-in tools to this allowlist. ⟳                                                                                                                               | —       |
| `tools.allowed`                     | array   | You can specify tool names that bypass the confirmation dialog. ⟳                                                                                                                  | —       |
| `tools.exclude`                     | array   | You can specify tool names to exclude from discovery. ⟳                                                                                                                            | —       |
| `tools.discoveryCommand`            | string  | You can specify a command to run for tool discovery. ⟳                                                                                                                             | —       |
| `tools.callCommand`                 | string  | You can specify a custom shell command for invoking discovered tools (reads JSON from stdin, emits JSON on stdout). ⟳                                                              | —       |

#### Shell Settings

| Setting                                   | Type    | Description                                                                   | Default |
| ----------------------------------------- | ------- | ----------------------------------------------------------------------------- | ------- |
| `tools.shell.enableInteractiveShell`      | boolean | Interactive shell is used when this is enabled. ⟳                             | `true`  |
| `tools.shell.showColor`                   | boolean | Color is shown in shell output when this is enabled.                          | `false` |
| `tools.shell.inactivityTimeout`           | number  | You can specify the maximum number of seconds without output (default 5 min). | `300`   |
| `tools.shell.pager`                       | string  | You can specify the pager command for shell output.                           | `cat`   |
| `tools.shell.enableShellOutputEfficiency` | boolean | Shell output efficiency optimizations are enabled when this is enabled.       | `true`  |

#### Sandbox Settings

| Setting         | Type   | Description                                                                                                                                                                                                              | Default |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
| `tools.sandbox` | object | You can enable sandboxed execution by setting this to `true`/`false`, a string command name (`"docker"`, `"podman"`), or an object with `enabled`, `command`, `image`, `allowedPaths`, and `networkAccess` properties. ⟳ | —       |

### Security Settings

| Setting                                | Type    | Description                                                                                  | Default |
| -------------------------------------- | ------- | -------------------------------------------------------------------------------------------- | ------- |
| `security.disableYoloMode`             | boolean | YOLO mode is blocked even from CLI flags when this is enabled. ⟳                             | `false` |
| `security.disableAlwaysAllow`          | boolean | "Always allow" is removed from confirmation dialogs when this is enabled. ⟳                  | `false` |
| `security.enablePermanentToolApproval` | boolean | "Allow for all future sessions" option is shown when this is enabled.                        | `false` |
| `security.autoAddToPolicyByDefault`    | boolean | "Allow for all future sessions" defaults to enabled for low-risk tools when this is enabled. | `false` |
| `security.toolSandboxing`              | boolean | Experimental per-tool sandboxing is enabled when this is enabled.                            | `false` |
| `security.blockGitExtensions`          | boolean | Extensions installed from Git are blocked when this is enabled. ⟳                            | `true`  |
| `security.allowedExtensions`           | array   | You can specify a regex allowlist for extensions (overrides `blockGitExtensions`). ⟳         | `[]`    |
| `security.folderTrust.enabled`         | boolean | Workspace trust checks are enabled when this is enabled. ⟳                                   | `true`  |
| `security.enableConseca`               | boolean | Context-aware security checker is enabled when this is enabled. ⟳                            | `false` |

#### Environment variable redaction

| Setting                                         | Type    | Description                                                                         | Default |
| ----------------------------------------------- | ------- | ----------------------------------------------------------------------------------- | ------- |
| `security.environmentVariableRedaction.enabled` | boolean | Environment variables that may contain secrets are redacted when this is enabled. ⟳ | `false` |
| `security.environmentVariableRedaction.allowed` | array   | You can specify environment variables to never redact. ⟳                            | `[]`    |
| `security.environmentVariableRedaction.blocked` | array   | You can specify environment variables to always redact. ⟳                           | `[]`    |

### Context Settings

| Setting                                           | Type    | Description                                                                                          | Default |
| ------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------- | ------- |
| `context.includeDirectoryTree`                    | boolean | Directory tree is included in initial context when this is enabled.                                  | `true`  |
| `context.discoveryMaxDirs`                        | number  | You can specify the maximum number of directories to scan for memory files.                          | `200`   |
| `context.loadMemoryFromIncludeDirectories`        | boolean | Include directories are scanned for TABNINE.md files when this is enabled.                           | `false` |
| `context.includeDirectories`                      | array   | You can specify additional directories to include in the workspace context.                          | `[]`    |
| `context.fileName`                                | string  | You can override the context file name(s) to load into memory.                                       | —       |
| `context.importFormat`                            | enum    | You can specify the memory import format (`tree` or `flat`).                                         | —       |
| `context.fileFiltering.respectGitIgnore`          | boolean | .gitignore is respected when searching when this is enabled. ⟳                                       | `true`  |
| `context.fileFiltering.respectGeminiIgnore`       | boolean | .tabnineignore is respected when searching when this is enabled. ⟳                                   | `true`  |
| `context.fileFiltering.enableRecursiveFileSearch` | boolean | Recursive file search for @ references is enabled when this is enabled. ⟳                            | `true`  |
| `context.fileFiltering.enableFuzzySearch`         | boolean | Fuzzy file search is enabled when this is enabled. ⟳                                                 | `true`  |
| `context.fileFiltering.customIgnoreFilePaths`     | array   | You can specify additional ignore file paths (take precedence over .gitignore and .tabnineignore). ⟳ | `[]`    |

### Telemetry Settings

| Setting                  | Type    | Description                                                  | Default |
| ------------------------ | ------- | ------------------------------------------------------------ | ------- |
| `telemetry.enabled`      | boolean | You can enable or disable telemetry collection.              | —       |
| `telemetry.otlpEndpoint` | string  | You can specify a custom OTLP endpoint for telemetry data.   | —       |
| `telemetry.otlpProtocol` | enum    | You can specify the OTLP protocol to use (`grpc` or `http`). | —       |
| `telemetry.logPrompts`   | boolean | Prompts are included in telemetry when this is enabled.      | —       |
| `telemetry.outfile`      | string  | You can specify a file path for writing telemetry output.    | —       |

### Billing Settings

| Setting                   | Type | Description                                                                             | Default |
| ------------------------- | ---- | --------------------------------------------------------------------------------------- | ------- |
| `billing.overageStrategy` | enum | You can specify how to handle quota exhaustion by choosing `ask`, `always`, or `never`. | `ask`   |

### MCP Servers Settings

The `mcpServers` key is a top-level object mapping server names to their configuration. See [MCP Server Config](/main/getting-started/tabnine-cli/features/mcp-server-config.md) for transport types, tool filtering, and authentication.

| Setting             | Type   | Description                                         | Default |
| ------------------- | ------ | --------------------------------------------------- | ------- |
| `mcp.serverCommand` | string | You can specify a command to start an MCP server. ⟳ | —       |
| `mcp.allowed`       | array  | You can specify an allowlist of MCP server names. ⟳ | —       |
| `mcp.excluded`      | array  | You can specify a blocklist of MCP server names. ⟳  | —       |

### Hooks Settings

See [Hooks](/main/getting-started/tabnine-cli/features/hooks.md) for full documentation.

| Setting                     | Type    | Description                                               | Default |
| --------------------------- | ------- | --------------------------------------------------------- | ------- |
| `hooksConfig.enabled`       | boolean | The hooks system is enabled when this is enabled. ⟳       | `true`  |
| `hooksConfig.notifications` | boolean | Indicators are shown when hooks run when this is enabled. | `true`  |
| `hooksConfig.disabled`      | array   | You can specify a list of hook command names to disable.  | `[]`    |

Hook events are configured under the `hooks` key with arrays per event: `BeforeTool`, `AfterTool`, `BeforeAgent`, `AfterAgent`, `Notification`, `SessionStart`, `SessionEnd`, `PreCompress`, `BeforeModel`, `AfterModel`, `BeforeToolSelection`.

### IDE Settings

| Setting       | Type    | Description                                             | Default |
| ------------- | ------- | ------------------------------------------------------- | ------- |
| `ide.enabled` | boolean | IDE integration mode is enabled when this is enabled. ⟳ | `false` |

### Skills Settings

| Setting           | Type    | Description                                       | Default |
| ----------------- | ------- | ------------------------------------------------- | ------- |
| `skills.enabled`  | boolean | Agent Skills are enabled when this is enabled. ⟳  | `true`  |
| `skills.disabled` | array   | You can specify a list of disabled skill names. ⟳ | `[]`    |

### Extensions Settings

| Setting               | Type  | Description                                           | Default |
| --------------------- | ----- | ----------------------------------------------------- | ------- |
| `extensions.disabled` | array | You can specify a list of disabled extension names. ⟳ | `[]`    |

### Agents Settings

| Setting                           | Type    | Description                                                                                     | Default                                       |
| --------------------------------- | ------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------- |
| `agents.overrides`                | object  | You can specify per-agent override settings (model config, run config, enable/disable). ⟳       | `{}`                                          |
| `agents.browser.sessionMode`      | enum    | You can specify the browser session mode by choosing `persistent`, `isolated`, or `existing`. ⟳ | `persistent`                                  |
| `agents.browser.headless`         | boolean | The browser runs in headless mode when this is enabled. ⟳                                       | `false`                                       |
| `agents.browser.profilePath`      | string  | You can specify the path to browser profile directory for session persistence. ⟳                | —                                             |
| `agents.browser.visualModel`      | string  | You can specify a model override for the browser visual agent. ⟳                                | —                                             |
| `agents.browser.allowedDomains`   | array   | You can specify allowed domains for the browser agent. ⟳                                        | `["github.com", "*.google.com", "localhost"]` |
| `agents.browser.disableUserInput` | boolean | User input on browser window is disabled during automation when this is enabled.                | `true`                                        |

### Advanced Settings

| Setting                        | Type    | Description                                                                | Default                   |
| ------------------------------ | ------- | -------------------------------------------------------------------------- | ------------------------- |
| `advanced.autoConfigureMemory` | boolean | Node.js memory limits are automatically configured when this is enabled. ⟳ | `false`                   |
| `advanced.dnsResolutionOrder`  | string  | You can specify the DNS resolution order (`ipv4first` or `verbatim`). ⟳    | —                         |
| `advanced.excludedEnvVars`     | array   | You can specify environment variables to exclude from project context.     | `["DEBUG", "DEBUG_MODE"]` |
| `policyPaths`                  | array   | You can specify additional policy files or directories to load. ⟳          | `[]`                      |
| `adminPolicyPaths`             | array   | You can specify additional admin policy files or directories to load. ⟳    | `[]`                      |


---

# 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/settings-reference.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.
