Most "Gemini CLI vs Claude Code" pages still sell Gemini CLI as the free option, with 1,000 requests a day on a Google login. That ended on June 18, 2026: Gemini CLI no longer serves personal Google accounts, and Google moved them to a new tool, Antigravity CLI. The rest of those pages quote vendor benchmarks. So we reran the comparison on what you can actually install today: Claude Code against Google's terminal agent, on four real tasks with objective checks, two runs each, headless, with the commands, prompts and raw data to check it. Measured on 2026-10-13 with Claude Code 2.1.296 (claude-opus-5-5) and Antigravity CLI 1.3.4 (Gemini 3.8 Flash, High) on a Google AI Pro account, default models, default effort. Gemini CLI 0.63.0 refused our Google login, which is a result in itself.

TL;DR

Gemini CLI vs Claude Code at a glance

Claude Code Gemini CLI (API key) Antigravity CLI (agy)
Maker Anthropic Google Google
Who can use it (2026-10-13) Paid Claude plans (Pro, Max, Team, Enterprise) or an API key Paid Gemini API or Agent Platform key, Code Assist Standard or Enterprise. Not personal accounts Google accounts (free, Google AI Pro, Ultra) or an API key
Price model Flat plan with usage limits, or per token Per token Flat plan with usage limits, AI credits for overage, or per token
Default model (measured) claude-opus-5-5 Not measured gemini-3.8-flash-high
Context window 1M tokens (Opus 5.5) 1,048,576 tokens (Gemini 3.8 Flash) 1,048,576 tokens (Gemini 3.8 Flash)
Headless command claude -p (docs) gemini -p (docs) agy -p (docs)
Machine-readable output --output-format json or stream-json --output-format json (with a stats block) or stream-json --output-format json or stream-json
Skip permission prompts --dangerously-skip-permissions --approval-mode=yolo (--yolo is deprecated) --dangerously-skip-permissions
Instruction file CLAUDE.md GEMINI.md GEMINI.md and AGENTS.md
Resume a session --continue, --resume --resume latest or an index --continue, --conversation
Skills, hooks, subagents, MCP Yes Yes (plus extensions) Yes (extensions become plugins)
Other models in the same CLI Claude models only Gemini models only Gemini 3.8 Flash, Claude Opus 5.5 and Sonnet 5.5, GPT-OSS 120B (our account)
License Proprietary Open source (Apache 2.0) Not open source
Our benchmark 8/8 passed, $0.169 per task, 318 s Not run: personal login refused 8/8 passed, $0.544 per task, 3,712 s

Sources: Claude pricing, Claude models, Gemini API pricing, Gemini 3.8 Flash, Gemini CLI reference, Antigravity CLI migration guide.

What happened to Gemini CLI in 2026

On May 19, 2026, Google announced on its developers blog, in An important update: Transitioning Gemini CLI to Antigravity CLI, that "On June 18, 2026, Gemini CLI and Gemini Code Assist IDE extensions will stop serving requests for Google AI Pro and Ultra" and for free users of Gemini Code Assist for individuals.

This is what it looks like on the day, with a Google login that worked in Gemini CLI a few months ago:

$ gemini -p "Reply with the single word pong" --output-format json
Error authenticating: IneligibleTierError: This client is no longer supported for Gemini Code
Assist for individuals. To continue using Gemini, please migrate to the Antigravity suite of
products: https://antigravity.google

Who can still use Gemini CLI

Gemini CLI itself is not abandoned. The maintainers wrote that it "remains available to the community as an Apache 2.0 licensed repository with no changes" and will keep getting model updates (GitHub announcement). Version 0.63.0 shipped on October 6.

Antigravity CLI (agy): the replacement for personal accounts

Antigravity CLI is a different program, installed as agy and "Built in Go". Google is explicit that "there won't be 1:1 feature parity right out of the gate", but it keeps "Agent Skills, Hooks, Subagents, and Extensions (now as Antigravity plugins)". From the migration guide:

Two differences matter for this comparison. Antigravity CLI is not open source: its repository holds a README, a changelog and examples, no source and no license. And it is not Gemini-only: on our Google AI Pro account, agy models listed Gemini 3.8 Flash (low, medium, high), Claude Opus 5.5 and Claude Sonnet 5.5 (low, medium, high) and GPT-OSS 120B. The default was Gemini 3.8 Flash (High).

What this means for this comparison

"Gemini CLI vs Claude Code" now means two different setups:

  1. Gemini CLI on a paid API key, billed per token. We did not run it: the Google login we use for Antigravity was refused, as shown above. The Gemini CLI column of the table above comes from Google's documentation, not from our runs.
  2. Antigravity CLI on a Google subscription, which is what a Google AI Pro user can install today. That is the setup we measured against Claude Code.

How we tested (and how you can rerun it)

We used the same protocol as our Codex vs Claude Code benchmark: same repository, same four tasks, same prompts, same check scripts. The raw data archive (400 KB) has the prompts, the hidden tests, the scripts, the Dockerfile, the full transcript of each run and the computed metrics. The Codex archive is here.

The repository and the four tasks

The repository is python-humanize/humanize (MIT, 1,725 lines of Python in src/, about 860 tests in 7 seconds), pinned at commit 785e5dcc0d0308ad0dff3f6cc0faa7085ad0375b.

Task Starting commit Objective check
Bug fix from a real issue f971127, the parent of the fix for PR #346 The upstream regression test, copied in after the run, plus the full suite
Feature from a spec 785e5dc 16 hidden acceptance tests for two new natural_list parameters, copied in after the run, plus the full suite
Refactor, no behavior change 785e5dc Move scientific() and metric() to a new module: tests/ untouched, old and new import paths return the same objects, docs updated, doctests and suite green
Code review a0f0aa3: 785e5dc plus a parse_size() function with 3 planted bugs Planted bugs found, false alarms, and no file modified

The three planted bugs are a missing + 1 in the binary units branch (parse_size("1.0 KiB") returns 1), an int() truncation of a float product (parse_size("8.2 MB") returns 8199999) and a regular expression with a nested quantifier, (?:\d+)+, that backtracks exponentially on input like "1" * 24 + "!". The Codex post shows the full diff and the four prompts; the archive has review.patch, which recreates the same commit hash.

The exact commands and prompts

This time, every run went into its own disposable Docker container (docker run --rm), with a fresh git worktree of the starting commit and its own virtualenv. Only the CLI binary and a read-only copy of that CLI's sign-in file were mounted: no home directory, no other credentials. An agent with every permission turned off should only ever run in a box like this.

docker run --rm -e HOME=/home/bench \
  -v "$PWD/repo:/repo:ro" -v "$PWD/tasks:/bench/tasks:ro" \
  -v "$PWD/scripts:/bench/scripts:ro" -v "$PWD/results:/out" \
  -v "$(command -v agy):/usr/local/bin/agy:ro" -v "$PWD/creds/agy-token:/creds/agy-token:ro" \
  gbench:1 /bench/scripts/in-container.sh agy bugfix 1

Inside the container, the three commands, same prompt text, default model and effort, permissionless:

# Claude Code 2.1.296
env -i HOME="$HOME" PATH="$PATH" IS_SANDBOX=1 \
  claude -p "$PROMPT" --output-format stream-json --verbose \
    --dangerously-skip-permissions \
    --setting-sources project,local --strict-mcp-config --no-session-persistence < /dev/null

# Antigravity CLI 1.3.4
env -i HOME="$HOME" PATH="$PATH" \
  agy -p "$PROMPT" --output-format stream-json --dangerously-skip-permissions < /dev/null

# Gemini CLI 0.63.0 (refused our Google login, see above)
env -i HOME="$HOME" PATH="$PATH" GEMINI_CLI_TRUST_WORKSPACE=true \
  gemini -p "$PROMPT" --output-format json --yolo < /dev/null

The containers start with an empty home directory, so no personal settings, MCP servers or instruction files reach any run. IS_SANDBOX=1 is there because the containers run as root and Claude Code refuses --dangerously-skip-permissions as root otherwise. Every prompt but the review ends with: "The project virtualenv is ready in .venv: run the tests with .venv/bin/python -m pytest -q. Work only inside this repository. Do not commit." The review prompt ends with "Do not modify any file."

What we measured, and what "cost" means for a subscription

On a subscription you don't pay these amounts, you consume a quota. For Antigravity, the dollar figure is still the right unit: since May 2026, Google says Gemini Pro and Flash share one limit "drawn down according to API pricing" (Changes to Antigravity plans).

Results

Task Passed (Claude Code / agy) Wall time, median Cost per run, median Claude Code cheaper by
Bug fix 2/2 / 2/2 29.1 s / 599.0 s $0.143 / $0.620 4.3x
Feature 2/2 / 2/2 34.1 s / 295.0 s $0.119 / $0.333 2.8x
Refactor 2/2 / 2/2 59.4 s / 642.5 s $0.273 / $0.927 3.4x
Code review (3 planted bugs) 3/3 twice / 3/3 twice 36.5 s / 319.9 s $0.141 / $0.295 2.1x

Bug fix from a real issue

Claude Code (run 1, run 2) Antigravity CLI (run 1, run 2)
Hidden test and suite pass, pass pass, pass
Wall time 27.6 s, 30.5 s 526.0 s, 671.9 s
Input tokens (of which from cache) 98.6k (87.5k), 116.9k (106.1k) 2.83M (2.63M), 4.33M (4.07M)
Tokens written to cache 11.1k, 10.8k not reported
Output tokens (of which thinking) 1,577 (323), 2,003 (485) 44,820 (38,120), 58,415 (50,532)
Tool calls 4, 6 50, 64
Cost $0.138, $0.148 $0.516, $0.723
Lines changed +8 / -1, +9 / -1 +23 / -1, +20 / -1

The fix is one line. Claude Code compared rounded_value against powers[ordinal + 1] // power in both runs, and so did agy in its second run; its first run used int(rounded_value) * power, also correct. The difference is everything around that line. Antigravity CLI ran the suite, then dozens of short Python experiments on float precision (powers of ten, float.hex(), 10**100, a bisect replica of intword()), tried mypy and ruff, and wrote 38,000 thinking tokens before and between edits. Its first run lasted almost nine minutes, alone on the machine, so this is not CPU contention: 93% of agy's time across all eight runs was spent waiting for model responses, not running tools.

Feature from a spec

Claude Code (run 1, run 2) Antigravity CLI (run 1, run 2)
Hidden tests and suite pass, pass pass, pass
Wall time 34.5 s, 33.7 s 260.9 s, 329.1 s
Input tokens (of which from cache) 96.3k (87.2k), 55.8k (52.3k) 1.24M (1.10M), 1.79M (1.61M)
Tokens written to cache 9.0k, 3.4k not reported
Output tokens (of which thinking) 2,966 (222), 2,561 (210) 23,756 (19,181), 35,009 (27,122)
Tool calls 4, 2 34, 44
Cost $0.149, $0.089 $0.277, $0.389
Lines changed +88 / -5, +72 / -5 +106 / -4, +111 / -6

A precise spec leaves little room for creativity: all four implementations pass the 16 hidden tests with the same keyword-only signature and the same validation. Claude Code's second run needed only two tool calls: one to read the module and its tests, one shell script that wrote the change and the tests and ran the suite.

Refactor without behavior change

Claude Code (run 1, run 2) Antigravity CLI (run 1, run 2)
Checks (tests untouched, API, docs, doctests, suite) pass, pass pass, pass
Wall time 60.7 s, 58.1 s 688.9 s, 596.0 s
Input tokens (of which from cache) 219.4k (199.5k), 224.5k (208.4k) 6.56M (6.20M), 6.37M (6.02M)
Tokens written to cache 19.9k, 16.0k not reported
Output tokens (of which thinking) 4,556 (1,839), 4,336 (1,514) 58,110 (42,489), 52,163 (36,519)
Tool calls 7, 7 92, 91
Cost $0.290, $0.257 $0.947, $0.908
Lines changed +156 / -129, +156 / -130 +166 / -130, +170 / -129

The trap here is a helper used by both modules, which turns a naive move into a circular import. All four runs chose the same structure: notation.py imports the helper from number.py, and number.py exposes metric and scientific again through a lazy module-level __getattr__. Both Antigravity runs went one step further, with a TYPE_CHECKING import so type checkers still see the two names and a __dir__() so autocompletion lists them; Claude Code added the first in one run and neither in the other. On code quality, this is the one task where agy did slightly better. It took ten minutes and 92 tool calls to get there, against one minute and 7 calls.

Code review with planted bugs

Claude Code (run 1, run 2) Antigravity CLI (run 1, run 2)
Planted bugs found 3/3, 3/3 3/3, 3/3
False alarms 0, 0 0, 0
Extra valid findings 3, 3 1, 1
Repository left untouched yes, yes yes, no (new uv.lock)
Wall time 35.1 s, 38.0 s 261.9 s, 377.8 s
Input tokens (of which from cache) 78.6k (68.7k), 96.3k (87.6k) 861k (730k), 1.23M (1.05M)
Output tokens (of which thinking) 2,603 (510), 2,493 (451) 27,043 (22,645), 32,799 (28,162)
Tool calls 3, 4 28, 34
Cost $0.145, $0.137 $0.254, $0.336

Every review found the missing + 1, the truncation and the ReDoS, each with a reproducing input, and none reported a bug that wasn't one. The rest differs:

If you run reviews every day, like our daily pull request review template does, these numbers say Claude Code is both the cheaper and the more thorough reviewer of the two, by 2.1x on cost.

Totals: tokens, time and cost per passed task

Over 8 runs each Claude Code Antigravity CLI
Passed 8/8 8/8
Total wall time 318 s 3,712 s
Input tokens 986k (91% read from cache) 25.2M (93% from cache)
Uncached input tokens 88 1.80M
Tokens written to cache 88.8k not reported
Output tokens (of which thinking) 23.1k (5.6k) 332k (265k)
Tool calls 37 437
Cost $1.35 $4.35
Cost per passed task $0.169 $0.544

This is the main lesson of the benchmark: price per token says little about price per task. Gemini 3.8 Flash input and output tokens cost 5.3x less than Opus 5.5's, but the default agy setup used 25.6x more input and 14.4x more output to do the same work. Where the money went:

Is it the model or the CLI? Two side runs

To separate the two, we ran the bug fix once more with Antigravity CLI and a different model. One run each, so treat them as hints:

Bug fix, single run Passed Wall time Tool calls Output tokens Cost (API-equivalent)
agy, gemini-3.8-flash-low yes 332.5 s 67 11,856 $0.383
agy, claude-opus-5-5-high yes 50.9 s 7 3,623 $0.191 (at Opus prices)
Claude Code, default (median of 2) yes 29.1 s 5 1,790 $0.143

Lowering the effort cut the thinking but not the exploration: 67 tool calls and five and a half minutes. With Claude Opus 5.5 selected, Antigravity CLI behaved much like Claude Code: 7 tool calls and under a minute. The slowness comes from how the default Gemini model works through a task, not from the CLI around it. If you have a Google AI Pro subscription and want Claude Code's speed on these tasks, agy --model claude-opus-5-5-high is an option to measure.

Pricing and usage limits in practice

Official plans on 2026-10-13:

Claude Code (Anthropic) Antigravity CLI (Google) Gemini CLI
Entry plan Claude Pro: $20/month, $17/month billed annually Google AI Pro: $19.99/month None for individuals
Higher tiers Max 5x: $100/month, Max 20x: $200/month Ultra: $99.99/month (5x Pro), $199.99/month (20x Pro) Code Assist Standard or Enterprise
How limits work Five-hour session limit plus a weekly limit, shared between Claude and Claude Code; no published number Pro: quota "refreshed every five hours until the weekly limit is reached", set by available capacity; AI credits for overage; no published number Per token on an API key
Pay per token Opus 5.5: $4 / $20 per million input / output tokens Gemini 3.8 Flash: $0.75 / $3.75 (until 2026-12-31, then $1.50 / $7.50) Same Gemini API prices

Sources: claude.com/pricing, Max plan, Claude Code with Pro or Max, Google AI plans, Antigravity plans, Gemini API pricing.

Which is cheaper? Per task at API prices, Claude Code: 100 tasks like ours cost about $17 with Claude Code and $54 with the default agy setup, $109 once the Flash introductory price ends. On the $20 plans, nobody publishes how much compute a five-hour window holds, so we can't say which one runs out first. What we can say is that Google draws down its quota at API prices, and on that scale each agy task used about 3.2 times the value of a Claude Code task. None of our 16 runs hit a limit.

What about Gemini CLI on an API key? It bills the same Gemini API prices per token. We did not measure how many tokens Gemini CLI itself spends on these tasks, so we won't guess its cost per task.

Running them unattended: headless mode and permissions

Headless flags and output formats

All three run one prompt to completion with -p and print JSON: a single object with --output-format json, one event per line with stream-json. Claude Code's final object includes total_cost_usd; Antigravity CLI's includes uncached input, cache reads, output and thinking tokens, and the conversation id; Gemini CLI's has a stats block with token usage. Antigravity CLI also has --print-timeout to cap a run's duration, and --mode plan for a read-only pass.

Permission modes, and the silent refusal trap

Without the skip flag, a headless run cannot ask you anything, so a tool that needs approval is denied. We tested it in a container with a prompt that needs a shell command (uname -s > os.txt):

Exit code File created Where the refusal shows
claude -p (no skip flag) 0 no permission_denials in the JSON; the answer explains the command was not approved
agy -p (no skip flag) 0 no denied_actions in the JSON, a notice on stderr, an empty response

Both exit with code 0. A CI job or cron script that only checks the exit code will report success for a run that did nothing. Check the denial fields, or grant exactly what the job needs: Claude Code's permission modes and allow rules, Antigravity CLI's permissions.allow rules in settings.json, Gemini CLI's --approval-mode (auto_edit approves edits only). Use the full skip flags only in a disposable container or VM, as we did.

Folder trust, sessions and instruction files

Which one should you use?

When Claude Code is the better pick

When Gemini CLI or Antigravity CLI is the better pick

Claude Code vs Gemini CLI vs Codex: the three-way view

Claude Code Codex CLI Antigravity CLI
Measured on 2026-10-06 and 2026-10-13 2026-10-06 2026-10-13
Default model claude-opus-5-5 gpt-6.1-sol gemini-3.8-flash-high
Passed 8/8 both days 8/8 8/8
Cost per passed task $0.181, then $0.169 $0.074 $0.544
Total wall time, 8 runs 452 s, then 318 s 389 s 3,712 s

Same tasks and checks, but Codex was measured a week earlier, with other CLI versions and 8 parallel runs instead of 4, so compare orders of magnitude, not decimals. On these four tasks, the three are equally correct; Codex is the cheapest, Claude Code the fastest with the deepest reviews, and Antigravity CLI on its default model the slowest and the most expensive at API prices. The details for Codex are in Codex vs Claude Code: Same Tasks, Measured Costs.

Using Gemini and Claude Code together

A recurring suggestion on Hacker News is "Claude plans, Gemini implements". Our numbers point the other way for small tasks, but the idea of splitting work by task type holds: send each step to the agent and model that measured best for it, and let a workflow do the handoff instead of copying text between two terminals.

We ran this benchmark with plain scripts, but in SideHub the same split is a workflow: a list of steps run by an agent on your own machine, where each step can set its own CLI with provider (claude, codex, agy, copilot or gemini). Here is a sketch that implements with Claude Code and asks Antigravity CLI for a second review:

format: sidehub.workflow/v1
name: Implement, then cross-review
defaultProvider: claude
parameters:
  - { name: issue, label: Issue number, type: string, required: true }
steps:
  - name: Implement the issue
    prompt: |
      Read GitHub issue #{{inputs.issue}} with `gh issue view`, implement it on a new branch
      and run the test suite. Do not push.
  - name: Second review
    provider: agy
    inputsFrom: ["1"]
    prompt: |
      Review the uncommitted diff of this repository for correctness, edge cases, security and
      performance. List each problem with file, line, severity and a reproducing input.
      Do not modify any file and do not run commands that write to the repository.

Each step runs as its own run, with its duration, exit code and the token usage read from the Claude Code or Antigravity CLI transcript, and you can follow it from anywhere, phone included. That is how to rerun this comparison on your own codebase and see the cost of each step. The template gallery has workflows to start from: the nightly issue triage and dependency updates are typical unattended jobs where a subscription you already pay for may be the right engine, and the project overview reads a whole repository, the case where a large context window would matter.

Limitations of this benchmark

The verdict

On four everyday tasks, Claude Code (claude-opus-5-5) and Antigravity CLI (gemini-3.8-flash-high) were equally correct: 16 passes out of 16, every planted bug found, no false alarm. Claude Code did it 12 times faster in total and 3.2 times cheaper at API prices, and wrote better reviews. Gemini CLI itself is now an API-key or enterprise tool: if you are an individual, the Google option is Antigravity CLI, and it is worth it mainly if you already pay for Google AI Pro, for work where nobody is waiting, or with a Claude model selected. Whatever you pick, rerun these four tasks on your own repository: the commands, prompts and data are all above.