Google 开源 Gemini CLI:用自然语言操作命令行

276 阅读2分钟

大家好, 这里是 CodeAgent, 今天来简单了解下 Gemini Cli

📌 Gemini Cli 是什么

想象一下,你可以对终端说:"帮我找到所有 JavaScript 文件并按大小排序",然后系统自动执行:

find . -name "*.js" -exec ls -lh {} + | sort -k5 -h

Gemini Cli 就是这样一个工具, 终端操作,并且展示步骤的命令行工具.

安装步骤直接根据:

github.com/google-gemi…

安装完成后, 询问下 "weather about Beijing, China"

Image

同时可以看到, cli 也支持 mcp

Image

📌 架构设计

原文:
github.com/google-gemi…

gemini-cli 做了三层设计

  • Cli :用户界面和交互
  • Core:AI通信和工具调度
  • Tools:具体功能执行

Image

为什么这么设计?

  • 模块职责分明:Cli 前端 专注交互体验,Core 专注逻辑处理,工具模块 拓展能力。
  • 确保安全性:对写操作和执行命令进行确认,避免误操作。
  • 易于扩展:新增工具只需在 Core 注册即可,无需改动前端或模型调用逻辑。

📌 工具链

工具(Tools)API 是Gemini Cli 中一种插件机制,模型通过 FunctionCall 请求工具执行具体任务,Core 接收并触发对应 handler,然后将结果再反馈回模型,实现推理 + 工具执行。

Tools 执行流程如下:

User Prompt
   ↓
1. Model Request
   - 模型根据用户 prompt 和 tool schemas,决定使用某个工具
   - 返回一个 FunctionCall,包含 tool 名和参数
   ↓
2. Core Receives Request
   - 核心接收并解析这个 FunctionCall
   ↓
3. Tool Retrieval
   - 在 ToolRegistry 中查找目标工具
   ↓
4. Parameter Validation
   - 调用工具的 validateToolParams() 方法进行参数校验
   ↓
5. Confirmation (if needed)
   - 调用 shouldConfirmExecute() 判断是否需要用户确认
   - 如果需要确认:
     - Core 把确认详情发回 CLI → CLI 提示用户确认
     - 用户选择(如继续、取消)反馈回 Core
   ↓
6. Execution
   - 若参数合法且已确认(或无需确认)
   - 调用工具的 execute() 方法,附带 AbortSignal(支持取消)
   ↓
7. Result Processing
   - Core 接收到工具执行返回的 ToolResult
   ↓
8. Response to Model
   - 将 ToolResult 中的 llmContent 打包为 FunctionResponse
   - 返回给模型用于后续生成
   ↓
9. Display to User
   - 将 ToolResult 中的 returnDisplay 返回给 CLI
   - 呈现给用户查看工具执行的实际效果

同时在 packages/core/src/tools 下也提供了内置的几类 tools

  • File System Tools
  • Execution Tools
  • Web Tools
  • Memory Tools

这些工具都继承自 BaseTool,并实现了其特定功能所需的方法。

更多Tools 的可以直达

github.com/google-gemi…

📌 文档

Gemini Cli 的文档都在仓库下,以及 G 家的博客还有codelabs:

github.com/google-gemi…

blog.google/technology/…

codelabs.developers.google.com/codelabs/co…

💬 好了,今天就到这里,周末愉快.

欢迎关注我的公众号 CodeAgent