Uh oh!
There was an error while loading. Please reload this page.
feat(providers): add Google Antigravity via the official ACP agent - #9348
Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
Macroscope skipped reviewing this pull request. Per-review cost limit exceeded (workspace setting). This review would cost an estimated $31.15, which exceeds your per-review limit of $10.00. The top 3 files driving up this estimate:
Tip To get this pull request reviewed, you can:
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR introduces a substantial Antigravity runtime, authentication, installation, ACP-session, and web/mobile setup workflow, with changes reaching shared production paths. It also changes product defaults, adds a static-analysis suppression, and has an unresolved sign-in retry race concern requiring human assessment. Not approved because:
Review your spending limits in Billing settings, or comment |
b3533f9 to
549fcbbCompareUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
549fcbb to
7bfe6f2CompareRudolphLamp
commented
Sep 3, 2026
Please Theo, I have beeeen waiting for this. |
7bfe6f2 to
ef6c47bCompareThere was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1ebbaef. Configure here.
| ); | ||
| const forwarded = yield* Fiber.await(pending.forwarding); | ||
| if (Exit.isFailure(forwarded)) { | ||
| return yield* setupError("complete", FORWARDING_FAILED_MESSAGE); |
There was a problem hiding this comment.
Sign-in retry races cleanup
Medium Severity
When callback delivery fails, complete now returns immediately and only fails the flow from a forked tapError handler. The client can retry while stopFlow is still interrupting the agent, so start sees operation === "cancel" and reports that setup is already in progress. Previously complete awaited stopFlow before returning, so retry was possible as soon as the error appeared.
Reviewed by Cursor Bugbot for commit 1ebbaef. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
macOS previewThe preview download was removed because this PR closed or the preview label was removed. |
Antigravity only used part of what its ACP agent offers. Chat sessions now advertise the client file system, so the agent reads and edits workspace files through T3 and every write becomes a file change approval. Audio files attach as native audio blocks. The attachments directory is granted as an additional session directory. The agent's prompt injection warning on "allow always" is shown next to the "Allow for this thread" choice on web and mobile. The instance config selects the ACP auth method: Google account (default), Gemini Enterprise, Gemini API key, or Agent Platform. API keys pass through the agent's environment and the GCP project and location through the profile's settings.json. Setup cards on web and mobile relabel sign-in as a credential check for the non-browser methods. The provider settings form gains a select control for this. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Drop the platform error text from a wire-facing invalidParams data field, state the reason next to two node builtin import suppressions, and use catchTags for the single tagged PlatformError in the skills probe. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Provider lists sorted by display name, which put Antigravity first. Snapshots now sort by built-in driver order, so Codex and Claude lead and Antigravity is last on every client. The legacy settings struct matches that order. Google returns every Gemini generation the account can use. The bundled model manifest now names Gemini 3.8 Flash as current for Antigravity and the driver classifies through it like Codex does, so the picker folds the older models under its legacy section. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…view Four review findings, each reproduced by a focused test: - The profile settings.json now records auth.type, so the agent's logout clears only the active method's token instead of every stored token. - Callback forwarding failure is handled by an instance-owned fiber. A client that disconnects after sending the redirect URL no longer leaves the flow at "verifying" until the deadline. - Skills discovered on disk survive session and command updates. They were replaced with an empty list, and the registry never re-read the workspace. - Web blocks Send when a ready Antigravity catalog no longer lists the saved model, matching mobile. Provider error states still allow a retry. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The catalog took Google's current model as the default, which is still Gemini 3.7 Flash (High). The model manifest now names a chat default for Antigravity and applyModelManifest moves the default flag and its alias to that model when the account offers it. The default alias resolves to the same model at session start, turn start, and in text generation helpers, and falls back to the agent's choice when the account lacks it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1ebbaef to
3c5d703CompareUh oh!
There was an error while loading. Please reload this page.
## What's Changed * fix(web): keep trailing tool groups out of "Worked for" accordion by @Yash-Singh1 in pingdotgg/t3code#9384 * feat(marketing): put named-developer quotes on the landing page by @t3dotgg in pingdotgg/t3code#9385 * fix(claude): expand slash commands when a message has attachments by @t3dotgg in pingdotgg/t3code#9122 * fix(web): stop the resting composer layout loop by @t3dotgg in pingdotgg/t3code#9393 * fix(web): render assistant images inline in chat by @t3dotgg in pingdotgg/t3code#9126 * feat(providers): add Google Antigravity via the official ACP agent by @t3dotgg in pingdotgg/t3code#9348 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1267...v0.0.39-nightly.20260903.1268 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1268


Google ships an official Antigravity agent on the ACP registry, but it has no CLI, no npm package, and no login command. Users could not use their Google AI subscription in T3 Code.
This adds Antigravity as a sixth built-in provider, off by default and listed after the others. Everything runs through Google's official ACP executable. Personal Google sign-in is the default. The instance config can also select Gemini Enterprise, a Gemini API key, or Agent Platform (Vertex AI). T3 Code never falls back from the method you pick.
What the user does
initializecall. Progress streams to every client.127.0.0.1redirect URL into the setup card.Sign out, cancel, retry, and Remove downloaded runtime are all on the same card.
/logoutin a thread signs out the instance too.How it works
AntigravityInstallationowns downloads and the immutabletools/antigravity-acp/<platform>-<arch>/versionstree.active.jsonselects the release for new processes. Running processes hold a lease so updates never replace a live binary.AntigravityAuthowns the sign-in flow per instance. The official agent prints its OAuth URL as one plain stdout line, so the ACP transport gets a stdout filter that catches only that exact prefix. A controlledBROWSERhelper stops the agent from opening a browser on the host. Each instance gets its ownGEMINI_HOMEprofile with file token storage, so two accounts never share a keychain entry.default,auto_edit, andyolomodes, routes the agent'sinteraction_permission requests to T3's user input questions, promotes commands that outlive a turn to background tasks, and rejects conversation rewind before the checkpoint reactor touches files.provider.auth.*andprovider.install.*. NewServerProviderfields:setup,supportsConversationRollback,supportsTextGeneration. Old clients ignore them.session/resume, a wait-for-prompt cancel path, stderr draining, thought chunks, and startup metadata buffering. Other providers keep their existing behavior.Using the whole ACP surface
The later commits pick up everything the agent exposes:
fs.readTextFileandfs.writeTextFile. The agent reads and edits workspace files through T3 with itsclient_view_fileandclient_edit_filetools. Each write arrives as a file change approval with the content, so Supervised and Auto-accept edits work the same as other providers. Reads and writes are contained to the workspace and the attachments directory.additionalDirectoriesentry onsession/newandsession/resume.agy.security.warningon "allow always" is surfaced on theAllow for this threadoption, with a tooltip on web and inline text on mobile.Sign-in methodin the provider settings selectsoauth-personal,oauth-business,gemini-api-key, oragent-platform. API keys pass through the agent's environment asGEMINI_API_KEYorGOOGLE_API_KEY. The GCP project and location are written to the profile'ssettings.jsonon each launch. The setup card relabels sign-in asConnectfor the two methods that never open a browser. AmbientGOOGLE_*variables on the host are still stripped.imagePath, so no change there.Not shipped on purpose: the agent's global hooks and MCP config files. T3 Code already refuses text generation helpers when those exist in the profile, and there is no product surface that wants them yet.
Ordering and model list
Provider snapshots used to sort by display name, which put Antigravity first everywhere. They now sort by built-in driver order, so Codex and Claude lead and Antigravity is last in Settings and the picker sidebar.
Google returns every Gemini generation the account can use, 11 models today, and still marks Gemini 3.7 Flash (High) as its current default. The bundled model manifest now names Gemini 3.8 Flash as current for Antigravity with 3.8 Flash (High) as the chat default. The driver classifies through it like Codex does, so the picker shows three entries and folds the other eight under Legacy models, and new threads start on 3.8 Flash (High). Updating the manifest on
mainchanges both without a release.Verified on the real agent
Linux x64, isolated dev server, real Google account:
cat, and the checkpoint diff shows one changed file.notes.txt. The provider log showsclient_edit_file, T3 raised a file change approval, and the file on disk changed. A turn with an attached 440 Hz wav replied "I hear a continuous, clear, single-pitch sine wave tone." Switching the live instance to Gemini API key relabels the card,Connectwithout a key reports the missing credential without spawning a process, and switching back to Google account keeps the saved token.gemini-3.8-flash-high.One bug surfaced during this: Google gzips the archive, so the pinned
content-lengthcheck rejected every real download. Fixed and covered by a test.Not covered here
Screenshots
Provider card after install, before the first authenticated session:
A tool-using turn through Antigravity with the checkpoint diff:
Provider list with Antigravity last, and the card with the sign-in method select:
Gemini API key selected with no key entered, after pressing Connect:
Model picker with only Gemini 3.8 Flash current and the older generations folded:
Docs:
docs/user/providers-antigravity.md, install, permission modes, remote access, anddocs/internals/providers.md.Built with Claude Fable 5.1 in Claude Code, on top of research and implementation from a GPT-5.6 Sol thread in T3 Code.
Note
Medium Risk
Touches OAuth sign-in, queued message delivery gating, and user-input answer semantics on mobile; mistakes could block sends or submit wrong interaction answers, but changes are mostly client-side with guards and tests.
Overview
Documents Google Antigravity alongside existing providers in README and AGENTS.md, including install/sign-in steps that do not require a CLI.
On mobile, adds end-to-end Antigravity provider setup: a dedicated settings route (enable/disable, managed install progress, Google OAuth with browser + pasted
127.0.0.1callback),ProviderSetupLinkentry points from environments, connections, cloud onboarding, and the thread model picker, plus an Antigravity icon.Model selection behavior changes for Antigravity: the app keeps the user’s selection when setup or catalog changes make it unusable, surfaces
isUnavailablein the picker, blocks send/start until setup completes, and routes explicit catalog refresh throughrefreshModels: true. Plan/build interaction mode is suppressed when the server setsshowInteractionModeToggle: false, while native provider/planslash commands still insert literal text.Pending user input now submits option values (not display labels), honors
allowCustomAnswer: false, and approval cards can show option warnings. Clipboard / external URL helpers add aprovider-authtarget and tighten logging so OAuth URLs and secrets do not appear in diagnostics. The thread outbox waits for server config before sending even text-only messages so provider capability checks can run.Reviewed by Cursor Bugbot for commit 3c5d703. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add Google Antigravity provider via the official ACP agent
allowCustomAnswerto block custom text on choice-only questionsProviderServiceandCheckpointReactorso unsupported providers reject reverts before any file or history changesProviderServiceShapegains a requiredassertConversationRollbackSupportedmethod; all in-tree implementations and test harnesses are updated, but out-of-tree consumers must implement it. Model-list subscription atom family keys now include therefreshModelsflag, invalidating any pre-existing cached entries for the same environment/instance.Macroscope summarized 3c5d703.