<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gemini-Cli on 青蛙小白</title><link>https://blog.frognew.com/tags/gemini-cli.html</link><description>Recent content in Gemini-Cli on 青蛙小白</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 29 Dec 2025 19:00:00 +0800</lastBuildDate><atom:link href="https://blog.frognew.com/tags/gemini-cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Gemini CLI MCP 配置中的 API Key 安全实践</title><link>https://blog.frognew.com/2025/12/gemini-cli-mcp-security-practices.html</link><pubDate>Mon, 29 Dec 2025 19:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/12/gemini-cli-mcp-security-practices.html</guid><description>&lt;p>在配置 Gemini CLI 连接远程 MCP 服务器时，一个常见的问题是如何安全地处理 API Key。很多远程 MCP 服务（如高德地图）需要在 URL 中传递密钥进行认证，直接将密钥硬编码在配置文件中显然不是好的做法。本文整理了几种推荐的安全处理方式。&lt;/p>
&lt;h2 id="背景">背景&lt;/h2>
&lt;p>以高德地图 MCP 服务为例，官方提供的连接方式是：&lt;/p></description></item><item><title>Gemini CLI 0.21.0：MCP 服务器配置的统一化改进</title><link>https://blog.frognew.com/2025/12/gemini-cli-mcp-unified-url-configuration.html</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/12/gemini-cli-mcp-unified-url-configuration.html</guid><description>&lt;p>Gemini CLI 0.21.0 是对 MCP (Model Context Protocol) 服务器配置方式的统一化处理，解决了之前与标准不一致的问题。&lt;/p>
&lt;h2 id="问题背景">问题背景&lt;/h2>
&lt;p>在 0.21.0 之前，Gemini CLI 在配置远程 MCP 服务器时采用了一种独特的方式：需要根据传输协议的不同，分别使用 &lt;code>httpUrl&lt;/code> 或 &lt;code>url&lt;/code> 字段。这种设计与业界其他服务（如 Sentry、Notion）的做法不一致。&lt;/p></description></item><item><title>Gemini CLI 会话管理：自动保存和恢复你的 AI 对话上下文</title><link>https://blog.frognew.com/2025/12/gemini-cli-session-management.html</link><pubDate>Tue, 02 Dec 2025 19:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/12/gemini-cli-session-management.html</guid><description>&lt;p>Gemini CLI 提供了强大的会话管理功能，能够自动保存所有对话历史，并支持随时恢复。这篇文章将详细介绍如何使用这些功能。&lt;/p>


&lt;svg viewBox="0 0 928 100" xmlns="http://www.w3.org/2000/svg">
 &lt;defs>
 &lt;!-- Light theme gradient -->
 &lt;linearGradient id="sessionGradient" x1="0%" y1="0%" x2="100%" y2="0%">
 &lt;stop offset="0%" style="stop-color:#F0F4F8;stop-opacity:1" />
 &lt;stop offset="50%" style="stop-color:#E6EEF5;stop-opacity:1" />
 &lt;stop offset="100%" style="stop-color:#DDE7F0;stop-opacity:1" />
 &lt;/linearGradient>

 &lt;!-- Gemini gradient -->
 &lt;linearGradient id="geminiGradient" x1="0%" y1="0%" x2="100%" y2="100%">
 &lt;stop offset="0%" style="stop-color:#4285F4;stop-opacity:1" />
 &lt;stop offset="100%" style="stop-color:#8AB4F8;stop-opacity:1" />
 &lt;/linearGradient>

 &lt;!-- Session highlight gradient -->
 &lt;linearGradient id="sessionHighlight" x1="0%" y1="0%" x2="0%" y2="100%">
 &lt;stop offset="0%" style="stop-color:#4285F4;stop-opacity:0.2" />
 &lt;stop offset="100%" style="stop-color:#4285F4;stop-opacity:0.05" />
 &lt;/linearGradient>

 &lt;!-- Glow effect -->
 &lt;filter id="glow" height="300%" width="300%" x="-75%" y="-75%">
 &lt;feGaussianBlur stdDeviation="2" result="coloredBlur"/>
 &lt;feMerge>
 &lt;feMergeNode in="coloredBlur"/>
 &lt;feMergeNode in="SourceGraphic"/>
 &lt;/feMerge>
 &lt;/filter>
 &lt;/defs>

 &lt;!-- Background -->
 &lt;rect width="928" height="100" fill="url(#sessionGradient)"/>

 &lt;!-- Gemini Icon -->
 &lt;g transform="translate(40, 25)">
 &lt;circle cx="25" cy="25" r="25" fill="url(#geminiGradient)" opacity="0.9"/>
 &lt;path d="M25,15 L35,25 L25,35 L15,25 Z" fill="white" opacity="0.9"/>
 &lt;circle cx="25" cy="25" r="4" fill="white"/>
 &lt;/g>

 &lt;!-- Session Title -->
 &lt;text x="90" y="60" font-family="Arial" font-size="36" font-weight="bold" fill="#2D3748" filter="url(#glow)">
 Session
 &lt;/text>

 &lt;!-- Terminal Window with Session Browser -->
 &lt;g transform="translate(240, 12)">
 &lt;!-- Window frame -->
 &lt;rect x="0" y="0" width="260" height="76" rx="5" fill="white" stroke="#CBD5E0" stroke-width="1"/>
 &lt;!-- Title bar -->
 &lt;rect x="0" y="0" width="260" height="22" rx="5" fill="#F7FAFC"/>
 &lt;!-- Window controls -->
 &lt;circle cx="12" cy="11" r="3.5" fill="#FF5F56"/>
 &lt;circle cx="26" cy="11" r="3.5" fill="#FFBD2E"/>
 &lt;circle cx="40" cy="11" r="3.5" fill="#27C93F"/>
 &lt;!-- Title text -->
 &lt;text x="55" y="15" font-family="monospace" font-size="9" fill="#4A5568">Session Browser&lt;/text>

 &lt;!-- Session list content -->
 &lt;g transform="translate(8, 30)" font-family="monospace" font-size="8">
 &lt;!-- Active session (highlighted) -->
 &lt;rect x="0" y="0" width="244" height="12" fill="url(#sessionHighlight)" rx="2"/>
 &lt;text y="8" fill="#4285F4" font-weight="bold">▸ refactor-auth (2 days ago)&lt;/text>

 &lt;!-- Other sessions -->
 &lt;text y="20" fill="#5F6368"> feature-api (5 hours ago)&lt;/text>
 &lt;text y="32" fill="#5F6368"> bug-fix-mem (Just now)&lt;/text>
 &lt;/g>

 &lt;!-- Cursor animation -->
 &lt;rect x="12" y="38" width="6" height="10" fill="#4285F4" opacity="0.8">
 &lt;animate attributeName="opacity"
 values="0;1;0"
 dur="1s"
 repeatCount="indefinite"/>
 &lt;/rect>
 &lt;/g>

 &lt;!-- Session Flow Visualization -->
 &lt;g transform="translate(540, 20)">
 &lt;!-- Timeline base -->
 &lt;line x1="0" y1="30" x2="180" y2="30" stroke="#CBD5E0" stroke-width="2"/>

 &lt;!-- Session nodes -->
 &lt;g id="session1">
 &lt;circle cx="0" cy="30" r="8" fill="#4285F4" opacity="0.8"/>
 &lt;text x="-5" y="50" font-family="Arial" font-size="8" fill="#5F6368">Day 1&lt;/text>
 &lt;/g>

 &lt;g id="session2">
 &lt;circle cx="60" cy="30" r="8" fill="#34A853" opacity="0.8"/>
 &lt;text x="53" y="50" font-family="Arial" font-size="8" fill="#5F6368">Day 2&lt;/text>
 &lt;!-- Connecting arc -->
 &lt;path d="M8,30 Q34,15 60,30"
 fill="none"
 stroke="#34A853"
 stroke-width="2"
 opacity="0.4"/>
 &lt;/g>

 &lt;g id="session3">
 &lt;circle cx="120" cy="30" r="8" fill="#FBBC04" opacity="0.8"/>
 &lt;text x="113" y="50" font-family="Arial" font-size="8" fill="#5F6368">Day 3&lt;/text>
 &lt;!-- Connecting arc -->
 &lt;path d="M68,30 Q94,15 120,30"
 fill="none"
 stroke="#FBBC04"
 stroke-width="2"
 opacity="0.4"/>
 &lt;/g>

 &lt;g id="sessionCurrent">
 &lt;circle cx="180" cy="30" r="10" fill="#EA4335" opacity="0.9">
 &lt;animate attributeName="r"
 values="10;12;10"
 dur="2s"
 repeatCount="indefinite"/>
 &lt;/circle>
 &lt;text x="168" y="50" font-family="Arial" font-size="8" fill="#5F6368" font-weight="bold">Now&lt;/text>
 &lt;!-- Connecting arc -->
 &lt;path d="M128,30 Q154,15 180,30"
 fill="none"
 stroke="#EA4335"
 stroke-width="2"
 opacity="0.5"/>
 &lt;/g>
 &lt;/g>

 &lt;!-- Project folders indicator -->
 &lt;g transform="translate(760, 20)">
 &lt;!-- Folder 1 -->
 &lt;g opacity="0.6">
 &lt;path d="M0,10 L0,35 L40,35 L40,10 L15,10 L12,5 L0,5 Z"
 fill="#FBBC04"
 stroke="#F9AB00"
 stroke-width="1"/>
 &lt;text x="5" y="28" font-family="Arial" font-size="7" fill="#5F6368">project-a&lt;/text>
 &lt;/g>

 &lt;!-- Folder 2 (active) -->
 &lt;g transform="translate(50, 0)">
 &lt;path d="M0,10 L0,35 L40,35 L40,10 L15,10 L12,5 L0,5 Z"
 fill="#4285F4"
 stroke="#1967D2"
 stroke-width="1.5"/>
 &lt;text x="5" y="28" font-family="Arial" font-size="7" fill="white" font-weight="bold">project-b&lt;/text>
 &lt;/g>

 &lt;!-- Folder 3 -->
 &lt;g transform="translate(100, 0)" opacity="0.6">
 &lt;path d="M0,10 L0,35 L40,35 L40,10 L15,10 L12,5 L0,5 Z"
 fill="#34A853"
 stroke="#188038"
 stroke-width="1"/>
 &lt;text x="5" y="28" font-family="Arial" font-size="7" fill="#5F6368">project-c&lt;/text>
 &lt;/g>
 &lt;/g>

 &lt;!-- Command hint at bottom -->
 &lt;g transform="translate(240, 92)">
 &lt;text font-family="monospace" font-size="9" fill="#8AB4F8">
 $ gemini --resume
 &lt;/text>
 &lt;/g>

 &lt;!-- Decorative floating particles -->
 &lt;g opacity="0.3">
 &lt;circle cx="220" cy="20" r="3" fill="#4285F4">
 &lt;animate attributeName="cy"
 values="20;15;20"
 dur="3s"
 repeatCount="indefinite"/>
 &lt;/circle>
 &lt;circle cx="520" cy="75" r="2.5" fill="#34A853">
 &lt;animate attributeName="cy"
 values="75;70;75"
 dur="4s"
 repeatCount="indefinite"/>
 &lt;/circle>
 &lt;circle cx="740" cy="65" r="2" fill="#FBBC04">
 &lt;animate attributeName="cy"
 values="65;60;65"
 dur="3.5s"
 repeatCount="indefinite"/>
 &lt;/circle>
 &lt;/g>

 &lt;!-- Auto-save indicator -->
 &lt;g transform="translate(900, 30)">
 &lt;circle cx="0" cy="0" r="6" fill="#34A853" opacity="0.2">
 &lt;animate attributeName="r"
 values="6;10;6"
 dur="2s"
 repeatCount="indefinite"/>
 &lt;/circle>
 &lt;circle cx="0" cy="0" r="4" fill="#34A853"/>
 &lt;path d="M-2,-1 L0,2 L2,-2"
 fill="none"
 stroke="white"
 stroke-width="1.5"
 stroke-linecap="round"
 stroke-linejoin="round"/>
 &lt;/g>
&lt;/svg>



&lt;h2 id="自动保存无需手动操作">自动保存：无需手动操作&lt;/h2>
&lt;p>Gemini CLI 提供了&lt;strong>完全自动的会话保存机制&lt;/strong>。不需要记住任何保存命令，也不需要担心忘记保存，每次交互都会自动记录。&lt;/p></description></item><item><title>Gemini CLI 模型配置别名：为不同场景预设模型参数</title><link>https://blog.frognew.com/2025/11/gemini-cli-model-alias.html</link><pubDate>Sat, 29 Nov 2025 20:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/11/gemini-cli-model-alias.html</guid><description>&lt;p>在使用 Gemini CLI 时，不同的任务场景往往需要不同的模型配置组合：&lt;/p>
&lt;ul>
&lt;li>创意写作希望更高的随机性，适合设置较高的 temperature&lt;/li>
&lt;li>代码生成需要精确性，适合较低的 temperature 和确定性配置&lt;/li>
&lt;li>需要深度思考的任务可以启用 thinking 模式并分配足够的 token 预算&lt;/li>
&lt;/ul>
&lt;p>Gemini CLI 的模型配置别名（Model Config Aliases）功能正是为了这个需求而设计的。&lt;/p></description></item><item><title>Gemini CLI 的时光机与沙箱隔离：Checkpointing 和 Sandbox</title><link>https://blog.frognew.com/2025/11/gemini-cli-checkpointing-and-sandbox.html</link><pubDate>Fri, 21 Nov 2025 20:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/11/gemini-cli-checkpointing-and-sandbox.html</guid><description>&lt;p>使用 Gemini CLI 进行 AI 辅助编程时，一直有个担心：万一 AI 改错了代码怎么办？特别是在让 AI 进行大规模重构时，虽然想让它大胆尝试，但又怕一不小心把项目搞乱。&lt;/p>
&lt;p>好在 Gemini CLI 提供了两个核心安全特性来解决这个问题：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Checkpointing&lt;/strong>：自动保存项目状态，实现&amp;quot;时光倒流&amp;quot;般的撤销能力&lt;/li>
&lt;li>&lt;strong>Sandbox&lt;/strong>：隔离 AI 操作，限制其影响范围&lt;/li>
&lt;/ul>
&lt;p>本文将详细介绍这两个功能的配置和实战应用。&lt;/p></description></item><item><title>Gemini CLI 策略引擎：如何控制 AI Agent 的行为</title><link>https://blog.frognew.com/2025/11/gemini-cli-policy-engine.html</link><pubDate>Fri, 07 Nov 2025 20:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/11/gemini-cli-policy-engine.html</guid><description>&lt;p>在将AI Agent部署到生产环境时,安全治理始终是绕不开的话题。&lt;/p>
&lt;ul>
&lt;li>如何确保AI不会执行危险的系统命令?&lt;/li>
&lt;li>如何限制AI对敏感数据的访问?&lt;/li>
&lt;li>如何在保证灵活性的同时满足企业的合规要求?&lt;/li>
&lt;/ul>
&lt;p>Gemini CLI的策略引擎(Policy Engine)正是为解决这些问题而设计的企业级安全治理方案。&lt;/p></description></item><item><title>期待Gemini CLI的SubAgent</title><link>https://blog.frognew.com/2025/10/gemini-cli-subagent.html</link><pubDate>Wed, 15 Oct 2025 21:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/10/gemini-cli-subagent.html</guid><description>&lt;h2 id="什么是-subagent">什么是 SubAgent？&lt;/h2>
&lt;p>SubAgent是 Gemini CLI 中的一个重要特性，它允许主 AI 代理将复杂任务委派给专门的子代理来处理。这种分层架构使得任务处理更加高效和专业化。&lt;/p>
&lt;h2 id="v090-引入对subagent的基础支持">v0.9.0 引入对SubAgent的基础支持&lt;/h2>
&lt;p>在 v0.9.0 版本中，Gemini CLI 引入了 SubAgent 的基础支持，主要包括：&lt;/p>
&lt;h3 id="1-配置支持">1. 配置支持&lt;/h3>
&lt;p>通过 &lt;code>enableSubagents&lt;/code> 配置项，用户可以启用或禁用 SubAgent 功能。这个配置项在系统范围内建立了子代理的注册和管理框架。&lt;/p></description></item><item><title>Gemini CLI 扩展系统升级：Gemini CLI v0.9.x</title><link>https://blog.frognew.com/2025/10/gemini-cli-extensions-upgrade-v0.9.x.html</link><pubDate>Wed, 15 Oct 2025 19:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/10/gemini-cli-extensions-upgrade-v0.9.x.html</guid><description>&lt;p>Gemini CLI发展到v0.9.x后，继续跟进一下其扩展系统的更新。&lt;/p>
&lt;h2 id="扩展系统概述">扩展系统概述&lt;/h2>
&lt;p>Gemini CLI 的扩展系统将提示（prompts）、MCP 服务器和自定义命令打包成熟悉且用户友好的格式。通过扩展，可以扩展 Gemini CLI 的能力，并与他人分享这些能力。扩展系统被设计为易于安装和分享。&lt;/p>
&lt;p>想要浏览现有的扩展示例，可以访问 &lt;a href="https://geminicli.com/extensions/browse/" rel="noopener" target="_blank">Gemini CLI extensions&lt;/a>，那里汇集了各种实用的扩展。&lt;/p></description></item><item><title>Gemini CLI 交互式终端：从命令执行器到真正的 Shell 工具</title><link>https://blog.frognew.com/2025/09/gemini-cli-interactive-shell.html</link><pubDate>Wed, 24 Sep 2025 12:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/09/gemini-cli-interactive-shell.html</guid><description>&lt;p>一直以来，Gemini CLI 的 &lt;code>run_shell_command&lt;/code> 工具只能处理简单的、非交互式的命令。执行 &lt;code>ls -l&lt;/code> 或 &lt;code>echo 'hello'&lt;/code> 没问题，但一旦涉及到需要用户实时输入或具有复杂终端界面的程序，比如 &lt;code>vim&lt;/code>、&lt;code>ssh&lt;/code>、&lt;code>git rebase -i&lt;/code> 或 &lt;code>top&lt;/code>，通常会失败或者卡住。&lt;/p>
&lt;p>这个限制在实际工作中很不方便。想象一下，如果正在使用 Gemini CLI 进行辅助开发，需要编辑一个配置文件或者进行交互式的 git 操作，却发现必须切换到另一个终端窗口才能完成。这种割裂的体验让 AI 助手难以真正融入到日常的开发流程中。&lt;/p></description></item><item><title>AI驱动的代码安全检测：Google开源Gemini CLI Security扩展</title><link>https://blog.frognew.com/2025/09/gemini-cli-security-extension.html</link><pubDate>Sun, 14 Sep 2025 20:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/09/gemini-cli-security-extension.html</guid><description>&lt;p>Google最近开源了一个安全工具——Gemini CLI Security Extension，这是一个集成在Gemini CLI中的AI驱动的安全扩展，专门用于检测代码变更中的潜在安全漏洞。作为首个将大语言模型能力与实际安全审计相结合的官方工具，它为开发者提供了一种全新的代码安全检测方式。&lt;/p></description></item><item><title>Gemini CLI 扩展系统升级：Gemini CLI v0.4.x 核心变化</title><link>https://blog.frognew.com/2025/09/gemini-cli-extensions-upgrade-v0.4.x.html</link><pubDate>Sun, 14 Sep 2025 19:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/09/gemini-cli-extensions-upgrade-v0.4.x.html</guid><description>&lt;h2 id="核心概念">核心概念&lt;/h2>
&lt;p>Gemini CLI 0.4.x 中的扩展管理系统是一个重新设计的插件架构，它将提示(prompts)、MCP服务器和自定义命令打包在一起，使得扩展更容易安装、共享和管理。这个系统基于 &lt;strong>MCP (Model Context Protocol)&lt;/strong> 协议构建。&lt;/p>
&lt;h2 id="主要更新">主要更新&lt;/h2>
&lt;h3 id="1-扩展存储位置变更">1. 扩展存储位置变更&lt;/h3>
&lt;p>在 v0.4.x 中，扩展存储位置进行了简化：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>仅全局扩展&lt;/strong>: &lt;code>~/.gemini/extensions/&lt;/code>&lt;/li>
&lt;li>不再支持工作区扩展，统一管理在用户主目录&lt;/li>
&lt;/ul>
&lt;h3 id="2-新增扩展管理命令">2. 新增扩展管理命令&lt;/h3>
&lt;p>v0.4.x 引入了完整的扩展管理命令。&lt;/p></description></item><item><title>Gemini CLI的扩展管理系统</title><link>https://blog.frognew.com/2025/09/gemini-cli-extension.html</link><pubDate>Thu, 04 Sep 2025 23:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/09/gemini-cli-extension.html</guid><description>&lt;div class="callout callout-warning">
 &lt;strong>内容已过时：&lt;/strong> 请查看最新文章：&lt;a href="https://blog.frognew.com/2025/09/gemini-cli-extensions.html">Gemini CLI 扩展系统升级：Gemini CLI v0.4.x 核心变化&lt;/a>
&lt;/div>

&lt;h2 id="核心概念">核心概念&lt;/h2>
&lt;p>Gemini CLI 的扩展管理系统是一个强大的插件架构，允许用户通过安装、配置和管理扩展来定制 CLI 的功能。这个系统基于 &lt;strong>MCP (Model Context Protocol)&lt;/strong> 协议构建。&lt;/p>
&lt;h2 id="简单介绍">简单介绍&lt;/h2>
&lt;p>&lt;strong>1. 扩展存储位置&lt;/strong>&lt;/p>
&lt;p>在启动时, Gemini CLI从以下2个位置查找扩展:&lt;/p></description></item><item><title>为Gemini CLI自定义斜杠命令</title><link>https://blog.frognew.com/2025/08/gemini-cli-slash-commands.html</link><pubDate>Fri, 01 Aug 2025 19:00:00 +0800</pubDate><guid>https://blog.frognew.com/2025/08/gemini-cli-slash-commands.html</guid><description>&lt;p>Gemini CLI支持自定义斜杠命令。Gemini CLI 中的自定义命令允许您将常用的提示保存并作为个人快捷方式重复使用。这些命令可以是全局的（在所有项目中可用），也可以是本地的（特定于一个项目）。&lt;/p>
&lt;p>Gemini CLI的斜杠命令可以在本地&lt;code>.toml&lt;/code>文件中定义，也可以通过模型上下文协议 (MCP) 提示定义。&lt;/p></description></item></channel></rss>