Gemini CLI vs Claude Code: What I Can and Cannot Say From My Logs
A correction first: none of my logged runs used Gemini CLI. Here is what the Gemini rows are, what the two tools' docs say, and a dated tally with its limits.

If you are searching Gemini CLI vs Claude Code, here is the correction first: I have no Gemini CLI runs in my logs. Every Gemini row is a Gemini model run through Antigravity, using its command-line tool agy. So this post cannot tell you how Gemini CLI performs, and it will not say which tool is better. What I can give you is a dated tally of 22 Gemini-via-Antigravity rows next to 20 Claude Code rows, from 2026-10-01 to 2026-10-04, and what each tool's own docs say.
Updated 2026-10-26. Sources: the Gemini CLI README and Claude Code non-interactive mode, both fetched 2026-10-26.
What the Gemini rows are
I dispatch bounded coding tasks to command-line agents as workers and log each one. The Gemini rows all name the same tool and model: agy with gemini-3.8-flash-medium. That is a Gemini model reached through Antigravity, not through Gemini CLI. The Gemini CLI README opens with a notice that Gemini CLI "was replaced by Antigravity CLI on June 18th, 2026", addressed to unpaid-tier and Google One users. I have not checked whether agy is exactly the tool that notice names, so I draw no link between the two beyond the name. Anything I say about Gemini CLI itself below comes from that README, not from my runs.
What each tool's docs say
Per the README, Gemini CLI is "an open-source AI agent that brings the power of Gemini directly into your terminal", under the Apache 2.0 license. For scripts it has a non-interactive mode, gemini -p "...", and it lists --output-format json and --output-format stream-json. The README I fetched gives no free-tier or usage-limit numbers, so I give none.
For Claude Code, the docs say to pass -p to run non-interactively, that it "exits with code 0 on success and a non-zero code when the run fails", and that --output-format takes text (the default), json or stream-json. On paper the two scripting surfaces look alike: non-interactive flags and structured output. I did not run Gemini CLI's, so that is a reading of two docs pages and not a test.
The tally
"Gemini models via Antigravity" means rows run with agy and gemini-3.8-flash-medium. "Claude Code" means rows run through Claude Code on the Sonnet model, the same 20 rows I counted in Claude Code vs Cursor. A row is one dispatched task; some cover several rounds. A row counts as "delivered" when its output landed, whether that took one round or several, and including one run that exited with an error but left a complete diff, which I committed myself after checking the tests. It is not a quality verdict: some delivered work failed an independent review and needed a fix round. One more Gemini row was still pending when I counted, so it is excluded.
| Worker | Dates in the log | Rows | Delivered | Not delivered | What happened to the rest |
|---|---|---|---|---|---|
| Gemini models via Antigravity | 2026-10-01 to 2026-10-04 | 22 | 15 | 7 | 5 ended on a quota or credit error (429); 1 hit a 401 authentication error mid-run; 1 stalled about 10 minutes searching for a tool that was not installed, and I killed it |
| Claude Code (Sonnet) | 2026-10-01 to 2026-10-04 | 20 | 15 | 5 | covered in the Cursor post |
Both delivered counts are 15. That is a coincidence of two different row totals, and I draw no rate from it.
What the table does not say
- The rows are not a matched comparison. The Gemini rows are code tasks across mobile apps and a shared library: a media backfill, a video screen, an encoder fix, a UI component, a QA script, a release build. The Claude rows are the ones described in the Cursor post, which include other kinds of work. These rows do not document the same task given to both tools.
- Delivered does not mean first try. At least five of the 15 delivered Gemini rows are themselves fix rounds after a review failed earlier work. In one of them the fix missed an adjacent code path, which I accepted and registered as a follow-up.
- Not every miss is a model failure. The stall happened while the run searched for a tool that was not installed; the retry, with an explicit download step in the brief, succeeded. Two runs of another task were cut off by a 30-minute wait on a background process, and a third, narrower run finished it. I count that row as delivered after three runs.
- The quota failures say little by themselves. I did not record how much I had used before each 429, so a count of them says nothing without matching volume.
- The window is short. Everything is from four days, using my briefs.
What the Gemini rows show, and no more
Among the delivered rows that recorded a time, runs took from about 16 to 51 minutes. Of the seven not delivered, one left its edits uncommitted in the working tree and I checked them separately, one was a partial run continued on another worker, and in one the partial output, a screenshot with overlapping elements, was logged as worse and discarded. If you wrap agy or any agent in a watchdog, the failure modes to test first are the ones in these logs: an authentication error mid-run, a quota error, and a long wait on a background process. I wrote about the watchdog side in When Your Coding Agent Hits a Rate Limit.
What I did not measure
No Gemini CLI run of any kind. No speed comparison on the same task. No token or dollar cost per row. No quality score beyond "I accepted it". If you need Gemini CLI vs Claude Code for your work, give both the same bounded brief, log the exit code, wall time and whether you accepted the result, and count after a week, not after one demo.
Takeaway
My honest answer to the query is that I cannot answer it from these logs, and presenting a different tool's rows as Gemini CLI would be wrong. What the logs do support is a habit: name the exact tool and model behind every number you quote, and write down the failure modes before the run.
Keep reading
- Using Codex as the Read-Only Reviewer for Claude CodeNot a benchmark: Claude Code writes and orchestrates, Codex reviews. The split, the verdict contract, and one case where the gate said no.
- CLAUDE.md File: What to Put In It and What to Leave OutWhat a CLAUDE.md file costs, what the docs say belongs in it, and the size history of mine: 3,639 words, then 512, then 9,555.
- Claude Code vs Cursor: What I Measured Running Both as Coding WorkersNot an editor review: a dated tally of the log rows where I handed a bounded task to the Cursor CLI and to Claude Code, what finished, what did not, and what I did not measure.