●FLASH — Gemini 3.5 Flash is now generally available, billed as the most intelligent model for agentic and coding tasks●AGENTS — Managed Agents arrive in public preview, running autonomous agents in Google-hosted isolated Linux sandboxes●WEBHOOK — Event-driven webhooks now replace polling for the Batch API and long-running operations●SEARCH — File Search goes multimodal, embedding and searching images via gemini-embedding-2●SUNSET — gemini-3.1-flash-image-preview and gemini-3-pro-image-preview shut down on June 25●ANTIGRAVITY — The Antigravity Agent managed agent (antigravity-preview-05-2026) is available in public preview●FLASH — Gemini 3.5 Flash is now generally available, billed as the most intelligent model for agentic and coding tasks●AGENTS — Managed Agents arrive in public preview, running autonomous agents in Google-hosted isolated Linux sandboxes●WEBHOOK — Event-driven webhooks now replace polling for the Batch API and long-running operations●SEARCH — File Search goes multimodal, embedding and searching images via gemini-embedding-2●SUNSET — gemini-3.1-flash-image-preview and gemini-3-pro-image-preview shut down on June 25●ANTIGRAVITY — The Antigravity Agent managed agent (antigravity-preview-05-2026) is available in public preview
Getting Ready for the Gemini CLI and Code Assist Personal Shutdown: A June 18 Migration Inventory
On June 18, personal access to Gemini CLI and Code Assist stops. Here is how I found every place I depended on it and moved each one to either Antigravity CLI or direct API calls, using my own setup as the example.
I have had "June 18" circled on my calendar for a few days now, and I keep glancing at it. That is the day personal access to Gemini CLI and Code Assist stops processing requests. It affects not only free personal users but also AI Pro and Ultra accounts, and from that point everyone is pointed toward the Antigravity CLI. Code Assist for GitHub stops new installs on the same day.
The trouble with "personal" tools is exactly that they tend to creep deep into your automation without you noticing. As an indie developer running four sites myself, I had been casually calling the gemini command from scripts that format articles and generate release notes. The last thing I want is to discover the dependency only when CI turns red on the deadline. With only a few days left, this is the moment to do a calm inventory.
What Stops on June 18, and What Does Not
The first thing worth separating is what breaks versus what is unaffected. If you leave that fuzzy and rebuild everything, you will waste time on migrations you never needed.
What stops is request processing from personal accounts (free and AI Pro / Ultra) through the Gemini CLI and Code Assist extensions, plus new installs of Code Assist for GitHub.
What does not stop is the Gemini API itself. Anything calling models like gemini-3.5-flash through an API key or Vertex AI keeps working straight through June 18. In other words, the "interactive agent experience" moves to Antigravity, while "calling the model from your program" stays exactly as it is. That dividing line is the backbone of the strategy below.
Category
After 6/18
Action
Personal Gemini CLI interactive use
Stops
Move to Antigravity CLI
Code Assist IDE extension (personal)
Stops
Move to Antigravity / API
Code Assist for GitHub
New installs stop
Move existing wiring to the API
Gemini API (key / Vertex)
Continues
Keep, and pull automation toward direct calls
First, Find Every Place You Depend on Gemini CLI
You cannot migrate what you cannot see. Rather than rely on memory, scan all your repositories mechanically. I started from this single line.
# Scan all repos at once and list CLI / Code Assist dependenciesfor repo in ~/repos/*/; do echo "=== ${repo} ===" grep -rnE 'gemini (chat|run|generate|code)|gemini-cli|code-assist|geminicodeassist' \ "$repo" \ --include='*.sh' --include='*.mjs' --include='*.ts' \ --include='*.yml' --include='*.yaml' --include='*.json' \ 2>/dev/nulldone
In my environment this hit 23 spots: 8 in shell scripts, 4 in Node scripts, and the remaining 11 inside GitHub Actions workflows. The surprise was that nearly half of the CLI calls I assumed I "just typed by hand" were actually baked into CI.
Tag each hit with a priority right there. I used three tiers.
Runs daily in CI (highest) — breaks automated operations if it stops
Occasional local use (medium) — only inconveniences me if it stops
Leftover, actually unused (low) — delete it while you are here
Finding that third category is part of the value. In my case, four hits were dead dependencies nobody called anymore; deleting them was the whole fix.
✦
Thank you for reading this far.
Continue Reading
What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.
WHAT YOU'LL LEARN
✦A one-line grep to surface every CLI call across all your repositories
✦Before/after GitHub Actions YAML for replacing Code Assist with the Gemini API
✦A shutdown-resistant design that moves unattended automation to direct google-genai SDK calls
Secure payment via Stripe · Cancel anytime
✦
Unlock This Article
Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.
The Code Assist Dependency Hiding in CI and GitHub
The riskiest spots are workflows that call Code Assist inside GitHub Actions, because they will quietly start failing on June 18. Using a "doc sync" workflow from my own repo, here is the replacement logic.
Before, it leaned on the Code Assist extension.
# before: depends on Code Assist (expected to fail after 6/18)name: doc-syncon: push: paths: ["src/**"]jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Generate docs with Code Assist run: | gemini code generate-docs \ --input src/ \ --output docs/
That gemini code family of subcommands is exactly what the personal shutdown targets. Moving to direct API calls (next section) is the most robust option, but any step where you want interactive completion can go to Antigravity instead. The deciding question is "does a human review results as it runs, or does it complete unattended?" CI is unattended by nature, so I tilted it toward direct API calls.
Move Interactive Scripts to the Antigravity CLI
The steps I used interactively — drafting code reviews, talking through a refactor — move to the Antigravity CLI, which is where Google is pointing Gemini CLI users.
Install and first sign-in look roughly like this (always confirm the exact command surface against the official release notes at migration time; here I am showing the shape of the replacement).
# 1) Install the Antigravity CLInpm install -g @google/antigravity-cli# 2) Sign in with your Google account (a browser opens)antigravity auth login# 3) Smoke test: hand it one file to summarizeantigravity run --model gemini-3.5-flash \ --prompt "Explain this file's responsibility in three lines" \ --file src/lib/content.ts
One practical tip: do not switch the command name in one shot. I dropped a temporary shell alias so my muscle memory (typing gemini) stayed intact while the engine underneath changed.
# Temporary migration alias in ~/.zshrc# Fingers type gemini; the real call is antigravityalias gemini='antigravity run --model gemini-3.5-flash --prompt'
I lived with that for a few days, and once it felt natural I removed the alias and used the real name. Trying to rebuild even your finger memory in one go just raises the friction; taking it in stages is, in my experience, the faster path overall.
Park Unattended Work on Direct API Calls
This is the heart of the migration. Unattended work like CI is most shutdown-resistant when it calls the Gemini API directly, with no CLI in between. However the CLI's delivery model changes, anything that calls the API with a key is unaffected.
Here is the same "doc sync" workflow rewritten as a direct google-genai SDK call.
# scripts/gen_docs.py — call the API directly, no CLIimport os, pathlibfrom google import genaiclient = genai.Client(api_key=os.environ["GEMINI_API_KEY"])SRC = pathlib.Path("src")OUT = pathlib.Path("docs")OUT.mkdir(exist_ok=True)for path in SRC.rglob("*.ts"): code = path.read_text(encoding="utf-8") resp = client.models.generate_content( model="gemini-3.5-flash", contents=( "Document the public API of the following TypeScript in concise Markdown. " "Prioritize how to use it over implementation details.\n\n" f"```ts\n{code}\n```" ), ) doc_path = OUT / (path.stem + ".md") doc_path.write_text(resp.text, encoding="utf-8") print(f"wrote {doc_path}")
The workflow loses the CLI install and just adds Python and the SDK.
# after: direct API call (independent of CLI delivery model)name: doc-syncon: push: paths: ["src/**"]jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Generate docs via Gemini API env: GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | pip install google-genai python scripts/gen_docs.py
The diff between before and after is small, but the meaning differs a lot. Before depended on a personal tool staying available. After depends only on an API key being valid. The latter keeps far more inside your own control.
Unattended jobs are also the slowest to notice when they break. So I added a tiny failure notice here: a few lines that turn the job red and ping Slack if the response is empty or an exception is thrown. It is unglamorous, but for an externally imposed deadline like June 18, those few lines earn their keep.
Verify Nothing Broke After the Migration
Once you rewrite, verify now — do not wait for the deadline. Walking into the cutoff on "it should work" is the worst place to be.
I narrowed verification to three checks.
Run CI once with an empty commit — does the workflow go green?
Eyeball the output — is it empty strings or a canned error message?
Check API rate limits — moving from CLI to direct calls changes how call volume shows up
The third is easy to miss. My doc sync targeted every *.ts file, so a single push made dozens of API calls. gemini-3.5-flash is fast and cheap, but that volume brushes against the free-tier per-minute request limit. I scoped it to changed files only, holding it to around a dozen calls per run. When I timed it, each file took roughly the same a few seconds before and after; with the CLI overhead gone, batching several files was actually a touch faster.
The Checklist Through June 18
Finally, here is the order of remaining work. This is the sequence I worked through myself.
Grep every repo for CLI / Code Assist dependencies, tagging each highest / medium / low
Delete the "low (unused)" ones and stop thinking about them
Rewrite "highest (CI)" to direct API calls — keep the CLI out of unattended work
Move "medium (local, interactive)" to Antigravity CLI, preserving muscle memory with a migration alias
Run the rewritten CI on an empty commit and confirm both the green status and the output content
Re-estimate API rate limits and per-run call counts
Add a failure notice (a few lines that turn the job red on empty responses or exceptions)
Externally imposed deadlines arrive regardless of your own schedule. That is exactly why it matters to pull control of the response back to your side. As a next step, just run the grep on one local repo. If the dependency turns out to be small, that is reassurance; if it is large, you will be glad you moved early.
Thank you for reading. I hope it helps with the planning of any fellow indie developer who is also racing a deadline.
Share
Thank You for Reading
Gemini Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.