Skip to content

feat(framework+cli): fw-4.42.0 / cli-3.43.0 — Antigravity CLI succeeds Gemini CLI - #411

Merged
montfort merged 2 commits into
mainfrom
feat/antigravity-agent-surface
Aug 6, 2026
Merged

feat(framework+cli): fw-4.42.0 / cli-3.43.0 — Antigravity CLI succeeds Gemini CLI#411
montfort merged 2 commits into
mainfrom
feat/antigravity-agent-surface

Conversation

@montfort

@montfort montfort commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What

Google retired Gemini CLI; its successor is Antigravity CLI (agy). StrayMark's Gemini-era surfaces are retired with it — and the framework gains the mechanism that makes retiring a distributed path possible at all.

The correction that reshaped this

The obvious reading of "discontinue Gemini CLI" is half wrong. Verified against agy 1.1.10 installed locally and against agy-customizations, the skill Google ships inside the binary as the authoritative spec of its customization system:

Surface What Antigravity actually does
GEMINI.md Reads it. A first-class Rules file alongside AGENTS.md and .agents/rules/*.md.
~/.gemini/ Its own global config dir. The binary carries a resolve_gemini_dir symbol; ~/.gemini/skills/, settings.json and GEMINI.md are live.
<project>/.gemini/skills/ Not a discovery location. Workspace roots are .agents/, .agent/, _agents/, _agent/.
<project>/.agent/workflows/ Read by nothing. Right root, wrong shape — agy wants skills/<name>/SKILL.md, and the binary contains no agent/workflows string.

The product was retired; the on-disk contract was kept. So GEMINI.md stays (deleting it would remove a rules source from the very CLI we're adding support for), retitled to the Antigravity lineage with identity antigravity-v{version} and a note explaining why the filename persists — without it the next reader deletes it as a leftover.

Meanwhile .agent/workflows/ — the channel the README advertised as the Antigravity surface — was read by nothing at all.

Changes

New channel dist/.agent/skills/, generated from the Claude source rather than hand-mirrored. That choice came from the data: .gemini/skills/ had drifted behind .claude/ in 7 of 15 skills because nothing regenerated or gated it, while the generated .codex/ channel was byte-perfect. A git mv would have imported the stale files. gen_codex_skillsgen_minimal_skills, emitting both minimal-frontmatter channels under the existing CI gate.

New retired: manifest key. Retiring a distributed path was previously impossible to complete: update_files only copies, so a directory dropped from files: survived in every existing installation until someone ran straymark remove. Deletion is provenance-gated — a file goes only when its hash still matches what .checksums.json recorded. Operator-edited files and files StrayMark never installed are kept and reported distinctly, because telling someone they "modified" a file they wrote themselves erodes trust in the report.

Also: --agent gemini--agent agy (the guidance no longer derives the source dir from the agent name — Antigravity reads .agent/skills/, not .agy/skills/); auditor-CLI prose across skills, governance, CLI output and website; docs in EN/es/zh-CN, including the zh-CN CLI-REFERENCE that was two releases behind.

The line I drew: CLI vs model

The Gemini CLI was retired; the Gemini models were not, and agy serves them. The audit skills already require auditor: to name the backend model rather than the CLI. So prose telling the operator which CLI to open moved to agy, while model ids, Sentinel telemetry, test fixtures and the Charter-template rule justified by an observed Gemini-auditor behavior across 2 cycles were left exactly as written. Rewriting the actor in a piece of evidence would falsify the evidence.

Verification

  • cargo test: 953 passed, 0 failed.
  • New retired_paths_test.rs + four unit tests covering the three provenance outcomes, full-subtree cleanup, the no-op case, and the pre-4.42.0 manifest parse (#[serde(default)] is load-bearing — every older .straymark/dist-manifest.yml lacks the key).
  • Manual e2e on a simulated fw-4.41.0 install: two pristine files pruned, one operator-edited file kept and flagged as modified, one operator-authored file kept and flagged as not installed by StrayMark, parents cleaned only when empty.

The e2e caught two defects before they shipped: repair returned early on a healthy installation, so the sweep would never have run where it mattered; and the first report conflated "you edited this" with "this was never mine". A unit test caught that only the retired root was cleaned, leaving emptied skill subdirectories behind.

Root confirmed empirically. .agent/ vs .agents/ was the one assumption the code couldn't settle — Google's doc lists .agent/ as an alias, the binary's path templates only build .agents/. Three headless agy -p probes failed to distinguish them (print mode doesn't exercise workspace customization discovery at all, even in a trusted dir with a git root). The operator ran it interactively: agy listed both probe skills. .agent/ is a real alias; shipped channel unchanged.

Release

fw-4.41.0fw-4.42.0, cli-3.42.0cli-3.43.0. Minor, not major: two directories leave the adopter's tree but neither was consumed by a live runtime, the content reappears in .agent/skills/, and migration is automatic via retired:.

Decision in AIDEC-2026-08-05-002, work in AILOG-2026-08-05-004.

🤖 Generated with Claude Code

montfort and others added 2 commits August 6, 2026 00:51
…s Gemini CLI

Google retired Gemini CLI; its successor is Antigravity CLI (agy). Verified
against agy 1.1.10 and agy-customizations — the spec Google ships inside the
binary — the obvious reading of "discontinue Gemini CLI" is half wrong:

- GEMINI.md is NOT retired. Antigravity reads it as a first-class Rules file
  alongside AGENTS.md, and its global config dir is ~/.gemini/ (the binary
  carries a resolve_gemini_dir symbol). Deleting it would have removed a rules
  source from the very CLI we are adding support for. Kept, retitled to the
  Antigravity lineage, identity antigravity-v{version}, with a note explaining
  why the filename stays so nobody deletes it as a leftover.
- <project>/.gemini/skills/ IS dead: not a discovery location for agy, whose
  workspace roots are .agents/ .agent/ _agents/ _agent/.
- .agent/workflows/ is read by nothing. Right root, wrong shape — agy wants
  skills/<name>/SKILL.md, and the binary has no `agent/workflows` string. It
  had been advertised in the README as the Antigravity channel regardless.

New channel: dist/.agent/skills/, generated from the Claude source rather than
hand-mirrored. That choice came from the data — .gemini/skills/ had drifted
behind .claude/ in 7 of 15 skills because nothing regenerated or gated it,
while the generated .codex/ channel was byte-perfect. gen_codex_skills becomes
gen_minimal_skills and emits both under the existing CI gate.

Retiring a distributed path was previously impossible to complete: update_files
only copies, so a directory dropped from files: survived in every existing
installation until someone ran `straymark remove`. New declarative `retired:`
manifest key, honored by update-framework and repair. Deletion is
provenance-gated — a file goes only when its hash still matches what
.checksums.json recorded; operator-edited and operator-authored files are kept
and reported distinctly, because telling someone they "modified" a file they
wrote themselves erodes trust in the report.

The manual e2e caught two defects before they shipped: repair's early return
skipped the sweep on a healthy installation, and the first report conflated
"you edited this" with "this was never mine". A unit test caught that only the
retired root was cleaned, leaving emptied skill subdirectories behind.

Gemini MODEL ids are deliberately untouched: the CLI was retired, the models
were not, and the audit skills already require auditor: to name the backend
model rather than the CLI. Historical records — Sentinel telemetry, the
Charter-template rule justified by an observed Gemini-auditor behavior across
2 cycles — are left as written; rewriting the actor would falsify the evidence.

NOT READY TO TAG: the .agent/ vs .agents/ customization root is not
empirically confirmed. Google's doc lists .agent/ as an accepted alias; the
binary's path templates only build .agents/. Three headless probes could not
settle it. Operator verifies interactively; if .agent/ loses it is a git mv
plus two manifest lines. Everything else here is root-independent.

Decision in AIDEC-2026-08-05-002, work in AILOG-2026-08-05-004.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Operator ran the probe interactively: agy listed BOTH straymark-probe-alias
(.agent/) and straymark-probe-canonical (.agents/), so the alias documented in
agy-customizations is implemented, not aspirational. The shipped channel
(dist/.agent/skills/) needs no change and fw-4.42.0 is unblocked.

Durable lesson recorded in AIDEC and AILOG: `agy -p` does not exercise
workspace customization discovery — three headless probes came back with only
the user-level and builtin skills, in a trusted directory with a git root, so
they could not distinguish the two roots rather than showing one failing. Use
an interactive session for that class of question.

FU-003 annotated and closed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@montfort
montfort merged commit 802e0da into main Aug 6, 2026
3 checks passed
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