# Gemini plan (/docs/providers/gemini)

The Gemini account answers with the Gemini plan of the visitor's Google account, through Google's Cloud Code service, as Google's Antigravity app does. The wallet lists it as Gemini under "With your plan", with the id `gemini`. A Gemini API key is a separate account, described on the [Gemini API key](/docs/providers/gemini-key) page.

## What the visitor needs [#what-the-visitor-needs]

A Google account with a Gemini plan. When the account has no Cloud Code project yet, the wallet enrolls it in the tier Google marks as its default, or in `free-tier` when Google marks none.

## Sign in [#sign-in]

1. In the wallet, the visitor picks Gemini under "With your plan".
2. The wallet opens a window on Google's sign in, `https://accounts.google.com/o/oauth2/v2/auth`, for the Antigravity app, with offline access and the consent screen.
3. The visitor picks the Google account and accepts the access.
4. Google sends the window to `http://localhost:51121/oauth-callback`, an address that does not load. The wallet reads that address from the window as soon as it lands there and closes the window.
5. The wallet trades the code for tokens at `https://oauth2.googleapis.com/token`, with the installed app secret of Antigravity that the wallet carries.
6. It finds the account's Cloud Code project, and enrolls the account first when it has none.
7. It asks for the models of Antigravity's agent to learn the model Google starts the account on, and the account is connected.

When the wallet misses the address, the visitor copies the whole address of the window into the "Address of the window" field of the side panel. An address from another sign in is refused with "Google came back from another sign in". When Google is still setting up a new account, the sign in ends with "Google is still setting up this account. Sign in again in a moment." The sign in stays open for ten minutes.

The wallet renews the access token with the refresh token and the same app secret, from one minute before it expires.

## Models [#models]

The wallet lists the models Antigravity's agent offers the account, from Cloud Code's `fetchAvailableModels`, in the agent's order and without the models Google marks as disabled. It keeps the list for a day. The visitor picks the account's default model in its settings, and a model per site with the buttons of the side panel.

Without a choice, the account answers with the model Google gives Antigravity's agent at sign in (`defaultAgentModelId`), else with `gemini-3.8-flash-medium`.

## Usage and limits [#usage-and-limits]

The wallet reads no usage header specific to Gemini. It reads `x-ratelimit-remaining-tokens` and `x-ratelimit-limit-tokens` on any answer that carries them, as it does for every account. Without them, the card keeps saying "Usage shows after the first answer", and Auto ranks the account among the accounts with no reading.

## Calls [#calls]

Answers come from `https://daily-cloudcode-pa.googleapis.com/v1internal:streamGenerateContent?alt=sse`: Gemini's contents format inside an envelope that names the account's project, with the request type `agent`. All four request options reach Google. This endpoint reads images inline only: an image sent as a `data:` URL reaches it, and the wallet answers an image sent as an https URL with an error.

## Known issues [#known-issues]

- The sign in borrows the OAuth client of Antigravity and its installed app secret.
- The calls go to Cloud Code's daily endpoint and present Antigravity's `User-Agent`, `antigravity/hub/2.29.0 (aidev_client; os_type=darwin; arch=arm64)`.
