Skip to content

Gemini CLI 配置

关于已弃用配置格式的说明

本文档描述了 settings.json 文件的旧版 v1 格式。此格式现已弃用。

  • 新格式将在稳定版发布时开始支持,时间为 [2025/10/09]
  • 从旧格式到新格式的自动迁移将于 [2025/09/17] 开始。

有关新推荐格式的详细信息,请参阅当前配置文档

Gemini CLI 提供了多种配置其行为的方式,包括环境变量、命令行参数和设置文件。本文档概述了不同的配置方法和可用的设置。

配置层级

配置按以下优先级顺序应用(数字越低的值会被数字越高的值覆盖):

  1. 默认值: 应用程序内的硬编码默认值。
  2. 系统默认设置文件: 系统范围的默认设置,可以被其他设置文件覆盖。
  3. 用户设置文件: 当前用户的全局设置。
  4. 项目设置文件: 项目特定的设置。
  5. 系统设置文件: 系统范围的设置,会覆盖所有其他设置文件。
  6. 环境变量: 系统范围或会话特定的变量,可能从 .env 文件加载。
  7. 命令行参数: 启动 CLI 时传递的值。

设置文件

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_CLI_SYSTEM_DEFAULTS_PATH 环境变量覆盖路径。
    • 范围: 提供系统范围默认设置的基础层。这些设置的优先级最低,旨在被用户、项目或系统覆盖设置所覆盖。
  • 用户设置文件:
    • 位置: ~/.gemini/settings.json(其中 ~ 是你的主目录)。
    • 范围: 应用于当前用户的所有 Gemini CLI 会话。用户设置会覆盖系统默认设置。
  • 项目设置文件:
    • 位置: 项目根目录下的 .gemini/settings.json
    • 范围: 仅在从特定项目运行 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 环境变量覆盖路径。
    • 范围: 应用于系统上的所有 Gemini CLI 会话,所有用户均可使用。系统设置充当覆盖,优先级高于所有其他设置文件。可能对企业系统管理员控制用户 Gemini CLI 设置很有用。

关于设置中的环境变量的说明: settings.json 文件中的字符串值可以使用 $VAR_NAME${VAR_NAME} 语法引用环境变量。加载设置时,这些变量将自动解析。例如,如果你有一个名为 MY_API_TOKEN 的环境变量,可以在 settings.json 中这样使用它:“apiKey”: “$MY_API_TOKEN”。

企业用户须知: 有关在企业环境中部署和管理 Gemini CLI 的指导,请参阅企业配置文档。

项目中的 .gemini 目录

除了项目设置文件外,项目的 .gemini 目录还可以包含与 Gemini CLI 操作相关的其他项目特定文件,例如:

settings.json 中可用的设置:

  • contextFileName (字符串或字符串数组):

    • 描述: 指定上下文文件的文件名(例如,GEMINI.mdAGENTS.md)。可以是一个文件名或一个接受的文件名列表。
    • 默认值: GEMINI.md
    • 示例: "contextFileName": "AGENTS.md"
  • bugCommand (对象):

    • 描述: 覆盖 /bug 命令的默认 URL。
    • 默认值: "urlTemplate": "https://github.com/google-gemini/gemini-cli/issues/new?template=bug_report.yml&title={title}&info={info}"
    • 属性:
      • urlTemplate (字符串):一个可以包含 {title}{info} 占位符的 URL。
    • 示例:
      json
      "bugCommand": {
        "urlTemplate": "https://bug.example.com/new?title={title}&info={info}"
      }
  • fileFiltering (对象):

    • 描述: 控制 @ 命令和文件发现工具的 git 感知文件过滤行为。
    • 默认值: "respectGitIgnore": true, "enableRecursiveFileSearch": true
    • 属性:
      • respectGitIgnore (布尔值):在发现文件时是否尊重 .gitignore 模式。当设置为 true 时,被 git 忽略的文件(如 node_modules/dist/.env)将自动从 @ 命令和文件列表操作中排除。
      • enableRecursiveFileSearch (布尔值):在提示中完成 @ 前缀时,是否启用在当前树下递归搜索文件名。
      • disableFuzzySearch (布尔值):当为 true 时,禁用搜索文件时的模糊搜索功能,这可以提高具有大量文件的项目的性能。
    • 示例:
      json
      "fileFiltering": {
        "respectGitIgnore": true,
        "enableRecursiveFileSearch": false,
        "disableFuzzySearch": true
      }

故障排除文件搜索性能

如果您在使用文件搜索(例如,使用 @ 补全)时遇到性能问题,尤其是在文件数量非常多的项目中,以下是一些建议的解决方法:

  1. 使用 .geminiignore 在项目根目录中创建一个 .geminiignore 文件,以排除包含大量您不需要引用的文件的目录(例如,构建产物、日志、node_modules)。减少被爬取的文件总数是提高性能最有效的方法。

  2. 禁用模糊搜索: 如果忽略文件还不够,可以在 settings.json 文件中将 disableFuzzySearch 设置为 true。这将使用一个更简单、非模糊的匹配算法,速度更快。

  3. 禁用递归文件搜索: 作为最后的手段,可以将 enableRecursiveFileSearch 设置为 false 来完全禁用递归文件搜索。这将是最快的选项,因为它避免了对项目的递归爬取。但是,这意味着在使用 @ 补全时需要输入文件的完整路径。

  • coreTools (字符串数组):

    • 描述: 允许您指定一组应提供给模型的核心工具名称。这可用于限制内置工具集。有关核心工具列表,请参阅内置工具。您还可以为支持的工具(如 ShellTool)指定命令特定的限制。例如,“coreTools”:“[“ShellTool(ls -l)”]”将只允许执行 ls -l 命令。
    • 默认值: Gemini 模型可用的所有工具。
    • 示例: "coreTools": ["ReadFileTool", "GlobTool", "ShellTool(ls)"]
  • allowedTools (字符串数组):

    • 默认值: undefined
    • 描述: 一个工具名称列表,这些工具将绕过确认对话框。这对于您信任并经常使用的工具很有用。匹配语义与 coreTools 相同。
    • 示例: "allowedTools": ["ShellTool(git status)"]
  • excludeTools (字符串数组):

    • 描述: 允许您指定一组应从模型中排除的核心工具名称。列在 excludeToolscoreTools 中的工具将被排除。您还可以为支持的工具(如 ShellTool)指定命令特定的限制。例如,“excludeTools”:“[“ShellTool(rm -rf)”]”将阻止 rm -rf 命令。
    • 默认值: 无工具被排除。
    • 示例: "excludeTools": ["run_shell_command", "findFiles"]
    • 安全说明: excludeTools 中针对 run_shell_command 的命令特定限制基于简单的字符串匹配,很容易被绕过。此功能不是安全机制,不应依赖它来安全地执行不受信任的代码。建议使用 coreTools 来显式选择可以执行的命令。
  • allowMCPServers (字符串数组):

    • 描述: 允许您指定一组应提供给模型的 MCP 服务器名称。这可用于限制连接到的 MCP 服务器集。请注意,如果设置了 --allowed-mcp-server-names,此设置将被忽略。
    • 默认值: Gemini 模型可用的所有 MCP 服务器。
    • 示例: "allowMCPServers": ["myPythonServer"]
    • 安全说明: 此设置使用 MCP 服务器名称的简单字符串匹配,这些名称可能会被修改。如果您是系统管理员,希望防止用户绕过此设置,请考虑在系统设置级别配置 mcpServers,以便用户无法自行配置任何 MCP 服务器。这不应被用作一个严密的ವರೆಗೆ安全机制。
  • excludeMCPServers (字符串数组):

    • 描述: 允许您指定一组应从模型中排除的 MCP 服务器名称。列在 excludeMCPServersallowMCPServers 中的服务器将被排除。请注意,如果设置了 --allowed-mcp-server-names,此设置将被忽略。
    • 默认值: 无 MCP 服务器被排除。
    • 示例: "excludeMCPServers": ["myNodeServer"]
    • 安全说明: 此设置使用 MCP 服务器名称的简单字符串匹配,这些名称可能会被修改。如果您是系统管理员,希望防止用户绕过此设置,请考虑在系统设置级别配置 mcpServers,以便用户无法自行配置任何 MCP 服务器。这不应被用作一个严密的ವರೆಗೆ安全机制。
  • autoAccept (布尔值):

    • 描述: 控制 CLI 是否自动接受并执行被视为安全的工具调用(例如,只读操作),而无需用户明确确认。如果设置为 true,CLI 将绕过对被视为安全的工具的确认提示。
    • 默认值: false
    • 示例: "autoAccept": true
  • theme (字符串):

    • 描述: 为 Gemini CLI 设置视觉主题
    • 默认值: "Default"
    • 示例: "theme": "GitHub"
  • vimMode (布尔值):

    • 描述: 启用或禁用输入编辑的 vim 模式。启用后,输入区域支持带有 NORMAL 和 INSERT 模式的 vim 风格导航和编辑命令。vim 模式状态显示在页脚,并在会话之间持久化。
    • 默认值: false
    • 示例: "vimMode": true
  • sandbox (布尔值或字符串):

    • 描述: 控制是否以及如何使用沙箱来执行工具。如果设置为 true,Gemini CLI 将使用预先构建的 gemini-cli-sandbox Docker 镜像。有关更多信息,请参阅沙箱
    • 默认值: false
    • 示例: "sandbox": "docker"
  • toolDiscoveryCommand (字符串):

    • 描述: 定义一个自定义 shell 命令,用于从您的项目中发现工具。shell 命令必须在 stdout 上返回一个 JSON 格式的函数声明数组。工具包装器是可选的。
    • 默认值:
    • 示例: "toolDiscoveryCommand": "bin/get_tools"
  • toolCallCommand (字符串):

    • 描述: 定义一个自定义 shell 命令,用于调用使用 toolDiscoveryCommand 发现的特定工具。shell 命令必须满足以下条件:
    • 默认值:
    • 示例: "toolCallCommand": "bin/call_tool"
  • mcpServers (对象):

    • 描述: 配置与一个或多个模型上下文协议 (MCP) 服务器的连接,用于发现和使用自定义工具。Gemini CLI 会尝试连接到每个配置的 MCP 服务器以发现可用工具。如果多个 MCP 服务器公开了同名的工具,则工具名称将带有您在配置中定义的服务器别名前缀(例如 serverAlias__actualToolName)以避免冲突。请注意,系统可能会为了兼容性而从 MCP 工具定义中剥离某些模式属性。至少需要提供 commandurlhttpUrl 中的一个。如果指定了多个,则优先级顺序为 httpUrl,然后是 url,最后是 command
    • 默认值:
    • 属性:
      • <SERVER_NAME> (对象):命名服务器的服务器参数。
        • command (字符串,可选):通过标准 I/O 启动 MCP 服务器要执行的命令。
        • args (字符串数组,可选):传递给命令的参数。
        • env (对象,可选):为服务器进程设置的环境变量。
        • cwd (字符串,可选):启动服务器的工作目录。
        • url (字符串,可选):使用服务器发送事件 (SSE) 进行通信的 MCP 服务器的 URL。
        • httpUrl (字符串,可选):使用流式 HTTP 进行通信的 MCP 服务器的 URL。
        • headers (对象,可选):发送到 urlhttpUrl 的请求的 HTTP 标头映射。
        • timeout (数字,可选):此 MCP 服务器请求的超时时间(以毫秒为单位)。
        • trust (布尔值,可选):信任此服务器并绕过所有工具调用确认。
        • description (字符串,可选):服务器的简要描述,可能用于显示目的。
        • includeTools (字符串数组,可选):要从此 MCP 服务器包含的工具名称列表。指定后,只有此处列出的工具才能从此服务器获得(允许列表行为)。如果未指定,则默认启用服务器的所有工具。
        • excludeTools (字符串数组,可选):要从此 MCP 服务器排除的工具名称列表。即使服务器公开了这些工具,模型也无法使用此处列出的工具。注意: excludeTools 的优先级高于 includeTools - 如果一个工具同时出现在两个列表中,它将被排除。
    • 示例:
      json
      "mcpServers": {
        "myPythonServer": {
          "command": "python",
          "args": ["mcp_server.py", "--port", "8080"],
          "cwd": "./mcp_tools/python",
          "timeout": 5000,
          "includeTools": ["safe_tool", "file_reader"],
        },
        "myNodeServer": {
          "command": "node",
          "args": ["mcp_server.js"],
          "cwd": "./mcp_tools/node",
          "excludeTools": ["dangerous_tool", "file_deleter"]
        },
        "myDockerServer": {
          "command": "docker",
          "args": ["run", "-i", "--rm", "-e", "API_KEY", "ghcr.io/foo/bar"],
          "env": {
            "API_KEY": "$MY_API_TOKEN"
          }
        },
        "mySseServer": {
          "url": "http://localhost:8081/events",
          "headers": {
            "Authorization": "Bearer $MY_SSE_TOKEN"
          },
          "description": "An example SSE-based MCP server."
        },
        "myStreamableHttpServer": {
          "httpUrl": "http://localhost:8082/stream",
          "headers": {
            "X-API-Key": "$MY_HTTP_API_KEY"
          },
          "description": "An example Streamable HTTP-based MCP server."
        }
      }
  • checkpointing (对象):

    • 描述: 配置检查点功能,该功能允许您保存和恢复对话和文件状态。有关更多详细信息,请参阅检查点文档
    • 默认值: {"enabled": false}
    • 属性:
      • enabled (布尔值):当为 true 时,/restore 命令可用。
  • preferredEditor (字符串):

    • 描述: 指定用于查看差异的首选编辑器。
    • 默认值: vscode
    • 示例: "preferredEditor": "vscode"
  • telemetry (对象)

    • 描述: 配置 Gemini CLI 的日志记录和指标收集。有关更多信息,请参阅遥测
    • 默认值: {"enabled": false, "target": "local", "otlpEndpoint": "http://localhost:4317", "logPrompts": true}
    • 属性:
      • enabled (布尔值):是否启用遥测。
      • target (字符串):收集的遥测数据的目标。支持的值为 localgcp
      • otlpEndpoint (字符串):OTLP Exporter 的端点。
      • logPrompts (布尔值):是否在日志中包含用户提示的内容。
    • 示例:
      json
      "telemetry": {
        "enabled": true,
        "target": "local",
        "otlpEndpoint": "http://localhost:16686",
        "logPrompts": false
      }
  • usageStatisticsEnabled (布尔值):

    • 描述: 启用或禁用使用情况统计信息的收集。有关更多信息,请参阅使用情况统计信息
    • 默认值: true
    • 示例:
      json
      "usageStatisticsEnabled": false
  • hideTips (布尔值):

    • 描述: 启用或禁用 CLI 界面中的有用提示。

    • 默认值: false

    • 示例:

      json
      "hideTips": true
  • hideBanner (布尔值):

    • 描述: 启用或禁用 CLI 界面中的启动横幅(ASCII 艺术徽标)。

    • 默认值: false

    • 示例:

      json
      "hideBanner": true
  • maxSessionTurns (数字):

    • 描述: 设置会话的最大轮数。如果会话超过此限制,CLI 将停止处理并开始新的聊天。
    • 默认值: -1(无限制)
    • 示例:
      json
      "maxSessionTurns": 10
  • summarizeToolOutput (对象):

    • 描述: 启用或禁用工具输出的摘要。您可以使用 tokenBudget 设置指定摘要的令牌预算。
    • 注意:目前仅支持 run_shell_command 工具。
    • 默认值: {}(默认禁用)
    • 示例:
      json
      "summarizeToolOutput": {
        "run_shell_command": {
          "tokenBudget": 2000
        }
      }
  • excludedProjectEnvVars (字符串数组):

    • 描述: 指定应从项目 .env 文件加载中排除的环境变量。这可以防止项目特定的环境变量(如 DEBUG=true)干扰 gemini-cli 的行为。来自 .gemini/.env 文件的变量永远不会被排除。您可以使用 settings.json 文件中的 excludedProjectEnvVars 设置来自定义此行为。
    • 默认值: ["DEBUG", "DEBUG_MODE"]
    • 示例:
      json
      "excludedProjectEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"]
  • includeDirectories (字符串数组):

    • 描述: 指定一个附加的绝对或相对路径数组,以包含在工作区上下文中。默认情况下,缺失的目录将被跳过并发出警告。路径可以使用 ~ 来引用用户主目录。此设置可以与 --include-directories 命令行标志结合使用。
    • 默认值: []
    • 示例:
      json
      "includeDirectories": [
        "/path/to/another/project",
        "../shared-library",
        "~/common-utils"
      ]
  • loadMemoryFromIncludeDirectories (布尔值):

    • 描述: 控制 /memory refresh 命令的行为。如果设置为 true,则应从所有添加的目录加载 GEMINI.md 文件。如果设置为 false,则应仅从当前目录加载 GEMINI.md
    • 默认值: false
    • 示例:
      json
      "loadMemoryFromIncludeDirectories": true
  • chatCompression (对象):

    • 描述: 控制聊天历史记录压缩的设置,包括自动压缩和通过 /compress 命令手动调用时的压缩。
    • 属性:
      • contextPercentageThreshold (数字):一个介于 0 和 1 之间的值,指定压缩的令牌阈值,作为模型总令牌限制的百分比。例如,值为 0.6 时,当聊天历史记录超过令牌限制的 60% 时将触发压缩。
    • 示例:
      json
      "chatCompression": {
        "contextPercentageThreshold": 0.6
      }
  • showLineNumbers (布尔值):

    • 描述: 控制是否在 CLI 输出的代码块中显示行号。
    • 默认值: true
    • 示例:
      json
      "showLineNumbers": false
  • accessibility (对象):

    • 描述: 配置 CLI 的可访问性功能。
    • 属性:
      • screenReader (布尔值):启用屏幕阅读器模式,该模式会调整 TUI 以更好地兼容屏幕阅读器。也可以使用 --screen-reader 命令行标志启用此功能,该标志将优先于此设置。
      • disableLoadingPhrases (布尔值):禁用操作期间加载短语的显示。
    • 默认值: {"screenReader": false, "disableLoadingPhrases": false}
    • 示例:
      json
      "accessibility": {
        "screenReader": true,
        "disableLoadingPhrases": true
      }

settings.json 示例:

json
{
  "theme": "GitHub",
  "sandbox": "docker",
  "toolDiscoveryCommand": "bin/get_tools",
  "toolCallCommand": "bin/call_tool",
  "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
  },
  "usageStatisticsEnabled": true,
  "hideTips": false,
  "hideBanner": false,
  "maxSessionTurns": 10,
  "summarizeToolOutput": {
    "run_shell_command": {
      "tokenBudget": 100
    }
  },
  "excludedProjectEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"],
  "includeDirectories": ["path/to/dir1", "~/path/to/dir2", "../path/to/dir3"],
  "loadMemoryFromIncludeDirectories": true
}

Shell 历史记录

CLI 会保留您运行的 shell 命令的历史记录。为避免不同项目之间的冲突,此历史记录存储在用户主文件夹内的特定于项目的目录中。

  • 位置: ~/.gemini/tmp/<project_hash>/shell_history
    • <project_hash> 是从您的项目根路径生成的唯一标识符。
    • 历史记录存储在名为 shell_history 的文件中。

环境变量和 .env 文件

环境变量是配置应用程序的常用方法,特别是对于 API 密钥等敏感信息或在不同环境之间可能发生变化的设置。有关身份验证设置,请参阅身份验证文档,其中涵盖了所有可用的身份验证方法。

CLI 会自动从 .env 文件加载环境变量。加载顺序如下:

  1. 当前工作目录中的 .env 文件。
  2. 如果未找到,它会在父目录中向上搜索,直到找到 .env 文件或到达项目根目录(由 .git 文件夹标识)或主目录。
  3. 如果仍未找到,它会在 ~/.env(用户主目录中)中查找。

环境变量排除: 某些环境变量(如 DEBUGDEBUG_MODE)默认会从项目 .env 文件加载中排除,以防止干扰 gemini-cli 的行为。来自 .gemini/.env 文件的变量永远不会被排除。您可以使用 settings.json 文件中的 excludedProjectEnvVars 设置来自定义此行为。

  • GEMINI_API_KEY
    • 您的 Gemini API 密钥。
    • 几种可用的身份验证方法之一。
    • 在您的 shell 配置文件(例如 ~/.bashrc~/.zshrc)或 .env 文件中设置此项。
  • GEMINI_MODEL
    • 指定要使用的默认 Gemini 模型。
    • 覆盖硬编码的默认值
    • 示例:export GEMINI_MODEL="gemini-2.5-flash"
  • GOOGLE_API_KEY
    • 您的 Google Cloud API 密钥。
    • 在使用 Vertex AI 的 express 模式时需要。
    • 确保您拥有必要的权限。
    • 示例:export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"
  • GOOGLE_CLOUD_PROJECT
    • 您的 Google Cloud 项目 ID。
    • 使用 Code Assist 或 Vertex AI 时需要。
    • 如果使用 Vertex AI,请确保在此项目中拥有必要的权限。
    • Cloud Shell 说明: 在 Cloud Shell 环境中运行时,此变量默认为分配给 Cloud Shell 用户的特殊项目。如果您在 Cloud Shell 的全局环境中设置了 GOOGLE_CLOUD_PROJECT,它将被此默认值覆盖。要在 Cloud Shell 中使用其他项目,您必须在 .env 文件中定义 GOOGLE_CLOUD_PROJECT
    • 示例:export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
  • GOOGLE_APPLICATION_CREDENTIALS (字符串):
    • 描述: 您的 Google Application Credentials JSON 文件的路径。
    • 示例: export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/credentials.json"
  • OTLP_GOOGLE_CLOUD_PROJECT
    • 用于 Google Cloud 中遥测的 Google Cloud 项目 ID
    • 示例:export OTLP_GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
  • GOOGLE_CLOUD_LOCATION
    • 您的 Google Cloud 项目位置(例如,us-central1)。
    • 在使用 Vertex AI 的非 express 模式时需要。
    • 示例:export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"
  • GEMINI_SANDBOX
    • settings.jsonsandbox 设置的替代项。
    • 接受 truefalsedockerpodman 或自定义命令字符串。
  • SEATBELT_PROFILE (macOS 特有):
    • 在 macOS 上切换 Seatbelt (sandbox-exec) 配置文件。
    • permissive-open:(默认)限制对项目文件夹(以及其他几个文件夹,请参阅 packages/cli/src/utils/sandbox-macos-permissive-open.sb)的写入,但允许其他操作。
    • strict:使用严格的配置文件,默认拒绝操作。
    • <profile_name>:使用自定义配置文件。要定义自定义配置文件,请在项目 .gemini/ 目录中创建一个名为 sandbox-macos-<profile_name>.sb 的文件(例如 my-project/.gemini/sandbox-macos-custom.sb)。
  • DEBUGDEBUG_MODE(通常由底层库或 CLI 本身使用):
    • 设置为 true1 以启用详细的调试日志记录,这有助于故障排除。
    • 注意: 这些变量默认会自动从项目 .env 文件中排除,以防止干扰 gemini-cli 的行为。如果您需要为 gemini-cli 特别设置这些变量,请使用 .gemini/.env 文件。
  • NO_COLOR
    • 设置为任何值以禁用 CLI 中的所有彩色输出。
  • CLI_TITLE
    • 设置为一个字符串以自定义 CLI 的标题。
  • CODE_ASSIST_ENDPOINT
    • 指定代码辅助服务器的端点。
    • 这对于开发和测试很有用。

命令行参数

在运行 CLI 时直接传递的参数可以覆盖该特定会话的其他配置。

  • --model <model_name> (-m <model_name>):
    • 指定此会话使用的 Gemini 模型。
    • 示例:npm start -- --model gemini-1.5-pro-latest
  • --prompt <your_prompt> (-p <your_prompt>):
    • 用于将提示直接传递给命令。这会以非交互模式调用 Gemini CLI。
  • --prompt-interactive <your_prompt> (-i <your_prompt>):
    • 启动一个交互式会话,并将提供的提示作为初始输入。
    • 提示将在交互式会话中处理,而不是在此之前。
    • 不能与从 stdin 管道输入一起使用。
    • 示例:gemini -i "explain this code"
  • --sandbox (-s):
    • 为此会话启用沙箱模式。
  • --sandbox-image
    • 设置沙箱镜像 URI。
  • --debug (-d):
    • 为此会话启用调试模式,提供更详细的输出。
  • --all-files (-a):
    • 如果设置,则递归地将当前目录下的所有文件作为上下文包含在提示中。
  • --help(或 -h):
    • 显示有关命令行参数的帮助信息。
  • --show-memory-usage
    • 显示当前内存使用情况。
  • --yolo
    • 启用 YOLO 模式,该模式会自动批准所有工具调用。
  • --approval-mode <mode>
    • 设置工具调用的批准模式。可用模式:
      • default:为每个工具调用提示批准(默认行为)
      • auto_edit:自动批准编辑工具(替换、写入文件),同时为其他工具提示
      • yolo:自动批准所有工具调用(等同于 --yolo
    • 不能与 --yolo 一起使用。请使用 --approval-mode=yolo 而不是 --yolo 来实现新的统一方法。
    • 示例:gemini --approval-mode auto_edit
  • --allowed-tools <tool1,tool2,...>
    • 一个逗号分隔的工具名称列表,这些工具将绕过确认对话框。
    • 示例:gemini --allowed-tools "ShellTool(git status)"
  • --telemetry
  • --telemetry-target
    • 设置遥测目标。有关更多信息,请参阅遥测
  • --telemetry-otlp-endpoint
    • 设置遥测的 OTLP 端点。有关更多信息,请参阅遥测
  • --telemetry-otlp-protocol
    • 设置遥测的 OTLP 协议(grpchttp)。默认为 grpc。有关更多信息,请参阅遥测
  • --telemetry-log-prompts
    • 启用遥测的提示日志记录。有关更多信息,请参阅遥测
  • --checkpointing
  • --extensions <extension_name ...> (-e <extension_name ...>):
    • 指定要用于会话的扩展列表。如果未提供,则使用所有可用扩展。
    • 使用特殊术语 gemini -e none 来禁用所有扩展。
    • 示例:gemini -e my-extension -e my-other-extension
  • --list-extensions (-l):
    • 列出所有可用扩展并退出。
  • --proxy
    • 设置 CLI 的代理。
    • 示例:--proxy http://localhost:7890
  • --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
    • 启用屏幕阅读器模式以提高可访问性。
  • --version
    • 显示 CLI 的版本。

上下文文件(分层指令上下文)

虽然严格来说不是 CLI 行为 的配置,但上下文文件(默认为 GEMINI.md,可通过 contextFileName 设置进行配置)对于配置提供给 Gemini 模型的 指令上下文(也称为“内存”)至关重要。此强大功能允许您为项目提供特定指令、编码风格指南或任何相关背景信息给 AI,从而使其响应更符合您的需求并更准确。CLI 包含 UI 元素,例如页脚中显示已加载上下文文件数量的指示器,以让您了解活动上下文。

  • 目的: 这些 Markdown 文件包含您希望 Gemini 模型在您的交互过程中了解的指令、指南或上下文。系统旨在分层管理此指令上下文。

上下文文件内容示例(例如 GEMINI.md

以下是位于 TypeScript 项目根目录的上下文文件可能包含内容的示例:

markdown
# 项目:我超棒的 TypeScript 库

## 一般说明:

- 生成新的 TypeScript 代码时,请遵循现有的编码风格。
- 确保所有新函数和类都有 JSDoc 注释。
- 在适当的情况下优先使用函数式编程范例。
- 所有代码都应与 TypeScript 5.0 和 Node.js 20+ 兼容。

## 编码风格:

- 使用 2 个空格进行缩进。
- 接口名称应以 `I` 为前缀(例如 `IUserService`)。
- 私有类成员应以下划线 (`_`) 为前缀。
- 始终使用严格相等运算符(`===``!==`)。

## 特定组件:`src/api/client.ts`

- 此文件处理所有出站 API 请求。
- 添加新的 API 调用函数时,请确保它们包含强大的错误处理和日志记录。
- 对所有 GET 请求使用现有的 `fetchWithRetry` 工具。

## 关于依赖项:

- 除非绝对必要,否则避免引入新的外部依赖项。
- 如果需要新的依赖项,请说明原因。

此示例演示了如何提供一般项目上下文、特定编码约定,甚至有关特定文件或组件的注释。您的上下文文件越相关和精确,AI 就能更好地为您提供帮助。强烈建议使用项目特定的上下文文件来建立约定和上下文。

  • 分层加载和优先级: CLI 通过从多个位置加载上下文文件(例如 GEMINI.md)来实现复杂的分层内存系统。来自列表中较低位置(更具体)的文件的内容通常会覆盖或补充来自较高位置(更通用)的文件的内容。确切的串联顺序和最终上下文可以使用 /memory show 命令进行检查。典型的加载顺序是:
    1. 全局上下文文件:
      • 位置:~/.gemini/<contextFileName>(例如,用户主目录中的 ~/.gemini/GEMINI.md)。
      • 范围:为您的所有项目提供默认指令。
    2. 项目根目录和祖先上下文文件:
      • 位置:CLI 在当前工作目录中搜索配置的上下文文件,然后在每个父目录中搜索,直到项目根目录(由 .git 文件夹标识)或您的主目录。
      • 范围:提供与整个项目或其重要部分相关的上下文。
    3. 子目录上下文文件(上下文/本地):
      • 位置:CLI 还会扫描当前工作目录下方的子目录中的配置上下文文件(尊重常见的忽略模式,如 node_modules.git 等)。此搜索的范围默认限制为 200 个目录,但可以在 settings.json 文件中使用 memoryDiscoveryMaxDirs 字段进行配置。
      • 范围:允许为特定组件、模块或项目子部分提供高度具体的指令。
  • 串联和 UI 指示: 所有找到的上下文文件的内容都会被串联起来(带有指示其来源和路径的分隔符),并作为系统提示的一部分提供给 Gemini 模型。CLI 页脚显示已加载上下文文件的数量,让您快速了解活动的指令上下文。
  • 导入内容: 您可以使用 @path/to/file.md 语法通过导入其他 Markdown 文件来模块化您的上下文文件。有关更多详细信息,请参阅内存导入处理器文档
  • 内存管理命令:
    • 使用 /memory refresh 强制重新扫描并从所有配置的位置重新加载所有上下文文件。这将更新 AI 的指令上下文。
    • 使用 /memory show 显示当前加载的组合指令上下文,允许您验证 AI 使用的分层结构和内容。
    • 有关 /memory 命令及其子命令(showrefresh)的完整详细信息,请参阅命令文档

通过理解和利用这些配置层级和上下文文件的分层性质,您可以有效地管理 AI 的内存,并将 Gemini CLI 的响应定制为您特定的需求和项目。

沙箱

Gemini CLI 可以在沙箱环境中执行潜在不安全的操作(如 shell 命令和文件修改),以保护您的系统。

沙箱默认禁用,但您可以通过以下几种方式启用它:

  • 使用 --sandbox-s 标志。
  • 设置 GEMINI_SANDBOX 环境变量。
  • 使用 --yolo--approval-mode=yolo 时,默认启用沙箱。

默认情况下,它使用预先构建的 gemini-cli-sandbox Docker 镜像。

对于项目特定的沙箱需求,您可以在项目根目录的 .gemini/sandbox.Dockerfile 中创建一个自定义 Dockerfile。此 Dockerfile 可以基于基础沙箱镜像:

dockerfile
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 环境变量来自动构建自定义沙箱镜像:

bash
BUILD_SANDBOX=1 gemini -s

使用情况统计信息

为了帮助我们改进 Gemini CLI,我们收集匿名使用情况统计信息。这些数据有助于我们了解 CLI 的使用方式,识别常见问题,并确定新功能的优先级。

我们收集的内容:

  • 工具调用: 我们会记录被调用的工具名称、它们是否成功执行以及执行所需的时间。我们不会收集传递给工具的参数或工具返回的任何数据。
  • API 请求: 我们会记录每次请求使用的 Gemini 模型、请求的持续时间以及是否成功。我们不会收集提示或响应的内容。
  • 会话信息: 我们会收集有关 CLI 配置的信息,例如启用的工具和批准模式。

我们不收集的内容:

  • 个人身份信息 (PII): 我们不收集任何个人信息,例如您的姓名、电子邮件地址或 API 密钥。
  • 提示和响应内容: 我们不会记录您的提示内容或 Gemini 模型响应的内容。
  • 文件内容: 我们不会记录 CLI 读取或写入的任何文件的内容。

如何选择退出:

您可以通过在 settings.json 文件中将 usageStatisticsEnabled 属性设置为 false 来随时选择退出使用情况统计信息的收集:

json
{
  "usageStatisticsEnabled": false
}

基于 MIT 许可证发布