1. 项目概述与核心价值
如果你和我一样,日常开发工作流已经深度依赖像 Claude Code 这样的智能编程助手,那你肯定也遇到过它的“能力边界”。Claude 在代码理解、生成和对话上很强,但有时,当我们需要对一个庞大的代码库进行系统性分析、架构评审,或者执行复杂的自动化重构时,你可能会希望有一个更“专注”于代码工程任务的 AI 工具来协同工作。这就是devohmycode/gemini这个技能(Skill)诞生的背景。简单来说,它是一个桥梁,让 Claude Code 能够直接调用 Google 的 Gemini CLI 工具,从而将 Gemini 在代码分析、重构建议和自动化编辑方面的能力,无缝集成到你的 Claude 工作流中。
想象一下这个场景:你刚接手一个遗留项目,代码库结构复杂,技术债不少。你可以在 Claude Code 的对话窗口里直接说:“用 gemini 分析一下这个仓库,给我一份架构改进建议。” 接下来,Claude 会像一个熟练的助手,在后台启动 Gemini CLI,让它对整个项目进行深度扫描,分析依赖关系、代码质量、潜在的安全漏洞,然后生成一份结构化的报告,再由 Claude 提炼出关键点呈现给你。整个过程,你无需离开 Claude 的界面,也无需手动在终端里敲复杂的命令。这不仅仅是工具的组合,更是工作流效率的质变。
这个技能的核心价值在于“1+1>2”的协同效应。Claude 擅长理解你的自然语言意图并进行交互式对话,而 Gemini(通过其 CLI)则擅长执行具体的、批处理式的代码分析与操作任务。通过这个技能,Claude 成为了一个“指挥官”,可以按需调度 Gemini 这个“特种部队”去完成特定的攻坚任务。无论是快速评估一个新依赖的引入风险,还是自动化执行一套代码风格统一化操作,这种集成都能让你在保持现有对话式开发习惯的同时,获得更强大的静态分析与自动化能力。
2. 核心原理与架构设计解析
要理解这个技能是如何工作的,我们需要拆解它的几个核心组件:Claude Code 的技能系统、Gemini CLI 本身,以及两者之间的通信桥梁。
2.1 Claude Code 技能系统机制
Claude Code 的技能(Skill)系统,本质上是一个插件机制。它允许 Claude 在特定上下文中,识别用户的意图,并调用外部工具或执行预定义的操作序列。每个技能通常以一个SKILL.md文件为核心,这个文件不仅描述了技能的功能,更包含了触发条件、参数解析逻辑和要执行的具体命令模板。
当你在 Claude Code 中输入指令时,Claude 会首先进行意图识别。如果它发现你的指令匹配了某个已安装技能的触发模式(例如,包含“use gemini to”这样的关键词),它就会“激活”该技能。激活后,Claude 会读取SKILL.md中的配置,可能会向你询问必要的参数(比如使用哪个 Gemini 模型,或者以何种批准模式运行),然后根据这些参数,动态拼接出一个完整的命令行指令。最后,Claude Code 会在一个子进程中执行这个命令,捕获其输出(stdout 和 stderr),并对输出进行解析、格式化,最后以清晰易懂的方式呈现给你。
注意:技能的执行权限和安全性完全依赖于你的本地环境。Claude Code 本身不会越过你的系统权限去执行命令,它只是你意图的一个执行代理。因此,确保你信任所安装的技能来源至关重要。
2.2 Gemini CLI 的功能定位
Google 的 Gemini CLI 是一个命令行工具,它封装了 Gemini API 的强大能力,并针对代码处理场景做了特别优化。与通过 Web 界面或通用 API 调用 Gemini 不同,CLI 版本设计了许多对开发者友好的特性:
- 项目上下文感知:它可以读取整个目录结构,理解文件之间的关联,而不仅仅是处理单个文件片段。
- 批处理与自动化:支持通过管道(pipe)或文件输入代码,并能输出结构化的建议、差异(diff)甚至直接应用更改。
- 会话(Session)管理:这是
devohmycode/gemini技能中-r latest功能的基础。CLI 可以保存一次交互的上下文,允许你在后续命令中基于之前的对话继续深入,这对于复杂的多轮代码评审非常有用。 - 多种操作模式:例如,
auto_edit模式可能允许 Gemini 在确认后直接修改文件,而default模式可能只提供建议。这为不同风险等级的操作提供了灵活性。
这个技能所做的,就是定义了一套清晰的规则,告诉 Claude Code 如何根据你的自然语言指令,去构造这些复杂的geminiCLI 命令。
2.3 技能桥接的详细工作流
让我们深入一个具体的例子,看看从你输入指令到看到结果,中间发生了什么:
- 意图识别:你输入:“
gemini, 检查一下src/utils/目录下的所有.js文件,看看有没有使用已废弃的 API。” - 技能激活:Claude 识别到“gemini”关键词以及一个分析指令,激活
gemini技能。 - 参数补全:Claude 读取
SKILL.md,发现需要明确“模型”和“批准模式”。它可能会追问:“我将使用 Gemini CLI 进行分析。请确认:1) 使用默认模型(gemini-1.5-pro),还是其他? 2) 运行模式为default(仅建议),auto_edit(自动编辑,需确认),还是yolo(直接应用更改)?” - 命令构建:你回答:“默认模型,
default模式。” Claude 根据技能模板,将你的自然语言转化为精准的 CLI 命令。它可能会构建如下命令:
(注:实际参数名可能不同,此处为示意)gemini -m gemini-1.5-pro -p "检查 src/utils/ 目录下的所有 .js 文件,识别并列出所有使用了已废弃 API 的代码片段,并给出替代方案。" --mode default - 命令执行:Claude Code 在后台启动一个子进程,执行上述命令,并将当前工作目录设置为你的项目根目录,确保
geminiCLI 能正确访问到src/utils/。 - 输出处理与呈现:Claude 捕获 Gemini CLI 返回的大段文本输出。它不会直接“刷屏”给你,而是会分析输出内容,提取关键信息,比如:“Gemini 发现了 5 处使用废弃 API 的情况,主要涉及
旧函数A和旧函数B。最严重的一处在fileX.js:32,建议改用新函数C。这是详细的代码片段和修改建议……” 并以友好的对话格式呈现。 - 后续交互:你可以基于这个结果继续对话,例如:“针对第二处建议,生成一个具体的代码补丁(diff)给我看看。” Claude 可以基于之前的会话上下文,构造一个新的
gemini命令来满足这个请求。
这个流程的关键在于,你始终在用自然语言与 Claude 对话,而所有与 Gemini CLI 交互的复杂性(参数拼接、进程管理、输出解析)都被技能层抽象和隐藏了。这极大地降低了使用高级工具的心理负担和操作成本。
3. 环境准备与详细安装指南
要让这一切跑起来,需要完成两个独立部分的配置:Gemini CLI 本身的安装与配置,以及 Claude Code 技能的安装。
3.1 安装与配置 Gemini CLI
这是整个技能的基石。Gemini CLI 并非 Google 官方广泛分发的工具,它可能来自社区或特定渠道。以下安装步骤基于常见的开发者工具安装模式,请务必以工具实际提供的安装说明为准。
步骤一:获取 Gemini CLI通常,你需要从 GitHub 仓库或指定的发布页面下载可执行文件。例如,你可能需要通过包管理器安装:
# 假设通过 curl 安装(请替换为实际下载链接) curl -L -o gemini-cli.tar.gz https://example.com/path/to/gemini-cli/latest.tar.gz tar -xzf gemini-cli.tar.gz # 将解压出的可执行文件移动到系统 PATH 目录下,如 ~/.local/bin/ mv gemini ~/.local/bin/ # 或者使用包管理器,如 Homebrew (macOS) # brew install gemini-cli步骤二:配置认证Gemini CLI 需要调用 Google AI Studio 的 API,因此你必须配置有效的 API 密钥。
- 获取 API 密钥:访问 Google AI Studio,创建一个项目并生成 API 密钥。妥善保管此密钥。
- 配置 CLI:运行配置命令。通常有以下几种方式:
- 交互式配置:首次运行
gemini --configure或类似命令,它会引导你输入 API 密钥。 - 环境变量:在 shell 配置文件(如
~/.bashrc,~/.zshrc)中设置:export GEMINI_API_KEY="你的_API_密钥" - 配置文件:有些 CLI 会将配置保存在
~/.config/gemini/config.json等位置,你需要手动创建并填写。
- 交互式配置:首次运行
步骤三:验证安装安装并配置后,运行以下命令验证:
gemini --version # 期望输出类似:gemini-cli 1.0.0 gemini -p "Hello, world!" # 期望得到 Gemini 模型的文字回复如果出现“命令未找到”错误,请检查安装路径是否已加入系统的PATH环境变量。如果认证失败,请检查 API 密钥是否正确设置且未过期。
实操心得:网络与配额:由于调用的是云端 API,你的网络环境需要能够稳定访问 Google 的服务。同时,务必关注 Google AI Studio 的免费配额和收费标准,大规模分析代码库可能会消耗大量 token,产生费用。
3.2 安装 Claude Code 的 Gemini 技能
Claude Code 的技能通常存放在一个特定的目录中。devohmycode/gemini这个技能需要你手动放置到正确的位置。
步骤一:定位技能目录Claude Code 的技能目录通常位于:
- macOS/Linux:
~/.claude/skills/ - Windows:
%USERPROFILE%\.claude\skills\(具体路径可能因 Claude Code 版本而异,请以官方文档为准)
如果该目录不存在,你可能需要手动创建。
步骤二:安装技能
- 你需要获取
gemini技能的SKILL.md文件。它可能来自一个 Git 仓库。# 进入技能目录 cd ~/.claude/skills/ # 克隆技能仓库(假设仓库地址) git clone https://github.com/devohmycode/gemini.git # 或者,如果只是单个文件,直接下载 SKILL.md 到 gemini 子目录下 mkdir -p gemini cd gemini # 下载 SKILL.md 文件 - 确保最终的路径结构是:
~/.claude/skills/gemini/SKILL.md。
步骤三:验证技能加载重启 Claude Code(如果它正在运行)。然后,你可以尝试在对话中输入一个简单的触发指令,如“help gemini”或“list skills”,看看 Claude 是否能识别到这个新技能。不同的技能系统可能有不同的验证方式,有些可能需要你在设置中手动启用。
注意事项:技能的安全性:从第三方来源安装技能时,务必检查
SKILL.md文件的内容。因为它定义了 Claude 将要执行的命令,确保其中没有恶意指令。只从可信的、社区验证过的来源获取技能。
4. 核心功能与实战应用详解
安装配置只是开始,真正的价值体现在如何使用它。gemini技能的核心功能围绕几个关键的工作流展开。
4.1 基础分析工作流
这是最常用的场景:让 Gemini 对你的代码进行“体检”。
典型指令:
- “用 gemini 分析当前项目的代码质量。”
- “让 gemini 看看这个
api/service.js文件,有没有性能问题?” - “使用 gemini 评估一下我们引入这个新的 npm 包
lodash-es的风险和收益。”
Claude 内部执行逻辑: 当你发出这类指令,Claude 会构建一个以-p(prompt) 参数为核心的gemini命令。它会将你的自然语言指令,结合当前对话的上下文(比如之前讨论过的文件),转化成一个给 Gemini 的详细提示词。例如,你要求分析“代码质量”,Claude 可能会细化为:“请从可读性、维护性、性能、安全性四个方面分析以下代码仓库,指出具体问题所在文件及行号,并按优先级排序给出改进建议。”
输出示例: Claude 不会直接输出 Gemini 的原始日志,而是会总结: “Gemini 完成了对项目my-app的扫描,主要发现如下:
- 高优先级:在
src/components/DataTable.vue:45-60发现一个可能导致内存泄漏的循环引用。 - 中优先级:有 12 处函数长度超过 50 行,建议拆分为更小的函数以提高可读性,例如
utils/helpers.js中的processData函数。 - 低优先级:建议统一使用
const和let代替var(共 8 处)。 你是否需要我就其中任何一个问题,让 Gemini 生成具体的重构代码?”
这种交互方式让你能快速抓住重点,并决定下一步深入的方向。
4.2 交互式会话与“Resume”工作流
对于复杂的重构或设计讨论,单次分析可能不够。你需要和 Gemini 进行多轮对话,这就是会话(Session)功能的用武之地。
如何使用:
- 启动会话:你的第一次分析请求会自动开启一个会话。Gemini CLI 会在后台保存这个会话的 ID 和上下文。
- 后续追问:你可以基于 Claude 返回的结果,提出更深入的问题。例如,在看到内存泄漏的建议后,你可以说:“关于第一点内存泄漏,让 gemini 给出一个修复这个问题的具体代码 diff。”
- 使用
Resume:如果你在对话中明确说“Resume the last gemini session”或者技能自动检测到需要延续会话,Claude 就会使用gemini -r latest这样的命令。-r(resume) 参数告诉 CLI 加载最近的会话上下文,让你的新提示(-p)是基于之前的所有讨论进行的。这保证了对话的连贯性,Gemini 不会忘记它刚才分析过什么。
实战场景: 假设你在重构一个身份验证模块。
- 第一轮:“用 gemini 分析
auth/目录,找出所有硬编码的密钥和配置。” - 第二轮(在 Claude 返回结果后):“针对它找到的第一个硬编码的 API 地址,让它建议如何从环境变量读取,并修改代码。”
- 第三轮:“很好,现在让它检查整个修改后的
auth/模块,确保没有引入新的安全漏洞,比如密码明文传输。”
整个过程中,你无需反复指定文件路径或重复背景信息,Gemini 通过会话机制记住了完整的上下文。
4.3 自动化编辑与批准模式
这是将分析建议转化为实际行动的关键。Gemini CLI 可能支持不同的“批准模式”,这决定了它如何对待“修改文件”这类操作。技能需要与之配合,向你询问或确认模式。
default(或suggest) 模式:最安全。Gemini 只输出建议、解释和示例代码,不会修改任何文件。你需要手动复制代码去修改。这是初始探索和评审时的最佳选择。auto_edit(或confirm) 模式:平衡模式。Gemini 会生成一个具体的、可应用的补丁(如 unified diff 格式),并请求你的确认。Claude 可能会向你展示这个 diff,并询问:“Gemini 建议进行以下更改以修复内存泄漏,是否批准应用?” 你确认后,Claude 才会执行应用该补丁的命令。这给了你最终审查的机会。yolo(或apply) 模式:自动模式。Gemini 直接应用它认为合适的更改。此模式风险极高,仅适用于你完全信任 Gemini 且项目有完备版本控制(如 Git)的情况下,以便于回滚。技能在启用此模式前应有明确警告。
在技能的使用中,Claude 可能会在你第一次触发编辑类操作时询问:“即将执行文件修改,请选择批准模式:default(仅建议),auto_edit(生成 diff 并确认), 或yolo(直接应用)?” 你的选择会被记住,用于后续的同会话操作。
5. 高级技巧与集成策略
掌握了基本操作后,以下技巧能让你更好地将gemini技能融入日常开发,发挥最大效力。
5.1 结合版本控制(Git)的安全操作
在任何自动化编辑工具面前,版本控制是你的安全网。强烈建议在执行任何可能修改文件的操作前,确保工作目录是干净的(git status无未提交更改)。
推荐工作流:
- 创建特性分支:在开始大规模重构前,
git checkout -b refactor/auth-module-with-gemini。 - 使用
default模式进行初步分析:让 Gemini 给出全面建议,评估工作量。 - 对具体更改使用
auto_edit模式:逐项或分批应用更改,每次应用前仔细审查 Claude 呈现的 diff。 - 频繁提交:每完成一个逻辑完整的修改,就进行一次提交,信息清晰,例如:
git commit -m "refactor(auth): replace hardcoded API endpoint with env var (suggested by Gemini)"。 - 回滚:如果某个修改引入了问题,利用 Git 可以轻松回退:
git checkout -- <file>或git revert <commit>。
这样,即使yolo模式出了问题,你也可以瞬间回到安全状态。
5.2 编写精准的提示词(Prompt)
虽然 Claude 会帮你润色指令,但直接给 Gemini CLI 的初始提示词质量决定了分析结果的深度和相关性。你可以通过 Claude 向 Gemini 传递更精准的提示。
- 模糊指令:“改进这个代码。”
- 精准指令:“分析
function calculateDiscount的算法复杂度。当前它使用了嵌套循环。请提供一个保持功能不变但时间复杂度更优的替代实现,并解释其原理。如果涉及排序或哈希表,请说明在什么数据规模下新方案更优。”
在向 Claude 提出请求时,尽量像对待一个人类代码评审员一样,提供清晰的背景、具体的文件和明确的目标。例如:“我正在优化首页加载速度。用 gemini 分析pages/index.js和components/HeroCarousel.vue,重点检查:1) 图片懒加载是否实现正确;2) 有无未使用的 JavaScript 依赖;3) 首屏渲染的阻塞资源。请按优先级列出发现的问题。”
5.3 与其他开发工具链集成
gemini技能可以成为你现有工具链的智能增强层。
- 与 Linter/Formatter 结合:ESLint、Prettier 能保证代码风格,但 Gemini 能告诉你“为什么”这条规则重要,或者如何重构以避免触发某条复杂的规则。你可以在 CI/CD 流程中设想:先运行 Gemini 进行架构和逻辑层面的深度分析,再运行传统的 Lint 和 Test。
- 与测试生成结合:在让 Gemini 重构一个函数后,可以立即让它“为这个新函数生成对应的单元测试用例,覆盖边界条件”。
- 与文档生成结合:让 Gemini 分析一个复杂的模块,然后指令它“根据此模块的代码和上下文,为它生成一份清晰的 API 文档草稿”。
6. 常见问题排查与优化经验
在实际使用中,你可能会遇到一些问题。以下是一些常见情况的排查思路和我积累的经验。
6.1 安装与配置类问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
Claude 无法识别gemini技能 | 1. 技能文件路径不正确。 2. 技能文件格式错误。 3. Claude Code 未加载技能目录。 | 1. 确认~/.claude/skills/gemini/SKILL.md存在且可读。2. 检查 SKILL.md语法,确保是有效的技能定义文件。3. 重启 Claude Code,或查看其设置中是否有“重新加载技能”的选项。 |
运行技能时报错command not found: gemini | Gemini CLI 未安装或不在系统 PATH 中。 | 1. 在终端直接运行gemini --version确认 CLI 本身是否可用。2. 如果终端可用而 Claude 不可用,可能是 Claude Code 运行在特定的 shell 或环境中,PATH 变量不同。尝试在 Claude 的技能命令中使用绝对路径(需修改 SKILL.md)。 |
Gemini CLI 报认证错误 (如Invalid API Key) | 1. API 密钥未设置或错误。 2. 密钥所在项目未启用 Gemini API。 3. 网络问题导致无法访问 Google API。 | 1. 运行gemini --configure重新配置,或检查环境变量GEMINI_API_KEY。2. 前往 Google AI Studio 确认 API 已启用且密钥有效。 3. 检查网络连接和代理设置。 |
6.2 运行时与性能问题
| 问题现象 | 可能原因 | 解决方案与优化建议 |
|---|---|---|
| 分析大型仓库时超时或响应缓慢 | 1. Gemini 处理大量 token 耗时久。 2. 网络延迟。 3. Claude 处理长输出超时。 | 1.分而治之:不要一次性分析整个仓库。先让 Gemini 分析目录结构,然后针对特定子目录或文件类型进行深入分析。 2.使用更具体的提示:用“分析 src/core/目录下的设计模式应用情况”代替“分析整个项目”。3. 关注 API 的 token 消耗和费用。 |
| Gemini 的分析建议过于笼统或不准确 | 1. 提示词不够具体。 2. 选择的模型不适合代码任务。 3. 代码上下文提供不足。 | 1. 提供更详细的背景、约束条件和期望的输出格式。 2. 如果 CLI 支持,尝试指定更专业的代码模型(如 gemini-1.5-pro可能比基础版更好)。3. 确保分析的代码文件是完整的,并且 Gemini 能访问到相关的依赖或配置文件。 |
-r latest恢复会话时上下文丢失 | 1. Gemini CLI 的会话存储机制问题。 2. 在不同终端或进程间调用,会话不共享。 | 1. 确认 Gemini CLI 的会话功能是否正常工作。可以尝试在终端手动测试会话流程。 2. 确保 Claude Code 的整个交互过程是在同一个“环境”中进行的,避免中间重启了 CLI 后台服务。 |
6.3 安全与最佳实践提醒
- 代码隐私:当你使用此技能时,你的代码内容会通过 Gemini CLI 发送到 Google 的服务器进行处理。切勿使用此技能处理敏感、涉密或未脱敏的个人身份信息(PII)代码。对于公司项目,请务必遵守内部的数据安全和合规政策。
- 双重审查:无论 Gemini 的建议看起来多么完美,尤其是涉及核心逻辑、安全性和资金计算的修改,必须进行人工审查。将 AI 视为一个强大的助手和灵感来源,而非绝对权威。
- 版本控制是生命线:如前所述,在执行任何自动化编辑前,提交当前状态。考虑使用
git stash临时保存未完成的工作,在一个干净的分支上进行 Gemini 辅助的重构。 - 成本意识:大规模、频繁的分析会消耗 API token,产生费用。在开发脚本或自动化流程时,注意控制调用频率和分析范围。
将devohmycode/gemini技能集成到你的 Claude Code 工作流中,本质上是在为你配备一个随时待命的、不知疲倦的代码专家搭档。它不能替代你的思考和决策,但能极大地扩展你的认知边界和处理效率。从简单的代码异味检测到复杂的系统重构规划,尝试在不同的场景下使用它,你会逐渐找到人与 AI 协作的最佳节奏。我开始也只是用它来查查语法建议,现在一些繁琐的重复性代码转换和模块初始化工作,都会先让它打个样,效率提升非常明显。记住,好的工具是用来延伸你的能力,而不是取代你的判断。