[PR #5145] feat(clients): support Antigravity CLI with shared-registration lifecycle coverage #6787

Open
opened 2026-11-01 21:43:02 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/5145
Author: @IvenKooLab
Created: 10/19/2026
Status: 🔄 Open

Base: main ← Head: feat/antigravity-cli-lifecycle


📝 Commits (10+)

  • 1d48ac8 feat(clients): register Antigravity CLI during setup
  • f879216 fix(clients): detect the Antigravity CLI from its own installation root
  • 1677c06 Merge remote-tracking branch 'origin/main' into HEAD
  • 3aa30cc feat(clients): verify Antigravity CLI shared registration lifecycle
  • 5fe1377 fix(setup): separate Antigravity evidence and share registration transactions
  • 19b5fb7 fix(doctor): inspect explicitly selected registrations without markers
  • 0a43de6 Merge remote-tracking branch 'upstream/main' into feat/antigravity-cli-lifecycle
  • 44972e0 Merge remote-tracking branch 'upstream/main' into feat/antigravity-cli-lifecycle
  • 7531b6a fix(doctor): reuse the shared registration snapshot across surfaces
  • 39dc66d Merge branch 'main' into feat/antigravity-cli-lifecycle

📊 Changes

14 files changed (+1045 additions, -69 deletions)

View changed files

📝 .agents/skills/reverse-engineer-anything/references/connection-and-recovery.md (+1 -1)
📝 docs/client-configuration.md (+26 -1)
📝 docs/installation.md (+29 -28)
📝 src/application/ClientRegistrationStatus.ts (+31 -6)
📝 src/application/Setup.configuration.test.ts (+33 -0)
📝 src/application/SetupClients.ts (+8 -3)
📝 src/application/SetupPlan.ts (+17 -9)
📝 src/application/SupportedClients.ts (+91 -15)
📝 src/application/Uninstall.ts (+39 -6)
➕ tests/acceptance/setup/antigravityGeminiDetection.test.ts (+78 -0)
➕ tests/boundary/cli/antigravityLifecycle.test.ts (+262 -0)
➕ tests/boundary/cli/antigravityMaintenance.test.ts (+81 -0)
➕ tests/boundary/filesystem/antigravityCliClientConfiguration.test.ts (+345 -0)
📝 tests/boundary/filesystem/clientLifecycle.test.ts (+4 -0)

📄 Description

Summary

Install REA's workflow skill for Antigravity CLI in the CLI's own global skill directory. Keep its MCP registration shared with the IDE while detecting the CLI independently.

Problem and expected behavior

The existing antigravity client configures the shared MCP file, but installs the skill only for the IDE. CLI users therefore get MCP without the REA workflow skill. Google's MCP guide documents the shared configuration; its skills guide documents the separate CLI skill root.

Change and scope

Add antigravity_cli with its own installation evidence and skill root. The shared configuration alone selects neither surface. Automatic selection uses each surface's own root; config-only app/IDE users can select --client antigravity explicitly. Both selected surfaces share one inspected/planned/executed registration transaction, including the failure result, and retain separate skills. Explicit doctor/setup scope inspects the selected registration even without installation markers, including when --skill=false; this does not opt the surface into automatic discovery. Preserve unrelated servers and user-owned skill notes when both surfaces are installed and uninstalled.

This replaces #3249, retains its implementation and review fixes, and adds a committed public CLI regression exercising the shared-file lifecycle on current main. No separate unrelated feature is bundled. The previous discussion and validation remain available on #3249.

Follow-up for #7567: Gemini CLI automatic discovery now requires its own settings, runtime state or trusted-folder evidence; the shared .gemini parent created by either Antigravity surface is insufficient. Explicit Gemini selection remains available. The focused Antigravity CLI and public setup suites passed 12 tests on macOS; check:fast, docs:check and git diff --check passed. Actual Gemini/Antigravity loading and Windows remain unverified.

Contract and boundary impact

  • Semantic owner and earliest changed stage: supported-client definitions and installation evidence.

  • Contribution scope fit and linked maintainer decision: existing setup integration; target execution/injection scope decision not applicable.

  • CLI and MCP/tool-catalog contract: new --client antigravity_cli; no MCP tool changes.

  • Provider, bridge, target-format, or platform compatibility: standard JSON registration; executed platform coverage below.

  • Evidence, artifact, provenance, or reconstruction contract: unchanged.

  • Target selection, authority, upstream behavior, and cleanup details: explicit CLI selection or its own installation marker; shared registration, separate owned skills.

  • Generated metadata, package, or installation impact: source-derived catalog includes the client; authored installation and skill guidance updated.

  • Read existing files or captured data.

  • Launch or attach to a process.

  • Change process memory, registers, files, or configuration.

The checked effects refer to the existing setup/CLI workflow: read and update client configuration, install/remove the owned skill, and run local readiness probes. No target injection or protection recovery is added.

Evidence and regression coverage

  • Seven filesystem cases cover paths, registration preservation, shared-file cleanup and installation detection. CLI-only registration is also verified not to create app/IDE detection. Two service cases assert that successful and failed shared writes execute once and report the same result for both selected surfaces.
  • A new compiled public CLI case covers IDE-only dry-run detection without writes; CLI then IDE setup; scoped doctor; repeated two-surface setup with identical configuration bytes; uninstall; exact missing registration for both surfaces; and retained unrelated servers/settings/user notes.
  • Base evidence: current main has no antigravity_cli definition or CLI skill destination. This is a source-derived feature gap, not a newly claimed runtime bug.
  • Remaining proof gap: the closed-source Google Antigravity client was not run. REA's own public CLI and filesystem boundaries are exercised; actual Google client discovery/skill loading remains unverified.

Validation performed

October 21 refresh, head 3e22093a7, merging main d0067ba34 without rebasing or rewriting prior commits:

  • Resolved the single conflict in ClientRegistrationStatus.ts: retain one read/parse per shared registration and pass the mainline reader's new options.platform argument through that shared read. Mainline budget resolution and platform-aware environment handling are retained.
  • Fresh locked npm ci with pinned Node 24.18.0/npm 11.16.0.
  • Seven focused suites: 100 passed, 12 platform-conditioned skips (112 total). Public Antigravity lifecycle 3, config-only maintenance CLI 1, Antigravity filesystem 11, registration status 25, layered environment 10, configuration environment 35, update maintenance 27. Skipped cases are not execution evidence.
  • npm run check — passed (typecheck, lint, format, knip, metadata and architecture guards).
  • npm run docs:check — passed, including 5 README consistency tests.
  • git diff --cached --check, pre-commit and pre-push hooks — passed.

Executed on macOS arm64. Command-scoped SDKROOT/REA_DARWIN_SWIFTC_PATH select the compatible installed SDK 26.5/compiler pair; no system settings changed. Actual Google-client loading and additional Windows/Linux host runs remain unverified. The prior head had 22 successful CI checks and no failed checks; the new head's CI is pending. Automated review is not maintainer approval.

Compatibility, safety, and release

  • Breaking changes or migration steps: none; existing IDE selection remains available.
  • Real Hopper/Ghidra, browser, or OS coverage: macOS arm64 REA setup workflow only; no target/provider analysis or Windows/Linux host run claimed.
  • Package or release metadata impact: additive client catalog and installation documentation; no version bump.
  • Security, privacy, process, or containment review: isolated temporary HOME; no credentials or generated build outputs included.

Author readiness

Human owner: @IvenKooLab

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • This PR has one focused outcome and the title follows type(scope): outcome.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • Human ownership and initial readiness confirmed.
    Readiness re-check requested after the head-association race; head 7531b6a34 is fully merged with main tip 39275420e.

Maintainer blocker verification

The doctor finding is already structurally fixed: ClientRegistrationStatus keys configuration reads by the declared shared registration contract and projects the same parsed snapshot to both Antigravity surfaces. Per-surface activation remains separate. On Node 24.18.0/npm 11.16.0, npm run test:focused -- tests/boundary/filesystem/antigravityCliClientConfiguration.test.ts passed all 11 tests, including the single-read snapshot regression. No additional code change was required. Real Antigravity loading was not exercised in this pass.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/5145 **Author:** [@IvenKooLab](https://github.com/IvenKooLab) **Created:** 10/19/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `feat/antigravity-cli-lifecycle` --- ### 📝 Commits (10+) - [`1d48ac8`](https://github.com/morluto/rea/commit/1d48ac8eb1be5f4bb672a0db67d6713e9cb48720) feat(clients): register Antigravity CLI during setup - [`f879216`](https://github.com/morluto/rea/commit/f8792161c15da6b8242024ce8f31740b02c7de12) fix(clients): detect the Antigravity CLI from its own installation root - [`1677c06`](https://github.com/morluto/rea/commit/1677c06be455507b2cd50efc3ffecb2f226dfd45) Merge remote-tracking branch 'origin/main' into HEAD - [`3aa30cc`](https://github.com/morluto/rea/commit/3aa30cc2c777cb2a74cf7749eb67ae226d27a546) feat(clients): verify Antigravity CLI shared registration lifecycle - [`5fe1377`](https://github.com/morluto/rea/commit/5fe13776971909e8b160f4588c462776cc8ba6b5) fix(setup): separate Antigravity evidence and share registration transactions - [`19b5fb7`](https://github.com/morluto/rea/commit/19b5fb7f4b1041e53eb819ba65b8b0cf9bdffa8d) fix(doctor): inspect explicitly selected registrations without markers - [`0a43de6`](https://github.com/morluto/rea/commit/0a43de609448011a70ff314e29b953c7d2342dd9) Merge remote-tracking branch 'upstream/main' into feat/antigravity-cli-lifecycle - [`44972e0`](https://github.com/morluto/rea/commit/44972e0f9c9f1a1a16d580daf487ec915b42c1f3) Merge remote-tracking branch 'upstream/main' into feat/antigravity-cli-lifecycle - [`7531b6a`](https://github.com/morluto/rea/commit/7531b6a340e5ee86bc171744dd97e2c77da40b67) fix(doctor): reuse the shared registration snapshot across surfaces - [`39dc66d`](https://github.com/morluto/rea/commit/39dc66dfbf1db9ef111e47cacc50be4ca26705a5) Merge branch 'main' into feat/antigravity-cli-lifecycle ### 📊 Changes **14 files changed** (+1045 additions, -69 deletions) <details> <summary>View changed files</summary> 📝 `.agents/skills/reverse-engineer-anything/references/connection-and-recovery.md` (+1 -1) 📝 `docs/client-configuration.md` (+26 -1) 📝 `docs/installation.md` (+29 -28) 📝 `src/application/ClientRegistrationStatus.ts` (+31 -6) 📝 `src/application/Setup.configuration.test.ts` (+33 -0) 📝 `src/application/SetupClients.ts` (+8 -3) 📝 `src/application/SetupPlan.ts` (+17 -9) 📝 `src/application/SupportedClients.ts` (+91 -15) 📝 `src/application/Uninstall.ts` (+39 -6) ➕ `tests/acceptance/setup/antigravityGeminiDetection.test.ts` (+78 -0) ➕ `tests/boundary/cli/antigravityLifecycle.test.ts` (+262 -0) ➕ `tests/boundary/cli/antigravityMaintenance.test.ts` (+81 -0) ➕ `tests/boundary/filesystem/antigravityCliClientConfiguration.test.ts` (+345 -0) 📝 `tests/boundary/filesystem/clientLifecycle.test.ts` (+4 -0) </details> ### 📄 Description ## Summary Install REA's workflow skill for Antigravity CLI in the CLI's own global skill directory. Keep its MCP registration shared with the IDE while detecting the CLI independently. ## Problem and expected behavior The existing `antigravity` client configures the shared MCP file, but installs the skill only for the IDE. CLI users therefore get MCP without the REA workflow skill. Google's [MCP guide](https://antigravity.google/docs/mcp) documents the shared configuration; its [skills guide](https://antigravity.google/docs/skills) documents the separate CLI skill root. ## Change and scope Add `antigravity_cli` with its own installation evidence and skill root. The shared configuration alone selects neither surface. Automatic selection uses each surface's own root; config-only app/IDE users can select `--client antigravity` explicitly. Both selected surfaces share one inspected/planned/executed registration transaction, including the failure result, and retain separate skills. Explicit doctor/setup scope inspects the selected registration even without installation markers, including when `--skill=false`; this does not opt the surface into automatic discovery. Preserve unrelated servers and user-owned skill notes when both surfaces are installed and uninstalled. This replaces #3249, retains its implementation and review fixes, and adds a committed public CLI regression exercising the shared-file lifecycle on current main. No separate unrelated feature is bundled. The previous discussion and validation remain available on #3249. Follow-up for #7567: Gemini CLI automatic discovery now requires its own settings, runtime state or trusted-folder evidence; the shared `.gemini` parent created by either Antigravity surface is insufficient. Explicit Gemini selection remains available. The focused Antigravity CLI and public setup suites passed 12 tests on macOS; `check:fast`, `docs:check` and `git diff --check` passed. Actual Gemini/Antigravity loading and Windows remain unverified. ## Contract and boundary impact - Semantic owner and earliest changed stage: supported-client definitions and installation evidence. - Contribution scope fit and linked maintainer decision: existing setup integration; target execution/injection scope decision not applicable. - CLI and MCP/tool-catalog contract: new `--client antigravity_cli`; no MCP tool changes. - Provider, bridge, target-format, or platform compatibility: standard JSON registration; executed platform coverage below. - Evidence, artifact, provenance, or reconstruction contract: unchanged. - Target selection, authority, upstream behavior, and cleanup details: explicit CLI selection or its own installation marker; shared registration, separate owned skills. - Generated metadata, package, or installation impact: source-derived catalog includes the client; authored installation and skill guidance updated. - [x] Read existing files or captured data. - [x] Launch or attach to a process. - [x] Change process memory, registers, files, or configuration. The checked effects refer to the existing setup/CLI workflow: read and update client configuration, install/remove the owned skill, and run local readiness probes. No target injection or protection recovery is added. ## Evidence and regression coverage - Seven filesystem cases cover paths, registration preservation, shared-file cleanup and installation detection. CLI-only registration is also verified not to create app/IDE detection. Two service cases assert that successful and failed shared writes execute once and report the same result for both selected surfaces. - A new compiled public CLI case covers IDE-only dry-run detection without writes; CLI then IDE setup; scoped doctor; repeated two-surface setup with identical configuration bytes; uninstall; exact missing registration for both surfaces; and retained unrelated servers/settings/user notes. - Base evidence: current main has no `antigravity_cli` definition or CLI skill destination. This is a source-derived feature gap, not a newly claimed runtime bug. - Remaining proof gap: the closed-source Google Antigravity client was not run. REA's own public CLI and filesystem boundaries are exercised; actual Google client discovery/skill loading remains unverified. ## Validation performed October 21 refresh, head `3e22093a7`, merging main `d0067ba34` without rebasing or rewriting prior commits: - Resolved the single conflict in `ClientRegistrationStatus.ts`: retain one read/parse per shared registration and pass the mainline reader's new `options.platform` argument through that shared read. Mainline budget resolution and platform-aware environment handling are retained. - Fresh locked `npm ci` with pinned Node 24.18.0/npm 11.16.0. - Seven focused suites: **100 passed, 12 platform-conditioned skips** (112 total). Public Antigravity lifecycle 3, config-only maintenance CLI 1, Antigravity filesystem 11, registration status 25, layered environment 10, configuration environment 35, update maintenance 27. Skipped cases are not execution evidence. - `npm run check` — passed (typecheck, lint, format, knip, metadata and architecture guards). - `npm run docs:check` — passed, including 5 README consistency tests. - `git diff --cached --check`, pre-commit and pre-push hooks — passed. Executed on macOS arm64. Command-scoped SDKROOT/REA_DARWIN_SWIFTC_PATH select the compatible installed SDK 26.5/compiler pair; no system settings changed. Actual Google-client loading and additional Windows/Linux host runs remain unverified. The prior head had 22 successful CI checks and no failed checks; the new head's CI is pending. Automated review is not maintainer approval. ## Compatibility, safety, and release - Breaking changes or migration steps: none; existing IDE selection remains available. - Real Hopper/Ghidra, browser, or OS coverage: macOS arm64 REA setup workflow only; no target/provider analysis or Windows/Linux host run claimed. - Package or release metadata impact: additive client catalog and installation documentation; no version bump. - Security, privacy, process, or containment review: isolated temporary HOME; no credentials or generated build outputs included. ## Author readiness <!-- The human owner completes these declarations before requesting review. The PR author is the owner by default. A different owner must explicitly accept ownership on this PR. AI agents must leave these declarations to a human to dictate to them or there could be catastrophic consequences for many users of REA. Draft PRs may leave them unchecked. These declarations record initial readiness when opening the PR for review; later pushes do not require a new human sign-off. Keep the description and validation evidence current as the work changes. See CONTRIBUTING.md#pull-request-ownership-and-readiness. --> Human owner: @IvenKooLab - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] This PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] Human ownership and initial readiness confirmed. _Readiness re-check requested after the head-association race; head 7531b6a34 is fully merged with `main` tip 39275420e._ <!-- maintainer-blocker-review --> ### Maintainer blocker verification The doctor finding is already structurally fixed: `ClientRegistrationStatus` keys configuration reads by the declared shared registration contract and projects the same parsed snapshot to both Antigravity surfaces. Per-surface activation remains separate. On Node 24.18.0/npm 11.16.0, `npm run test:focused -- tests/boundary/filesystem/antigravityCliClientConfiguration.test.ts` passed all 11 tests, including the single-read snapshot regression. No additional code change was required. Real Antigravity loading was not exercised in this pass. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#6787
No description provided.