Gemini CLI 备忘清单

Gemini CLI 可将 Google Gemini 模型直接带入终端,用于代码理解、任务自动化与工作流构建。

快速开始

快速上手

# 全局安装
$ npm install -g @google/gemini-cli

# 或通过 Homebrew 安装
$ brew install gemini-cli

# 或免安装直接运行
$ npx @google/gemini-cli

# 启动交互会话
$ gemini

# 非交互模式(无头模式)
$ gemini -p "summarize README.md"

# 将内容管道传给 Gemini
$ cat logs.txt | gemini -p "find errors"

# 先执行提示词,再继续交互
$ gemini -i "explain this project"

# 恢复最近一次会话
$ gemini -r latest

# 恢复后附加新提示词
$ gemini -r latest "check for type errors"

认证

方式用法
Google 账号运行 gemini,选择 “Sign in with Google”
API Key设置 GEMINI_API_KEY 环境变量
Vertex AI (ADC)gcloud auth application-default login
Vertex AI (SA)设置 GOOGLE_APPLICATION_CREDENTIALS

Vertex AI 还需要 GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION

安装方式

方式命令
npmnpm install -g @google/gemini-cli
Homebrewbrew install gemini-cli
MacPortssudo port install gemini-cli
npx(免安装)npx @google/gemini-cli

系统要求: Node.js 20+、macOS 15+、Windows 11 24H2+ 或 Ubuntu 20.04+

模型别名

别名模型适用场景
autogemini-2.5-pro / gemini-3-pro默认,平衡
progemini-2.5-pro / gemini-3-pro复杂推理
flashgemini-2.5-flash快速,平衡
flash-litegemini-2.5-flash-lite简单场景,最快

可通过 -m flashGEMINI_MODEL 环境变量设置。

核心概念

概念说明
GEMINI.md自动加载的项目上下文文件
Skills通过 activate_skill 按需加载的专长能力
Extensions由提示词、MCP 服务器、工具组成的扩展包
MCP Servers通过 Model Context Protocol 接入的外部工具
Plan Mode编码前用于规划的只读模式
Hooks在 agent 生命周期关键节点运行的脚本
Headless通过 -p 参数启用的非交互模式
Sessions可恢复的已保存会话历史

CLI 选项

核心选项

选项别名说明
--prompt <text>-p非交互提示词
--prompt-interactive-i先发提示词,再继续交互
--model <name>-m指定模型
--worktree [name]-w在新的 git worktree 中启动
--sandbox-s启用沙箱执行
--approval-mode <mode>default / auto_edit / yolo / plan
--yolo-y自动批准全部操作(已弃用,请改用 --approval-mode=yolo
--resume <id>-r通过 ID 或 latest 恢复会话
--list-sessions列出会话后退出
--delete-session <n>按索引删除会话
--output-format <fmt>-otext / json / stream-json
--extensions <list>-e要加载的扩展
--list-extensions-l列出扩展后退出
--include-directories额外工作区目录
--allowed-mcp-server-names限制可用 MCP 服务器名称
--screen-reader启用无障碍模式
--acp以 ACP(Agent Code Pilot)模式启动
--debug-d输出详细调试日志
--version-v显示版本
--help-h显示帮助

子命令

MCP 服务器管理

$ gemini mcp add <name> <cmd-or-url>
$ gemini mcp remove <name>
$ gemini mcp list
$ gemini mcp enable <name>
$ gemini mcp disable <name>

扩展管理

$ gemini extensions install <source>
$ gemini extensions uninstall <name>
$ gemini extensions list
$ gemini extensions update [name] [--all]
$ gemini extensions enable/disable <name>
$ gemini extensions link <path>
$ gemini extensions new <path>

Skills 管理

$ gemini skills list [--all]
$ gemini skills install <source>
$ gemini skills link <path>
$ gemini skills uninstall <name>
$ gemini skills enable/disable <name>

Hooks

$ gemini hooks migrate

无头模式输出格式

格式说明
text纯文本(默认)
json单个 JSON 对象,包含 responsestats
stream-jsonJSONL: init · message · tool_use · tool_result · error · result

退出码: 0 成功 · 1 错误 · 42 输入无效 · 53 超出轮次限制

交互命令

Slash 命令 /

命令说明
/help显示全部命令
/quit /exit退出 Gemini CLI
/clear清空终端屏幕
/about显示版本信息
/auth切换认证方式
/model设置 / 管理模型
/settings打开设置编辑器
/theme切换视觉主题
/vim切换 vim 模式
/plan [goal]进入 Plan Mode
/compress压缩聊天上下文
/copy复制上一条输出到剪贴板
/init为项目生成 GEMINI.md
/docs打开文档
/bug提交 GitHub issue
/stats会话 / 模型 / 工具统计
/tools列出可用工具
/memory show显示全部上下文文件
/memory add <text>写入全局 GEMINI.md
/memory reload重新加载上下文文件
/resume浏览并恢复会话
/rewind回退会话历史
/restore恢复工具执行前的文件状态
/hooks list列出已配置 hooks
/mcp list列出 MCP 服务器
/mcp reload重启 MCP 服务器
/skills list列出可用 skills
/extensions list列出扩展
/permissions trust信任当前目录
/policies list列出当前生效策略
/directory add添加工作区目录
/ide statusIDE 集成状态
/shells切换后台 shell
/terminal-setup配置多行输入快捷键
/setup-github配置 GitHub Actions

重载命令:/skills reload/agents reload/commands reload/memory reload/mcp reload/extensions reload

@ 命令

可在提示词中包含文件或目录内容:

# 引入单个文件
@src/main.ts fix the bug on line 42

# 引入一个目录
@src/ what does this module do?

# 引入多个路径
@package.json @src/ audit dependencies

具备 Git 感知能力:目录引入时会遵守 .gitignore

Shell 模式 !

# 运行单条 shell 命令
!ls -la

# 切换持久 shell 模式
!

# 将 shell 输出注入上下文
!git diff HEAD~1

所有 shell 子进程都会自动设置 GEMINI_CLI=1

键盘快捷键

光标与编辑

按键操作
Ctrl+A / Home移动到行首
Ctrl+E / End移动到行尾
Ctrl+← / Alt+B向左移动一个单词
Ctrl+→ / Alt+F向右移动一个单词
Ctrl+K删除到行尾
Ctrl+U删除到行首
Ctrl+W / Alt+Bksp删除左侧单词
Alt+D删除右侧单词
Backspace删除左侧字符
Delete / Ctrl+D删除右侧字符
Cmd+Z撤销
Ctrl+Shift+Z重做

文本输入

按键操作
Enter提交消息
Ctrl/Cmd+Enter插入换行
Tab排队发送消息
Ctrl+X打开外部编辑器
Ctrl+V粘贴
Ctrl+R反向历史搜索
Ctrl+P上一条历史记录
Ctrl+N下一条历史记录

应用控制

按键操作
Shift+Tab循环切换审批模式
Ctrl+T切换 todos 面板
Alt+M切换 markdown 渲染
Ctrl+Y切换 YOLO 模式
Ctrl+L清屏
Ctrl+Z挂起进程
F12显示错误详情
Esc 连按两次打开 rewind 对话框
Ctrl+C取消 / 退出
Ctrl+D退出

会话与历史

会话管理

# 列出全部会话
$ gemini --list-sessions

# 恢复最近一次会话
$ gemini -r latest

# 恢复指定会话
$ gemini -r <session-id>

# 按索引删除
$ gemini --delete-session 3

/resume 浏览器中:

  • ↑↓:浏览会话
  • Enter:恢复选中会话
  • x:删除会话
  • 直接输入可搜索

Rewind 工作流

输入 /rewind 或连按两次 Esc 可打开 rewind 对话框:

选项效果
Rewind + Revert重置聊天历史和文件变更
Rewind only重置聊天历史,保留文件
Revert only恢复文件,保留聊天历史
Do nothing取消(Esc)

仅作用于 AI 造成的文件变更,不影响手动编辑或 ! shell 命令。

分叉会话

通过保存和恢复命名检查点来探索多种方案:

# 1. 保存当前状态
/resume save my-decision-point

# 2. 尝试方案 A...

# 3. 恢复到保存状态
/resume resume my-decision-point

# 4. 尝试方案 B...

上下文与记忆

GEMINI.md 层级

上下文文件按以下顺序加载(最终会合并):

优先级位置
1. 全局~/.gemini/GEMINI.md
2. 父目录从工作区向上扫描
3. 工作区.gemini/GEMINI.md
4. JIT(按需)工具访问目录时即时扫描
# 在 GEMINI.md 中导入其他文件

@./docs/architecture.md
@./docs/conventions.md

可通过 settings.json 中的 context.fileName 自定义文件名(也可设为数组:["AGENTS.md", "GEMINI.md"])。

记忆命令

# 显示全部已加载上下文
/memory show

# 强制重载全部上下文文件
/memory reload

# 向全局 GEMINI.md 追加文本
/memory add "Always use TypeScript strict mode"

# 生成项目级 GEMINI.md
/init

忽略文件

在项目根目录创建 .geminiignore(遵循 .gitignore 语法):

# 排除一个目录
/packages/

# 排除指定文件
apikeys.txt
*.log

# 排除所有 .md,但保留 README
*.md
!README.md

这些文件会对 CLI 工具隐藏,但对 Git 和其他服务仍然可见。

MCP 服务器

MCP 配置

{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "my-mcp-package"],
      "env": { "API_KEY": "$MY_API_KEY" },
      "timeout": 30000,
      "trust": false,
      "includeTools": ["tool1", "tool2"],
      "excludeTools": ["dangerous-tool"]
    },
    "remote-server": {
      "url": "https://api.example.com/mcp",
      "headers": { "Authorization": "Bearer $TOKEN" }
    }
  }
}

环境变量支持 $VAR${VAR}%VAR%(Windows)展开。

工具 FQN 格式:mcp_{serverName}_{toolName}

管理服务器

# 添加 stdio 服务器
$ gemini mcp add myserver npx -y my-mcp-package

# 添加 HTTP 服务器
$ gemini mcp add myserver https://api.example.com/mcp

# 带参数添加
$ gemini mcp add myserver cmd --transport http --trust --timeout 30000

# 列出全部服务器
$ gemini mcp list

# 删除服务器
$ gemini mcp remove myserver

# 启用 / 禁用
$ gemini mcp enable myserver
$ gemini mcp disable myserver --session

MCP 服务器配置字段

字段说明
commandstdio 传输使用的可执行命令
args参数数组
urlSSE 传输的 URL
httpUrlStreamable HTTP 的 URL
env环境变量
cwd工作目录
timeout连接超时(毫秒,默认 600000)
trust跳过所有工具确认
includeTools指定工具白名单
excludeTools指定工具黑名单

MCP 资源

可在提示词中引用 MCP 资源:

# 引用一个资源
@server://resource/path summarize this

# 调用 MCP prompt 提供的 slash 命令
/prompt-name --arg=value

扩展与 Skills

管理扩展

# 从 GitHub 安装
$ gemini extensions install https://github.com/org/ext

# 从本地路径安装
$ gemini extensions install ./my-extension

# 列出已安装扩展
$ gemini extensions list

# 更新全部扩展
$ gemini extensions update --all

# 更新指定扩展
$ gemini extensions update my-ext

# 启用 / 禁用
$ gemini extensions enable my-ext
$ gemini extensions disable my-ext --scope user

# 以链接方式用于开发
$ gemini extensions link ./dev-extension

# 创建新扩展
$ gemini extensions new ./my-new-ext

# 校验结构
$ gemini extensions validate ./my-ext

扩展可打包:提示词、MCP 服务器、自定义命令、主题、hooks、子代理与 skills。

Agent Skills

Skills 提供按需加载的专长能力,只有在调用 activate_skill 时才会加载。

发现位置(按优先级):

层级路径
工作区.gemini/skills/.agents/skills/
用户~/.gemini/skills/~/.agents/skills/
扩展扩展包内部自带
# 列出全部 skills
$ gemini skills list --all

# 从 Git 或本地安装
$ gemini skills install https://github.com/org/skill
$ gemini skills install ./local-skill

# 以链接方式用于开发
$ gemini skills link ./my-skill

# 启用 / 禁用
$ gemini skills enable my-skill
$ gemini skills disable my-skill

自定义命令

可将可复用提示词保存为 slash 命令。

文件位置:

  • 用户:~/.gemini/commands/
  • 项目:.gemini/commands/
# .gemini/commands/git/commit.toml
description = "生成提交信息"
prompt = """
请为以下内容生成一条 conventional commit 提交信息:

!{git diff --staged}

{{args}}
"""

该命令会变成 /git:commit。子目录 / 会映射成 : 命名空间。

占位符:

占位符含义
{{args}}注入用户参数
!{cmd}执行 shell 并注入输出
@{path}嵌入文件内容

Plan Mode

启用 Plan Mode

# 通过参数一次性启用
$ gemini --approval-mode=plan

# 自然语言触发
> let's plan the refactor first

# Slash 命令触发
/plan redesign the auth module

# 会话中可用 Shift+Tab 循环切换模式

可在 settings.json 中设为默认:

{
  "general": {
    "defaultApprovalMode": "plan"
  }
}

Plan Mode 工具

只读工具(始终可用):

  • read_file, list_directory, glob
  • grep_search, google_web_search
  • web_fetch (with confirmation)
  • codebase_investigator, cli_help
  • ask_user

写入工具(受限):

  • write_file, replace — only for .md files inside plans directory

记忆相关:

  • save_memory, activate_skill

Plan Mode 工作流

1. 设定目标
  └─ 使用自然语言或 /plan <goal>

2. 讨论策略
  └─ Gemini 可能会提出澄清问题

3. 审阅计划
  └─ Markdown 文件会写入 plans 目录
  └─ 可用 Ctrl+X 在外部编辑器中修改

4. 批准或继续迭代

5. 切换到 YOLO/auto_edit 执行实现

自动模型路由:规划阶段使用 Pro,实施阶段切换到 Flash。

配置

设置文件位置

作用域路径
用户~/.gemini/settings.json
项目.gemini/settings.json
系统(Linux)/etc/gemini-cli/settings.json
系统(macOS)/Library/Application Support/GeminiCli/
系统(Windows)C:\ProgramData\gemini-cli\settings.json

优先级(越靠前越高): CLI 参数 → 环境变量 → 系统设置 → 项目设置 → 用户设置 → 系统默认值

常见设置:

{
  "general": {
    "defaultApprovalMode": "default",
    "checkpointing": { "enabled": true }
  },
  "ui": {
    "theme": "dark"
  },
  "model": {
    "name": "auto"
  },
  "tools": {
    "sandbox": "docker"
  }
}

可通过 /settings 打开可视化编辑器。

关键环境变量

变量用途
GEMINI_API_KEYGemini API 认证
GEMINI_MODEL覆盖默认模型
GEMINI_CLI_HOME覆盖配置目录
GOOGLE_CLOUD_PROJECTVertex AI 项目
GOOGLE_CLOUD_LOCATIONVertex AI 区域
GOOGLE_APPLICATION_CREDENTIALS服务账号 JSON 路径
GOOGLE_API_KEYGoogle Cloud API key
GEMINI_SANDBOXSandbox type: true, docker, podman, runsc
GEMINI_SYSTEM_MDsystem prompt 文件路径
NO_COLOR禁用彩色输出
CLI_TITLE覆盖终端窗口标题

可持久写入 ~/.bashrc~/.zshrc.gemini/.env

沙箱选项

方式平台启用方式
macOS Seatbelt仅 macOSGEMINI_SANDBOX=sandbox-exec
Docker/Podman跨平台--sandboxGEMINI_SANDBOX=docker
gVisor (runsc)仅 LinuxGEMINI_SANDBOX=runsc
LXC/LXDLinux 实验性GEMINI_SANDBOX=lxc
Windows Sandbox仅 WindowsGEMINI_SANDBOX=true

Hooks

Hook 事件

事件触发时机可否阻断
SessionStart会话开始时否(提示性)
SessionEnd会话结束时否(尽力执行)
BeforeAgent规划开始前是(退出码 2)
AfterAgentagent 循环结束后是(强制重试)
BeforeModelLLM 调用前是(退出码 2)
AfterModel每个 LLM chunk 后是(退出码 2)
BeforeToolSelection工具选择前可过滤工具
BeforeTool工具运行前是(退出码 2)
AfterTool工具运行后是(隐藏结果)
PreCompress压缩前否(提示性)
Notification系统通知

退出码: 0 = 成功 · 2 = 阻断/严重问题 · 其他 = 警告

settings.json 中的 Hook 配置:

{
  "hooks": {
    "BeforeTool": [
      {
        "type": "command",
        "command": "~/.gemini/hooks/validate-tool.sh",
        "matcher": "write_file",
        "timeout": 10000
      }
    ],
    "SessionStart": [
      {
        "type": "command",
        "command": "echo '{\"systemMessage\": \"Be concise.\"}'"
      }
    ]
  }
}

Hook I/O 协议

所有 hooks 都会通过 stdin 接收 JSON:

{
  "session_id": "...",
  "transcript_path": "/path/to/transcript",
  "cwd": "/project/dir",
  "hook_event_name": "BeforeTool",
  "timestamp": "2026-01-01T00:00:00Z"
}

并通过 stdout 返回 JSON:

字段说明
decision"allow""deny"
reason拒绝时展示给用户
systemMessage注入上下文
suppressOutput隐藏 hook 输出
continuefalse 表示中止 agent

BeforeTool 附加字段:hookSpecificOutput.tool_input 可覆盖参数。

AfterTool 附加字段:hookSpecificOutput.additionalContext 会追加到结果。

BeforeAgent 附加字段:hookSpecificOutput.additionalContext 会追加到提示词。

可用环境变量: GEMINI_PROJECT_DIR, GEMINI_SESSION_ID, GEMINI_CWD

延伸阅读