Gemini CLI 架构分析文档

基于 gemini-cli 源代码的深度架构分析
分析时间: 2026-04-02
版本: 0.36.0-nightly.20260317.2f90b4653


目录

  1. 项目概述
  2. 整体架构
  3. 核心包分析
  4. 核心组件详解
  5. 数据流与交互
  6. 扩展机制
  7. 安全与沙箱
  8. 技术栈与依赖
  9. 设计模式与最佳实践
  10. 总结

1. 项目概述

1.1 项目简介

Gemini CLI 是 Google 开源的一个强大的 AI 代理命令行工具,将 Gemini 大模型的能力直接带入终端。它提供了轻量级的 Gemini 访问方式,是从提示到模型的最直接路径。

1.2 核心特性

  • 免费层级: 每分钟 60 次请求,每天 1000 次请求(使用个人 Google 账户)
  • 强大的 Gemini 3 模型: 改进的推理能力和 1M token 上下文窗口
  • 内置工具: Google Search grounding、文件操作、Shell 命令、Web 获取
  • 可扩展: MCP (Model Context Protocol) 支持自定义集成
  • 终端优先: 为命令行用户设计
  • 开源: Apache 2.0 许可证

1.3 Monorepo 结构

Gemini CLI Monorepo

packages/

@google/gemini-cli
CLI 入口

根目录 package.json

@google/gemini-cli-core
核心逻辑

@google/gemini-cli-sdk
SDK

@google/gemini-cli-a2a-server
A2A 协议服务

@google/gemini-cli-devtools
开发工具

@google/gemini-cli-test-utils
测试工具

@google/gemini-cli-vscode-ide-companion
VS Code 插件


2. 整体架构

2.1 分层架构图

外部系统 (External Systems)

基础设施层 (Infrastructure Layer)

服务层 (Service Layer)

核心层 (Core Layer)

应用层 (Application Layer)

表示层 (Presentation Layer)

React/Ink UI 组件

非交互模式输出

ACP 客户端模式

AppContainer
状态管理

命令处理器
Slash Commands

Hooks 系统

Scheduler
工具调度器

GeminiClient
LLM 客户端

AgentSession
代理会话

ToolRegistry
工具注册表

FileSystemService

SandboxManager

TelemetryService

Storage Service

GitService

MCP Client
协议客户端

PolicyEngine
策略引擎

Authentication
认证系统

Configuration
配置管理

Gemini API

MCP Servers

File System

Terminal/Shell

2.2 核心数据流

Gemini API PolicyEngine ToolRegistry Scheduler GeminiClient AppContainer UI 层 用户 Gemini API PolicyEngine ToolRegistry Scheduler GeminiClient AppContainer UI 层 用户 alt [需要用户确认] loop [工具调用循环] 输入提示 提交用户输入 发送消息 API 请求 工具调用请求 调度工具执行 检查策略 策略决策 请求确认 显示确认对话框 确认/拒绝 用户决策 执行工具 工具结果 工具响应 发送工具结果 最终响应 响应内容 更新显示 展示结果

3. 核心包分析

3.1 @google/gemini-cli (CLI 包)

职责: 应用入口点、UI 组件、命令处理

关键文件:

  • src/gemini.tsx - 主入口,启动流程
  • src/interactiveCli.tsx - 交互模式入口
  • src/nonInteractiveCli.ts - 非交互模式处理
  • src/ui/AppContainer.tsx - 主 UI 容器

启动流程:

main 函数启动

加载设置

解析命令行参数

加载信任文件夹

需要认证?

刷新认证

启用沙箱?

启动沙箱进程

需要重启?

初始化配置

重启子进程

交互模式?

启动交互 UI

运行非交互模式

会话结束

3.2 @google/gemini-cli-core (Core 包)

职责: 核心业务逻辑、工具系统、代理系统

核心模块:

模块 职责
core/ LLM 客户端、内容生成器
tools/ 工具定义和注册
agents/ 子代理系统
scheduler/ 工具调度执行
policy/ 策略引擎
services/ 文件系统、沙箱、遥测等服务
mcp/ MCP 协议实现
hooks/ 钩子系统
config/ 配置管理

3.3 @google/gemini-cli-a2a-server

职责: Agent-to-Agent 协议服务端,允许 Gemini CLI 作为 A2A 代理服务器运行。

3.4 @google/gemini-cli-sdk

职责: SDK 封装,供第三方应用集成使用。


4. 核心组件详解

4.1 工具系统 (Tool System)

creates

manages

DeclarativeTool<TParams,TResult>

+name: string

+displayName: string

+description: string

+kind: Kind

+parameterSchema: unknown

+messageBus: MessageBus

+build(params) : : ToolInvocation

+validateToolParams(params) : : string|null

+getSchema(modelId?) : : FunctionDeclaration

BaseDeclarativeTool<TParams,TResult>

#createInvocation(params, messageBus) : : ToolInvocation

+build(params) : : ToolInvocation

ToolInvocation<TParams,TResult>

+params: TParams

+getDescription() : : string

+shouldConfirmExecute(signal) : : Promise

+execute(signal, updateOutput?) : : Promise<TResult>

+toolLocations() : : ToolLocation[]

BaseToolInvocation<TParams,TResult>

#messageBus: MessageBus

+shouldConfirmExecute(signal, forcedDecision?) : : Promise

#getConfirmationDetails(signal) : : Promise

#publishPolicyUpdate(outcome) : : Promise

ToolRegistry

-allKnownTools: Map<string,AnyDeclarativeTool>

-config: Config

+registerTool(tool) : : void

+unregisterTool(name) : : void

+getTool(name) : : AnyDeclarativeTool

+getFunctionDeclarations(modelId?) : : FunctionDeclaration[]

+discoverAllTools() : : Promise<void>

内置工具类型:

工具名 类型 描述
read_file Read 读取文件内容
write_file Edit 写入文件
edit_file Edit 编辑文件
ls Read 列出目录
grep_search Search 搜索文件内容
glob Search 文件模式匹配
shell Execute 执行 Shell 命令
web_fetch Fetch 获取网页内容
web_search Search 网页搜索
memory Other 管理 GEMINI.md 记忆
ask_user Communicate 询问用户
activate_skill Other 激活技能

4.2 调度器 (Scheduler)

调度器是工具执行的核心编排组件,负责管理工具调用的生命周期。

请求入队

开始处理

验证通过

验证失败

需要确认

用户批准

用户拒绝

重新验证

开始执行

执行成功

执行失败

取消执行

Queued

Validating

Scheduled

Error

AwaitingApproval

Cancelled

Executing

Success

调度器核心流程:

DENY

ALLOW

ASK_USER

取消

批准

schedule 请求

是否正在处理?

加入队列等待

开始批次处理

等待处理完成

排序请求
Topic 工具优先

验证每个工具

工具存在?

创建错误调用

创建调用实例

处理队列

取出下一个

可并行?

批量并行执行

单独处理

处理验证中调用

检查策略

策略决策

返回错误

调度执行

请求确认

用户响应

取消结果

执行工具

返回结果

完成批次

队列有待处理?

完成

4.3 GeminiClient (LLM 客户端)

uses

uses

GeminiClient

-chat: GeminiChat

-sessionTurnCount: number

-loopDetector: LoopDetectionService

-compressionService: ChatCompressionService

-agentHistoryProvider: AgentHistoryProvider

+sendMessage(prompt, signal) : : AsyncGenerator<GeminiEvent>

+getChat() : : GeminiChat

+clearHistory() : : void

GeminiChat

-history: Content[]

-model: string

-config: GenerateContentConfig

+addMessage(content) : : void

+getHistory() : : Content[]

+sendMessage(content) : : Promise<GenerateContentResponse>

ContentGenerator

+config: ContentGeneratorConfig

+generateContent(request) : : Promise<GenerateContentResponse>

+streamGenerateContent(request) : : AsyncGenerator

4.4 策略引擎 (Policy Engine)

策略引擎负责对工具调用进行安全检查和权限控制。

ALLOW

DENY

ASK_USER

工具调用

检查策略规则

匹配规则?

应用规则决策

默认策略

模式匹配?

检查下一规则

参数匹配?

获取决策

决策类型

允许执行

拒绝执行

需要用户确认

执行工具

返回错误

用户确认流程

策略规则类型:

interface PolicyRule {
  toolName?: string;          // 工具名匹配
  mcpName?: string;           // MCP 服务器名
  argsPattern?: string;       // 参数正则匹配
  decision: PolicyDecision;   // ALLOW | DENY | ASK_USER
  modes?: ApprovalMode[];     // 适用的审批模式
  subagent?: string;          // 子代理名称
  priority?: number;          // 优先级
}

4.5 代理系统 (Agent System)

AgentDefinition

+name: string

+description: string

+kind: 'local' | 'remote'

LocalAgentDefinition

+kind: 'local'

+promptConfig: PromptConfig

+modelConfig: ModelConfig

+runConfig: RunConfig

+toolConfig?: ToolConfig

+mcpServers?: Record<string,MCPServerConfig>

RemoteAgentDefinition

+kind: 'remote'

+agentCardUrl?: string

+agentCardJson?: string

+auth?: A2AAuthConfig

AgentRegistry

-agents: Map<string,AgentDefinition>

+registerAgent(definition) : : void

+getAgent(name) : : AgentDefinition

+listAgents() : : AgentDefinition[]

LocalAgentExecutor

+execute(agent, input, signal) : : Promise<OutputObject>

-runAgentLoop(chat, config) : : AsyncGenerator

代理执行流程:

工具系统 GeminiChat LocalExecutor AgentLoader 主代理 工具系统 GeminiChat LocalExecutor AgentLoader 主代理 alt [响应包含工具调用] [响应包含 complete_task] loop [代理循环 (直到 complete_task 或最大轮次)] 加载代理定义 AgentDefinition execute(agent, input) 初始化聊天历史 添加系统提示 发送消息 模型响应 执行工具 工具结果 添加工具结果 返回最终输出

4.6 MCP 集成

认证支持

MCP 客户端架构

stdio

sse

http

MCPServerConfig

传输类型

StdioClientTransport

SSEClientTransport

StreamableHTTPClientTransport

McpClient

发现工具和资源

DiscoveredMCPTool

MCPResource

DiscoveredMCPPrompt

ToolRegistry

ResourceRegistry

PromptRegistry

认证提供者

GoogleCredentialProvider

MCPOAuthProvider

ServiceAccountImpersonationProvider


5. 数据流与交互

5.1 用户输入处理流程

渲染错误: Mermaid 渲染失败: Parse error on line 4: ...sh 命令] PARSE -->|@ 提及| ATMENTION[处理 ----------------------^ Expecting 'AMP', 'COLON', 'PIPE', 'TESTSTR', 'DOWN', 'DEFAULT', 'NUM', 'COMMA', 'NODE_STRING', 'BRKT', 'MINUS', 'MULT', 'UNICODE_TEXT', got 'LINK_ID'

5.2 上下文管理

上下文消费

上下文构建

上下文来源

GEMINI.md 文件

IDE 上下文

分层记忆

Hook 注入上下文

工作区信息

ContextBuilder

ContextManager

系统提示构建

聊天记忆

工具上下文

5.3 会话状态管理

创建会话

初始化完成

用户输入

LLM 响应中

工具调用

响应完成

需确认

执行中

用户批准

用户拒绝

工具结果

执行失败

等待下次输入

创建检查点

恢复会话

会话结束

Initializing

Ready

Processing

Streaming

ToolCalling

Completed

Confirming

Executing

Cancelled

Error

Checkpointing

Resuming


6. 扩展机制

6.1 MCP 服务器配置

{
  "mcpServers": {
    "server-name": {
      "command": "/path/to/server",
      "args": ["--arg1", "value1"],
      "env": {
        "API_KEY": "xxx"
      },
      "timeout": 600000,
      "trust": true
    }
  }
}

6.2 技能系统 (Skills)

技能激活

技能定义

技能来源

技能加载

技能发现

SkillLoader

SkillManager

用户目录
~/.gemini/skills/

项目目录
.gemini/skills/

扩展

SkillDefinition

Prompt 模板

工具配置

MCP 配置

activate_skill 工具

注入上下文

执行技能

6.3 钩子系统 (Hooks)

AfterTool Hook 工具执行 BeforeTool Hook HookSystem 用户 AfterTool Hook 工具执行 BeforeTool Hook HookSystem 用户 alt [钩子修改参- 数] alt [钩子阻止执行] 触发工具调用 执行 BeforeTool 钩子 返回决策 更新工具参数 返回阻止原因 执行工具 返回结果 执行 AfterTool 钩子 处理完成 返回最终结果

支持的钩子事件:

事件 触发时机
BeforeTool 工具执行前
AfterTool 工具执行后
SessionStart 会话开始
SessionEnd 会话结束
BeforeAgent 代理循环前
AfterAgent 代理循环后

6.4 扩展系统 (Extensions)

扩展生命周期

扩展内容

扩展发现

ExtensionRegistryClient

GitHub 扩展源

本地扩展

JSON Schemas

Slash 命令

MCP 服务器

技能

主题

钩子

安装

启用

配置

更新

禁用

卸载


7. 安全与沙箱

7.1 沙箱架构

安全检查

沙箱管理器

沙箱模式

无沙箱
GEMINI_SANDBOX=false

Docker 沙箱

Podman 沙箱

SandboxManager

准备命令

执行命令

权限管理

命令安全检查

路径访问检查

网络访问检查

环境变量清理

7.2 权限控制

YOLO

ReadOnly

Default

沙箱请求

沙箱模式

允许所有

只读模式

正常检查

执行

写入操作?

拒绝

路径检查

在工作区内?

允许

在允许列表?

沙箱扩展请求

用户确认?

更新策略

返回错误

返回结果

7.3 审批模式

渲染错误: Mermaid 渲染失败: Parse error on line 2: ...gram-v2 [*] --> Default: 默认模式 D ----------------------^ Expecting 'ID', 'EDGE_STATE', got 'DEFAULT'

8. 技术栈与依赖

8.1 核心技术栈

层级 技术 用途
运行时 Node.js 20+ JavaScript 运行环境
语言 TypeScript 类型安全的开发体验
UI 框架 React + Ink 终端 UI 组件
构建工具 esbuild 快速打包
测试框架 Vitest 单元测试和集成测试

8.2 关键依赖

AI/ML 相关:

  • @google/genai - Google Generative AI SDK
  • @a2a-js/sdk - Agent-to-Agent 协议 SDK

MCP 相关:

  • @modelcontextprotocol/sdk - MCP 协议实现

终端 UI:

  • ink - React 终端渲染
  • chalk - 终端颜色
  • ansi-escapes - ANSI 转义序列

文件系统:

  • glob - 文件模式匹配
  • ignore - gitignore 解析
  • @joshua.litt/get-ripgrep - ripgrep 集成

安全与沙箱:

  • @lydell/node-pty - 伪终端
  • keytar - 安全凭据存储

遥测与监控:

  • @opentelemetry/* - OpenTelemetry 集成
  • @google-cloud/logging - Google Cloud 日志

8.3 打包与分发

分发渠道

构建流程

源代码

TypeScript 源码

静态资源

esbuild 打包

资源复制

Schema 生成

bundle/

npm Registry

Homebrew

Docker Image

可执行文件


9. 设计模式与最佳实践

9.1 使用的设计模式

1. 依赖注入模式

  • Config 对象通过构造函数注入到需要的组件
  • 便于测试和模块解耦

2. 观察者模式

  • MessageBus 实现发布-订阅机制
  • coreEvents 事件系统用于组件间通信

3. 策略模式

  • PolicyEngine 使用策略规则进行决策
  • 不同的沙箱策略实现

4. 工厂模式

  • createSandboxManager 工厂函数
  • createContentGenerator 工厂函数

5. 命令模式

  • 工具调用封装为 ToolInvocation 对象
  • 支持撤销、重做等操作

6. 责任链模式

  • 钩子系统的执行链
  • 策略规则的匹配链

9.2 架构最佳实践

分层架构:

  • 清晰的关注点分离
  • 依赖方向从外向内

配置管理:

  • 分层配置(用户/项目/工作区)
  • 支持远程管理配置

错误处理:

  • 结构化错误类型
  • 友好的错误消息
  • 可恢复错误处理

可测试性:

  • 依赖注入
  • 模块化设计
  • 测试工具包

10. 总结

10.1 架构亮点

  1. 模块化设计: 清晰的包结构和职责划分
  2. 可扩展性: MCP、钩子、技能、扩展等多种扩展机制
  3. 安全性: 多层安全机制,包括沙箱、策略引擎、权限控制
  4. 用户体验: 支持交互和非交互模式,丰富的 UI 组件
  5. 可观测性: 完善的遥测系统和日志记录

10.2 架构图总览

外部服务

Gemini CLI

用户界面

基础设施

工具系统

核心引擎

终端

VS Code

脚本模式

入口点

UI 层

GeminiClient

Scheduler

AgentSystem

内置工具

MCP 工具

发现工具

策略引擎

沙箱

存储

遥测

Gemini API

MCP Servers

Google Cloud

10.3 关键数据结构

工具调用结果:

interface ToolResult {
  llmContent: PartListUnion;    // LLM 历史内容
  returnDisplay: ToolResultDisplay;  // 用户显示
  error?: {
    message: string;
    type?: ToolErrorType;
  };
  data?: Record<string, unknown>;
  tailToolCallRequest?: {      // 链式调用
    name: string;
    args: Record<string, unknown>;
  };
}

代理会话事件:

type AgentEvent =
  | { type: 'agent_start'; streamId: string; ... }
  | { type: 'content'; content: ContentPart; ... }
  | { type: 'tool_call'; toolCall: ToolCall; ... }
  | { type: 'tool_result'; result: ToolResult; ... }
  | { type: 'agent_end'; reason: StreamEndReason; ... };

配置结构:

interface Config {
  // 工具注册表
  toolRegistry: ToolRegistry;
  // 策略引擎
  policyEngine: PolicyEngine;
  // 消息总线
  messageBus: MessageBus;
  // 沙箱管理器
  sandboxManager: SandboxManager;
  // 存储服务
  storage: Storage;
  // ...更多配置
}

附录

A. 文件结构概览

gemini-cli/
├── packages/
│   ├── cli/                    # CLI 包
│   │   ├── src/
│   │   │   ├── gemini.tsx      # 主入口
│   │   │   ├── interactiveCli.tsx
│   │   │   ├── nonInteractiveCli.ts
│   │   │   ├── ui/             # UI 组件
│   │   │   ├── commands/       # 命令处理
│   │   │   └── config/         # CLI 配置
│   │   └── package.json
│   │
│   ├── core/                   # 核心包
│   │   ├── src/
│   │   │   ├── core/           # 核心逻辑
│   │   │   ├── tools/          # 工具定义
│   │   │   ├── agents/         # 代理系统
│   │   │   ├── scheduler/      # 调度器
│   │   │   ├── policy/         # 策略引擎
│   │   │   ├── services/       # 服务层
│   │   │   ├── mcp/            # MCP 实现
│   │   │   ├── hooks/          # 钩子系统
│   │   │   ├── config/         # 配置管理
│   │   │   └── utils/          # 工具函数
│   │   └── package.json
│   │
│   ├── a2a-server/             # A2A 服务
│   ├── sdk/                    # SDK
│   ├── devtools/               # 开发工具
│   └── test-utils/             # 测试工具
│
├── docs/                       # 文档
├── schemas/                    # JSON Schemas
├── scripts/                    # 构建脚本
└── package.json               # 根配置

B. 参考链接

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐