Skip to content

feat(providers): observe local Antigravity sessions - #462

Merged
dastratakos merged 2 commits into
mainfrom
dastratakos/antigravity-support
Aug 22, 2026
Merged

feat(providers): observe local Antigravity sessions#462
dastratakos merged 2 commits into
mainfrom
dastratakos/antigravity-support

Conversation

@dastratakos

@dastratakos dastratakos commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Luke now observes Google Antigravity's coding agents across all three of its surfaces — the Agent Manager app, the IDE, and the agy terminal CLI — from the state each already writes under ~/.gemini/<profile>/, read-only, with no credential and no hook.

Antigravity's formats are protocol buffers whose schemas ship only inside its own binary, so the adapter carries a small wire-format reader over field numbers taken from the schema descriptors that binary embeds, with a records.ts naming every field it consults.

  • Roster — the Agent Manager's own summaries index gives its conversations their title, run status, workspace, branch, permission holds, and the agent's latest notification as the recap. The IDE and CLI write no index, so their rows derive from each conversation's SQLite store: status from the newest step, the held tool while a permission dialog stands (run_command: git push --force), errors in the app's own recorded words, and archived conversations draw no row.
  • Names — a derived conversation is named by the developer's rename, else the title the app generated for itself (recorded on the newest checkpoint step — the same name every Antigravity picker shows), else the developer's opening ask, else its workspace.
  • Workspace and branch — from the store's own trajectory metadata, with the branch read live from the folder's git HEAD the way the Cursor adapter reads it.
  • Opens — a row's address is the surface that holds it: the Agent Manager under its antigravity: scheme (carrying the app's own /c/<id> conversation route, verified harmless today and ready for the day its deep-link handler learns it), the IDE's workspace window under the antigravity-ide://file form every VS Code-derived editor routes, and no address for a CLI conversation, like every terminal agent. Neither app documents a conversation-level deep link; both behaviors were verified against the running apps.
  • Transcripts — on-demand bounded rendering from the conversation store: the developer's words, the agent's replies and notifications, tool calls with their inputs, and recorded failures. Tool outputs live in blobs this build does not render, and pre-SQLite .pb conversations are not plaintext; both keep the honest refusal.
  • Read-only — Antigravity documents no way to message a running conversation (its agentapi needs tokens the app hands only to its own subprocesses), so sessions advertise nothing and stay entirely read-only.
  • Mark — the double-arch reproduced verbatim from the vector antigravity.google inlines as its own site logo, aurora field and all, the way the Gemini mark is.

The guide, README table, and transcript-read list learn the provider in the same change. 30 adapter/transcript tests, all fixtures synthesized.

Testing

  • ./scripts/check.sh passes; ./scripts/verify.sh passed on the UI change (mark + CSS), evidence inspected, no physical-notch check performed
  • Verified live against a machine running all three surfaces: 109 conversations observed with titles, branches, holds, recaps, and links; transcript rendering checked against a real conversation; both deep-link forms opened the right app/window

🤖 Generated with Claude Code

Automated visual evidence

Download the deterministic macOS evidence · workflow run

  • Commit: 8051b4735192dae3bf381284dd853b146e7df657
  • Scenario: smoke
  • Physical-notch check: not performed by CI

Antigravity runs coding agents on three surfaces — the Agent Manager app,
the IDE, and the agy terminal CLI — and all three record their
conversations under ~/.gemini/<profile>/. The formats are protocol
buffers whose schemas ship only inside Antigravity's own binary, so the
adapter carries a small wire-format reader over field numbers taken from
the schema descriptors that binary embeds, and a records module naming
every field it consults.

The Agent Manager writes a summaries index (title, run status, workspace,
branch, permission holds, the agent's latest notification), and its
conversations draw the index's own reading. The IDE and CLI write no
index, so their rows derive from each conversation's SQLite store: status
from the newest step, the held tool while a permission dialog stands, the
generated title the newest checkpoint step records — the same name every
surface's picker shows — the developer's opening ask and rename as the
next names in line, the workspace from the store's trajectory metadata,
and the branch from the folder's own git HEAD. Errors carry the app's own
recorded words, recaps are the agent's latest notification once a turn
settles, and archived conversations draw no row.

A row's address is the surface that holds it: the Agent Manager under its
antigravity: scheme (with the app's own /c/<id> conversation route, ready
for the day its deep-link handler learns it), the IDE's workspace window
under the antigravity-ide://file form every VS Code-derived editor
routes, and no address for a CLI conversation, like every terminal
agent's. Neither app documents a conversation-level deep link today, and
Antigravity documents no way to message a running conversation, so its
sessions stay entirely read-only; conversations from older builds are not
plaintext and keep the honest refusal, as does transcript rendering for
tool outputs, which live in blobs this build does not render.

The double-arch mark is reproduced verbatim from the vector
antigravity.google inlines as its own site logo, aurora field and all,
the way the Gemini mark is; the guide, README table, and transcript-read
list learn the provider in the same change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
luke-web Skipped Skipped Aug 22, 2026 4:38am

Request Review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ac5750d. Configure here.

Comment thread packages/providers/src/antigravity/adapter.ts Outdated
The indexed rows read their store's newest step only inside the freshness
window, so a settled failure older than fifteen minutes melted to idle —
but a failure does not heal by going stale. Every row now reads its store
through the same mtime-keyed cache the derived rows use, so the reading
costs a stat per pass instead of an open, and an old failure stays the
rescue it is.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dastratakos
dastratakos added this pull request to the merge queue Aug 22, 2026
Merged via the queue into main with commit 6239560 Aug 22, 2026
10 checks passed
@dastratakos
dastratakos deleted the dastratakos/antigravity-support branch August 22, 2026 04:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant