1. 项目概述:当Claude Code遇上Gemini CLI
如果你和我一样,日常开发中离不开AI助手,那你肯定对Claude Code不陌生。它就像一个能直接理解你代码意图的“副驾驶”,帮你写代码、修Bug、重构项目,效率提升不是一点半点。但有时候,面对复杂的代码库分析或者需要深度代码理解的任务,你可能会想:要是能把Google的Gemini模型也拉进来一起干活,取各家之长,那该多好?
今天要聊的这个项目,devohmycode/gemini,就精准地解决了这个痛点。它本质上是一个为Claude Code设计的“技能”(Skill),让Claude Code能够直接调用安装在本地环境中的Gemini命令行工具。这样一来,你就能在Claude Code的对话界面里,无缝地指挥Gemini去执行代码分析、重构建议、安全审查等一系列自动化工作流。想象一下,你只需要在Claude Code里说一句“用gemini帮我看看这个仓库有什么可以优化的地方”,Claude就会在后台替你调用Gemini CLI,执行分析,然后把结果整理好、总结好再呈现给你。这不再是简单的模型切换,而是构建了一个以Claude Code为指挥中心,Gemini为专业分析引擎的协同工作流。
这个技能特别适合那些已经在使用Claude Code进行日常开发,同时又希望引入Gemini在代码理解、多语言支持或特定领域分析方面能力的开发者。它不需要你离开熟悉的IDE或终端,也不需要你在不同工具的界面间来回切换。所有操作都集成在你和Claude Code的对话中,保持了开发流程的连贯性和高效性。接下来,我们就深入拆解这个技能的设计思路、如何把它配置得服服帖帖,以及在实际使用中如何避开那些我踩过的坑。
2. 核心设计与工作流解析
2.1 技能架构:Claude Code的“外挂”模块
要理解这个项目,首先得明白Claude Code的“技能”机制。Claude Code本身是一个强大的AI编码助手,但它并非无所不能。它的“技能”系统,允许社区开发者为其扩展新的能力。你可以把技能看作是一个个预设的、可被Claude识别和触发的“插件”或“宏命令”。当Claude Code检测到你的指令匹配了某个技能的触发模式时,它就会激活这个技能,并按照技能定义好的逻辑去执行一系列操作——在这个项目里,操作就是调用外部的gemini命令行工具。
devohmycode/gemini这个技能的核心文件是一个SKILL.md文档。这个文档遵循特定的格式,定义了技能的元信息(如名称、描述)、触发关键词、所需的参数(比如使用哪个Gemini模型、采用何种审批模式),以及最终要执行的命令行模板。Claude Code在运行时读取这个文档,理解“当用户提到‘gemini’并附带某些指令时,我应该去执行gemini -p “用户指令…”这样的命令”。这种设计非常巧妙,它将复杂的模型调用和结果处理封装成了一个简单的、可对话的接口。
2.2 协同工作流:对话驱动自动化
这个技能实现的工作流,是一种典型的“对话驱动自动化”。其核心流程可以分解为以下几个步骤:
- 意图识别与技能触发:你在Claude Code的对话中输入指令,例如“用gemini分析一下
src/utils/目录下的代码风格”。Claude Code会解析你的自然语言,识别出关键词“gemini”以及分析代码的意图,从而触发gemini技能。 - 参数补全与交互确认:技能被触发后,并不会立刻执行。Claude Code会检查你的指令是否完整。例如,如果你没有指定使用Gemini的哪个模型(如
gemini-1.5-pro或gemini-1.5-flash),或者没有明确本次执行的“审批模式”,Claude会主动向你提问,进行交互式补全。这是确保操作可控、符合预期的重要一环。 - 命令行构造与执行:在获取所有必要参数后,Claude Code会根据
SKILL.md中的模板,将你的自然语言指令、选择的模型、模式等参数,拼接成一个具体的、可执行的geminiCLI命令。 - 子进程调用与结果捕获:Claude Code会在后台启动一个子进程,运行上一步构造好的命令行。这个进程会与本地安装的
geminiCLI交互,Gemini CLI再与Google的API通信,完成实际的AI分析任务。 - 结果解析与摘要呈现:
geminiCLI执行完毕后,会将原始的、可能很冗长的输出返回给Claude Code。此时,Claude Code的另一个核心能力就体现出来了:它会阅读并理解这段输出,然后为你生成一个简洁的摘要,提炼出关键建议、发现的问题等,并以对话的形式呈现给你。你无需自己去阅读大段的AI原始输出。
这个闭环流程,将AI模型的能力、命令行工具的灵活性以及对话交互的便捷性完美结合。你享受的是自然语言交互的舒适,背后则是精准、自动化的工具链在执行。
2.3 三种审批模式:平衡自动化与可控性
项目文档中提到了三种审批模式:default,auto_edit,yolo。这是整个技能设计中关于“风险控制”和“自动化程度”的关键配置,理解它们至关重要。
default(默认模式):这是最谨慎的模式。当Claude Code通过技能调用Gemini生成任何建议(尤其是涉及代码修改的建议)后,它会将建议展示给你,并等待你的明确批准(例如,回复“是”或“应用这个更改”)后,才会执行实际的写文件操作。这个模式适合对代码库进行探索性分析或初次审查,你需要完全掌控每一次变更。auto_edit(自动编辑模式):在这个模式下,Claude Code的自主性更高。对于Gemini返回的一些明确的、低风险的代码改进建议(比如格式化、简单的语法修正),Claude可能会在向你简要说明后自动应用。但对于重大的重构或逻辑修改,它仍然会征求你的同意。这个模式在安全性和效率之间取得了较好的平衡,是我个人在日常开发中最常使用的模式。yolo模式:这个模式的名字很有趣(You Only Live Once,带有一种“不管了”的意味)。在此模式下,Claude Code会获得最大的权限,它可能会根据Gemini的分析结果,直接执行一系列代码更改,而事前的确认会减少。强烈建议仅在个人项目、临时性脚本或者你已经非常熟悉且备份完备的代码库中使用此模式。在团队项目或核心业务代码上使用yolo模式,无异于蒙眼走钢丝。
注意:模式的选择并非一成不变。你可以在每次发起请求时通过指令指定(如“用gemini以yolo模式重构这个函数”),也可以在技能的配置文件中设置一个默认模式。理解并正确选择模式,是安全高效使用该技能的第一课。
3. 环境准备与安装配置详解
3.1 前置条件:夯实基础
在安装这个技能之前,有两个硬性前提必须满足,缺一不可。很多初次配置失败的问题,都源于前置条件不达标。
第一,安装并配置好Gemini CLI。这不是指Python的google-generativeai库,而是Google官方提供的命令行工具gemini。你需要按照Google的官方文档进行安装和认证。通常的步骤包括:
- 访问Google AI Studio,创建API密钥。
- 在终端使用类似
curl或pip的命令安装CLI工具(具体命令请以当前官方文档为准)。 - 运行
gemini auth,按照提示完成API密钥的配置和认证。 - 验证安装:在终端执行
gemini --version。如果正确显示版本号(如gemini 0.1.0),说明CLI工具本身已就绪。再执行一个简单命令如gemini -p “Hello”,确保它能正常调用API并返回响应。如果这一步报错(如认证失败、网络问题),必须彻底解决,否则技能无法工作。
第二,确保Claude Code已正确安装并运行。你需要在你的IDE(如VS Code、Cursor)或独立应用中安装并登录Claude Code。确保你能正常与Claude对话,进行基础的代码问答和编辑。
3.2 技能安装:放置到正确的位置
Claude Code的技能通常存放在一个固定的目录下。对于大多数系统,这个路径是~/.claude/skills/(即用户主目录下的.claude/skills文件夹)。devohmycode/gemini项目本身可能是一个GitHub仓库,你需要将其中的技能定义文件(通常是SKILL.md)获取到本地。
安装步骤并不复杂,但路径必须准确:
- 在终端中,确保技能目录存在:
mkdir -p ~/.claude/skills - 进入技能目录:
cd ~/.claude/skills - 为gemini技能创建一个子目录:
mkdir -p gemini - 将项目中的
SKILL.md文件复制到~/.claude/skills/gemini/目录下。你可以通过克隆仓库或直接下载文件的方式完成。 - 最终,确保文件路径为:
~/.claude/skills/gemini/SKILL.md。
完成以上步骤后,理论上Claude Code在下次启动或重新加载技能时,就能识别到这个新技能了。有些Claude Code版本可能需要重启IDE或执行一个重载技能的命令。
3.3 路径与权限排查
如果安装后技能不生效,请按以下顺序排查:
- 路径检查:再次确认
SKILL.md文件是否在~/.claude/skills/gemini/目录下,并且文件名必须是SKILL.md(全大写)。 - 内容检查:用文本编辑器打开
SKILL.md,确保其内容完整,且格式符合Claude Code的技能定义规范(通常包含# SKILL标题、description、trigger等部分)。 - CLI可用性检查:在同一个终端环境中,手动运行
gemini --version。确保Claude Code进程运行的环境(尤其是IDE集成的终端)与手动测试的环境具有相同的PATH变量和用户权限。有时IDE会从不同的shell配置文件启动,导致找不到gemini命令。一个简单的测试方法是,在Claude Code的对话框中,尝试让它执行一个简单的系统命令,比如ls ~,看它能否正确响应,这可以验证其执行外部命令的基本能力。 - 技能列表检查:有些Claude Code界面提供了查看已加载技能的选项或命令(例如,在对话中输入“/skills”或“list skills”),检查
gemini是否在列表中。
4. 核心使用场景与实操指南
4.1 基础分析:让Gemini成为你的代码评审员
最基本的用法,就是让Gemini对你的代码库进行静态分析。这比单纯让Claude Code看当前文件更强大,因为Gemini CLI可以接受整个目录或仓库作为上下文。
实操示例:你在Claude Code中这样说:
“使用gemini,以default模式,分析当前项目根目录下的代码结构,并指出可能存在性能瓶颈的函数。”
Claude Code会识别出技能,并可能与你确认使用哪个Gemini模型(如果你没指定)。确认后,它会在后台执行类似如下的命令:
gemini -m gemini-1.5-pro -p "Analyze the code structure in the current directory (项目根目录). Focus on identifying functions that may have performance bottlenecks, such as nested loops, inefficient algorithms, or excessive I/O operations. Provide the file path and function name for each finding, along with a brief explanation and a suggested optimization approach."执行完毕后,Claude Code不会把Gemini生硬的原始输出直接丢给你。它会像一位助理一样,整理出报告:“Gemini分析了你的项目,发现了3个潜在的性能问题:1. 在src/processor.js的dataTransform函数中,存在一个O(n²)的循环,建议改用Map数据结构… 你看需要我详细解释哪一个,或者直接对某个问题生成修复代码吗?”
这种用法非常适合在提交代码前进行快速自查,或者接手一个陌生项目时快速了解代码质量。
4.2 交互式会话与断点续传
这是该技能一个非常强大的特性。Gemini CLI支持“会话”模式,你可以进行多轮对话,上下文会得以保留。这个技能也暴露了这个能力。
实操示例:第一轮:
“用gemini开启一个会话,分析
config.yaml文件的语法和配置项。”
Claude Code调用Gemini执行分析。你得到回复后,可以基于这个上下文继续深入:
“在上一个gemini会话的基础上,根据这个配置,为
database部分生成一个对应的环境变量.env.example文件模板。”
此时,Claude Code会使用gemini -r latest或类似的命令,连接到上一个会话,确保Gemini理解你指的是刚才分析的config.yaml。这样,你就不需要在第二轮提示中重新粘贴文件内容,对话连贯性极强。
更强大的是“断点续传”。如果你在处理一个复杂任务时中途关闭了Claude Code,下次打开后,你可以说:
“恢复我上一次的gemini会话,继续讨论如何优化数据库连接池的设置。”
Claude Code会找到最近的会话ID并恢复。这个功能对于进行长时间的、复杂的代码重构或设计讨论至关重要,保证了工作流的连续性。
4.3 自动化重构与安全扫描
结合auto_edit或谨慎使用yolo模式,你可以实现一定程度的自动化代码操作。
场景一:批量代码风格修复
“用gemini,以auto_edit模式,检查当前打开的所有Python文件,将旧的
%格式化字符串全部转换为f-string格式。”
Claude Code会指挥Gemini识别出所有需要修改的地方,并在auto_edit模式下,自动应用那些它认为安全、直接的更改(比如简单的字符串替换),对于无法确定的情况则会向你请示。这比手动查找替换要智能得多,因为它能理解上下文。
场景二:依赖安全检查
“用gemini分析项目根目录的
package.json和pipfile,列出所有已知有高危CVE漏洞的依赖项及其升级建议。”
Gemini在知识截止日期内的安全信息可以很好地辅助完成这个任务。Claude Code会汇总出一个漏洞列表和行动建议,你可以据此决定升级哪些依赖。
4.4 复杂工作流串联
这个技能真正的威力在于,你可以将它作为更复杂自动化脚本的一部分。虽然技能本身在Claude Code内触发,但你可以构思这样的工作流:
- 本地Git Hook(如
pre-commit)检测到代码变更。 - Hook脚本自动调用一个程序,该程序通过模拟或调用Claude Code的API(如果未来提供),触发
gemini技能对暂存区的代码进行分析。 - 分析结果被解析,如果发现严重问题(如安全漏洞、语法错误),则阻止提交并报告。
这需要额外的脚本开发,但思路展示了将AI代码审查深度集成到开发流水线中的可能性。
5. 高级配置与性能调优
5.1 模型选择策略
Gemini提供了不同规模和能力的模型,如gemini-1.5-pro(能力更强)、gemini-1.5-flash(速度更快、成本更低)。在技能使用中,你可以通过指令指定模型。
- 日常对话与快速分析:首选
gemini-1.5-flash。它的响应速度极快,对于代码补全、简单重构建议、语法检查等任务完全够用,能极大提升交互流畅度。 - 复杂逻辑分析与架构设计:当需要深入理解复杂算法、进行系统架构评估或处理非常长的代码上下文时,切换到
gemini-1.5-pro。它的推理能力更强,能给出更深刻、更准确的建议。 - 多模态需求:如果你的分析涉及图表、架构图等图像内容,需要确保你选择的模型支持多模态输入(目前Gemini 1.5系列支持)。在提示词中明确说明“请分析这张架构图并给出代码实现建议”。
你可以在SKILL.md文件中设置一个默认模型,也可以在每次请求时临时指定,例如:“用gemini-1.5-pro模型分析这段代码”。
5.2 提示词工程技巧
技能的本质是将你的自然语言指令转化为gemini -p “…”中的提示词。因此,你给Claude Code的指令质量,直接决定了Gemini的表现。
- 明确上下文范围:始终明确指出你要分析的目标是什么。是“当前打开的文件”?是“
src/components/目录下所有.vue文件”?还是“整个Git仓库”?模糊的指令会导致Gemini抓取错误的上下文。 - 指定输出格式:如果你希望结果易于处理,可以要求特定格式。例如:“…并用Markdown表格列出,包含问题描述、文件位置、严重等级和建议修复。”
- 分步指令:对于复杂任务,拆分成多个清晰的步骤告诉Claude Code,它会相应地构造多轮交互或复杂的提示词。例如:“第一步,用gemini找出所有日志打印不规范的地方;第二步,针对每个问题生成符合公司规范的替换代码。”
- 利用系统角色:虽然技能本身可能已经预设了一些系统提示,但你可以在指令中强化Gemini的角色。例如:“请你扮演一个资深的安全审计专家,用gemini对我的代码进行白盒扫描…”
5.3 网络与成本考量
由于Gemini CLI需要调用Google的API,因此:
- 网络稳定性:确保你的开发环境能够稳定访问Google的API服务。网络波动可能导致CLI调用超时或失败,Claude Code会返回执行错误。
- API成本与配额:Gemini API的使用会产生费用,并有速率限制。频繁、大量地使用该技能进行代码分析,尤其是使用
gemini-1.5-pro这类大模型,会快速消耗API配额并产生费用。建议:- 在开发阶段,多用
gemini-1.5-flash进行快速迭代。 - 对于大型仓库,不要一次性要求“分析整个仓库”,而是分模块、分目录进行。
- 关注Google Cloud控制台中的API使用量和配额情况,设置预算警报。
- 在开发阶段,多用
6. 常见问题、故障排查与实战心得
6.1 安装与初始化问题
问题1:Claude Code提示“未找到gemini命令”或“技能执行失败”。
- 排查:这是最常见的问题。99%的原因在于环境变量
PATH。 - 解决:
- 在系统终端(如iTerm, Terminal, Bash)中,运行
which gemini,记下路径(例如/usr/local/bin/gemini)。 - 确认你的IDE或Claude Code应用是从哪里启动的。VS Code/Cursor有时会从登录shell(加载了完整配置)启动,有时不会。尝试在IDE的集成终端里也运行
which gemini,看路径是否一致。 - 终极方案:在技能文件
SKILL.md中(如果其配置允许),或者在你启动IDE的脚本中,显式地指定gemini的绝对路径,而不是依赖PATH。例如,将命令模板从gemini -p …改为/usr/local/bin/gemini -p …。
- 在系统终端(如iTerm, Terminal, Bash)中,运行
问题2:技能已安装,但Claude Code完全不响应“gemini”关键词。
- 排查:技能文件格式错误或位置不对。
- 解决:
- 检查
~/.claude/skills/gemini/SKILL.md的文件名和路径,确保大小写正确。 - 检查
SKILL.md文件内容,开头必须有# SKILL标题,并且内部有正确的trigger字段定义(例如trigger: “gemini”)。 - 尝试重启你的IDE或Claude Code应用,以重新加载技能目录。
- 检查
6.2 运行时与功能问题
问题3:Gemini分析结果过于笼统,没有切中要害。
- 原因:提示词不够具体。AI需要明确的指令。
- 解决:使用更精确的提示词。不要只说“分析代码”,要说“分析
UserService类的createUser方法,重点关注异常处理的完备性、输入验证的逻辑以及数据库事务的边界”。给你的指令增加约束条件和焦点。
问题4:在auto_edit模式下,Claude做出了我不希望的更改。
- 原因:
auto_edit的边界有时判断不准。 - 解决:
- 立即使用版本控制(Git)回退更改。这是铁律:在使用任何自动化编辑工具前,确保代码已提交或暂存。
- 后续使用中,对于重要模块,暂时切换回
default模式,手动审核每一个建议。 - 在指令中增加限制,例如:“以
auto_edit模式修复明显的拼写错误和格式化问题,但任何涉及逻辑修改的建议都必须先向我确认。”
问题5:处理大型项目时,Gemini响应慢或超时。
- 原因:Gemini模型有上下文长度限制,发送大量代码会导致处理时间长甚至失败。
- 解决:
- 分而治之:不要一次性分析整个项目。按模块、按目录进行分析。
- 使用
.gitignore精神:在指令中明确排除不需要分析的目录,如node_modules,dist,.build等。 - 先摘要后深入:先让Gemini分析项目结构(如
tree命令的输出或README),找出你关心的核心模块,再针对性地深入。
6.3 安全与最佳实践心得
- 密钥安全是第一生命线:
geminiCLI的认证密钥通常存储在本地配置文件(如~/.config/gemini/config.json)中。确保该文件的权限设置正确(如600),避免泄露。不要在共享环境或不确定安全的机器上配置此技能。 - 永远与版本控制同行:这是使用任何自动化代码修改工具的黄金法则。在执行任何可能修改文件的操作(尤其是
auto_edit和yolo模式)前,确保当前更改已通过git add & commit提交,或者至少已git stash暂存。这样,一旦出现意外,你可以瞬间回退到干净状态。 - 审查优于盲从:无论AI的建议看起来多么合理,它始终是一个统计模型。对于关键业务逻辑、算法核心、安全相关的代码,一定要将AI的建议作为参考,亲自进行逻辑审查和测试。不要将决策权完全交给AI。
- 成本意识:养成查看API使用量的习惯。将非必要的、探索性的对话使用
gemini-1.5-flash模型。对于需要保存的重要分析结论,及时让Claude Code总结并保存到笔记或文档中,避免重复分析相同内容产生不必要的费用。 - 组合使用,而非替代:
devohmycode/gemini技能是一个强大的增强工具,但它不应完全替代你原有的代码审查流程、单元测试和静态分析工具(如ESLint, SonarQube)。应该将它视为一个提供“第二意见”、发现潜在问题、辅助复杂重构的“专家顾问”,将其嵌入到你现有的、可靠的工作流之中。