文章目录
1. 引言
在前面的博客中,博主已经对 Gemini 做了一些简单的总结,有兴趣的同学可以阅读:
- 《Gemini 3 完整指南(一):免费订阅、CLI 安装到 Agent 开发一次搞懂》
- 《Gemini 3 完整指南(二):CLI 官方文档导航与速查索引》
- 《Gemini 3 完整指南(三):CLI 功能特性及架构解密》

Gemini CLI 提供多种方式来配置其行为,包括环境变量、命令行参数和设置文件,配置按以下优先级顺序应用(较低编号会被较高编号覆盖):
- 默认值: 应用内硬编码的默认值。
- 系统默认文件: 系统范围的默认设置,可被其他设置文件覆盖。
- 用户设置文件: 当前用户的全局设置。
- 项目设置文件: 项目特定设置。
- 系统设置文件: 覆盖所有其他设置文件的系统范围设置。
- 环境变量: 系统范围或会话特定变量,可能从
.env文件加载。 - 命令行参数: 启动 CLI 时传入的值。
2. 配置文件位置
Gemini CLI 使用 JSON 设置文件进行持久化配置,这些文件有四个位置:
【系统默认文件】: 提供一层系统范围的基础默认设置,这些设置的优先级最低,旨在被用户、项目或系统覆盖设置所覆盖。
| 操作系统 | 位置 |
|---|---|
| Linux | /etc/gemini-cli/system-defaults.json |
| Windows | C:\ProgramData\gemini-cli\system-defaults.json |
| macOS | /Library/Application Support/GeminiCli/system-defaults.json |
【用户设置文件】:
- 位置:
~/.gemini/settings.json(其中~是你的主目录)。 - 作用域: 适用于当前用户的所有 Gemini CLI 会话。用户设置会覆盖系统默认设置。
【项目设置文件】:
- 位置: 项目根目录中的
.gemini/settings.json。 - 作用域: 仅当从该特定项目运行 Gemini CLI 时适用。项目设置会覆盖用户设置和系统默认设置。
除了项目设置文件之外,项目的 .gemini 目录还可以包含其他与 Gemini CLI 运行相关的项目特定文件,例如:自定义沙箱配置文件(.gemini/sandbox-macos-custom.sb、.gemini/sandbox.Dockerfile等)。
【系统设置文件】: 适用于系统上所有用户的所有 Gemini CLI 会话,系统设置作为覆盖项,优先级高于所有其他设置文件。对企业中的系统管理员控制用户的 Gemini CLI 设置可能很有用。
| 操作系统 | 位置 |
|---|---|
| Linux | /etc/gemini-cli/settings.json |
| Windows | C:\ProgramData\gemini-cli\settings.json |
| macOS | /Library/Application Support/GeminiCli/settings.json |
该路径可通过 GEMINI_CLI_SYSTEM_SETTINGS_PATH 环境变量覆盖。
关于设置中的环境变量说明:
settings.json和gemini-extension.json文件中的字符串值可以使用$VAR_NAME或${VAR_NAME}语法引用环境变量,这些变量会在加载设置时自动解析。例如,如果你有一个环境变量MY_API_TOKEN,你可以在settings.json中这样使用它:"apiKey": "$MY_API_TOKEN"。此外,每个扩展都可以在其目录中拥有自己的.env文件,并会自动加载。
3. settings.json 中的可用设置
3.1 general
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
general.previewFeatures | boolean | 启用预览功能(例如预览模型)。 | false | 否 |
general.preferredEditor | string | 用于打开文件的首选编辑器。 | undefined | 否 |
general.vimMode | boolean | 启用 Vim 键绑定。 | false | 否 |
general.enableAutoUpdate | boolean | 启用自动更新。 | true | 否 |
general.enableAutoUpdateNotification | boolean | 启用更新通知提示。 | true | 否 |
general.checkpointing.enabled | boolean | 启用会话检查点以便恢复。 | false | 是 |
general.enablePromptCompletion | boolean | 启用 AI 驱动的提示补全建议(在输入时)。 | false | 是 |
general.retryFetchErrors | boolean | 在出现 "exception TypeError: fetch failed sending request" 错误时重试。 | false | 否 |
general.debugKeystrokeLogging | boolean | 启用将按键记录调试日志输出到控制台。 | false | 否 |
general.sessionRetention.enabled | boolean | 启用自动会话清理。 | false | 否 |
general.sessionRetention.maxAge | string | 保留会话的最大时长(例如 "30d"、"7d"、"24h"、"1w")。 | undefined | 否 |
general.sessionRetention.maxCount | number | 备选方案:要保留的最大会话数量(最新)。 | undefined | 否 |
general.sessionRetention.minRetention | string | 最短保留期(安全限制)。 | "1d" | 否 |
3.2 output
| 配置项 | 类型 | 说明 | 默认值 | 取值 |
|---|---|---|---|---|
output.format | enum | CLI 输出格式。 | "text" | "text"、"json" |
3.3 ui
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
ui.theme | string | UI 的配色主题。可用选项请参阅 CLI 主题指南。 | undefined | 否 |
ui.customThemes | object | 自定义主题定义。 | {} | 否 |
ui.hideWindowTitle | boolean | 隐藏窗口标题栏。 | false | 是 |
ui.showStatusInTitle | boolean | 在工作阶段,将模型思考状态显示在终端窗口标题中。 | false | 否 |
ui.dynamicWindowTitle | boolean | 使用当前状态图标更新终端窗口标题 | true | 否 |
ui.showHomeDirectoryWarning | boolean | 在主目录中运行 CLI 时显示警告。 | true | 是 |
ui.hideTips | boolean | 隐藏 UI 中的实用提示。 | false | 否 |
ui.hideBanner | boolean | 隐藏应用横幅。 | false | 否 |
ui.hideContextSummary | boolean | 隐藏输入框上方的上下文摘要(GEMINI.md、MCP servers)。 | false | 否 |
ui.footer.hideCWD | boolean | 在页脚隐藏当前工作目录路径。 | false | 否 |
ui.footer.hideSandboxStatus | boolean | 在页脚隐藏沙箱状态指示器。 | false | 否 |
ui.footer.hideModelInfo | boolean | 在页脚隐藏模型名称与上下文使用情况。 | false | 否 |
ui.footer.hideContextPercentage | boolean | 隐藏剩余上下文窗口百分比。 | true | 否 |
ui.hideFooter | boolean | 从 UI 中隐藏页脚。 | false | 否 |
ui.showMemoryUsage | boolean | 在 UI 中显示内存使用信息。 | false | 否 |
ui.showLineNumbers | boolean | 在聊天中显示行号。 | true | 否 |
ui.showCitations | boolean | 在聊天中显示生成文本的引用。 | false | 否 |
ui.showModelInfoInChat | boolean | 在聊天中为每个模型轮次显示模型名称。 | false | 否 |
ui.useFullWidth | boolean | 使用终端的完整宽度进行输出。 | true | 否 |
ui.useAlternateBuffer | boolean | 为 UI 使用备用屏幕缓冲区,以保留 shell 历史记录。 | false | 是 |
ui.incrementalRendering | boolean | 启用 UI 的增量渲染(仅在启用 useAlternateBuffer 时支持)。 | true | 是 |
ui.customWittyPhrases | array | 操作加载期间显示的自定义俏皮短语。 | [] | 否 |
ui.accessibility.enableLoadingPhrases | boolean | 在操作期间启用加载短语。 | true | 是 |
ui.accessibility.screenReader | boolean | 以纯文本渲染输出,使其对屏幕阅读器更友好。 | false | 是 |
3.4 ide
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
ide.enabled | boolean | 启用 IDE 集成模式。 | false | 是 |
ide.hasSeenNudge | boolean | 用户是否已看到 IDE 集成提示。 | false | 否 |
3.5 privacy
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
privacy.usageStatisticsEnabled | boolean | 启用使用统计信息收集。 | true | 是 |
3.6 model
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
model.name | string | 用于对话的 Gemini 模型。 | undefined | 否 |
model.maxSessionTurns | number | 会话中要保留的 user / model / tool 轮次最大数量,-1 表示无限制。 | -1 | 否 |
model.summarizeToolOutput | object | 启用或禁用工具输出摘要,并为每个工具配置 token 预算(目前仅 run_shell_command 支持)。 | undefined | 否 |
model.compressionThreshold | number | 触发上下文压缩的上下文使用比例阈值(例如 0.2、0.3)。 | 0.5 | 是 |
model.skipNextSpeakerCheck | boolean | 跳过下一次发言者检查。 | true | 否 |
3.7 modelConfigs
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
modelConfigs.aliases | object | 模型配置的命名预设。可代替模型名称使用,并可通过 extends 从其他别名继承。 | 内置一组预定义别名(见下方示例) |
modelConfigs.customAliases | object | 自定义的模型配置命名预设,会与内置别名合并并覆盖同名项。 | {} |
modelConfigs.customOverrides | array | 自定义模型配置覆盖项,会与内置覆盖项合并并追加。 | [] |
modelConfigs.overrides | array | 基于 model(或 alias)匹配应用的配置覆盖项,使用最具体匹配。 | [] |
modelConfigs.aliases 示例
{
"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-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-2.5-flash-base": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash"
}
},
"classifier": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash-lite",
"generateContentConfig": {
"maxOutputTokens": 1024,
"thinkingConfig": {
"thinkingBudget": 512
}
}
}
},
"prompt-completion": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash-lite",
"generateContentConfig": {
"temperature": 0.3,
"maxOutputTokens": 16000,
"thinkingConfig": {
"thinkingBudget": 0
}
}
}
},
"edit-corrector": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash-lite",
"generateContentConfig": {
"thinkingConfig": {
"thinkingBudget": 0
}
}
}
},
"summarizer-default": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash-lite",
"generateContentConfig": {
"maxOutputTokens": 2000
}
}
},
"summarizer-shell": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-flash-lite",
"generateContentConfig": {
"maxOutputTokens": 2000
}
}
},
"web-search": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {
"generateContentConfig": {
"tools": [
{
"googleSearch": {}
}
]
}
}
},
"web-fetch": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {
"generateContentConfig": {
"tools": [
{
"urlContext": {}
}
]
}
}
},
"web-fetch-fallback": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {}
},
"loop-detection": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {}
},
"loop-detection-double-check": {
"extends": "base",
"modelConfig": {
"model": "gemini-2.5-pro"
}
},
"llm-edit-fixer": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {}
},
"next-speaker-checker": {
"extends": "gemini-2.5-flash-base",
"modelConfig": {}
},
"chat-compression-3-pro": {
"modelConfig": {
"model": "gemini-3-pro-preview"
}
},
"chat-compression-3-flash": {
"modelConfig": {
"model": "gemini-3-flash-preview"
}
},
"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-2.5-pro"
}
}
}
3.8 agents
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
agents.overrides | object | 覆盖特定 agent 的设置,例如禁用该 agent、设置自定义模型配置或运行配置。 | {} | 是 |
3.9 context
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
context.fileName | string / string[] | 要加载到内存中的上下文文件名,可为单个字符串或字符串数组。 | undefined | 否 |
context.importFormat | string | 导入 memory 时使用的格式。 | undefined | 否 |
context.discoveryMaxDirs | number | 搜索 memory 的最大目录数量。 | 200 | 否 |
context.includeDirectories | array | 要包含在工作区上下文中的附加目录,缺失的目录将被跳过并给出警告。 | [] | 否 |
context.loadMemoryFromIncludeDirectories | boolean | 控制 /memory refresh 如何加载 GEMINI.md 文件。 | false | 否 |
context.fileFiltering.respectGitIgnore | boolean | 搜索时遵循 .gitignore 文件。 | true | 是 |
context.fileFiltering.respectGeminiIgnore | boolean | 搜索时遵循 .geminiignore 文件。 | true | 是 |
context.fileFiltering.enableRecursiveFileSearch | boolean | 在提示中补全 @ 引用时启用递归文件搜索功能。 | true | 是 |
context.fileFiltering.enableFuzzySearch | boolean | 搜索文件时启用模糊搜索。 | true | 是 |
3.10 tools
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
tools.sandbox | boolean / string | 沙箱执行环境;可用 boolean 启用/禁用,或提供沙箱配置文件路径。 | undefined | 是 |
tools.shell.enableInteractiveShell | boolean | 使用 node-pty 提供交互式 shell 体验(仍支持回退到 child_process)。 | true | 是 |
tools.shell.pager | string | 用于 shell 输出的分页器命令。 | "cat" | 否 |
tools.shell.showColor | boolean | 在 shell 输出中显示颜色。 | false | 否 |
tools.shell.inactivityTimeout | number | 无输出情况下允许 shell 命令运行的最长时间(秒)。 | 300 | 否 |
tools.shell.enableShellOutputEfficiency | boolean | 启用 shell 输出效率优化以提升性能。 | true | 否 |
tools.autoAccept | boolean | 自动接受并执行被认为安全的工具调用(如只读操作)。 | false | 否 |
tools.core | array | 使用 allowlist 限制内置工具集合(匹配语义与 tools.allowed 镜像)。 | undefined | 是 |
tools.allowed | array | 可绕过确认对话框的工具名称列表(受信任命令)。 | undefined | 是 |
tools.exclude | array | 从发现中排除的工具名称。 | undefined | 是 |
tools.discoveryCommand | string | 用于工具发现的命令。 | undefined | 是 |
tools.callCommand | string | 调用已发现工具的自定义 shell 命令(stdin 读 JSON,stdout 输出 JSON)。 | undefined | 是 |
tools.useRipgrep | boolean | 使用 ripgrep 进行文件内容搜索以获得更高性能。 | true | 否 |
tools.enableToolOutputTruncation | boolean | 启用对较大工具输出的截断。 | true | 是 |
tools.truncateToolOutputThreshold | number | 工具输出超过该字符数时进行截断,-1 表示禁用。 | 4000000 | 是 |
tools.truncateToolOutputLines | number | 截断工具输出时要保留的行数。 | 1000 | 是 |
tools.disableLLMCorrection | boolean | 禁用编辑工具的基于 LLM 的错误修正。 | true | 是 |
tools.enableHooks | boolean | 启用 hooks system 实验(禁用后将完全停用)。 | true | 是 |
3.11 mcp
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
mcp.serverCommand | string | 用于启动 MCP server 的命令。 | undefined | 是 |
mcp.allowed | array | 允许的 MCP servers 列表。 | undefined | 是 |
mcp.excluded | array | 排除的 MCP servers 列表。 | undefined | 是 |
3.12 useWriteTodos
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
useWriteTodos | boolean | 启用 write_todos 工具。 | true |
3.13 security
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
security.disableYoloMode | boolean | 禁用 YOLO mode(即使通过 flag 启用)。 | false | 是 |
security.enablePermanentToolApproval | boolean | 在工具确认对话框中启用 “Allow for all future sessions” 选项。 | false | 否 |
security.blockGitExtensions | boolean | 阻止从 Git 安装和加载扩展。 | false | 是 |
security.folderTrust.enabled | boolean | 用于跟踪是否启用 Folder trust 的设置。 | false | 是 |
security.environmentVariableRedaction.allowed | array | 始终允许(绕过脱敏)的环境变量。 | [] | 是 |
security.environmentVariableRedaction.blocked | array | 始终脱敏的环境变量。 | [] | 是 |
security.environmentVariableRedaction.enabled | boolean | 启用对可能包含 secrets 的环境变量进行脱敏。 | false | 是 |
security.auth.selectedType | string | 当前选择的认证类型。 | undefined | 是 |
security.auth.enforcedType | string | 要求的认证类型;不匹配时将提示重新认证。 | undefined | 是 |
security.auth.useExternal | boolean | 是否使用外部认证流程。 | undefined | 是 |
3.14 advanced
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
advanced.autoConfigureMemory | boolean | 自动配置 Node.js 内存限制。 | false | 是 |
advanced.dnsResolutionOrder | string | DNS 解析顺序。 | undefined | 是 |
advanced.excludedEnvVars | array | 要从项目上下文中排除的环境变量。 | ["DEBUG", "DEBUG_MODE"] | 否 |
advanced.bugCommand | object | bug report 命令的配置。 | undefined | 否 |
3.15 experimental
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
experimental.enableAgents | boolean | 启用本地和远程 subagents(实验性,对 subagents 使用 YOLO mode)。 | false | 是 |
experimental.extensionManagement | boolean | 启用扩展管理功能。 | true | 是 |
experimental.extensionConfig | boolean | 启用请求与获取扩展设置。 | false | 是 |
experimental.enableEventDrivenScheduler | boolean | 在 CLI 会话中启用事件驱动调度器。 | true | 是 |
experimental.extensionReloading | boolean | 在 CLI 会话中启用扩展加载/卸载。 | false | 是 |
experimental.jitContext | boolean | 启用 Just-In-Time(JIT)上下文加载。 | false | 是 |
experimental.skills | boolean | 启用 Agent Skills(实验性)。 | false | 是 |
experimental.codebaseInvestigatorSettings.enabled | boolean | 启用 Codebase Investigator agent。 | true | 是 |
experimental.codebaseInvestigatorSettings.maxNumTurns | number | Codebase Investigator agent 的最大轮次数。 | 10 | 是 |
experimental.codebaseInvestigatorSettings.maxTimeMinutes | number | Codebase Investigator agent 的最长时间(分钟)。 | 3 | 是 |
experimental.codebaseInvestigatorSettings.thinkingBudget | number | Codebase Investigator agent 的思考预算。 | 8192 | 是 |
experimental.codebaseInvestigatorSettings.model | string | Codebase Investigator agent 使用的模型。 | "auto" | 是 |
experimental.useOSC52Paste | boolean | 使用 OSC 52 序列进行粘贴(适用于远程会话)。 | false | 否 |
experimental.cliHelpAgentSettings.enabled | boolean | 启用 CLI Help Agent。 | true | 是 |
experimental.plan | boolean | 启用规划功能(Plan Mode 和 tools)。 | false | 是 |
3.16 skills
| 配置项 | 类型 | 说明 | 默认值 | 需要重启 |
|---|---|---|---|---|
skills.disabled | array | 已禁用的 skills 列表。 | [] | 是 |
3.17 hooksConfig
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
hooksConfig.enabled | boolean | hooks system 的规范开关;禁用时不会执行任何 hooks。 | true |
hooksConfig.disabled | array | 应被禁用的 hook 名称(命令)列表;即使已配置也不会执行。 | [] |
hooksConfig.notifications | boolean | 当 hooks 执行时显示可视化指示器。 | true |
3.18 hooks
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
hooks.BeforeTool | array | 在工具执行前运行的 hooks;可拦截、校验或修改工具调用。 | [] |
hooks.AfterTool | array | 在工具执行后运行的 hooks;可处理结果、记录输出或触发后续动作。 | [] |
hooks.BeforeAgent | array | 在 agent loop 开始前运行的 hooks;可设置上下文或初始化资源。 | [] |
hooks.AfterAgent | array | 在 agent loop 完成后运行的 hooks;可执行清理或总结结果。 | [] |
hooks.Notification | array | 在通知事件(errors、warnings、info)上运行的 hooks;可用于日志或告警。 | [] |
hooks.SessionStart | array | 在会话开始时运行的 hooks;可初始化会话相关资源或状态。 | [] |
hooks.SessionEnd | array | 在会话结束时运行的 hooks;可执行清理或持久化会话数据。 | [] |
hooks.PreCompress | array | 在聊天历史压缩前运行的 hooks;可在压缩前备份或分析对话。 | [] |
hooks.BeforeModel | array | 在发起 LLM 请求前运行的 hooks;可修改 prompts、注入上下文或控制模型参数。 | [] |
hooks.AfterModel | array | 在 LLM 响应之后执行的 hooks;可处理输出、提取信息或记录交互。 | [] |
hooks.BeforeToolSelection | array | 在选择工具之前执行的 hooks;可用于动态过滤或优先排序可用工具。 | [] |
3.19 admin
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
admin.secureModeEnabled | boolean | 若为 true,则禁止使用 YOLO 模式。 | false |
admin.extensions.enabled | boolean | 若为 false,则禁止安装或使用扩展。 | true |
admin.mcp.enabled | boolean | 若为 false,则禁止使用 MCP 服务器。 | true |
admin.skills.enabled | boolean | 若为 false,则禁止使用 agent skills。 | true |
3.20 mcpServers
配置与一个或多个 Model-Context Protocol (MCP) 服务器的连接,用于发现并使用自定义工具。Gemini CLI 会尝试连接到每个已配置的 MCP 服务器以发现可用工具。如果多个 MCP 服务器
暴露了同名工具,则工具名称会带上你在配置中定义的服务器别名作为前缀(例如,
serverAlias__actualToolName)以避免冲突。
注意:为了兼容性,系统可能会从 MCP 工具定义中移除某些 schema 属性,必须至少提供
command、url或httpUrl之一,如果指定了多个,优先级顺序为先httpUrl,再url,最后command。
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
mcpServers.<SERVER_NAME> | object | 指定名称的 MCP 服务器参数配置。 | — |
mcpServers.<SERVER_NAME>.command | string | 通过标准 I/O 启动 MCP 服务器的命令。 | undefined |
mcpServers.<SERVER_NAME>.args | string[] | 传递给启动命令的参数。 | undefined |
mcpServers.<SERVER_NAME>.env | object | 为服务器进程设置的环境变量。 | undefined |
mcpServers.<SERVER_NAME>.cwd | string | 启动服务器时使用的工作目录。 | undefined |
mcpServers.<SERVER_NAME>.url | string | 使用 Server-Sent Events(SSE)通信的 MCP 服务器 URL。 | undefined |
mcpServers.<SERVER_NAME>.httpUrl | string | 使用可流式 HTTP 通信的 MCP 服务器 URL。 | undefined |
mcpServers.<SERVER_NAME>.headers | object | 随请求发送到 url 或 httpUrl 的 HTTP 头映射。 | undefined |
mcpServers.<SERVER_NAME>.timeout | number | MCP 服务器请求的超时时间(毫秒)。 | undefined |
mcpServers.<SERVER_NAME>.trust | boolean | 信任该服务器并绕过所有工具调用确认。 | undefined |
mcpServers.<SERVER_NAME>.description | string | 服务器的简要描述,用于展示用途。 | undefined |
mcpServers.<SERVER_NAME>.includeTools | string[] | 从该 MCP 服务器中包含的工具名称列表(白名单);未指定则启用全部工具。 | undefined |
mcpServers.<SERVER_NAME>.excludeTools | string[] | 从该 MCP 服务器中排除的工具名称列表;优先级高于 includeTools。 | undefined |
3.21 telemetry
为 Gemini CLI 配置日志记录与指标采集。
| 属性 | 类型 | 说明 | 取值 / 备注 |
|---|---|---|---|
enabled | boolean | 是否启用 telemetry。 | — |
target | string | telemetry 的采集目标位置。 | local / gcp |
otlpEndpoint | string | OTLP Exporter 的端点。 | — |
otlpProtocol | string | OTLP Exporter 的协议。 | grpc / http |
logPrompts | boolean | 是否在日志中包含用户 prompt 的内容。 | — |
outfile | string | 当 target 为 local 时,telemetry 写入的文件路径。 | — |
useCollector | boolean | 是否使用外部 OTLP collector。 | — |
4. settings.json 示例
下面是一个具有嵌套结构的 settings.json 文件示例,该结构自v0.3.0 起提供:
{
"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"]
}
}
5. 命令历史记录
CLI 会保留你运行过的 shell 命令历史记录。为避免在不同项目之间发生冲突,该历史记录会存储在你用户主目录下的项目专用目录中。
位置: ~/.gemini/tmp/<project_hash>/shell_history
<project_hash>是根据你项目的根路径生成的唯一标识符。- 历史记录存储在名为
shell_history的文件中。
6. 环境变量
环境变量是配置应用程序的常见方式,尤其适用于API key 等敏感信息,或用于可能因环境不同而变化的设置,CLI 会自动从 .env 文件加载环境变量,加载顺序为:
Step 1. 当前工作目录中的 .env 文件。
Step 2. 若未找到,则向上在父目录中搜索,直到找到
.env 文件或到达项目根目录(由 .git 文件夹标识)或
主目录。
Step 3. 若仍未找到,则查找 ~/.env(位于用户主目录中)。
环境变量排除: 某些环境变量(如
DEBUG和DEBUG_MODE)会被自动排除,不从项目.env
文件中加载,以防干扰 gemini-cli 的行为。来自.gemini/.env文件的变量永远不会被排除。你可以使用settings.json文件中的advanced.excludedEnvVars设置来自定义此行为。
6.1 变量参数
| 环境变量 | 说明 | 备注 / 示例 |
|---|---|---|
GEMINI_API_KEY | 你的 Gemini API key,用于访问 Gemini API。 | 在 ~/.bashrc / ~/.zshrc 或 .env 中设置 |
GEMINI_MODEL | 指定默认使用的 Gemini 模型,覆盖内置默认值。 | export GEMINI_MODEL="gemini-3-flash-preview" |
GOOGLE_API_KEY | Google Cloud API key;express 模式下使用 Vertex AI 所必需。 | export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY" |
GOOGLE_CLOUD_PROJECT | Google Cloud Project ID;使用 Code Assist 或 Vertex AI 所必需。 | export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID" |
GOOGLE_APPLICATION_CREDENTIALS | Google Application Credentials JSON 文件路径。 | export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json" |
OTLP_GOOGLE_CLOUD_PROJECT | Telemetry 使用的 Google Cloud Project ID。 | export OTLP_GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID" |
GEMINI_TELEMETRY_ENABLED | 启用 telemetry(true / 1 启用,其余视为禁用)。 | 覆盖 telemetry.enabled |
GEMINI_TELEMETRY_TARGET | 设置 telemetry 目标位置。 | local / gcp,覆盖 telemetry.target |
GEMINI_TELEMETRY_OTLP_ENDPOINT | 设置 telemetry 的 OTLP 端点。 | 覆盖 telemetry.otlpEndpoint |
GEMINI_TELEMETRY_OTLP_PROTOCOL | 设置 telemetry 的 OTLP 协议。 | grpc / http,覆盖 telemetry.otlpProtocol |
GEMINI_TELEMETRY_LOG_PROMPTS | 是否记录用户 prompt 到 telemetry。 | 覆盖 telemetry.logPrompts |
GEMINI_TELEMETRY_OUTFILE | 当目标为 local 时写入 telemetry 的文件路径。 | 覆盖 telemetry.outfile |
GEMINI_TELEMETRY_USE_COLLECTOR | 是否使用外部 OTLP collector。 | 覆盖 telemetry.useCollector |
GOOGLE_CLOUD_LOCATION | Google Cloud Project 的区域(非 express 模式下 Vertex AI 必需)。 | export GOOGLE_CLOUD_LOCATION="us-central1" |
GEMINI_SANDBOX | settings.json 中 sandbox 的替代方案。 | true / false / docker / podman / 自定义命令 |
GEMINI_SYSTEM_MD | 用 Markdown 文件内容替换内置 system prompt。 | true 使用 ./.gemini/system.md |
GEMINI_WRITE_SYSTEM_MD | 将当前内置 system prompt 写入文件。 | true 写入 ./.gemini/system.md |
SEATBELT_PROFILE | macOS 专用:切换 sandbox-exec profile。 | permissive-open / strict / 自定义 |
DEBUG / DEBUG_MODE | 启用详细 debug 日志。 | 建议在 .gemini/.env 中设置 |
NO_COLOR | 禁用 CLI 中的所有彩色输出。 | 任意值 |
CLI_TITLE | 自定义 CLI 窗口标题。 | 字符串 |
CODE_ASSIST_ENDPOINT | 指定 Code Assist server 的端点。 | 用于开发与测试 |
6.2 环境变量脱敏
为防止敏感信息意外泄露,Gemini CLI 在执行工具(例如shell 命令)时,会自动从环境变量中打码潜在的秘密信息。这种“尽力而为”的打码适用于从系统继承的变量或从 .env 文件加载的变量。
默认打码规则:
- 按名称: 若变量名包含敏感词,如
TOKEN、SECRET、PASSWORD、KEY、AUTH``CREDENTIAL、PRIVATE或CERT,则会被打码。 - 按值: 若变量值匹配已知的秘密模式,则会被打码,例如:私钥(RSA、OpenSSH、PGP 等)、证书、包含凭据的 URL、API key 与 token(GitHub、Google、AWS、Stripe、Slack 等)
- 特定黑名单: 某些变量如
CLIENT_ID、DB_URI、DATABASE_URL和CONNECTION_STRING默认总会被打码。
白名单(永不打码):
- 常见系统变量(例如
PATH、HOME、USER、SHELL、TERM、LANG)。 - 以
GEMINI_CLI_开头的变量。 - GitHub Action 特有变量。
你可以在 settings.json 文件中自定义该行为:
security.allowedEnvironmentVariables: 一个变量名列表,用于
永不 打码,即使它们匹配敏感模式。security.blockedEnvironmentVariables: 一个变量名列表,用于
总是 打码,即使它们不匹配敏感模式。
{
"security": {
"allowedEnvironmentVariables": ["MY_PUBLIC_KEY", "NOT_A_SECRET_TOKEN"],
"blockedEnvironmentVariables": ["INTERNAL_IP_ADDRESS"]
}
}
7. 命令行参数
在运行 CLI 时直接传入的参数可以覆盖该会话中的其他配置。
-
--model <model_name>(-m <model_name>):- 指定本次会话使用的 Gemini model。
- 示例:
npm start -- --model gemini-3-pro-preview
-
--prompt <your_prompt>(-p <your_prompt>):- 用于将 prompt 直接传给命令。这会以非交互模式调用 Gemini CLI。
- 对于脚本示例,使用
--output-format json标志以获得结构化输出。
-
--prompt-interactive <your_prompt>(-i <your_prompt>):- 启动交互会话,并将所提供的 prompt 作为初始输入。
- prompt 会在交互会话中处理,而不是在此之前。
- 当从 stdin 通过管道传入输入时不可用。
- 示例:
gemini -i "explain this code"
-
--output-format <format>:- 描述: 指定非交互模式下 CLI 输出的格式。
- 取值:
text:(默认)标准的人类可读输出。json: 机器可读的 JSON 输出。stream-json: 以流式方式输出 JSON,实时发出事件。
- 注意: 对于结构化输出与脚本编写,请使用
--output-format json或--output-format stream-json标志。
-
--sandbox(-s): 为本次会话启用 sandbox 模式。 -
--debug(-d): 为本次会话启用 debug 模式,提供更详细的输出。按 F12 打开debug 控制台以查看额外日志。 -
--help(或-h): 显示命令行参数的帮助信息。 -
--yolo: 启用 YOLO 模式,该模式会自动批准所有工具调用。 -
--approval-mode <mode>:设置工具调用的批准模式。可用模式:-
default: 每次工具调用都提示批准(默认行为) -
auto_edit: 自动批准编辑工具(replace、write_file),其余仍提示 -
yolo: 自动批准所有工具调用(等同于--yolo) -
plan: 工具调用只读模式(需要启用实验性 planning)。注意: 该模式目前仍在开发中,尚未完全
可用。 -
不能与
--yolo同时使用。新统一方式请使用--approval-mode=yolo代替--yolo。 -
示例:
gemini --approval-mode auto_edit
-
-
--allowed-tools <tool1,tool2,...>:- 一个以逗号分隔的工具名称列表,将绕过确认对话框。
- 示例:
gemini --allowed-tools "ShellTool(git status)"
-
--extensions <extension_name ...>(-e <extension_name ...>):- 指定本次会话要使用的扩展列表。若未提供,则使用所有可用扩展。
- 使用特殊术语
gemini -e none可禁用所有扩展。 - 示例:
gemini -e my-extension -e my-other-extension
-
--list-extensions(-l): 列出所有可用扩展并退出。 -
--resume [session_id](-r [session_id]):- 恢复先前的聊天会话。对最近的会话使用 “latest”,提供会话索引编号,或提供完整的会话UUID。
- 若未提供 session_id,则默认为 “latest”。
- 示例:
gemini --resume 5或gemini --resume latest或gemini --resume a1b2c3d4-e5f6-7890-abcd-ef1234567890或gemini --resume
-
--list-sessions:- 列出当前项目的所有可用聊天会话并退出。
- 显示会话索引、日期、消息数量,以及第一条用户消息的预览。
- 示例:
gemini --list-sessions
-
--delete-session <identifier>:- 通过索引编号或完整会话 UUID 删除特定聊天会话。
- 请先使用
--list-sessions查看可用会话、它们的索引与UUID。 - 示例:
gemini --delete-session 3或gemini --delete-session a1b2c3d4-e5f6-7890-abcd-ef1234567890
-
--include-directories <dir1,dir2,...>:- 为多目录支持包含额外目录到工作区。
- 可以多次指定或使用逗号分隔的值。
- 最多可添加 5 个目录。
- 示例:
--include-directories /path/to/project1,/path/to/project2或
--include-directories /path/to/project1 --include-directories /path/to/project2
-
--screen-reader: 启用屏幕阅读器模式,通过调整 TUI 以更好地兼容屏幕阅读器。 -
--version: 显示 CLI 的版本。 -
--experimental-acp: 以 ACP 模式启动 agent。 -
--allowed-mcp-server-names: 允许的 MCP server 名称。 -
--fake-responses: 指向包含伪造 model 响应的文件路径,用于测试。 -
--record-responses: 指向用于记录 model 响应的文件路径,用于测试。
8. 上下文件
Context files 虽然并不严格用于配置 CLI 的 _behavior_,但它们(默认使用 GEMINI.md,也可通过 context.fileName 设置配置)对于配置提供给 Gemini model 的 _instructional context_(也称为“memory”)至关重要。这个强大功能允许你提供项目专用说明、编码风格指南或任何相关背景信息,使 AI 的响应更贴合且更准确地满足你的需求,CLI 还包含 UI 元素,例如页脚中的指示器显示已加载的 context files 数量,以便让你了解当前激活的context。
用途: 这些 Markdown 文件包含你希望 Gemini model 在交互期间知晓的说明、指南或 context,系统被设计为以分层方式管理此 instructional context。
8.1 示例 context file 内容
下面是一个概念性示例(例如 GEMINI.md),展示 TypeScript项目根目录中的 context file 可能包含的内容:
# Project: My Awesome TypeScript Library
## General Instructions:
- When generating new TypeScript code, please 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` (e.g., `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, please state the reason.
这个示例展示了你如何提供通用的项目 context、特定的编码规范,甚至关于特定文件或组件的说明。你的 context files 越相关且精确,AI 就越能更好地协助你。强烈建议使用项目专用 context files 来建立约定与 context。
分层加载与优先级: CLI 通过从多个位置加载 context files(例如 GEMINI.md)来实现精巧的分层 memory 系统。该列表中越靠下(越具体)的文件内容通常会覆盖或补充越靠上(越通用)的文件内容。可使用 /memory show 命令检查具体的拼接顺序与最终 context。典型加载顺序为:
- 全局 context file:
- 位置:
~/.gemini/<configured-context-filename>(例如
用户主目录中的~/.gemini/GEMINI.md)。 - 作用域:为所有项目提供默认说明。
- 位置:
- 项目根目录及祖先目录的 context files:
- 位置:CLI 会在
当前工作目录中搜索配置的 context file,然后在每个父目录中继续搜索,直到
项目根目录(由.git文件夹标识)或用户主目录。 - 作用域:为整个项目或其重要部分提供相关 context。
- 位置:CLI 会在
- 子目录 context files(上下文/本地):
- 位置:CLI 还会在
当前工作目录 下方 的子目录中扫描配置的 context file(遵循node_modules、.git等常见
忽略模式)。该搜索的广度默认限制为 200 个目录,但可通过settings.json中的
context.discoveryMaxDirs设置进行配置。 - 作用域:为特定组件、模块或子区域提供高度具体的说明。
- 位置:CLI 还会在
拼接与 UI 指示: 所有找到的 context files 的内容会被拼接(并带有分隔符以标明其来源与路径)并作为 system prompt 的一部分提供给 Gemini model。CLI 页脚会显示已加载 context files 的数量,让你能快速直观地了解当前激活的 instructional context。
导入内容: 你可以使用 @path/to/file.md 语法导入其他 Markdown 文件,从而模块化你的 context files。更多细节请参见
用于 memory 管理的命令:
- 使用
/memory refresh强制重新扫描并重新加载所有 context files(来自所有已配置位置)。这会更新 AI 的 instructional context。 - 使用
/memory show显示当前加载的 combined instructional context,以便你验证层级与正在被 AI 使用的内容。
通过理解并利用这些配置层与 context files 的分层特性,你可以有效管理 AI 的 memory,并将
Gemini CLI 的响应更好地定制为符合你的特定需求与项目。
9. 沙箱
Gemini CLI 可以在沙箱环境中执行潜在不安全的操作(例如 shell 命令和文件修改),以保护你的系统。
Sandboxing 默认禁用,但你可以通过以下几种方式启用:
- 使用
--sandbox或-s标志。 - 设置
GEMINI_SANDBOX环境变量。 - 在使用
--yolo或--approval-mode=yolo时默认启用 sandbox。
默认情况下,它使用预构建的 gemini-cli-sandbox Docker image。
对于项目专用的 sandboxing 需求,你可以在项目根目录创建自定义 Dockerfile,路径为.gemini/sandbox.Dockerfile。该 Dockerfile 可以基于基础 sandbox image:
FROM gemini-cli-sandbox
# Add your custom dependencies or configurations here
# For example:
# RUN apt-get update && apt-get install -y some-package
# COPY ./my-config /app/my-config
当存在 .gemini/sandbox.Dockerfile 时,你可以在运行 Gemini CLI 时使用 BUILD_SANDBOX环境变量来自动构建自定义sandbox image:
BUILD_SANDBOX=1 gemini -s
10. 使用统计
为了帮助我们改进 Gemini CLI,我们会收集匿名化的 usage statistics。该数据帮助我们了解 CLI 的使用方式、识别常见问题,并确定新功能的优先级。
我们收集的内容:
- 工具调用: 我们记录被调用的工具名称、它们是否成功或失败,以及执行耗时。我们不收集传递给工具的参数或任何返回数据。
- API 请求: 我们记录每次请求所使用的 Gemini model、请求耗时,以及是否成功。我们不收集prompts 或响应的内容。
- 会话信息: 我们收集有关 CLI 配置的信息,例如启用的工具与 approval mode。
我们不收集的内容:
- 个人身份信息(PII): 我们不收集任何个人信息,例如你的姓名、邮箱地址或 API key。
- Prompt 与响应内容: 我们不会记录 prompts 的内容或 Gemini model 的响应内容。
- 文件内容: 我们不会记录由 CLI 读取或写入的任何文件内容。
如何选择退出:
你可以随时通过将 settings.json 文件中 privacy 类别下的usageStatisticsEnabled 属性设置为 false 来选择退出 usage statistics 收集:
{
"privacy": {
"usageStatisticsEnabled": false
}
}
11. 文末
到这里,Gemini CLI 的整体配置体系就完整串起来了,理解它的关键,并不是记住所有配置项,而是掌握**“在什么场景下,用哪种方式配置”**,读者们可以按下面这个思路来使用 Gemini CLI:
一、长期稳定的偏好,用 settings.json
如果某个配置 每天都会用、希望一直生效,那就放进 settings.json:
- 常用模型(
model.name) - UI 行为(主题、是否隐藏 Banner、是否显示上下文信息)
- 是否启用 sandbox
- 工具白名单 / 自动批准策略
- 会话保留策略、上下文压缩策略等
个人使用: 放在 ~/.gemini/settings.json
项目使用 / 团队协作: 放在项目根目录 .gemini/settings.json,让所有人 clone 后即生效
二、敏感或环境相关的值,用环境变量
凡是 API Key、Credential、不同机器不一样的配置,都不要写死在配置文件中:
GEMINI_API_KEYGOOGLE_APPLICATION_CREDENTIALS- Telemetry / Sandbox / Debug 开关
- CI 环境下的特殊参数
推荐做法是:
- 本地:使用
.env或 shell 配置文件 - 项目:使用
.gemini/.env - CI/CD:使用平台提供的 Secret / Env 配置
这样既安全,又不会污染仓库。
三、只想临时改一次,用命令行参数
只是这一次想换模型、开 debug、跑脚本,不需要动任何配置文件:
- 临时切模型:
--model - 非交互调用:
--prompt - 机器可读输出:
--output-format json - 强制 sandbox / debug / resume 会话
命令行参数始终拥有最高优先级,适合测试、排错和自动化脚本。
四、真正提升效果的关键 Context Files(GEMINI.md)
如果希望 Gemini 更懂你的项目,而不仅仅是“能回答问题”,那么一定要使用 GEMINI.md 或自定义 context files:
- 项目背景说明
- 编码规范 / 风格约定
- 目录结构说明
- 工具使用约束
- 团队协作规则
这部分内容会作为 system prompt 注入模型,是影响回答质量最直接、性价比最高的配置手段。
五、一句话使用原则
- 默认行为不满意 → settings.json
- 涉及密钥和环境差异 → 环境变量
- 只想改一次 → CLI 参数
- 想让模型“更聪明” → context files
理解并善用这套分层配置机制,就可以把 Gemini CLI 从“能用”,调教到“顺手、可控、可复用”。希望能帮助到大家,感谢阅读,本文完!
437


:彻底拆解CLI 配置&spm=1001.2101.3001.11974&articleId=157257063&d=1&t=3&u=36082380eba34b94a3a36a46cb76591c)

被折叠的 条评论
为什么被折叠?



