Vol 46.
Gemini CLI 一夜極限測評
以及我用 Claude Code 修復(fù)了 Gemini Cli
作者:南川 · 2025-06-28
#開源 #Claude-Code ##Gemini-Cli ##Vibe-Coding
如果說 Claude Code 是 AI 編程助手界的 iPhone——精致、閉源、定義標(biāo)準(zhǔn),那么 Gemini CLI 就是 Android——開源、普惠、后發(fā)制人。
歷史告訴我們,這兩種模式都有其存在的價值,而最終的贏家是整個生態(tài)和用戶。
1
緣起:從群內(nèi)消息到深夜折騰
下午 4 點半,我們 Claude Code 交流群里突然有人扔出一個鏈接:"兄弟們,Google 剛開源了 Gemini CLI!"
當(dāng)時我正在忙別的項目,只是瞄了一眼就繼續(xù)干活了。直到晚上 10 點多,朋友圈和各種 AI 自媒體開始瘋狂刷屏,我才意識到——這事兒可能真的大了。
作為一個重度 Claude Code 用戶,我當(dāng)時就來了精神——woc,Google 終于下場了?晚上 10 點半,關(guān)掉手頭的工作,開始了這場馬拉松式的測評。
二話不說,直接npm install -g @google-gemini/cli
,開始了我這五小時的魔幻之旅。
1
第一印象:這也太拉了吧?
22:30 - UI 都能做錯的 Google?
剛裝好興沖沖地運行gemini
,結(jié)果差點把我眼睛閃瞎——在我的暗色主題下,選了ansi light
、google code light
這些主題,文字內(nèi)容根本看不清!
啊這... Google 的產(chǎn)品團隊是不是都不用暗色模式的?這種低級錯誤,像極了我第一次做前端時忘記測試深色模式的樣子。
22:45 - 它... 它不干活?
更離譜的來了。我輸入一個簡單的指令,期待它像 Claude Code 一樣開始 planning、執(zhí)行... 結(jié)果呢?
$ gemini "help me analyze this project structure" [等待中...] [70秒后] [進程退出]
我:???
這就像你滿懷期待地啟動了一輛法拉利,結(jié)果它在原地熄火了。
當(dāng)時我的第一反應(yīng):這 TM 是 alpha 版本吧?不對,這連 alpha 都算不上,頂多算個 proof of concept。
1
劇情反轉(zhuǎn):等等,這代碼怎么這么眼熟?
23:01 - 社區(qū)的質(zhì)疑聲
就在我準(zhǔn)備放棄的時候,群里有人說:"這個 gemini-cli 怎么跟 cc (Claude CLI) 這么像?"
我心想,像就像唄,大家都是 CLI 工具,功能相似很正常... 直到我打開了源碼。
23:06 - 震驚!核心 Prompt 幾乎一模一樣
當(dāng)我打開https://github.com/google-gemini/gemini-cli/blob/main/packages/core/src/core/prompts.ts
這個文件時,我整個人都傻了。
這... 這不就是 Claude CLI 的 prompt 嗎?連措辭都沒怎么改!
23:13 - 代碼結(jié)構(gòu)分析:IIFE 包裝的痕跡
作為一個寫了多年代碼的人,我一眼就看出了問題。整個代碼充斥著 IIFE(立即執(zhí)行函數(shù)表達(dá)式)的寫法。
這種模式,通常只有在你想"包裝"或"改造"別人代碼的時候才會大量使用。如果是從零開始寫,誰會給自己加這么多層包裝?
Tip
IIFE(Immediately Invoked Function Expression,立即調(diào)用執(zhí)行函數(shù))是一種 [JavaScript](https://developer.mozilla.org/zh-CN/docs/Glossary/JavaScript) [函數(shù)](https://developer.mozilla.org/zh-CN/docs/Glossary/Function)在定義后就會立即執(zhí)行的習(xí)慣用法。它也被稱為_自執(zhí)行匿名函數(shù)_。IIFE 這個名字是由 Ben Alman 在[他的博客](https://web.archive.org/web/20171201033208/http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife)中提出的。
23:24 - 實錘了:這就是逆向 Claude CLI!
經(jīng)過仔細(xì)比對,我可以 100% 確認(rèn):Gemini CLI 就是逆向 Claude CLI 后的套殼產(chǎn)品。
盡管 gemini cli 與 claude reverse 的代碼并不完全一致,但交互方式一致、prompt 風(fēng)格一樣,所以完全有理由只是用 AI 改寫了一遍。
當(dāng)時我的心情... 怎么說呢,就像你發(fā)現(xiàn)你崇拜的大廚,其實是在用預(yù)制菜。Google 啊 Google,你可是擁有世界頂級 AI 模型的公司,怎么能干出這種事?
我在朋友圈直接開噴:"這是徹徹底底的抄襲與擠兌!"
1
冷靜之后的思考:但這可能是好事?
23:30 - Apache 2.0 的意義
罵完之后,我冷靜下來看了看 LICENSE 文件——Apache 2.0。
這讓我陷入了沉思。雖然方式不太光彩,但 Google 確實把一個原本閉源的商業(yè)產(chǎn)品,變成了開源項目。從結(jié)果來看,這對整個社區(qū)是有益的。
Apache 2.0 是最商業(yè)友好的開源協(xié)議之一,意味著:
- 任何人都可以免費使用
- 可以修改并再分發(fā)
- 可以用于商業(yè)項目
- 唯一要求是保留原始版權(quán)聲明
23:34 - 新的可能性
既然 Google 開了這個頭,那我們是不是可以基于它做更多事情?比如:
基于 gemini-cli 做一個multi-agent 前端
讓不同的 agent 分別負(fù)責(zé)寫代碼、code review、處理 PR
整合更多模型,不只是 Gemini
想到這里,我又燃起了斗志。
1
凌晨的突破:修復(fù) Bug 的高光時刻
00:00 - 終于找到了問題所在!
折騰了一個多小時,各種 debug、查日志、翻文檔... 終于在午夜時分發(fā)現(xiàn)了問題的根源——API Key 配置有問題!
原來我一開始用的是一個測試項目的 key,權(quán)限不對。gemini-cli 支持兩種認(rèn)證方式:
使用 Google 賬號登錄(訪問
/auth
)使用 API Key(從 https://aistudio.google.com/app/apikey 生成)
換了正確的 key 之后,它終于活了!
03:00 - 發(fā)現(xiàn)大陸用戶的特殊問題
就在我以為一切搞定,準(zhǔn)備寫測評的時候,又出幺蛾子了——程序每隔一分鐘就會自動退出。
凌晨 3 點,困得不行的我突然靈光一閃:這 TM 不會是 telemetry(遙測)的問題吧?
果然!經(jīng)過一番調(diào)試,發(fā)現(xiàn)是因為大陸網(wǎng)絡(luò)環(huán)境下,gemini-cli 的遙測通信會超時,導(dǎo)致程序異常退出。
03:13 - 用 Claude Code 修復(fù) Gemini CLI 的 Bug!
這時候,戲劇性的一幕發(fā)生了——我打開 Claude Code,讓它幫我分析和修復(fù)這個問題。
在合適的 prompt 下,Claude Code 很快就定位到了問題:
? 根據(jù)分析,程序在接近一分鐘時退出的原因是: 問題根源 1. 遙測數(shù)據(jù)批量發(fā)送: Clearcut 遙測日志每 60 秒批量發(fā)送一次數(shù)據(jù) packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts:42 2. 網(wǎng)絡(luò)超時太短: HTTPS 請求使用 Node.js 默認(rèn)的 5 秒超時,但沒有顯式配置更長的超時時間 3. 未處理的 Promise 拒絕: 當(dāng)網(wǎng)絡(luò)請求超時失敗時,觸發(fā)全局未處理 Promise 拒絕處理器 packages/cli/src/gemini.tsx:218-231,直接調(diào)用 process.exit(1) 退出程序 具體流程 4. 程序運行約 60 秒后,Clearcut 遙測系統(tǒng)嘗試發(fā)送批量數(shù)據(jù)到 play.googleapis.com/log 5. 由于網(wǎng)絡(luò)連接問題(如你的錯誤日志顯示的 ETIMEDOUT),請求在 5 秒后超時 6. 超時錯誤變成未處理的 Promise 拒絕 7. 全局錯誤處理器捕獲到這個拒絕,打印"CRITICAL: Unhandled Promise Rejection!"消息 8. 程序調(diào)用 process.exit(1) 主動退出 解決方案 需要修改遙測系統(tǒng)的錯誤處理,使其在網(wǎng)絡(luò)失敗時不導(dǎo)致整個程序退出,或者增加網(wǎng)絡(luò)請求的超時時間和重試機制。
claude code 中途也產(chǎn)生了幻覺,但方向依舊是正確的:
> 為什么我的網(wǎng)絡(luò)會失敗,我配置了 vpn 代理呀~ ? 讓我檢查一下 gemini-cli 是否正確使用了系統(tǒng)代理配置: ? Task(Check proxy configuration support) ? Done (19 tool uses · 64.7k tokens · 2m 33.2s) ? 找到問題了!你的 VPN 代理配置沒有生效是因為: 問題原因 Clearcut 遙測系統(tǒng)不使用代理設(shè)置 - 這是一個已知的缺陷。 雖然 gemini-cli 對 API 請求有很好的代理支持: - 讀取 HTTP_PROXY, HTTPS_PROXY 環(huán)境變量 - 使用 undici 的 ProxyAgent 處理所有 API 請求 但是 Clearcut 遙測日志器直接發(fā)送 HTTPS 請求到 play.googleapis.com,完全繞過了代理配置。 具體位置 packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts:108 - 直接使用 https.request() 而不是配置代理的請求方式。 臨時解決方案 你可以通過設(shè)置環(huán)境變量禁用遙測來避免這個問題: export GEMINI_DISABLE_TELEMETRY=true 長期解決方案 需要修改 Clearcut 遙測系統(tǒng),讓它也使用全局配置的代理設(shè)置,或者提供在代理環(huán)境下禁用遙測的選項。 這解釋了為什么即使你配置了 VPN 代理,程序仍然在嘗試連接 Google 服務(wù)時超時退出 - 遙測請求沒有通過你的代理。
最后基于 claude code 的分析以及我的經(jīng)驗與推斷,得出了最終的答案,是 telemetry 通信的問題!
我立即提交 Issue:https://github.com/google-gemini/gemini-cli/issues/1425#issuecomment-3005831312
**結(jié)果發(fā)現(xiàn)一小時前已經(jīng)有人捷足先登了!**這也太火爆了!!!
但還是把自己的方案提了上去,側(cè)重我們是使用 claude code 完成的,而且結(jié)果一致!
這真地太令我欣慰了,而且我相信 gemini cli 也能做到這點!
1
見證歷史:Star 增長曲線與社區(qū)狂歡
就在我提交 Bug 修復(fù)后的幾個小時,我親眼見證了開源社區(qū)的瘋狂:
2 小時內(nèi) 5k star
8 小時內(nèi) 10k star
一位技術(shù)產(chǎn)品經(jīng)理朋友的評價一針見血:
"這是人類 Vibe Coding 的大型社會實驗!原先可能 1 個月才能迭代成熟的項目,現(xiàn)在一堆程序員 + Claude Code|Cursor|Windsurf 這些 Coding Agent... 可能一晚上就干之前半個月的工作量了!"
1
復(fù)盤:這一夜教會了我什么
Summary
### 三個核心洞察
1.Vibe Coding 不是未來,而是現(xiàn)在
- 我用 Claude Code 修復(fù) Gemini CLI 的經(jīng)歷證明:AI 輔助開發(fā)已經(jīng)可以處理復(fù)雜的 debug 任務(wù)
- 社區(qū) + AI 的組合拳,讓開發(fā)效率提升了不止 10 倍
2.開源的力量超乎想象
- 即使是"套殼"產(chǎn)品,一旦開源,社區(qū)的創(chuàng)造力會讓它煥發(fā)新生
- Apache 2.0 協(xié)議降低了參與門檻,讓每個人都能貢獻(xiàn)
3.先入為主的判斷要不得
- 我在沒有充分調(diào)查的情況下,就斷言 Google "抄襲",這是非常不負(fù)責(zé)任的
- 技術(shù)相似不等于抄襲,可能只是大家都在解決同樣的問題
- 這次經(jīng)歷提醒我:做技術(shù)評論要嚴(yán)謹(jǐn),不能憑感覺就惡意揣測大廠的動機
1
行動指南:你也可以參與這場革命
如果你看到這里,心癢癢想要嘗試,這里是我的建議:
1. 立即體驗 Gemini CLI
# 安裝 npm install -g @google-gemini/cli # 開始使用 gemini --telemetry false --prompt "help me build a todo app"
2. 加入社區(qū)貢獻(xiàn)
GitHub: https://github.com/google-gemini/gemini-cli
提 Issue、交 PR、參與討論
用你擅長的 AI 工具來改進它(是的,用 AI 改進 AI!)
基于 gemini-cli 的開放性,嘗試構(gòu)建:
代碼生成 Agent
Code Review Agent
文檔編寫 Agent
測試用例 Agent
讓它們協(xié)同工作,這就是未來的開發(fā)模式!
1
結(jié)語:一夜見證歷史
5 個小時前,我還在吐槽 Google 的不要臉。5 個小時后,我成了這場 Vibe Coding 革命的參與者和見證者。
從晚上 10 點半到凌晨 3 點,這個不眠之夜讓我明白:技術(shù)變革往往以我們意想不到的方式到來。它可能不完美,甚至有點"臟",但只要方向是對的,社區(qū)的力量會讓它變得偉大。
正如我那晚發(fā)的朋友圈:
這是 Vibe Coding 革命的勝利!!!
而這,僅僅是第一槍。
相關(guān)參考資料:
1.gemini cli repo: https://github.com/google-gemini/gemini-cli
2.gemini cli 獲取 api key: https://aistudio.google.com/app/apikey
3.claude code 逆向分析: https://github.com/Yuyz0112/claude-code-reverse
4.claude code 網(wǎng)絡(luò)抓包: https://kirshatrov.com/posts/claude-code-internals
5.claude code UI: https://github.com/getAsterisk/claudia
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.