Gemini CLI发展到v0.9.x后,继续跟进一下其扩展系统的更新。
扩展系统概述
Gemini CLI 的扩展系统将提示(prompts)、MCP 服务器和自定义命令打包成熟悉且用户友好的格式。通过扩展,可以扩展 Gemini CLI 的能力,并与他人分享这些能力。扩展系统被设计为易于安装和分享。
想要浏览现有的扩展示例,可以访问 Gemini CLI extensions,那里汇集了各种实用的扩展。
扩展开发工具
Gemini CLI版本提供了一系列命令来简化扩展开发流程。
创建样板扩展
Gemini CLI 提供了几个示例扩展供开发者参考,包括:
context- 上下文管理扩展custom-commands- 自定义命令扩展exclude-tools- 工具排除扩展mcp-server- MCP 服务器扩展
这些示例可以在 GitHub 仓库 中查看。
使用 gemini extensions new 命令可以快速将这些示例复制到你的开发目录中:
gemini extensions new path/to/directory custom-commands这个命令会将指定类型的示例扩展复制到目标目录,提供一个开箱即用的起点。
链接本地扩展
开发扩展时,频繁运行 gemini extensions update 来测试修改会很繁琐。gemini extensions link 命令解决了这个问题。
该命令会在扩展安装目录和开发路径之间创建符号链接:
gemini extensions link path/to/directory这样一来,对扩展代码的任何修改都会立即生效,无需每次都重新安装或更新扩展,大大提高了开发效率。
快速上手指南
下面通过一个完整的示例,演示如何创建第一个 Gemini CLI 扩展。
前置要求
开始之前,需要确保:
- 已安装 Gemini CLI
- 具备 Node.js 和 TypeScript 的基础知识
步骤 1:创建新扩展
使用模板命令快速创建扩展脚手架:
gemini extensions new my-first-extension mcp-server这个命令会生成包含以下文件的目录结构:
example.ts- MCP 服务器源代码gemini-extension.json- 扩展清单文件package.json- 项目依赖配置tsconfig.json- TypeScript 编译配置
my-first-extension
├── example.ts
├── gemini-extension.json
├── package.json
└── tsconfig.json步骤 2:理解扩展文件
gemini-extension.json:
这是扩展的清单文件,告诉 Gemini CLI 如何加载扩展。关键字段包括:
- name: 扩展的唯一标识符
- version: 扩展版本号
- mcpServers: 定义模型上下文协议(MCP)服务器,用于暴露工具
{
"name": "mcp-server-example",
"version": "1.0.0",
"mcpServers": {
"nodeServer": {
"command": "node",
"args": ["${extensionPath}${/}dist${/}example.js"],
"cwd": "${extensionPath}"
}
}
}配置文件使用 ${extensionPath} 等变量进行路径解析,确保扩展在不同环境下的可移植性。
example.ts:
包含使用 @modelcontextprotocol/sdk 实现的 MCP 服务器。模板中包含一个示例工具 fetch_posts,它从公共 API 获取数据并返回格式化的结果。
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({
name: 'prompt-server',
version: '1.0.0',
});
server.registerTool(
'fetch_posts',
{
description: 'Fetches a list of posts from a public API.',
inputSchema: z.object({}).shape,
},
async () => {
const apiResponse = await fetch(
'https://jsonplaceholder.typicode.com/posts',
);
const posts = await apiResponse.json();
const response = { posts: posts.slice(0, 5) };
return {
content: [
{
type: 'text',
text: JSON.stringify(response),
},
],
};
},
);
server.registerPrompt(
'poem-writer',
{
title: 'Poem Writer',
description: 'Write a nice haiku',
argsSchema: { title: z.string(), mood: z.string().optional() },
},
({ title, mood }) => ({
messages: [
{
role: 'user',
content: {
type: 'text',
text: `Write a haiku${mood ? ` with the mood ${mood}` : ''} called ${title}. Note that a haiku is 5 syllables followed by 7 syllables followed by 5 syllables `,
},
},
],
}),
);
const transport = new StdioServerTransport();
await server.connect(transport);步骤 3:构建和链接扩展
准备扩展需要三个步骤:
# 1. 安装依赖
npm install
# 2. 编译 TypeScript
npm run build # 输出到 dist/example.js
# 3. 链接用于开发
gemini extensions link .link 命令创建符号引用,使得代码修改能够立即生效,无需重新安装。
步骤 4:添加自定义命令
自定义命令可以为复杂的提示创建快捷方式。首先,建立命令目录结构:
mkdir -p commands/fs然后创建 commands/fs/grep-code.toml 配置文件:
prompt = """
Please summarize the findings for the pattern `{{args}}`.
Search Results:
!{grep -r {{args}} .}
"""这个命令的工作原理是:接受一个参数,使用它运行 grep shell 命令,然后将结果通过管道传递给提示进行总结。
重启 CLI 后,就可以通过 /fs:grep-code "some pattern" 调用这个命令。
步骤 5:添加持久化上下文
通过创建 GEMINI.md 文件,可以为模型提供持久化的指导信息。这个文件会在扩展激活的所有会话中持续提供上下文。
在 gemini-extension.json 清单文件中添加配置:
"contextFileName": "GEMINI.md"然后在扩展根目录创建 GEMINI.md 文件,写入你希望模型始终了解的上下文信息。模型将在所有使用该扩展的会话中参考这些内容。
扩展发布指南
完成扩展开发后,需要选择合适的方式发布和分发扩展。Gemini CLI 提供了两种主要的发布方法。
方法 1:Git 仓库发布
这是更简单、更灵活的方式。用户可以通过以下命令安装扩展:
gemini extensions install <your-repo-uri>用户还可以通过 --ref=<some-ref> 参数指定特定的版本或分支,默认使用仓库的默认分支。当依赖的 ref 有新的提交推送时,用户会收到更新提示。
Git 仓库最佳实践
建议将默认分支作为稳定发布渠道。推荐的工作流程包含三个分支:
dev- 活跃开发分支,用于日常开发preview- 发布候选分支,用于预发布测试stable(或默认分支)- 生产发布分支,用于稳定版本
这种结构允许用户默认安装稳定版本,同时也能让希望使用新功能的用户通过指定不同的 ref 来安装其他版本。
方法 2:GitHub Releases 发布
这种方法通过将扩展打包成单个归档文件进行分发,提供了更快的初始安装速度,避免了 git clone 的开销。
系统会自动检测最新的标记发布(marked release),用户也可以通过 --pre-release 标志选择安装预发布版本。
GitHub Releases 配置要求
归档文件必须遵循特定的命名约定以支持平台检测:
- 平台和架构特定:
{platform}.{arch}.{name}.{extension} - 平台特定:
{platform}.{name}.{extension} - 通用回退:当只有一个资源文件时使用
支持的平台包括:
darwin- macOSlinux- Linuxwin32- Windows
支持的架构:
x64- 64位 x86 架构arm64- 64位 ARM 架构
所有归档文件都必须在根目录包含 gemini-extension.json 文件,符合标准的扩展结构要求。
示例归档命名:
linux.x64.my-extension.tar.gz
darwin.arm64.my-extension.tar.gz
win32.x64.my-extension.zip总结
通过以上内容,学习了创建 Gemini CLI 扩展的完整流程,包括:
- 使用自定义工具(MCP 服务器)
- 创建命令快捷方式
- 提供上下文指导
- 发布和分享扩展
这些能力让你可以扩展 Gemini CLI 的功能,并与社区分享你的创新。