| # Gemini CLI configuration |
|
|
| Gemini CLI offers several ways to configure its behavior, including environment |
| variables, command-line arguments, and settings files. This document outlines |
| the different configuration methods and available settings. |
|
|
| ## Configuration layers |
|
|
| Configuration is applied in the following order of precedence (lower numbers are |
| overridden by higher numbers): |
|
|
| 1. **Default values:** Hardcoded defaults within the application. |
| 2. **System defaults file:** System-wide default settings that can be |
| overridden by other settings files. |
| 3. **User settings file:** Global settings for the current user. |
| 4. **Project settings file:** Project-specific settings. |
| 5. **System settings file:** System-wide settings that override all other |
| settings files. |
| 6. **Environment variables:** System-wide or session-specific variables, |
| potentially loaded from `.env` files. |
| 7. **Command-line arguments:** Values passed when launching the CLI. |
| |
| ## Settings files |
|
|
| Gemini CLI uses JSON settings files for persistent configuration. There are four |
| locations for these files: |
|
|
| <!-- prettier-ignore --> |
| > [!TIP] |
| > JSON-aware editors can use autocomplete and validation by pointing to |
| > the generated schema at `schemas/settings.schema.json` in this repository. |
| > When working outside the repo, reference the hosted schema at |
| > `https://raw.githubusercontent.com/google-gemini/gemini-cli/main/schemas/settings.schema.json`. |
|
|
| - **System defaults file:** |
| - **Location:** `/etc/gemini-cli/system-defaults.json` (Linux), |
| `C:\ProgramData\gemini-cli\system-defaults.json` (Windows) or |
| `/Library/Application Support/GeminiCli/system-defaults.json` (macOS). The |
| path can be overridden using the `GEMINI_CLI_SYSTEM_DEFAULTS_PATH` |
| environment variable. |
| - **Scope:** Provides a base layer of system-wide default settings. These |
| settings have the lowest precedence and are intended to be overridden by |
| user, project, or system override settings. |
| - **User settings file:** |
| - **Location:** `~/.gemini/settings.json` (where `~` is your home directory). |
| - **Scope:** Applies to all Gemini CLI sessions for the current user. User |
| settings override system defaults. |
| - **Project settings file:** |
| - **Location:** `.gemini/settings.json` within your project's root directory. |
| - **Scope:** Applies only when running Gemini CLI from that specific project. |
| Project settings override user settings and system defaults. |
| - **System settings file:** |
| - **Location:** `/etc/gemini-cli/settings.json` (Linux), |
| `C:\ProgramData\gemini-cli\settings.json` (Windows) or |
| `/Library/Application Support/GeminiCli/settings.json` (macOS). The path can |
| be overridden using the `GEMINI_CLI_SYSTEM_SETTINGS_PATH` environment |
| variable. |
| - **Scope:** Applies to all Gemini CLI sessions on the system, for all users. |
| System settings act as overrides, taking precedence over all other settings |
| files. May be useful for system administrators at enterprises to have |
| controls over users' Gemini CLI setups. |
| |
| **Note on environment variables in settings:** String values within your |
| `settings.json` and `gemini-extension.json` files can reference environment |
| variables using `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-DEFAULT_VALUE}` |
| syntax. These variables will be automatically resolved when the settings are |
| loaded. For example, if you have an environment variable `MY_API_TOKEN`, you |
| could use it in `settings.json` like this: `"apiKey": "$MY_API_TOKEN"`. If you |
| want to provide a fallback value, use `${MY_API_TOKEN:-default-token}`. |
| Additionally, each extension can have its own `.env` file in its directory, |
| which will be loaded automatically. |
|
|
| **Note for Enterprise Users:** For guidance on deploying and managing Gemini CLI |
| in a corporate environment, see the |
| [Enterprise Configuration](../cli/enterprise.md) documentation. |
|
|
| ### The `.gemini` directory in your project |
|
|
| In addition to a project settings file, a project's `.gemini` directory can |
| contain other project-specific files related to Gemini CLI's operation, such as: |
|
|
| - [Custom sandbox profiles](#sandboxing) (for example, |
| `.gemini/sandbox-macos-custom.sb`, `.gemini/sandbox.Dockerfile`). |
|
|
| ### Available settings in `settings.json` |
|
|
| Settings are organized into categories. All settings should be placed within |
| their corresponding top-level category object in your `settings.json` file. |
|
|
| <!-- SETTINGS-AUTOGEN:START --> |
|
|
| #### `policyPaths` |
|
|
| - **`policyPaths`** (array): |
| - **Description:** Additional policy files or directories to load. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
|
|
| #### `adminPolicyPaths` |
|
|
| - **`adminPolicyPaths`** (array): |
| - **Description:** Additional admin policy files or directories to load. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
|
|
| #### `general` |
|
|
| - **`general.preferredEditor`** (enum): |
|
|
| - **Description:** The preferred editor to open files in. Must be one of the |
| built-in supported identifiers. Use /editor in the CLI to pick |
| interactively, or leave unset to use $VISUAL/$EDITOR. |
| - **Default:** `undefined` |
| - **Values:** `"vscode"`, `"vscodium"`, `"windsurf"`, `"cursor"`, `"zed"`, |
| `"antigravity"`, `"sublimetext"`, `"lapce"`, `"nova"`, `"bbedit"`, `"vim"`, |
| `"neovim"`, `"emacs"`, `"hx"`, `"emacsclient"`, `"micro"` |
| |
| - **`general.openEditorInNewWindow`** (boolean): |
|
|
| - **Description:** Open VS Code-family editors in a new window when editing |
| files. |
| - **Default:** `false` |
| |
| - **`general.vimMode`** (boolean): |
|
|
| - **Description:** Enable Vim keybindings |
| - **Default:** `false` |
|
|
| - **`general.defaultApprovalMode`** (enum): |
|
|
| - **Description:** The default approval mode for tool execution. 'default' |
| prompts for approval, 'auto_edit' auto-approves edit tools, and 'plan' is |
| read-only mode. YOLO mode (auto-approve all actions) can only be enabled via |
| command line (--yolo or --approval-mode=yolo). |
| - **Default:** `"default"` |
| - **Values:** `"default"`, `"auto_edit"`, `"plan"` |
| |
| - **`general.devtools`** (boolean): |
|
|
| - **Description:** Enable DevTools inspector on launch. |
| - **Default:** `false` |
|
|
| - **`general.enableAutoUpdate`** (boolean): |
|
|
| - **Description:** Enable automatic updates. |
| - **Default:** `true` |
|
|
| - **`general.enableAutoUpdateNotification`** (boolean): |
|
|
| - **Description:** Enable update notification prompts. |
| - **Default:** `true` |
|
|
| - **`general.enableNotifications`** (boolean): |
|
|
| - **Description:** Enable terminal run-event notifications for action-required |
| prompts and session completion. |
| - **Default:** `false` |
| |
| - **`general.notificationMethod`** (enum): |
|
|
| - **Description:** How to send terminal notifications. |
| - **Default:** `"auto"` |
| - **Values:** `"auto"`, `"osc9"`, `"osc777"`, `"bell"` |
|
|
| - **`general.checkpointing.enabled`** (boolean): |
|
|
| - **Description:** Enable session checkpointing for recovery |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`general.plan.enabled`** (boolean): |
|
|
| - **Description:** Enable Plan Mode for read-only safety during planning. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`general.plan.directory`** (string): |
|
|
| - **Description:** The directory where planning artifacts are stored. If not |
| specified, defaults to the system temporary directory. A custom directory |
| requires a policy to allow write access in Plan Mode. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`general.plan.modelRouting`** (boolean): |
|
|
| - **Description:** Automatically switch between Pro and Flash models based on |
| Plan Mode status. Uses Pro for the planning phase and Flash for the |
| implementation phase. |
| - **Default:** `true` |
| |
| - **`general.retryFetchErrors`** (boolean): |
|
|
| - **Description:** Retry on "exception TypeError: fetch failed sending |
| request" errors. |
| - **Default:** `true` |
| |
| - **`general.maxAttempts`** (number): |
|
|
| - **Description:** Maximum number of attempts for requests to the main chat |
| model. Cannot exceed 10. |
| - **Default:** `10` |
| |
| - **`general.debugKeystrokeLogging`** (boolean): |
|
|
| - **Description:** Enable debug logging of keystrokes to the console. |
| - **Default:** `false` |
|
|
| - **`general.sessionRetention.enabled`** (boolean): |
|
|
| - **Description:** Enable automatic session cleanup |
| - **Default:** `true` |
|
|
| - **`general.sessionRetention.maxAge`** (string): |
|
|
| - **Description:** Automatically delete chats older than this time period |
| (e.g., "30d", "7d", "24h", "1w") |
| - **Default:** `"30d"` |
| |
| - **`general.sessionRetention.maxCount`** (number): |
|
|
| - **Description:** Alternative: Maximum number of sessions to keep (most |
| recent) |
| - **Default:** `undefined` |
| |
| - **`general.sessionRetention.minRetention`** (string): |
|
|
| - **Description:** Minimum retention period (safety limit, defaults to "1d") |
| - **Default:** `"1d"` |
|
|
| - **`general.topicUpdateNarration`** (boolean): |
|
|
| - **Description:** Enable the Topic & Update communication model for reduced |
| chattiness and structured progress reporting. |
| - **Default:** `true` |
| |
| - **`general.logRagSnippets`** (boolean): |
| - **Description:** Log full Code Customization (RAG) retrieved snippets to a |
| local file for debugging. |
| - **Default:** `false` |
| |
| #### `output` |
|
|
| - **`output.format`** (enum): |
| - **Description:** The format of the CLI output. Can be `text` or `json`. |
| - **Default:** `"text"` |
| - **Values:** `"text"`, `"json"` |
|
|
| #### `ui` |
|
|
| - **`ui.debugRainbow`** (boolean): |
|
|
| - **Description:** Enable debug rainbow rendering. Only useful for debugging |
| rendering bugs and performance issues. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`ui.theme`** (string): |
|
|
| - **Description:** The color theme for the UI. See the CLI themes guide for |
| available options. |
| - **Default:** `undefined` |
| |
| - **`ui.autoThemeSwitching`** (boolean): |
|
|
| - **Description:** Automatically switch between default light and dark themes |
| based on terminal background color. |
| - **Default:** `true` |
| |
| - **`ui.terminalBackgroundPollingInterval`** (number): |
|
|
| - **Description:** Interval in seconds to poll the terminal background color. |
| - **Default:** `60` |
|
|
| - **`ui.customThemes`** (object): |
|
|
| - **Description:** Custom theme definitions. |
| - **Default:** `{}` |
|
|
| - **`ui.hideWindowTitle`** (boolean): |
|
|
| - **Description:** Hide the window title bar |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`ui.inlineThinkingMode`** (enum): |
|
|
| - **Description:** Display model thinking inline: off or full. |
| - **Default:** `"off"` |
| - **Values:** `"off"`, `"full"` |
|
|
| - **`ui.showStatusInTitle`** (boolean): |
|
|
| - **Description:** Show Gemini CLI model thoughts in the terminal window title |
| during the working phase |
| - **Default:** `false` |
| |
| - **`ui.dynamicWindowTitle`** (boolean): |
|
|
| - **Description:** Update the terminal window title with current status icons |
| (Ready: ◇, Action Required: ✋, Working: ✦) |
| - **Default:** `true` |
| |
| - **`ui.showHomeDirectoryWarning`** (boolean): |
|
|
| - **Description:** Show a warning when running Gemini CLI in the home |
| directory. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`ui.showCompatibilityWarnings`** (boolean): |
|
|
| - **Description:** Show warnings about terminal or OS compatibility issues. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`ui.hideTips`** (boolean): |
|
|
| - **Description:** Hide helpful tips in the UI |
| - **Default:** `false` |
|
|
| - **`ui.escapePastedAtSymbols`** (boolean): |
|
|
| - **Description:** When enabled, @ symbols in pasted text are escaped to |
| prevent unintended @path expansion. |
| - **Default:** `false` |
| |
| - **`ui.showShortcutsHint`** (boolean): |
|
|
| - **Description:** Show the "? for shortcuts" hint above the input. |
| - **Default:** `true` |
|
|
| - **`ui.compactToolOutput`** (boolean): |
|
|
| - **Description:** Display tool outputs (like directory listings and file |
| reads) in a compact, structured format. |
| - **Default:** `true` |
| |
| - **`ui.hideBanner`** (boolean): |
|
|
| - **Description:** Hide the application banner |
| - **Default:** `false` |
|
|
| - **`ui.hideContextSummary`** (boolean): |
|
|
| - **Description:** Hide the context summary (GEMINI.md, MCP servers) above the |
| input. |
| - **Default:** `false` |
| |
| - **`ui.footer.items`** (array): |
|
|
| - **Description:** List of item IDs to display in the footer. Rendered in |
| order |
| - **Default:** `undefined` |
| |
| - **`ui.footer.showLabels`** (boolean): |
|
|
| - **Description:** Display a second line above the footer items with |
| descriptive headers (e.g., /model). |
| - **Default:** `true` |
| |
| - **`ui.footer.hideCWD`** (boolean): |
|
|
| - **Description:** Hide the current working directory in the footer. |
| - **Default:** `false` |
|
|
| - **`ui.footer.hideSandboxStatus`** (boolean): |
|
|
| - **Description:** Hide the sandbox status indicator in the footer. |
| - **Default:** `false` |
|
|
| - **`ui.footer.hideModelInfo`** (boolean): |
|
|
| - **Description:** Hide the model name and context usage in the footer. |
| - **Default:** `false` |
|
|
| - **`ui.footer.hideContextPercentage`** (boolean): |
|
|
| - **Description:** Hides the context window usage percentage. |
| - **Default:** `true` |
|
|
| - **`ui.hideFooter`** (boolean): |
|
|
| - **Description:** Hide the footer from the UI |
| - **Default:** `false` |
|
|
| - **`ui.collapseDrawerDuringApproval`** (boolean): |
|
|
| - **Description:** Whether to collapse the UI drawer when a tool is awaiting |
| confirmation. |
| - **Default:** `true` |
| |
| - **`ui.showMemoryUsage`** (boolean): |
|
|
| - **Description:** Display memory usage information in the UI |
| - **Default:** `false` |
|
|
| - **`ui.showLineNumbers`** (boolean): |
|
|
| - **Description:** Show line numbers in the chat. |
| - **Default:** `true` |
|
|
| - **`ui.showCitations`** (boolean): |
|
|
| - **Description:** Show citations for generated text in the chat. |
| - **Default:** `false` |
|
|
| - **`ui.showModelInfoInChat`** (boolean): |
|
|
| - **Description:** Show the model name in the chat for each model turn. |
| - **Default:** `false` |
|
|
| - **`ui.showUserIdentity`** (boolean): |
|
|
| - **Description:** Show the signed-in user's identity (e.g. email) in the UI. |
| - **Default:** `true` |
|
|
| - **`ui.useAlternateBuffer`** (boolean): |
|
|
| - **Description:** Use an alternate screen buffer for the UI, preserving shell |
| history. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`ui.renderProcess`** (boolean): |
|
|
| - **Description:** Enable Ink render process for the UI. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`ui.terminalBuffer`** (boolean): |
|
|
| - **Description:** Use the new terminal buffer architecture for rendering. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`ui.useBackgroundColor`** (boolean): |
|
|
| - **Description:** Whether to use background colors in the UI. |
| - **Default:** `true` |
|
|
| - **`ui.incrementalRendering`** (boolean): |
|
|
| - **Description:** Enable incremental rendering for the UI. This option will |
| reduce flickering but may cause rendering artifacts. Only supported when |
| useAlternateBuffer is enabled. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`ui.showSpinner`** (boolean): |
|
|
| - **Description:** Show the spinner during operations. |
| - **Default:** `true` |
|
|
| - **`ui.loadingPhrases`** (enum): |
|
|
| - **Description:** What to show while the model is working: tips, witty |
| comments, all, or off. |
| - **Default:** `"off"` |
| - **Values:** `"tips"`, `"witty"`, `"all"`, `"off"` |
| |
| - **`ui.errorVerbosity`** (enum): |
|
|
| - **Description:** Controls whether recoverable errors are hidden (low) or |
| fully shown (full). |
| - **Default:** `"low"` |
| - **Values:** `"low"`, `"full"` |
| |
| - **`ui.customWittyPhrases`** (array): |
|
|
| - **Description:** Custom witty phrases to display during loading. When |
| provided, the CLI cycles through these instead of the defaults. |
| - **Default:** `[]` |
| |
| - **`ui.accessibility.enableLoadingPhrases`** (boolean): |
|
|
| - **Description:** @deprecated Use ui.loadingPhrases instead. Enable loading |
| phrases during operations. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`ui.accessibility.screenReader`** (boolean): |
| - **Description:** Render output in plain-text to be more screen reader |
| accessible |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| #### `ide` |
|
|
| - **`ide.enabled`** (boolean): |
|
|
| - **Description:** Enable IDE integration mode. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`ide.hasSeenNudge`** (boolean): |
| - **Description:** Whether the user has seen the IDE integration nudge. |
| - **Default:** `false` |
|
|
| #### `privacy` |
|
|
| - **`privacy.usageStatisticsEnabled`** (boolean): |
| - **Description:** Enable collection of usage statistics |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| #### `billing` |
|
|
| - **`billing.overageStrategy`** (enum): |
|
|
| - **Description:** How to handle quota exhaustion when AI credits are |
| available. 'ask' prompts each time, 'always' automatically uses credits, |
| 'never' disables credit usage. |
| - **Default:** `"ask"` |
| - **Values:** `"ask"`, `"always"`, `"never"` |
| |
| - **`billing.vertexAi.requestType`** (enum): |
|
|
| - **Description:** Sets the X-Vertex-AI-LLM-Request-Type header for Vertex AI |
| requests. |
| - **Default:** `undefined` |
| - **Values:** `"dedicated"`, `"shared"` |
| - **Requires restart:** Yes |
| |
| - **`billing.vertexAi.sharedRequestType`** (enum): |
| - **Description:** Sets the X-Vertex-AI-LLM-Shared-Request-Type header for |
| Vertex AI requests. |
| - **Default:** `undefined` |
| - **Values:** `"priority"`, `"flex"` |
| - **Requires restart:** Yes |
| |
| #### `model` |
|
|
| - **`model.name`** (string): |
|
|
| - **Description:** The Gemini model to use for conversations. |
| - **Default:** `undefined` |
|
|
| - **`model.maxSessionTurns`** (number): |
|
|
| - **Description:** Maximum number of user/model/tool turns to keep in a |
| session. -1 means unlimited. |
| - **Default:** `-1` |
| |
| - **`model.summarizeToolOutput`** (object): |
|
|
| - **Description:** Enables or disables summarization of tool output. Configure |
| per-tool token budgets (for example {"run_shell_command": {"tokenBudget": |
| 2000}}). Currently only the run_shell_command tool supports summarization. |
| - **Default:** `undefined` |
| |
| - **`model.compressionThreshold`** (number): |
|
|
| - **Description:** The fraction of context usage at which to trigger context |
| compression (e.g. 0.2, 0.3). |
| - **Default:** `0.5` |
| - **Requires restart:** Yes |
| |
| - **`model.disableLoopDetection`** (boolean): |
|
|
| - **Description:** Disable automatic detection and prevention of infinite |
| loops. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`model.skipNextSpeakerCheck`** (boolean): |
| - **Description:** Skip the next speaker check. |
| - **Default:** `true` |
|
|
| #### `modelConfigs` |
|
|
| - **`modelConfigs.aliases`** (object): |
|
|
| - **Description:** Named presets for model configs. Can be used in place of a |
| model name and can inherit from other aliases using an `extends` property. |
| - **Default:** |
| |
| ```json |
| { |
| "base": { |
| "modelConfig": { |
| "generateContentConfig": { |
| "temperature": 0, |
| "topP": 1 |
| } |
| } |
| }, |
| "chat-base": { |
| "extends": "base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "thinkingConfig": { |
| "includeThoughts": true |
| }, |
| "temperature": 1, |
| "topP": 0.95, |
| "topK": 64 |
| } |
| } |
| }, |
| "chat-base-2.5": { |
| "extends": "chat-base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "thinkingConfig": { |
| "thinkingBudget": 8192 |
| } |
| } |
| } |
| }, |
| "chat-base-3": { |
| "extends": "chat-base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "thinkingConfig": { |
| "thinkingLevel": "HIGH" |
| } |
| } |
| } |
| }, |
| "gemini-3-pro-preview": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3-pro-preview" |
| } |
| }, |
| "gemini-3-flash-preview": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3-flash-preview" |
| } |
| }, |
| "gemini-3.1-pro-preview": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3.1-pro-preview" |
| } |
| }, |
| "gemini-3.1-pro-preview-customtools": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3.1-pro-preview-customtools" |
| } |
| }, |
| "gemini-3.1-flash-lite-preview": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3.1-flash-lite-preview" |
| } |
| }, |
| "gemini-2.5-pro": { |
| "extends": "chat-base-2.5", |
| "modelConfig": { |
| "model": "gemini-2.5-pro" |
| } |
| }, |
| "gemini-2.5-flash": { |
| "extends": "chat-base-2.5", |
| "modelConfig": { |
| "model": "gemini-2.5-flash" |
| } |
| }, |
| "gemini-2.5-flash-lite": { |
| "extends": "chat-base-2.5", |
| "modelConfig": { |
| "model": "gemini-2.5-flash-lite" |
| } |
| }, |
| "gemini-3.1-flash-lite": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3.1-flash-lite" |
| } |
| }, |
| "gemini-3.5-flash": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemini-3.5-flash" |
| } |
| }, |
| "gemma-4-31b-it": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemma-4-31b-it" |
| } |
| }, |
| "gemma-4-26b-a4b-it": { |
| "extends": "chat-base-3", |
| "modelConfig": { |
| "model": "gemma-4-26b-a4b-it" |
| } |
| }, |
| "gemini-2.5-flash-base": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "gemini-2.5-flash" |
| } |
| }, |
| "gemini-3-flash-base": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "gemini-3-flash-preview" |
| } |
| }, |
| "gemini-3.5-flash-base": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "gemini-3.5-flash" |
| } |
| }, |
| "classifier": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "maxOutputTokens": 1024, |
| "thinkingConfig": { |
| "thinkingBudget": 512 |
| } |
| } |
| } |
| }, |
| "prompt-completion": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "temperature": 0.3, |
| "maxOutputTokens": 16000, |
| "thinkingConfig": { |
| "thinkingBudget": 0 |
| } |
| } |
| } |
| }, |
| "fast-ack-helper": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "temperature": 0.2, |
| "maxOutputTokens": 120, |
| "thinkingConfig": { |
| "thinkingBudget": 0 |
| } |
| } |
| } |
| }, |
| "edit-corrector": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "thinkingConfig": { |
| "thinkingBudget": 0 |
| } |
| } |
| } |
| }, |
| "summarizer-default": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "maxOutputTokens": 2000 |
| } |
| } |
| }, |
| "summarizer-shell": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "flash-lite", |
| "generateContentConfig": { |
| "maxOutputTokens": 2000 |
| } |
| } |
| }, |
| "web-search": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "tools": [ |
| { |
| "googleSearch": {} |
| } |
| ] |
| } |
| } |
| }, |
| "web-fetch": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "tools": [ |
| { |
| "urlContext": {} |
| } |
| ] |
| } |
| } |
| }, |
| "web-fetch-fallback": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": {} |
| }, |
| "loop-detection": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": {} |
| }, |
| "loop-detection-double-check": { |
| "extends": "base", |
| "modelConfig": { |
| "model": "gemini-3-pro-preview" |
| } |
| }, |
| "llm-edit-fixer": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": {} |
| }, |
| "next-speaker-checker": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": {} |
| }, |
| "context-snapshotter": { |
| "extends": "gemini-3-flash-base", |
| "modelConfig": { |
| "generateContentConfig": { |
| "thinkingConfig": { |
| "thinkingLevel": "HIGH" |
| }, |
| "temperature": 1, |
| "topP": 0.95, |
| "topK": 64 |
| } |
| } |
| }, |
| "chat-compression-3-pro": { |
| "modelConfig": { |
| "model": "gemini-3-pro-preview" |
| } |
| }, |
| "chat-compression-3-flash": { |
| "modelConfig": { |
| "model": "gemini-3-flash-preview" |
| } |
| }, |
| "chat-compression-3.1-flash-lite": { |
| "modelConfig": { |
| "model": "gemini-3.1-flash-lite" |
| } |
| }, |
| "chat-compression-2.5-pro": { |
| "modelConfig": { |
| "model": "gemini-2.5-pro" |
| } |
| }, |
| "chat-compression-2.5-flash": { |
| "modelConfig": { |
| "model": "gemini-2.5-flash" |
| } |
| }, |
| "chat-compression-2.5-flash-lite": { |
| "modelConfig": { |
| "model": "gemini-2.5-flash-lite" |
| } |
| }, |
| "chat-compression-default": { |
| "modelConfig": { |
| "model": "gemini-3-pro-preview" |
| } |
| }, |
| "agent-history-provider-summarizer": { |
| "modelConfig": { |
| "model": "gemini-3-flash-preview" |
| } |
| } |
| } |
| ``` |
| |
| - **`modelConfigs.customAliases`** (object): |
|
|
| - **Description:** Custom named presets for model configs. These are merged |
| with (and override) the built-in aliases. |
| - **Default:** `{}` |
| |
| - **`modelConfigs.customOverrides`** (array): |
|
|
| - **Description:** Custom model config overrides. These are merged with (and |
| added to) the built-in overrides. |
| - **Default:** `[]` |
| |
| - **`modelConfigs.overrides`** (array): |
|
|
| - **Description:** Apply specific configuration overrides based on matches, |
| with a primary key of model (or alias). The most specific match will be |
| used. |
| - **Default:** `[]` |
| |
| - **`modelConfigs.modelDefinitions`** (object): |
|
|
| - **Description:** Registry of model metadata, including tier, family, and |
| features. |
| - **Default:** |
| |
| ```json |
| { |
| "gemini-3.1-flash-lite": { |
| "tier": "flash-lite", |
| "family": "gemini-3", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-3.1-pro-preview": { |
| "tier": "pro", |
| "family": "gemini-3", |
| "isPreview": true, |
| "isVisible": true, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-3.1-pro-preview-customtools": { |
| "tier": "pro", |
| "family": "gemini-3", |
| "isPreview": true, |
| "isVisible": false, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-3-pro-preview": { |
| "tier": "pro", |
| "family": "gemini-3", |
| "isPreview": true, |
| "isVisible": true, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-3-flash-preview": { |
| "tier": "flash", |
| "family": "gemini-3", |
| "isPreview": true, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-3.5-flash": { |
| "tier": "flash", |
| "family": "gemini-3", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": true |
| } |
| }, |
| "gemini-2.5-pro": { |
| "tier": "pro", |
| "family": "gemini-2.5", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": false |
| } |
| }, |
| "gemini-2.5-flash": { |
| "tier": "flash", |
| "family": "gemini-2.5", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": false |
| } |
| }, |
| "gemini-2.5-flash-lite": { |
| "tier": "flash-lite", |
| "family": "gemini-2.5", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": false |
| } |
| }, |
| "gemma-4-31b-it": { |
| "displayName": "gemma-4-31b-it", |
| "tier": "custom", |
| "family": "gemma-4", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": false |
| } |
| }, |
| "gemma-4-26b-a4b-it": { |
| "displayName": "gemma-4-26b-a4b-it", |
| "tier": "custom", |
| "family": "gemma-4", |
| "isPreview": false, |
| "isVisible": true, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": false |
| } |
| }, |
| "auto": { |
| "displayName": "Auto", |
| "tier": "auto", |
| "isPreview": true, |
| "isVisible": true, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": false |
| } |
| }, |
| "pro": { |
| "tier": "pro", |
| "isPreview": false, |
| "isVisible": false, |
| "features": { |
| "thinking": true, |
| "multimodalToolUse": false |
| } |
| }, |
| "flash": { |
| "tier": "flash", |
| "isPreview": false, |
| "isVisible": false, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": false |
| } |
| }, |
| "flash-lite": { |
| "tier": "flash-lite", |
| "isPreview": false, |
| "isVisible": false, |
| "features": { |
| "thinking": false, |
| "multimodalToolUse": false |
| } |
| }, |
| "auto-gemini-3": { |
| "tier": "auto", |
| "family": "gemini-3", |
| "isPreview": true, |
| "isVisible": false |
| }, |
| "auto-gemini-2.5": { |
| "tier": "auto", |
| "family": "gemini-2.5", |
| "isPreview": false, |
| "isVisible": false |
| } |
| } |
| ``` |
| |
| - **Requires restart:** Yes |
|
|
| - **`modelConfigs.modelIdResolutions`** (object): |
|
|
| - **Description:** Rules for resolving requested model names to concrete model |
| IDs based on context. |
| - **Default:** |
| |
| ```json |
| { |
| "gemma-4-31b-it": { |
| "default": "gemma-4-31b-it" |
| }, |
| "gemma-4-26b-a4b-it": { |
| "default": "gemma-4-26b-a4b-it" |
| }, |
| "gemini-3.1-pro-preview": { |
| "default": "gemini-3.1-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| } |
| ] |
| }, |
| "gemini-3.1-pro-preview-customtools": { |
| "default": "gemini-3.1-pro-preview-customtools", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| } |
| ] |
| }, |
| "gemini-3-flash-preview": { |
| "default": "gemini-3-flash-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false, |
| "useGemini3_5Flash": true |
| }, |
| "target": "gemini-3.5-flash" |
| }, |
| { |
| "condition": { |
| "hasAccessToPreview": false, |
| "useGemini3_5Flash": false |
| }, |
| "target": "gemini-2.5-flash" |
| } |
| ] |
| }, |
| "gemini-3.5-flash": { |
| "default": "gemini-3.5-flash", |
| "contexts": [ |
| { |
| "condition": { |
| "useGemini3_5Flash": false, |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-flash" |
| }, |
| { |
| "condition": { |
| "useGemini3_5Flash": false |
| }, |
| "target": "gemini-3-flash-preview" |
| } |
| ] |
| }, |
| "gemini-2.5-flash": { |
| "default": "gemini-2.5-flash", |
| "contexts": [ |
| { |
| "condition": { |
| "useGemini3_5Flash": true |
| }, |
| "target": "gemini-3.5-flash" |
| } |
| ] |
| }, |
| "gemini-3-pro-preview": { |
| "default": "gemini-3-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true, |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true |
| }, |
| "target": "gemini-3.1-pro-preview" |
| } |
| ] |
| }, |
| "auto": { |
| "default": "gemini-3-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true, |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true |
| }, |
| "target": "gemini-3.1-pro-preview" |
| } |
| ] |
| }, |
| "pro": { |
| "default": "gemini-3-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true, |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true |
| }, |
| "target": "gemini-3.1-pro-preview" |
| } |
| ] |
| }, |
| "gemini-3.1-flash-lite": { |
| "default": "gemini-3.1-flash-lite" |
| }, |
| "flash": { |
| "default": "gemini-3-flash-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "useGemini3_5Flash": true |
| }, |
| "target": "gemini-3.5-flash" |
| }, |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-flash" |
| } |
| ] |
| }, |
| "flash-lite": { |
| "default": "gemini-3.1-flash-lite" |
| }, |
| "auto-gemini-3": { |
| "default": "gemini-3-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true, |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true |
| }, |
| "target": "gemini-3.1-pro-preview" |
| } |
| ] |
| }, |
| "auto-gemini-2.5": { |
| "default": "gemini-2.5-pro" |
| } |
| } |
| ``` |
| |
| - **Requires restart:** Yes |
|
|
| - **`modelConfigs.classifierIdResolutions`** (object): |
|
|
| - **Description:** Rules for resolving classifier tiers (flash, pro) to |
| concrete model IDs. |
| - **Default:** |
| |
| ```json |
| { |
| "flash": { |
| "default": "gemini-3-flash-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "useGemini3_5Flash": true |
| }, |
| "target": "gemini-3.5-flash" |
| }, |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-flash" |
| }, |
| { |
| "condition": { |
| "requestedModels": ["gemini-2.5-pro", "auto-gemini-2.5"] |
| }, |
| "target": "gemini-2.5-flash" |
| } |
| ] |
| }, |
| "pro": { |
| "default": "gemini-3-pro-preview", |
| "contexts": [ |
| { |
| "condition": { |
| "hasAccessToPreview": false |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "requestedModels": ["gemini-2.5-pro", "auto-gemini-2.5"] |
| }, |
| "target": "gemini-2.5-pro" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true, |
| "useCustomTools": true |
| }, |
| "target": "gemini-3.1-pro-preview-customtools" |
| }, |
| { |
| "condition": { |
| "useGemini3_1": true |
| }, |
| "target": "gemini-3.1-pro-preview" |
| } |
| ] |
| } |
| } |
| ``` |
| |
| - **Requires restart:** Yes |
|
|
| - **`modelConfigs.modelChains`** (object): |
|
|
| - **Description:** Availability policy chains defining fallback behavior for |
| models. |
| - **Default:** |
| |
| ```json |
| { |
| "preview": [ |
| { |
| "model": "gemini-3-pro-preview", |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-3-flash-preview", |
| "isLastResort": true, |
| "maxAttempts": 10, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| } |
| ], |
| "auto-preview": [ |
| { |
| "model": "gemini-3-pro-preview", |
| "maxAttempts": 3, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "silent", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "sticky_retry", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-3-flash-preview", |
| "isLastResort": true, |
| "maxAttempts": 10, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| } |
| ], |
| "default": [ |
| { |
| "model": "gemini-2.5-pro", |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "sticky_retry", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-2.5-flash", |
| "isLastResort": true, |
| "maxAttempts": 10, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| } |
| ], |
| "auto-default": [ |
| { |
| "model": "gemini-2.5-pro", |
| "maxAttempts": 3, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "silent", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "sticky_retry", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-2.5-flash", |
| "isLastResort": true, |
| "maxAttempts": 10, |
| "actions": { |
| "terminal": "prompt", |
| "transient": "prompt", |
| "not_found": "prompt", |
| "unknown": "prompt" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| } |
| ], |
| "lite": [ |
| { |
| "model": "flash-lite", |
| "actions": { |
| "terminal": "silent", |
| "transient": "silent", |
| "not_found": "silent", |
| "unknown": "silent" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-2.5-flash", |
| "actions": { |
| "terminal": "silent", |
| "transient": "silent", |
| "not_found": "silent", |
| "unknown": "silent" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| }, |
| { |
| "model": "gemini-2.5-pro", |
| "isLastResort": true, |
| "actions": { |
| "terminal": "silent", |
| "transient": "silent", |
| "not_found": "silent", |
| "unknown": "silent" |
| }, |
| "stateTransitions": { |
| "terminal": "terminal", |
| "transient": "terminal", |
| "not_found": "terminal", |
| "unknown": "terminal" |
| } |
| } |
| ] |
| } |
| ``` |
| |
| - **Requires restart:** Yes |
|
|
| #### `agents` |
|
|
| - **`agents.overrides`** (object): |
|
|
| - **Description:** Override settings for specific agents, e.g. to disable the |
| agent, set a custom model config, or run config. |
| - **Default:** `{}` |
| - **Requires restart:** Yes |
| |
| - **`agents.browser.sessionMode`** (enum): |
|
|
| - **Description:** Session mode: 'persistent', 'isolated', or 'existing'. |
| - **Default:** `"persistent"` |
| - **Values:** `"persistent"`, `"isolated"`, `"existing"` |
| - **Requires restart:** Yes |
|
|
| - **`agents.browser.headless`** (boolean): |
|
|
| - **Description:** Run browser in headless mode. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`agents.browser.profilePath`** (string): |
|
|
| - **Description:** Path to browser profile directory for session persistence. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| - **`agents.browser.visualModel`** (string): |
|
|
| - **Description:** Model for the visual agent's analyze_screenshot tool. When |
| set, enables the tool. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`agents.browser.allowedDomains`** (array): |
| |
| - **Description:** A list of allowed domains for the browser agent (e.g., |
| ["github.com", "*.google.com"]). |
| - **Default:** |
| |
| ```json |
| ["github.com", "*.google.com", "localhost"] |
| ``` |
| |
| - **Requires restart:** Yes |
| |
| - **`agents.browser.disableUserInput`** (boolean): |
| |
| - **Description:** Disable user input on browser window during automation. |
| - **Default:** `true` |
| |
| - **`agents.browser.maxActionsPerTask`** (number): |
| |
| - **Description:** The maximum number of tool calls allowed per browser task. |
| Enforcement is hard: the agent will be terminated when the limit is reached. |
| - **Default:** `100` |
| |
| - **`agents.browser.confirmSensitiveActions`** (boolean): |
| |
| - **Description:** Require manual confirmation for sensitive browser actions |
| (e.g., fill_form, evaluate_script). |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`agents.browser.blockFileUploads`** (boolean): |
| - **Description:** Hard-block file upload requests from the browser agent. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| #### `context` |
| |
| - **`context.fileName`** (string | string[]): |
| |
| - **Description:** The name of the context file or files to load into memory. |
| Accepts either a single string or an array of strings. |
| - **Default:** `undefined` |
| |
| - **`context.importFormat`** (string): |
| |
| - **Description:** The format to use when importing memory. |
| - **Default:** `undefined` |
| |
| - **`context.includeDirectoryTree`** (boolean): |
| |
| - **Description:** Whether to include the directory tree of the current |
| working directory in the initial request to the model. |
| - **Default:** `true` |
| |
| - **`context.discoveryMaxDirs`** (number): |
| |
| - **Description:** Maximum number of directories to search for memory. |
| - **Default:** `200` |
| |
| - **`context.memoryBoundaryMarkers`** (array): |
| |
| - **Description:** File or directory names that mark the boundary for |
| GEMINI.md discovery. The upward traversal stops at the first directory |
| containing any of these markers. An empty array disables parent traversal. |
| - **Default:** |
| |
| ```json |
| [".git"] |
| ``` |
| |
| - **Requires restart:** Yes |
| |
| - **`context.includeDirectories`** (array): |
| |
| - **Description:** Additional directories to include in the workspace context. |
| Missing directories will be skipped with a warning. |
| - **Default:** `[]` |
| |
| - **`context.loadMemoryFromIncludeDirectories`** (boolean): |
| |
| - **Description:** Controls how /memory reload loads GEMINI.md files. When |
| true, include directories are scanned; when false, only the current |
| directory is used. |
| - **Default:** `false` |
| |
| - **`context.fileFiltering.respectGitIgnore`** (boolean): |
| |
| - **Description:** Respect .gitignore files when searching. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`context.fileFiltering.respectGeminiIgnore`** (boolean): |
| |
| - **Description:** Respect .geminiignore files when searching. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`context.fileFiltering.enableFileWatcher`** (boolean): |
| |
| - **Description:** Enable file watcher updates for @ file suggestions |
| (experimental). |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`context.fileFiltering.enableRecursiveFileSearch`** (boolean): |
| |
| - **Description:** Enable recursive file search functionality when completing |
| @ references in the prompt. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`context.fileFiltering.enableFuzzySearch`** (boolean): |
| |
| - **Description:** Enable fuzzy search when searching for files. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`context.fileFiltering.customIgnoreFilePaths`** (array): |
| - **Description:** Additional ignore file paths to respect. These files take |
| precedence over .geminiignore and .gitignore. Files earlier in the array |
| take precedence over files later in the array, e.g. the first file takes |
| precedence over the second one. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
| |
| #### `tools` |
| |
| - **`tools.sandbox`** (string): |
| |
| - **Description:** Legacy full-process sandbox execution environment. Set to a |
| boolean to enable or disable the sandbox, provide a string path to a sandbox |
| profile, or specify an explicit sandbox command (e.g., "docker", "podman", |
| "lxc", "windows-native"). |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`tools.sandboxAllowedPaths`** (array): |
| |
| - **Description:** List of additional paths that the sandbox is allowed to |
| access. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
| |
| - **`tools.sandboxNetworkAccess`** (boolean): |
| |
| - **Description:** Whether the sandbox is allowed to access the network. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`tools.shell.enableInteractiveShell`** (boolean): |
| |
| - **Description:** Use node-pty for an interactive shell experience. Fallback |
| to child_process still applies. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`tools.shell.backgroundCompletionBehavior`** (enum): |
|
|
| - **Description:** Controls what happens when a background shell command |
| finishes. 'silent' (default): quietly exits in background. 'inject': |
| automatically returns output to agent. 'notify': shows brief message in |
| chat. |
| - **Default:** `"silent"` |
| - **Values:** `"silent"`, `"inject"`, `"notify"` |
| |
| - **`tools.shell.pager`** (string): |
|
|
| - **Description:** The pager command to use for shell output. Defaults to |
| `cat`. |
| - **Default:** `"cat"` |
| |
| - **`tools.shell.showColor`** (boolean): |
|
|
| - **Description:** Show color in shell output. |
| - **Default:** `true` |
|
|
| - **`tools.shell.inactivityTimeout`** (number): |
|
|
| - **Description:** The maximum time in seconds allowed without output from the |
| shell command. Defaults to 5 minutes. |
| - **Default:** `300` |
| |
| - **`tools.shell.enableShellOutputEfficiency`** (boolean): |
|
|
| - **Description:** Enable shell output efficiency optimizations for better |
| performance. |
| - **Default:** `true` |
| |
| - **`tools.core`** (array): |
|
|
| - **Description:** Restrict the set of built-in tools with an allowlist. Match |
| semantics mirror tools.allowed; see the built-in tools documentation for |
| available names. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`tools.allowed`** (array): |
|
|
| - **Description:** Tool names that bypass the confirmation dialog. Useful for |
| trusted commands (for example ["run_shell_command(git)", |
| "run_shell_command(npm test)"]). See shell tool command restrictions for |
| matching details. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`tools.confirmationRequired`** (array): |
|
|
| - **Description:** Tool names that always require user confirmation. Takes |
| precedence over allowed tools and core tool allowlists. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`tools.exclude`** (array): |
|
|
| - **Description:** Tool names to exclude from discovery. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| - **`tools.discoveryCommand`** (string): |
|
|
| - **Description:** Command to run for tool discovery. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| - **`tools.callCommand`** (string): |
|
|
| - **Description:** Defines a custom shell command for invoking discovered |
| tools. The command must take the tool name as the first argument, read JSON |
| arguments from stdin, and emit JSON results on stdout. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`tools.useRipgrep`** (boolean): |
|
|
| - **Description:** Use ripgrep for file content search instead of the fallback |
| implementation. Provides faster search performance. |
| - **Default:** `true` |
| |
| - **`tools.truncateToolOutputThreshold`** (number): |
|
|
| - **Description:** Maximum characters to show when truncating large tool |
| outputs. Set to 0 or negative to disable truncation. |
| - **Default:** `40000` |
| - **Requires restart:** Yes |
| |
| - **`tools.disableLLMCorrection`** (boolean): |
| - **Description:** Disable LLM-based error correction for edit tools. When |
| enabled, tools will fail immediately if exact string matches are not found, |
| instead of attempting to self-correct. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| #### `mcp` |
|
|
| - **`mcp.serverCommand`** (string): |
|
|
| - **Description:** Command to start an MCP server. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| - **`mcp.allowed`** (array): |
|
|
| - **Description:** A list of MCP servers to allow. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| - **`mcp.excluded`** (array): |
| - **Description:** A list of MCP servers to exclude. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
|
|
| #### `useWriteTodos` |
|
|
| - **`useWriteTodos`** (boolean): |
| - **Description:** Enable the write_todos tool. |
| - **Default:** `true` |
| |
| #### `security` |
| |
| - **`security.toolSandboxing`** (boolean): |
| |
| - **Description:** Tool-level sandboxing. Isolates individual tools instead of |
| the entire CLI process. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`security.disableYoloMode`** (boolean): |
| |
| - **Description:** Disable YOLO mode, even if enabled by a flag. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`security.disableAlwaysAllow`** (boolean): |
| |
| - **Description:** Disable "Always allow" options in tool confirmation |
| dialogs. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`security.enablePermanentToolApproval`** (boolean): |
| |
| - **Description:** Enable the "Allow for all future sessions" option in tool |
| confirmation dialogs. |
| - **Default:** `false` |
| |
| - **`security.autoAddToPolicyByDefault`** (boolean): |
| |
| - **Description:** When enabled, the "Allow for all future sessions" option |
| becomes the default choice for low-risk tools in trusted workspaces. |
| - **Default:** `false` |
| |
| - **`security.blockGitExtensions`** (boolean): |
| |
| - **Description:** Blocks installing and loading extensions from Git. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`security.allowedExtensions`** (array): |
| |
| - **Description:** List of Regex patterns for allowed extensions. If nonempty, |
| only extensions that match the patterns in this list are allowed. Overrides |
| the blockGitExtensions setting. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
| |
| - **`security.folderTrust.enabled`** (boolean): |
| |
| - **Description:** Setting to track whether Folder trust is enabled. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`security.environmentVariableRedaction.allowed`** (array): |
| |
| - **Description:** Environment variables to always allow (bypass redaction). |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
| |
| - **`security.environmentVariableRedaction.blocked`** (array): |
| |
| - **Description:** Environment variables to always redact. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
| |
| - **`security.environmentVariableRedaction.enabled`** (boolean): |
| |
| - **Description:** Enable redaction of environment variables that may contain |
| secrets. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`security.auth.selectedType`** (string): |
| |
| - **Description:** The currently selected authentication type. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`security.auth.enforcedType`** (string): |
| |
| - **Description:** The required auth type. If this does not match the selected |
| auth type, the user will be prompted to re-authenticate. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`security.auth.useExternal`** (boolean): |
| |
| - **Description:** Whether to use an external authentication flow. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`security.enableConseca`** (boolean): |
| - **Description:** Enable the context-aware security checker. This feature |
| uses an LLM to dynamically generate and enforce security policies for tool |
| use based on your prompt, providing an additional layer of protection |
| against unintended actions. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| #### `advanced` |
| |
| - **`advanced.autoConfigureMemory`** (boolean): |
| |
| - **Description:** Automatically configure Node.js memory limits. Note: |
| Because memory is allocated during the initial process boot, this setting is |
| only read from the global user settings file and ignores workspace-level |
| overrides. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`advanced.dnsResolutionOrder`** (string): |
| |
| - **Description:** The DNS resolution order. |
| - **Default:** `undefined` |
| - **Requires restart:** Yes |
| |
| - **`advanced.excludedEnvVars`** (array): |
| |
| - **Description:** Environment variables to exclude from project context. |
| - **Default:** |
| |
| ```json |
| ["DEBUG", "DEBUG_MODE"] |
| ``` |
| |
| - **`advanced.ignoreLocalEnv`** (boolean): |
|
|
| - **Description:** Whether to ignore generic .env files in the project |
| directory. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`advanced.bugCommand`** (object): |
| - **Description:** Configuration for the bug report command. |
| - **Default:** `undefined` |
|
|
| #### `experimental` |
|
|
| - **`experimental.gemma`** (boolean): |
|
|
| - **Description:** Enable access to Gemma 4 models via Gemini API. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.voiceMode`** (boolean): |
|
|
| - **Description:** Enable experimental voice dictation and commands (/voice, |
| /voice model). |
| - **Default:** `false` |
| |
| - **`experimental.voice.activationMode`** (enum): |
|
|
| - **Description:** How to trigger voice recording with the Space key. |
| - **Default:** `"push-to-talk"` |
| - **Values:** `"push-to-talk"`, `"toggle"` |
|
|
| - **`experimental.voice.backend`** (enum): |
|
|
| - **Description:** The backend to use for voice transcription. Note: When |
| using the Gemini Live backend, voice recordings are sent to Google Cloud for |
| transcription. |
| - **Default:** `"gemini-live"` |
| - **Values:** `"gemini-live"`, `"whisper"` |
| |
| - **`experimental.voice.whisperModel`** (enum): |
|
|
| - **Description:** The Whisper model to use for local transcription. |
| - **Default:** `"ggml-base.en.bin"` |
| - **Values:** `"ggml-tiny.en.bin"`, `"ggml-base.en.bin"`, |
| `"ggml-large-v3-turbo-q5_0.bin"`, `"ggml-large-v3-turbo-q8_0.bin"` |
| |
| - **`experimental.voice.stopGracePeriodMs`** (number): |
|
|
| - **Description:** How long to wait for final transcription after stopping |
| recording. |
| - **Default:** `4000` |
| |
| - **`experimental.adk.agentSessionNoninteractiveEnabled`** (boolean): |
|
|
| - **Description:** Enable non-interactive agent sessions. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.adk.agentSessionInteractiveEnabled`** (boolean): |
|
|
| - **Description:** Enable the agent session implementation for the interactive |
| CLI. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.adk.agentSessionSubagentEnabled`** (boolean): |
|
|
| - **Description:** Route subagent invocations through the AgentSession |
| protocol instead of legacy executors. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.enableAgents`** (boolean): |
|
|
| - **Description:** Enable local and remote subagents. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.worktrees`** (boolean): |
|
|
| - **Description:** Enable automated Git worktree management for parallel work. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.extensionManagement`** (boolean): |
|
|
| - **Description:** Enable extension management features. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.extensionConfig`** (boolean): |
|
|
| - **Description:** Enable requesting and fetching of extension settings. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.extensionRegistry`** (boolean): |
|
|
| - **Description:** Enable extension registry explore UI. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.extensionRegistryURI`** (string): |
|
|
| - **Description:** The URI (web URL or local file path) of the extension |
| registry. |
| - **Default:** `"https://geminicli.com/extensions.json"` |
| - **Requires restart:** Yes |
| |
| - **`experimental.extensionReloading`** (boolean): |
|
|
| - **Description:** Enables extension loading/unloading within the CLI session. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.useOSC52Paste`** (boolean): |
|
|
| - **Description:** Use OSC 52 for pasting. This may be more robust than the |
| default system when using remote terminal sessions (if your terminal is |
| configured to allow it). |
| - **Default:** `false` |
| |
| - **`experimental.useOSC52Copy`** (boolean): |
|
|
| - **Description:** Use OSC 52 for copying. This may be more robust than the |
| default system when using remote terminal sessions (if your terminal is |
| configured to allow it). |
| - **Default:** `false` |
| |
| - **`experimental.taskTracker`** (boolean): |
|
|
| - **Description:** Enable task tracker tools. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.modelSteering`** (boolean): |
|
|
| - **Description:** Enable model steering (user hints) to guide the model |
| during tool execution. |
| - **Default:** `false` |
| |
| - **`experimental.directWebFetch`** (boolean): |
|
|
| - **Description:** Enable web fetch behavior that bypasses LLM summarization. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.dynamicModelConfiguration`** (boolean): |
|
|
| - **Description:** Enable dynamic model configuration (definitions, |
| resolutions, and chains) via settings. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.gemmaModelRouter.enabled`** (boolean): |
|
|
| - **Description:** Enable the Gemma Model Router (experimental). Requires a |
| local endpoint serving Gemma via the Gemini API using LiteRT-LM shim. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.gemmaModelRouter.autoStartServer`** (boolean): |
|
|
| - **Description:** Automatically start the LiteRT-LM server when Gemini CLI |
| starts and the Gemma router is enabled. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.gemmaModelRouter.binaryPath`** (string): |
|
|
| - **Description:** Custom path to the LiteRT-LM binary. Leave empty to use the |
| default location (~/.gemini/bin/litert/). |
| - **Default:** `""` |
| - **Requires restart:** Yes |
| |
| - **`experimental.gemmaModelRouter.classifier.host`** (string): |
|
|
| - **Description:** The host of the classifier. |
| - **Default:** `"http://localhost:9379"` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.gemmaModelRouter.classifier.model`** (string): |
|
|
| - **Description:** The model to use for the classifier. Only tested on |
| `gemma3-1b-gpu-custom`. |
| - **Default:** `"gemma3-1b-gpu-custom"` |
| - **Requires restart:** Yes |
| |
| - **`experimental.stressTestProfile`** (boolean): |
|
|
| - **Description:** Significantly lowers token limits to force early garbage |
| collection and distillation for testing purposes. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.autoMemory`** (boolean): |
|
|
| - **Description:** Automatically extract memory patches and skills from past |
| sessions in the background. Every change is written as a unified diff |
| `.patch` file under `<projectMemoryDir>/.inbox/<kind>/` and held for review |
| in /memory inbox; nothing is applied until you approve it. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
| |
| - **`experimental.generalistProfile`** (boolean): |
|
|
| - **Description:** Suitable for general coding and software development tasks. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.powerUserProfile`** (boolean): |
|
|
| - **Description:** Less cache friendly version of the generalist profile. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.contextManagement`** (boolean): |
|
|
| - **Description:** Enable logic for context management. |
| - **Default:** `false` |
| - **Requires restart:** Yes |
|
|
| - **`experimental.topicUpdateNarration`** (boolean): |
| - **Description:** Deprecated: Use general.topicUpdateNarration instead. |
| - **Default:** `false` |
|
|
| #### `skills` |
|
|
| - **`skills.enabled`** (boolean): |
|
|
| - **Description:** Enable Agent Skills. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
|
|
| - **`skills.disabled`** (array): |
| - **Description:** List of disabled skills. |
| - **Default:** `[]` |
| - **Requires restart:** Yes |
|
|
| #### `hooksConfig` |
|
|
| - **`hooksConfig.enabled`** (boolean): |
|
|
| - **Description:** Canonical toggle for the hooks system. When disabled, no |
| hooks will be executed. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| - **`hooksConfig.disabled`** (array): |
|
|
| - **Description:** List of hook names (commands) that should be disabled. |
| Hooks in this list will not execute even if configured. |
| - **Default:** `[]` |
| |
| - **`hooksConfig.notifications`** (boolean): |
| - **Description:** Show visual indicators when hooks are executing. |
| - **Default:** `true` |
|
|
| #### `hooks` |
|
|
| - **`hooks.BeforeTool`** (array): |
|
|
| - **Description:** Hooks that execute before tool execution. Can intercept, |
| validate, or modify tool calls. |
| - **Default:** `[]` |
| |
| - **`hooks.AfterTool`** (array): |
|
|
| - **Description:** Hooks that execute after tool execution. Can process |
| results, log outputs, or trigger follow-up actions. |
| - **Default:** `[]` |
| |
| - **`hooks.BeforeAgent`** (array): |
|
|
| - **Description:** Hooks that execute before agent loop starts. Can set up |
| context or initialize resources. |
| - **Default:** `[]` |
| |
| - **`hooks.AfterAgent`** (array): |
|
|
| - **Description:** Hooks that execute after agent loop completes. Can perform |
| cleanup or summarize results. |
| - **Default:** `[]` |
| |
| - **`hooks.Notification`** (array): |
|
|
| - **Description:** Hooks that execute on notification events (errors, |
| warnings, info). Can log or alert on specific conditions. |
| - **Default:** `[]` |
| |
| - **`hooks.SessionStart`** (array): |
|
|
| - **Description:** Hooks that execute when a session starts. Can initialize |
| session-specific resources or state. |
| - **Default:** `[]` |
| |
| - **`hooks.SessionEnd`** (array): |
|
|
| - **Description:** Hooks that execute when a session ends. Can perform cleanup |
| or persist session data. |
| - **Default:** `[]` |
| |
| - **`hooks.PreCompress`** (array): |
|
|
| - **Description:** Hooks that execute before chat history compression. Can |
| back up or analyze conversation before compression. |
| - **Default:** `[]` |
| |
| - **`hooks.BeforeModel`** (array): |
|
|
| - **Description:** Hooks that execute before LLM requests. Can modify prompts, |
| inject context, or control model parameters. |
| - **Default:** `[]` |
| |
| - **`hooks.AfterModel`** (array): |
|
|
| - **Description:** Hooks that execute after LLM responses. Can process |
| outputs, extract information, or log interactions. |
| - **Default:** `[]` |
| |
| - **`hooks.BeforeToolSelection`** (array): |
| - **Description:** Hooks that execute before tool selection. Can filter or |
| prioritize available tools dynamically. |
| - **Default:** `[]` |
| |
| #### `contextManagement` |
|
|
| - **`contextManagement.historyWindow.maxTokens`** (number): |
|
|
| - **Description:** The number of tokens to allow before triggering |
| compression. |
| - **Default:** `150000` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.historyWindow.retainedTokens`** (number): |
|
|
| - **Description:** The number of tokens to always retain. |
| - **Default:** `40000` |
| - **Requires restart:** Yes |
|
|
| - **`contextManagement.messageLimits.normalMaxTokens`** (number): |
|
|
| - **Description:** The target number of tokens to budget for a normal |
| conversation turn. |
| - **Default:** `2500` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.messageLimits.retainedMaxTokens`** (number): |
|
|
| - **Description:** The maximum number of tokens a single conversation turn can |
| consume before truncation. |
| - **Default:** `12000` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.messageLimits.normalizationHeadRatio`** (number): |
|
|
| - **Description:** The ratio of tokens to retain from the beginning of a |
| truncated message (0.0 to 1.0). |
| - **Default:** `0.25` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.tools.distillation.maxOutputTokens`** (number): |
|
|
| - **Description:** Maximum tokens to show to the model when truncating large |
| tool outputs. |
| - **Default:** `10000` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.tools.distillation.summarizationThresholdTokens`** |
| (number): |
|
|
| - **Description:** Threshold above which truncated tool outputs will be |
| summarized by an LLM. |
| - **Default:** `20000` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.tools.outputMasking.protectionThresholdTokens`** |
| (number): |
|
|
| - **Description:** Minimum number of tokens to protect from masking (most |
| recent tool outputs). |
| - **Default:** `50000` |
| - **Requires restart:** Yes |
| |
| - **`contextManagement.tools.outputMasking.minPrunableThresholdTokens`** |
| (number): |
|
|
| - **Description:** Minimum prunable tokens required to trigger a masking pass. |
| - **Default:** `30000` |
| - **Requires restart:** Yes |
|
|
| - **`contextManagement.tools.outputMasking.protectLatestTurn`** (boolean): |
| - **Description:** Ensures the absolute latest turn is never masked, |
| regardless of token count. |
| - **Default:** `true` |
| - **Requires restart:** Yes |
| |
| #### `admin` |
|
|
| - **`admin.secureModeEnabled`** (boolean): |
|
|
| - **Description:** If true, disallows YOLO mode and "Always allow" options |
| from being used. |
| - **Default:** `false` |
| |
| - **`admin.extensions.enabled`** (boolean): |
|
|
| - **Description:** If false, disallows extensions from being installed or |
| used. |
| - **Default:** `true` |
| |
| - **`admin.mcp.enabled`** (boolean): |
|
|
| - **Description:** If false, disallows MCP servers from being used. |
| - **Default:** `true` |
|
|
| - **`admin.mcp.config`** (object): |
|
|
| - **Description:** Admin-configured MCP servers (allowlist). |
| - **Default:** `{}` |
|
|
| - **`admin.mcp.requiredConfig`** (object): |
|
|
| - **Description:** Admin-required MCP servers that are always injected. |
| - **Default:** `{}` |
|
|
| - **`admin.skills.enabled`** (boolean): |
| - **Description:** If false, disallows agent skills from being used. |
| - **Default:** `true` |
| <!-- SETTINGS-AUTOGEN:END --> |
|
|
| #### `mcpServers` |
|
|
| Configures connections to one or more Model-Context Protocol (MCP) servers for |
| discovering and using custom tools. Gemini CLI attempts to connect to each |
| configured MCP server to discover available tools. Every discovered tool is |
| prepended with the `mcp_` prefix and its server alias to form a fully qualified |
| name (FQN) (for example, `mcp_serverAlias_actualToolName`) to avoid conflicts. |
| Note that the system might strip certain schema properties from MCP tool |
| definitions for compatibility. At least one of `command`, `url`, or `httpUrl` |
| must be provided. If multiple are specified, the order of precedence is |
| `httpUrl`, then `url`, then `command`. |
|
|
| <!-- prettier-ignore --> |
| > [!WARNING] |
| > Avoid using underscores (`_`) in your server aliases (for example, use |
| > `my-server` instead of `my_server`). The underlying policy engine parses Fully |
| > Qualified Names (`mcp_server_tool`) using the first underscore after the |
| > `mcp_` prefix. An underscore in your server alias will cause the parser to |
| > misidentify the server name, which can cause security policies to fail |
| > silently. |
| |
| - **`mcpServers.<SERVER_NAME>`** (object): The server parameters for the named |
| server. |
| - `command` (string, optional): The command to execute to start the MCP server |
| via standard I/O. |
| - `args` (array of strings, optional): Arguments to pass to the command. |
| - `env` (object, optional): Environment variables to set for the server |
| process. |
| - `cwd` (string, optional): The working directory in which to start the |
| server. |
| - `url` (string, optional): The URL of an MCP server that uses Server-Sent |
| Events (SSE) for communication. |
| - `httpUrl` (string, optional): The URL of an MCP server that uses streamable |
| HTTP for communication. |
| - `headers` (object, optional): A map of HTTP headers to send with requests to |
| `url` or `httpUrl`. |
| - `timeout` (number, optional): Timeout in milliseconds for requests to this |
| MCP server. |
| - `trust` (boolean, optional): Trust this server and bypass all tool call |
| confirmations. |
| - `description` (string, optional): A brief description of the server, which |
| may be used for display purposes. |
| - `includeTools` (array of strings, optional): List of tool names to include |
| from this MCP server. When specified, only the tools listed here will be |
| available from this server (allowlist behavior). If not specified, all tools |
| from the server are enabled by default. |
| - `excludeTools` (array of strings, optional): List of tool names to exclude |
| from this MCP server. Tools listed here will not be available to the model, |
| even if they are exposed by the server. **Note:** `excludeTools` takes |
| precedence over `includeTools` - if a tool is in both lists, it will be |
| excluded. |
| |
| #### `telemetry` |
| |
| Configures logging and metrics collection for Gemini CLI. For more information, |
| see [Telemetry](../cli/telemetry.md). |
| |
| - **Properties:** |
| - **`enabled`** (boolean): Whether or not telemetry is enabled. |
| - **`traces`** (boolean): Whether detailed traces with large attributes (like |
| tool outputs and file reads) are captured. Defaults to `false`. |
| - **`target`** (string): The destination for collected telemetry. Supported |
| values are `local` and `gcp`. |
| - **`otlpEndpoint`** (string): The endpoint for the OTLP Exporter. |
| - **`otlpProtocol`** (string): The protocol for the OTLP Exporter (`grpc` or |
| `http`). |
| - **`logPrompts`** (boolean): Whether or not to include the content of user |
| prompts in the logs. |
| - **`outfile`** (string): The file to write telemetry to when `target` is |
| `local`. |
| - **`useCollector`** (boolean): Whether to use an external OTLP collector. |
| |
| ### Example `settings.json` |
| |
| Here is an example of a `settings.json` file with the nested structure, new as |
| of v0.3.0: |
| |
| ```json |
| { |
| "general": { |
| "vimMode": true, |
| "preferredEditor": "code", |
| "sessionRetention": { |
| "enabled": true, |
| "maxAge": "30d", |
| "maxCount": 100 |
| } |
| }, |
| "ui": { |
| "theme": "GitHub", |
| "hideBanner": true, |
| "hideTips": false, |
| "customWittyPhrases": [ |
| "You forget a thousand things every day. Make sure this is one of ’em", |
| "Connecting to AGI" |
| ] |
| }, |
| "tools": { |
| "sandbox": "docker", |
| "discoveryCommand": "bin/get_tools", |
| "callCommand": "bin/call_tool", |
| "exclude": ["write_file"] |
| }, |
| "mcpServers": { |
| "mainServer": { |
| "command": "bin/mcp_server.py" |
| }, |
| "anotherServer": { |
| "command": "node", |
| "args": ["mcp_server.js", "--verbose"] |
| } |
| }, |
| "telemetry": { |
| "enabled": true, |
| "target": "local", |
| "otlpEndpoint": "http://localhost:4317", |
| "logPrompts": true |
| }, |
| "privacy": { |
| "usageStatisticsEnabled": true |
| }, |
| "model": { |
| "name": "gemini-1.5-pro-latest", |
| "maxSessionTurns": 10, |
| "summarizeToolOutput": { |
| "run_shell_command": { |
| "tokenBudget": 100 |
| } |
| } |
| }, |
| "context": { |
| "fileName": ["CONTEXT.md", "GEMINI.md"], |
| "includeDirectories": ["path/to/dir1", "~/path/to/dir2", "../path/to/dir3"], |
| "loadFromIncludeDirectories": true, |
| "fileFiltering": { |
| "respectGitIgnore": false |
| } |
| }, |
| "advanced": { |
| "excludedEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"] |
| } |
| } |
| ``` |
| |
| ## Shell history |
|
|
| The CLI keeps a history of shell commands you run. To avoid conflicts between |
| different projects, this history is stored in a project-specific directory |
| within your user's home folder. |
|
|
| - **Location:** `~/.gemini/tmp/<project_hash>/shell_history` |
| - `<project_hash>` is a unique identifier generated from your project's root |
| path. |
| - The history is stored in a file named `shell_history`. |
| |
| ## Environment variables and `.env` files |
|
|
| Environment variables are a common way to configure applications, especially for |
| sensitive information like API keys or for settings that might change between |
| environments. For authentication setup, see the |
| [Authentication documentation](../get-started/authentication.mdx) which covers |
| all available authentication methods. |
|
|
| The CLI automatically loads environment variables from an `.env` file. The |
| loading order is: |
|
|
| 1. `.env` file in the current working directory. |
| 2. If not found, it searches upwards in parent directories until it finds an |
| `.env` file or reaches the project root (identified by a `.git` folder) or |
| the home directory. |
| 3. If still not found, it looks for `~/.env` (in the user's home directory). |
| |
| **Environment variable exclusion:** Some environment variables (like `DEBUG` and |
| `DEBUG_MODE`) are automatically excluded from being loaded from project `.env` |
| files to prevent interference with gemini-cli behavior. Variables from |
| `.gemini/.env` files are never excluded. You can customize this behavior using |
| the `advanced.excludedEnvVars` setting in your `settings.json` file. |
|
|
| - **`GEMINI_API_KEY`**: |
| - Your API key for the Gemini API. |
| - One of several available |
| [authentication methods](../get-started/authentication.mdx). |
| - Set this in your shell profile (for example, `~/.bashrc`, `~/.zshrc`) or an |
| `.env` file. |
| - **`GEMINI_MODEL`**: |
| - Specifies the default Gemini model to use. |
| - Overrides the hardcoded default |
| - Example: `export GEMINI_MODEL="gemini-3-flash-preview"` (Windows PowerShell: |
| `$env:GEMINI_MODEL="gemini-3-flash-preview"`) |
| - **`GEMINI_CLI_TRUST_WORKSPACE`**: |
| - If set to `"true"`, trusts the current workspace for the duration of the |
| session, bypassing the folder trust check. |
| - Useful for headless environments (for example, CI/CD pipelines). |
| - **`GEMINI_CLI_TRUSTED_FOLDERS_PATH`**: |
| - Overrides the default location for the `trustedFolders.json` file. |
| - Useful if you want to store this configuration in a custom location instead |
| of the default `~/.gemini/`. |
| - **`GEMINI_CLI_IDE_PID`**: |
| - Manually specifies the PID of the IDE process to use for integration. This |
| is useful when running Gemini CLI in a standalone terminal while still |
| wanting to associate it with a specific IDE instance. |
| - Overrides the automatic IDE detection logic. |
| - **`GEMINI_CLI_HOME`**: |
| - Specifies the root directory for Gemini CLI's user-level configuration and |
| storage. |
| - By default, this is the user's system home directory. The CLI will create a |
| `.gemini` folder inside this directory. |
| - Useful for shared compute environments or keeping CLI state isolated. |
| - Example: `export GEMINI_CLI_HOME="/path/to/user/config"` (Windows |
| PowerShell: `$env:GEMINI_CLI_HOME="C:\path\to\user\config"`) |
| - **`GEMINI_CLI_SURFACE`**: |
| - Specifies a custom label to include in the `User-Agent` header for API |
| traffic reporting. |
| - This is useful for tracking specific internal tools or distribution |
| channels. |
| - Example: `export GEMINI_CLI_SURFACE="my-custom-tool"` (Windows PowerShell: |
| `$env:GEMINI_CLI_SURFACE="my-custom-tool"`) |
| - **`GOOGLE_API_KEY`**: |
| - Your Google Cloud API key. |
| - Required for using Vertex AI in express mode. |
| - Ensure you have the necessary permissions. |
| - Example: `export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"` (Windows PowerShell: |
| `$env:GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"`). |
| - **`GOOGLE_CLOUD_PROJECT`**: |
| - Your Google Cloud Project ID. |
| - Required for using Code Assist or Vertex AI. |
| - If using Vertex AI, ensure you have the necessary permissions in this |
| project. |
| - **Cloud Shell note:** When running in a Cloud Shell environment, this |
| variable defaults to a special project allocated for Cloud Shell users. If |
| you have `GOOGLE_CLOUD_PROJECT` set in your global environment in Cloud |
| Shell, it will be overridden by this default. To use a different project in |
| Cloud Shell, you must define `GOOGLE_CLOUD_PROJECT` in a `.env` file. |
| - Example: `export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"` (Windows |
| PowerShell: `$env:GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"`). |
| - **`GOOGLE_APPLICATION_CREDENTIALS`** (string): |
| - **Description:** The path to your Google Application Credentials JSON file. |
| - **Example:** |
| `export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/credentials.json"` |
| (Windows PowerShell: |
| `$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\credentials.json"`) |
| - **`GOOGLE_GENAI_API_VERSION`**: |
| - Specifies the API version to use for Gemini API requests. |
| - When set, overrides the default API version used by the SDK. |
| - Example: `export GOOGLE_GENAI_API_VERSION="v1"` (Windows PowerShell: |
| `$env:GOOGLE_GENAI_API_VERSION="v1"`) |
| - **`GOOGLE_GEMINI_BASE_URL`**: |
| - Overrides the default base URL for Gemini API requests (when using |
| `gemini-api-key` authentication). |
| - Must be a valid URL. For security, it must use HTTPS unless pointing to |
| `localhost` (or `127.0.0.1` / `[::1]`). |
| - Example: `export GOOGLE_GEMINI_BASE_URL="https://my-proxy.com"` (Windows |
| PowerShell: `$env:GOOGLE_GEMINI_BASE_URL="https://my-proxy.com"`) |
| - **`GOOGLE_VERTEX_BASE_URL`**: |
| - Overrides the default base URL for Vertex AI API requests (when using |
| `vertex-ai` authentication). |
| - Must be a valid URL. For security, it must use HTTPS unless pointing to |
| `localhost` (or `127.0.0.1` / `[::1]`). |
| - Example: `export GOOGLE_VERTEX_BASE_URL="https://my-vertex-proxy.com"` |
| (Windows PowerShell: |
| `$env:GOOGLE_VERTEX_BASE_URL="https://my-vertex-proxy.com"`) |
| - **`OTLP_GOOGLE_CLOUD_PROJECT`**: |
| - Your Google Cloud Project ID for Telemetry in Google Cloud |
| - Example: `export OTLP_GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"` (Windows |
| PowerShell: `$env:OTLP_GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"`). |
| - **`GEMINI_TELEMETRY_ENABLED`**: |
| - Set to `true` or `1` to enable telemetry. Any other value is treated as |
| disabling it. |
| - Overrides the `telemetry.enabled` setting. |
| - **`GEMINI_TELEMETRY_TRACES_ENABLED`**: |
| - Set to `true` or `1` to enable detailed tracing with large attributes. Any |
| other value is treated as disabling it. |
| - Overrides the `telemetry.traces` setting. |
| - **`GEMINI_TELEMETRY_TARGET`**: |
| - Sets the telemetry target (`local` or `gcp`). |
| - Overrides the `telemetry.target` setting. |
| - **`GEMINI_TELEMETRY_OTLP_ENDPOINT`**: |
| - Sets the OTLP endpoint for telemetry. |
| - Overrides the `telemetry.otlpEndpoint` setting. |
| - **`GEMINI_TELEMETRY_OTLP_PROTOCOL`**: |
| - Sets the OTLP protocol (`grpc` or `http`). |
| - Overrides the `telemetry.otlpProtocol` setting. |
| - **`GEMINI_TELEMETRY_LOG_PROMPTS`**: |
| - Set to `true` or `1` to enable or disable logging of user prompts. Any other |
| value is treated as disabling it. |
| - Overrides the `telemetry.logPrompts` setting. |
| - **`GEMINI_TELEMETRY_OUTFILE`**: |
| - Sets the file path to write telemetry to when the target is `local`. |
| - Overrides the `telemetry.outfile` setting. |
| - **`GEMINI_TELEMETRY_USE_COLLECTOR`**: |
| - Set to `true` or `1` to enable or disable using an external OTLP collector. |
| Any other value is treated as disabling it. |
| - Overrides the `telemetry.useCollector` setting. |
| - **`GOOGLE_CLOUD_LOCATION`**: |
| - Your Google Cloud Project Location (for example, us-central1). |
| - Required for using Vertex AI in non-express mode. |
| - Example: `export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"` (Windows |
| PowerShell: `$env:GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"`). |
| - **`GEMINI_SANDBOX`**: |
| - Alternative to the `sandbox` setting in `settings.json`. |
| - Accepts `true`, `false`, `docker`, `podman`, or a custom command string. |
| - **`GEMINI_SYSTEM_MD`**: |
| - Replaces the built‑in system prompt with content from a Markdown file. |
| - `true`/`1`: Use project default path `./.gemini/system.md`. |
| - Any other string: Treat as a path (relative/absolute supported, `~` |
| expands). |
| - `false`/`0` or unset: Use the built‑in prompt. See |
| [System Prompt Override](../cli/system-prompt.md). |
| - **`GEMINI_WRITE_SYSTEM_MD`**: |
| - Writes the current built‑in system prompt to a file for review. |
| - `true`/`1`: Write to `./.gemini/system.md`. Otherwise treat the value as a |
| path. |
| - Run the CLI once with this set to generate the file. |
| - **`SEATBELT_PROFILE`** (macOS specific): |
| - Switches the Seatbelt (`sandbox-exec`) profile on macOS. |
| - `permissive-open`: (Default) Denies operations by default, confining writes |
| to the project folder (and a few other folders, see |
| `packages/cli/src/utils/sandbox-macos-permissive-open.sb`) while allowing |
| broad file reads and network access. |
| - `restrictive-open`: Declines operations by default, allows network. |
| - `strict-open`: Restricts both reads and writes to the working directory, |
| allows network. |
| - `strict-proxied`: Same as `strict-open` but routes network through proxy. |
| - `<profile_name>`: Uses a custom profile. To define a custom profile, create |
| a file named `sandbox-macos-<profile_name>.sb` in your project's `.gemini/` |
| directory (for example, `my-project/.gemini/sandbox-macos-custom.sb`). |
| - **`DEBUG` or `DEBUG_MODE`** (often used by underlying libraries or the CLI |
| itself): |
| - Set to `true` or `1` to enable verbose debug logging, which can be helpful |
| for troubleshooting. |
| - **Note:** These variables are automatically excluded from project `.env` |
| files by default to prevent interference with gemini-cli behavior. Use |
| `.gemini/.env` files if you need to set these for gemini-cli specifically. |
| - **`NO_COLOR`**: |
| - Set to any value to disable all color output in the CLI. |
| - **`CLI_TITLE`**: |
| - Set to a string to customize the title of the CLI. |
| - **`CODE_ASSIST_ENDPOINT`**: |
| - Specifies the endpoint for the code assist server. |
| - This is useful for development and testing. |
| |
| ### Environment variable redaction |
|
|
| To prevent accidental leakage of sensitive information, Gemini CLI automatically |
| redacts potential secrets from environment variables when executing tools (such |
| as shell commands). This "best effort" redaction applies to variables inherited |
| from the system or loaded from `.env` files. |
|
|
| **Default Redaction Rules:** |
|
|
| - **By Name:** Variables are redacted if their names contain sensitive terms |
| like `TOKEN`, `SECRET`, `PASSWORD`, `KEY`, `AUTH`, `CREDENTIAL`, `PRIVATE`, or |
| `CERT`. |
| - **By Value:** Variables are redacted if their values match known secret |
| patterns, such as: |
| - Private keys (RSA, OpenSSH, PGP, etc.) |
| - Certificates |
| - URLs containing credentials |
| - API keys and tokens (GitHub, Google, AWS, Stripe, Slack, etc.) |
| - **Specific Blocklist:** Certain variables like `CLIENT_ID`, `DB_URI`, |
| `DATABASE_URL`, and `CONNECTION_STRING` are always redacted by default. |
|
|
| **Allowlist (Never Redacted):** |
|
|
| - Common system variables (for example, `PATH`, `HOME`, `USER`, `SHELL`, `TERM`, |
| `LANG`). |
| - Variables starting with `GEMINI_CLI_`. |
| - GitHub Action specific variables. |
|
|
| **Configuration:** |
|
|
| You can customize this behavior in your `settings.json` file: |
|
|
| - **`security.allowedEnvironmentVariables`**: A list of variable names to |
| _never_ redact, even if they match sensitive patterns. |
| - **`security.blockedEnvironmentVariables`**: A list of variable names to |
| _always_ redact, even if they don't match sensitive patterns. |
|
|
| ```json |
| { |
| "security": { |
| "allowedEnvironmentVariables": ["MY_PUBLIC_KEY", "NOT_A_SECRET_TOKEN"], |
| "blockedEnvironmentVariables": ["INTERNAL_IP_ADDRESS"] |
| } |
| } |
| ``` |
|
|
| ## Command-line arguments |
|
|
| Arguments passed directly when running the CLI can override other configurations |
| for that specific session. |
|
|
| - **`--acp`**: |
| - Starts the agent in Agent Communication Protocol (ACP) mode. |
| - **`--allowed-mcp-server-names`**: |
| - A comma-separated list of MCP server names to allow for the session. |
| - **`--allowed-tools <tool1,tool2,...>`**: |
| - A comma-separated list of tool names that will bypass the confirmation |
| dialog. |
| - Example: `gemini --allowed-tools "ShellTool(git status)"` |
| - **`--approval-mode <mode>`**: |
| - Sets the approval mode for tool calls. Available modes: |
| - `default`: Prompt for approval on each tool call (default behavior) |
| - `auto_edit`: Automatically approve edit tools (replace, write_file) while |
| prompting for others |
| - `yolo`: Automatically approve all tool calls (equivalent to `--yolo`) |
| - `plan`: Read-only mode for tool calls (requires experimental planning to |
| be enabled). |
| > **Note:** This mode is currently under development and not yet fully |
| > functional. |
| - Cannot be used together with `--yolo`. Use `--approval-mode=yolo` instead of |
| `--yolo` for the new unified approach. |
| - Example: `gemini --approval-mode auto_edit` |
| - **`--debug`** (**`-d`**): |
| - Enables debug mode for this session, providing more verbose output. Open the |
| debug console with F12 to see the additional logging. |
| - **`--delete-session <identifier>`**: |
| - Delete a specific chat session by its index number or full session UUID. |
| - Use `--list-sessions` first to see available sessions, their indices, and |
| UUIDs. |
| - Example: `gemini --delete-session 3` or |
| `gemini --delete-session a1b2c3d4-e5f6-7890-abcd-ef1234567890` |
| - **`--extensions <extension_name ...>`** (**`-e <extension_name ...>`**): |
| - Specifies a list of extensions to use for the session. If not provided, all |
| available extensions are used. |
| - Use the special term `gemini -e none` to disable all extensions. |
| - Example: `gemini -e my-extension -e my-other-extension` |
| - **`--fake-responses`**: |
| - Path to a file with fake model responses for testing. |
| - **`--help`** (or **`-h`**): |
| - Displays help information about command-line arguments. |
| - **`--include-directories <dir1,dir2,...>`**: |
| - Includes additional directories in the workspace for multi-directory |
| support. |
| - Can be specified multiple times or as comma-separated values. |
| - 5 directories can be added at maximum. |
| - Example: `--include-directories /path/to/project1,/path/to/project2` or |
| `--include-directories /path/to/project1 --include-directories /path/to/project2` |
| - **`--list-extensions`** (**`-l`**): |
| - Lists all available extensions and exits. |
| - **`--list-sessions`**: |
| - List all available chat sessions for the current project and exit. |
| - Shows session indices, dates, message counts, and preview of first user |
| message. |
| - Example: `gemini --list-sessions` |
| - **`--model <model_name>`** (**`-m <model_name>`**): |
| - Specifies the Gemini model to use for this session. |
| - Example: `npm start -- --model gemini-3-pro-preview` |
| - **`--output-format <format>`**: |
| - **Description:** Specifies the format of the CLI output for non-interactive |
| mode. |
| - **Values:** |
| - `text`: (Default) The standard human-readable output. |
| - `json`: A machine-readable JSON output. |
| - `stream-json`: A streaming JSON output that emits real-time events. |
| - **Note:** For structured output and scripting, use the |
| `--output-format json` or `--output-format stream-json` flag. |
| - **`--prompt <your_prompt>`** (**`-p <your_prompt>`**): |
| - Used to pass a prompt directly to the command. This invokes Gemini CLI in a |
| non-interactive mode. |
| - **`--prompt-interactive <your_prompt>`** (**`-i <your_prompt>`**): |
| - Starts an interactive session with the provided prompt as the initial input. |
| - The prompt is processed within the interactive session, not before it. |
| - Cannot be used when piping input from stdin. |
| - Example: `gemini -i "explain this code"` |
| - **`--record-responses`**: |
| - Path to a file to record model responses for testing. |
| - **`--resume [session_id]`** (**`-r [session_id]`**): |
| - Resume a previous chat session. Use "latest" for the most recent session, |
| provide a session index number, or provide a full session UUID. |
| - If no session_id is provided, defaults to "latest". |
| - Example: `gemini --resume 5` or `gemini --resume latest` or |
| `gemini --resume a1b2c3d4-e5f6-7890-abcd-ef1234567890` or `gemini --resume` |
| - See [Session Management](../cli/session-management.md) for more details. |
| - **`--sandbox`** (**`-s`**): |
| - Enables sandbox mode for this session. |
| - **`--screen-reader`**: |
| - Enables screen reader mode, which adjusts the TUI for better compatibility |
| with screen readers. |
| - **`--version`**: |
| - Displays the version of the CLI. |
| - **`--yolo`**: |
| - Enables YOLO mode, which automatically approves all tool calls. |
| |
| ## Context files (hierarchical instructional context) |
|
|
| While not strictly configuration for the CLI's _behavior_, context files |
| (defaulting to `GEMINI.md` but configurable via the `context.fileName` setting) |
| are crucial for configuring the _instructional context_ (also referred to as |
| "memory") provided to the Gemini model. This powerful feature lets you give |
| project-specific instructions, coding style guides, or any relevant background |
| information to the AI, making its responses more tailored and accurate to your |
| needs. The CLI includes UI elements, such as an indicator in the footer showing |
| the number of loaded context files, to keep you informed about the active |
| context. |
|
|
| - **Purpose:** These Markdown files contain instructions, guidelines, or context |
| that you want the Gemini model to be aware of during your interactions. The |
| system is designed to manage this instructional context hierarchically. |
|
|
| ### Example context file content (for example, `GEMINI.md`) |
|
|
| Here's a conceptual example of what a context file at the root of a TypeScript |
| project might contain: |
|
|
| ```markdown |
| # Project: My Awesome TypeScript Library |
| |
| ## General Instructions: |
| |
| - When generating new TypeScript code, follow the existing coding style. |
| - Ensure all new functions and classes have JSDoc comments. |
| - Prefer functional programming paradigms where appropriate. |
| - All code should be compatible with TypeScript 5.0 and Node.js 20+. |
| |
| ## Coding Style: |
| |
| - Use 2 spaces for indentation. |
| - Interface names should be prefixed with `I` (for example, `IUserService`). |
| - Private class members should be prefixed with an underscore (`_`). |
| - Always use strict equality (`===` and `!==`). |
| |
| ## Specific Component: `src/api/client.ts` |
| |
| - This file handles all outbound API requests. |
| - When adding new API call functions, ensure they include robust error handling |
| and logging. |
| - Use the existing `fetchWithRetry` utility for all GET requests. |
| |
| ## Regarding Dependencies: |
| |
| - Avoid introducing new external dependencies unless absolutely necessary. |
| - If a new dependency is required, state the reason. |
| ``` |
|
|
| This example demonstrates how you can provide general project context, specific |
| coding conventions, and even notes about particular files or components. The |
| more relevant and precise your context files are, the better the AI can assist |
| you. Project-specific context files are highly encouraged to establish |
| conventions and context. |
|
|
| - **Hierarchical loading and precedence:** The CLI implements a sophisticated |
| hierarchical memory system by loading context files (for example, `GEMINI.md`) |
| from several locations. Content from files lower in this list (more specific) |
| typically overrides or supplements content from files higher up (more |
| general). The exact concatenation order and final context can be inspected |
| using the `/memory show` command. The typical loading order is: |
| 1. **Global context file:** |
| - Location: `~/.gemini/<configured-context-filename>` (for example, |
| `~/.gemini/GEMINI.md` in your user home directory). |
| - Scope: Provides default instructions for all your projects. |
| 2. **Project root and ancestors context files:** |
| - Location: The CLI searches for the configured context file in the |
| current working directory and then in each parent directory up to either |
| the project root (identified by a `.git` folder) or your home directory. |
| - Scope: Provides context relevant to the entire project or a significant |
| portion of it. |
| 3. **Sub-directory context files (contextual/local):** |
| - Location: The CLI also scans for the configured context file in |
| subdirectories _below_ the current working directory (respecting common |
| ignore patterns like `node_modules`, `.git`, etc.). The breadth of this |
| search is limited to 200 directories by default, but can be configured |
| with the `context.discoveryMaxDirs` setting in your `settings.json` |
| file. |
| - Scope: Allows for highly specific instructions relevant to a particular |
| component, module, or subsection of your project. |
| - **Concatenation and UI indication:** The contents of all found context files |
| are concatenated (with separators indicating their origin and path) and |
| provided as part of the system prompt to the Gemini model. The CLI footer |
| displays the count of loaded context files, giving you a quick visual cue |
| about the active instructional context. |
| - **Importing content:** You can modularize your context files by importing |
| other Markdown files using the `@path/to/file.md` syntax. For more details, |
| see the [Memory Import Processor documentation](./memport.md). |
| - **Commands for memory management:** |
| - Use `/memory refresh` to force a re-scan and reload of all context files |
| from all configured locations. This updates the AI's instructional context. |
| - Use `/memory show` to display the combined instructional context currently |
| loaded, allowing you to verify the hierarchy and content being used by the |
| AI. |
| - See the [Commands documentation](./commands.md#memory) for full details on |
| the `/memory` command and its sub-commands (`show` and `reload`). |
| |
| By understanding and utilizing these configuration layers and the hierarchical |
| nature of context files, you can effectively manage the AI's memory and tailor |
| Gemini CLI's responses to your specific needs and projects. |
|
|
| ## Sandboxing |
|
|
| Gemini CLI can execute potentially unsafe operations (like shell commands and |
| file modifications) within a sandboxed environment to protect your system. |
|
|
| Sandboxing is disabled by default, but you can enable it in a few ways: |
|
|
| - Using `--sandbox` or `-s` flag. |
| - Setting `GEMINI_SANDBOX` environment variable. |
| - Sandbox is enabled when using `--yolo` or `--approval-mode=yolo` by default. |
|
|
| By default, it uses a pre-built `gemini-cli-sandbox` Docker image. |
|
|
| For project-specific sandboxing needs, you can create a custom Dockerfile at |
| `.gemini/sandbox.Dockerfile` in your project's root directory. This Dockerfile |
| can be based on the base sandbox image: |
|
|
| ```dockerfile |
| FROM gemini-cli-sandbox |
| |
| # Add your custom dependencies or configurations here. |
| # Note: The base image runs as the non-root 'node' user. |
| # You must switch to 'root' to install system packages. |
| # For example: |
| # USER root |
| # RUN apt-get update && apt-get install -y some-package |
| # USER node |
| # COPY ./my-config /app/my-config |
| ``` |
|
|
| When `.gemini/sandbox.Dockerfile` exists, you can use `BUILD_SANDBOX` |
| environment variable when running Gemini CLI to automatically build the custom |
| sandbox image: |
|
|
| ```bash |
| BUILD_SANDBOX=1 gemini -s |
| ``` |
|
|
| Building a custom sandbox with `BUILD_SANDBOX` is only supported when running |
| Gemini CLI from source. If you installed the CLI with npm, build the Docker |
| image separately and reference that image in your sandbox configuration. |
|
|
| ## Usage statistics |
|
|
| To help us improve Gemini CLI, we collect anonymized usage statistics. This data |
| helps us understand how the CLI is used, identify common issues, and prioritize |
| new features. |
|
|
| **What we collect:** |
|
|
| - **Tool calls:** We log the names of the tools that are called, whether they |
| succeed or fail, and how long they take to execute. We do not collect the |
| arguments passed to the tools or any data returned by them. |
| - **API requests:** We log the Gemini model used for each request, the duration |
| of the request, and whether it was successful. We do not collect the content |
| of the prompts or responses. |
| - **Session information:** We collect information about the configuration of the |
| CLI, such as the enabled tools and the approval mode. |
|
|
| **What we DON'T collect:** |
|
|
| - **Personally identifiable information (PII):** We do not collect any personal |
| information, such as your name, email address, or API keys. |
| - **Prompt and response content:** We do not log the content of your prompts or |
| the responses from the Gemini model. |
| - **File content:** We do not log the content of any files that are read or |
| written by the CLI. |
|
|
| **How to opt out:** |
|
|
| You can opt out of usage statistics collection at any time by setting the |
| `usageStatisticsEnabled` property to `false` under the `privacy` category in |
| your `settings.json` file: |
|
|
| ```json |
| { |
| "privacy": { |
| "usageStatisticsEnabled": false |
| } |
| } |
| ``` |
|
|