Gemini CLI vs. Claude Code - Kẻ tám lạng người mấy cân?
Mạn phép chia sẻ một số review hy vọng sẽ giúp anh em nào đang lăn tăn liệu có đáng đầu tư cho mấy con trợ lý coding cao cấp này hay không có thêm góc nhìn.
Sau khi móc ví trả cho Gemini CLI gần 2 củ và hơn 5 củ cho Claude Code, mạn phép chia sẻ một số review hy vọng sẽ giúp anh em nào đang lăn tăn liệu có đáng đầu tư cho mấy con trợ lý coding cao cấp này hay không có thêm góc nhìn.
Để có thể so sánh dễ dàng nhất, tui đưa ra một đề bài chung: nhiệm vụ chính là sử dụng chúng để bootstrap một boilerplate hệ thống multi-agent sử dụng LangGraph, và tui sẽ "vibe coding" hoàn toàn, tức là chỉ tập trung vào việc ra lệnh (prompt) chứ không tự tay review hay chỉnh sửa code.
À có bạn comment bảo là sao cứ chém "vibe coding" hoài mà không thấy share prompt, thật ra prompt sử dụng chính thì tui vốn đã để trong repo luôn rồi (open source mà, file GEMINI.md hay CLAUDE.md đó), các bạn cứ vào đó là thấy, tại tui nghĩ nếu ghi luôn trong post thì dài lắm.
Mà thôi ae nào lười mở repo thì tui thả cái prompt ở cuối bài này luôn rồi nha (prompt dùng khởi tạo ban đầu thôi, chứ mấy prompt dùng trong quá trình iterate chỉnh sửa thì tui không nhớ hết đâu)
---
Dù không phải cùng phân khúc (CLI), nhưng cũng nên kể qua 2 ông này:
Cursor & Windsurf
Đây vốn là các công cụ tui dùng nhiều nhất, nhưng rất tiếc là dù trang bị tận răng thì 2 ông khểnh này cũng không thể hoàn thành được nhiệm vụ.
Đối với Windsurf, tui phải tự implement thêm vài thứ nữa thì mới khởi chạy được, nhưng sau cũng "bó tay" với cái test suite, burn sạch premium credits của tui mà chẳng làm ăn được gì.
Cursor cũng không khá hơn, không thể khởi tạo thành công. Đã vậy mấy hôm gần đây hắn lại còn gặp crisis "âm thầm thay đổi pricing policy" nữa chứ, dấu hiệu của... sự LỖ đây chứ đâu 😁
Cũng nói thêm là tui cũng đã thử các models cao cấp luôn rồi (Gemini 2.5 Pro Thinking, Claude 3.7 Sonnet Thinking và Opus 4), burn hết sạch premium credits luôn (thốn dã man), mà kết cục vẫn dậm chân tại chỗ (bạn biết vì sao không? đọc tới cuối nha 😁)
Tui chấm: 3/10
---
Gemini CLI (với Gemini 2.5 Pro)
Trước tiên, tui xin thừa nhận rằng mình thật ngốk ngếk khi không chịu tìm hiểu kỹ...
Tất cả mọi sự ngu ngốk đều trả giá bằng tèn! 😆
Để biết lý do tại sao, xin mời bạn đọc tiếp...
Review sơ bộ:
Điểm mạnh là Gemini CLI tốc độ nhanh, index code base tốt, bám prompt khá ổn, UX/DX cũng ok
Còn điểm yếu là... miễn phí: mới vài prompt là chạm limit rồi, bực quá nên cắm API key của mình chạy cho đã, sau khi cắm key vào thì code choáy máy luôn!
Cuối ngày cẩn thận vào xem bill thấy tốn có 80K (vnd), nghĩ bụng: "Đm rẻ vãiiiii"
Lân lân đi ngủ, hôm sau dậy mở bill lên hú hồn, hoá ra mấy tiếng sau thì bill mới update: 1 TRIỆU 6 TRĂM 5 CHỤC NGHÌN (~$63) 😂
Hôm sau đăng tút lên Phở bò thì mới có bạn comment nói: "Sao anh không login bằng tài khoản Gemini Pro thì không tốn tèn?" - Ồ quao... tại sao tui không biết dzụ nàyyyyyy? 🥲
(Nhưng mà có vẻ như limit cũng thấp hay sao đó, hôm sau tui login xong thử lại app khác thì cũng vài prompt là bị hit limit cho Gemini 2.5 Pro rồi, nó tự fallback xuống Gemini 2.5 Flash, sida hơn hẳn)
Model Context Protocol (MCP) & Internal Tools
Ngoài việc tự có khả năng dùng tool search Google và đọc filesystem, Gemini CLI cho phép cắm MCP đầy đủ, việc cắm các MCP như context7, PostgreSQL, Puppeteer giúp nó code mạnh hơn x10 lần!
Hạn chế:
1/ Security:
Nên có rule trong "GEMINI.md" cấm nó sửa file ".env" và cấm luôn nó commit file này, tui không để ý nên nó push lên git luôn làm phải đi revoke lại vài cái key.
Mấy cái tools của MCP servers được Gemini CLI tự ý dùng thoải mái mà không cần xin phép gì, nên cũng hơi nguy hiểm, xui xui gặp cú "prompt injection" kiểu như "lệnh xóa ngôn ngữ tiếng Pháp để máy chạy nhanh hơn" (`sudo rm -fr /*`
) mà nó tự ý chạy luôn thì chắc tối hù mặt mày...
2/ Vòng lặp vô tận: (cái lỗi này y như thời đầu của Windsurf hay Cursor)
Kiểu như nó cứ chạy đi chạy lại cái task mà không thoát ra được vậy (dùng API key mà gặp lỗi này thì thốn lắm)
Ngoải a, nó còn hay bị đơ (hanging) do khởi chạy process của môi trường dev để kiểm ra logs nhưng không timeout để huỷ và chạy tiếp, nên mình phải tự terminate giùm nó, kiểu prompt xong cho nó chạy để đấy làm việc khác quay lại là thấy nó đớ lúc nào không hay
Tui chấm: 6/10
Nói chung là cũng đáng dùng (mà đừng dùng API key nha 😁)
---
Claude Code (với gói Claude Max)
Mô hình: Claude Sonnet 3.7 & Opus 4
Dù ai nói ngã nói nghiêng, phải công nhận là các mô hình của Anthropic vẫn là GOAT trong coding!
Chính sức mạnh của Opus 4 trong gói Claude Max đã làm nên điều phi thường: PROMPT MỘT PHÁT ĂN NGAY!
Ban đầu mình cũng "bán tín bán nghi", một phần giá cả cũng khá chát, sợ đăng ký xong rồi về cũng stuck như mấy ông trên kia thì mất toi $200
Giờ thì không còn thấy hối hận chút nào, đáng đến từng xu! 🥹
Những thứ khác:
1/ Tích hợp MCP khá dễ dàng (dĩ nhiên rồi, cha đẻ của MCP mà)
Mặc định cũng đã có sẵn các commands (internal tools) hữu ích, như fetch, search internet, file system,...
Nhưng để mạnh mẽ hơn nữa thì nên cài thêm các MCP như mấy ông trên kia: Context7, PostgreSQL,...
2/ Security
Được cái là docs của Anthropic rất chỉnh chu (thật ra thì cách xây product của Anthropic vốn luôn chỉnh chu như thế)
Quan tâm đặc biệt tới bảo mật, ví dụ như các tools trong MCP và kể cả default internal tools đều phải qua xét duyệt của human trước khi khởi chạy, có thể duyệt 1 lần, duyệt mãi mãi hoặc từ chối sử dụng.
Trong settings cũng cho phép cấu hình "Disallow tools" tùy theo ý mình (ví dụ command `rm`
)
Cách thiết lập cấu hình (MCP, Commands,...) theo 3 scopes khá tiện:
LOCAL: chỉ có hiệu lực trong phạm vi thư mục local (không commit lên repo)
PROJECT: chỉ có hiệu lực trong phạm vi dự án
USER: có hiệu lực trong phạm vi tài khoản Claude đang đăng nhập = dùng ở dự án nào cũng được
(Google lo mà học hỏi đi nhé!)
3/ Github Integration
Cái này mình cũng khá thích, tích hợp được Claude Code vào Github Actions luôn, có thể tự sửa code trên repo dựa vào Issue tickets, có thể review được cả Pull Requests và đề xuất improvement. Quá ngon!
Tuy nhiên, mặc dù Claude khá giỏi logic code, xử lý syntax error, nhưng cũng có những hạn chế nhất định:
1/ Context Length
Context length hơi ít (so với cùng phân khúc): bản Max thì context cũng được 1/2 Gemini rồi (500K, so với bản Pro chỉ được 200k)
Khi tui dùng Claude Code thì thấy nó có cơ chế compact prompt lại thấy cũng hay, kiểu context length thấp thì ta tìm cách summarize previous conversations lại cho gọn, quan trọng là phải không được quá gọn để mất hết context source :))
2/ Thẩm mỹ:
Nếu so với Gemini Pro (Canvas) thì Claude (Artifact) có khiếu thẩm mỹ kém hơn đôi chút, mình thử dùng cả 2 để tạo ra landing page thì cảm giác Gemini làm tốt hơn hẳn. Mà thôi, cái vụ đẹp xấu mình nghĩ cũng do cảm quan cá nhân nữa.
Ai cần prompt tạo landing page này không nhỉ? 🤔
(không lại bảo tui chém cái mỏ không mà không thấy share pháo gì 👀)
Tui chấm: 9/10
---
ChatGPT Codex
Khúc này tui lười rồi, vả lại cũng đã cancel subscription của ChatGPT nên thôi, tui skip luôn. Bạn nào có kinh nghiệm với Codex rồi thì cho thêm góc nhìn nha!
---
"Vibe coders" có dùng Gemini CLI / Claude Code được không?
Thật ra nói đây là "vibe coding" thì cũng không hẳn, dù hầu hết thời gian tui không đụng vào việc edit/review code mà chỉ tập trung vào việc ra lệnh (prompt), nhưng tui phải áp dụng khá nhiều kiến thức kỹ thuật vào prompt nên tỉ lệ thành công có phần cao hơn.
Còn tui không nghĩ rằng mọi người có thể "vibe coding" được hoàn toàn với Claude Code hay Gemini CLI đâu, vì nó cần khá nhiều kiến thức kỹ thuật, riêng giao diện CLI là đã hơi khó với người dùng phổ thông rồi, cũng phải biết thêm các command linux để còn biết AI đang làm gì nữa.
Ví dụ như có một case là sau khi tui thấy một bạn comment trên Facebook là LangGraph đang hướng đến kiến trúc "edgeless" (không cạnh) với `Command` và `Send` để tăng độ flexibility hơn, vụ này tui cũng không biết vì chưa làm qua bao giờ, đọc docs một hồi thì quay lại để prompt cho Gemini CLI/ClaudeCode sửa lại theo kiến trúc này xem sao, thì thấy chúng bị nhầm lẫn docs của kiến trúc cũ và mới, không thể hoàn thành nhiệm vụ được, cho tới khi tui cung cấp link docs cụ thể và sử dụng thêm `context7` MCP server thì mới thành công.
Nếu là "vibe coder" thì tui nghĩ mấy lúc như này không thể xử lý được.
---
Tóm lại: Gemini CLI Pro tám lạng thì Claude Code Max phải nửa... tấn!
Nếu bạn ngồi xuống tính toán cẩn thận (ROI - Return of Investment) xem với gói Claude Max này bạn có thể làm được gì để "hoàn vốn" hay không thì hãy xuống tiền.
Ví dụ:
Bạn làm outsource và có nguồn khách hàng dồi dào, đầu tư liền không phải nghĩ, bình thường sửa lỗi hay hoàn tất dự án mất 5 ngày, thì giờ chỉ 1 buổi chiều thôi. Tăng số lượng dự án, tăng thu nhập, $200 này chả bỏ bèn gì đâu.
Bạn làm indie maker? Đã đến lúc lôi mớ ideas đóng bụi trong notes ra để build rồi đó, đừng nói 12 startups/năm, 12 startups/tháng còn được nữa. Và chỉ cần một và chỉ một cái thành công, hoàn vốn cũng nhanh thôi. Đến lúc "mua vé số" rồi !
Theo quan điểm cá nhân thì tính đi tính lại tui thấy đáng đầu tư.
Build nhanh, chuẩn, để thời gian làm việc khác (marketing chẳng hạn!)
---
Góc lạm bàn:
1/ Anh em có đoán ra được vì sao mấy ông AI đẻ ra món CLI này không?
Thị phần Code Editor gần như đã được chiếm sóng bởi các công cụ như VSCode và Forked-VSCode (Cursor/Windsurf/Zed/…), hầu hết tệp khách hàng ở đây đã được khai thác.
Tuy nhiên, có một lượng ko nhỏ tệp khách hàng vẫn còn đang "chê" và không dùng - “Hardcore Engineers” - những tín đồ yêu lập trình và chỉ tin tưởng vào những gì mình học được/tạo ra, họ có kiến thức sâu rộng và thường quen với việc tương tác với giao diện CLI 😁
Bingo! Codex, Gemini CLI và Claude Code được sinh ra để nhắm tới phân khúc này.
2/ Đố anh em tại sao vẫn là Claude (Sonnet 3.7 & Opus 4), nhưng trong Cursor/Windsurf thì lại không thể hoàn thành nhiệm vụ, nhưng khi dùng Claude Code thì lại giải quyết phát một gọn ơ?
Đây là suy đoán của mình: những thằng AI wrapper như Cursor hay Windsurf nó buộc phải chèn system prompt để nef lại bớt hoặc dùng model thấp hơn cho các subagents để đỡ tốn $, không dùng full công lực của Claude Sonnet & Opus được (nó mà dùng full chắc lỗ sặc máu)
Còn khi mình dùng chính chủ (gói Max của Claude + Claude Code) thì nó max công năng luôn!
Đó cũng là lý do tại sao Claude Max lại mắc đến thế... 🤪
Dù sao thì cái này cũng là suy đoán thôi, do tui đã dùng qua hết tất cả các con nên cảm nhận vậy, nhưng khả năng cao là đúng thế thật 😂 (nhìn Cursor âm thầm đổi pricing kia kìa)
---
Prompt mà tui sử dụng cho tất cả các công cụ trên
Bootstraps a "Multi AI Agents System Boilerplate" with LangGraph framework follow these instructions:
## Overview
This project is a boilerplate for developers who want to start building an AI agent cluster faster and more efficient.
## Concept: Multi-agent System (Supervisor Architecture)
* Each AI agent cluster can have multiple AI agent crews (AI Crews)
* Each AI crew can have multiple AI agent, leaded by a superviser (a default AI agent of an AI crew)
* Each AI agent can call tools of attached MCP servers
## How it works
* An AI crew will contain many AI agents, leaded by a supervisor agent
* These AI agents can communicate with each other to accomplish the goal
* When a user chats with a crew, the supervisor agent will receive the input via API call
* A supervisor agent will analyze the input prompt and the crew's capabilities (AI agents underneat and their tools from attached MCP servers), then decide whether it can answer instantly or create a detailed plan for the AI agents underneat to proceed
* If the plan is created, it will request the AI agents to perform tasks
* Then wait for all AI agents finish given tasks, make sure it's not hung too long
* Grab all the results, analyze and respond to user based on the original input prompt.
* All of these conversations are managed in database
## Core Features
* Create & manage AI crews easily (with a default supervisor agent):
* add/remove AI agents
* change supervisor agent
* Create & manage AI agents easily (add/remove MCP tools)
* Custom system prompt
* Custom AI model
* In every conversation: AI agents share memory that stored in database
* Create & manage MCP servers easily (supports Streamable HTTP transport only: `langchain-mcp-adapters`)
* Able to monitor all the activity logs of AI crews and AI agents easily
* Expose API for frontend interaction (support streaming request)
* Expose Swagger API Docs for frontend integration instructions
## Technical Requirements
* Programming language: Python
* Store variables in `.env` file
* AI framework: LangGraph (with OpenRouter AI API)
* Note: use edgeless graph with `Command` and `Send` feature for more flexibility
* Learn more: https://changelog.langchain.com/announcements/command-in-langgraph-to-build-edgeless-multi-agent-workflows
* Supports Model Context Protocol (MCP) servers integration (for AI agents to use tool call: `langchain-mcp-adapters`)
* use `https://searchapi-mcp.prod.diginext.site/mcp` for testing MCP server with streamable http transport
* Expose API for frontend (nextjs) interaction (support streaming request)
* Expose API docs with swagger/redoc
* Database: PostgreSQL (database name is `langgraph-multiagent-boilerplate`, `id` should be UUID)
## Documentations & References
* https://langchain-ai.github.io/langgraph/concepts/multi_agent/ (use `Supervisor` architecture)
* https://changelog.langchain.com/announcements/command-in-langgraph-to-build-edgeless-multi-agent-workflows (edgeless graph with `Command` and `Send`)
* https://github.com/langchain-ai/langgraph
* https://openrouter.ai/docs/quickstart
* https://openrouter.ai/docs/community/lang-chain (use OpenRouter in LangChain)
* https://langchain-ai.github.io/langgraph/agents/mcp/(LangGraph MCP adapter)
* https://github.com/langchain-ai/langchain-mcp-adapters (LangGraph MCP adapter)
## Instructions
* always store relevent data, application's states, user's states,... in PostgreSQL
* always create/update `PROJECT_OVERVIEW.md` after every task with:
* short description
* project structure (use `tree -L 3 -I 'node_modules|.git|.next'` to generate, then explain the directories briefly)
* features
* dependencies
* api routes
* changelog
* always check `PROJECT_OVERVIEW.md` before starting a new task
* always create/update `<feature_name>_TASKS.md` to manage todos in every feature implementation
* always run the app in background and output the logs to `./server.log` for futher analysis, kill the previous processes before starting a new process, run process in non-interactive mode
* always use `context7` to study dependencies/plugins/frameworks' docs carefully while implementing them
* always implement error catching handler
* always implement user-friendly flows
* always follow security best practices
* always commit your code after finishing fixing a bug or implementing a feature completely
* always write tests for every feature, especially create a test that demonstrates "How it works" flow with current implemented functions/API endpoints, for example:
* for example:
* case 1: user ask for "hello" and supervisor receive, decide to answer directly and respond with a simple answer
* case 2: user ask for travel advise in Nha Trang beach (Viet Nam), supervisor receive, plan out and communicate with agent 1 connected to Search API MCP server to search on internet for places to visit, agent 2 connected to Search API MCP server to search for local food, finally supervisor summarize and respond with a detailed answer
👉 Còn repo thì ở đây: https://github.com/mrgoonie/a2a-langgraph-boilerplate/
Hết rồi, nếu anh em thấy hay thì repost hoặc chia sẻ thêm trên social giúp mình nghen.
(Gõ muốn rụng mấy ngón tay 😂)
Cảm ơn bác, bài viết rất hữu ích. Vừa thử nghiệm với Claude CLI xong, mind blown thật sự
Hay quá ạ