7.1 KiB
Antigravity CLI (agy) target spec
Status: spike findings, verified empirically against agy v1.0.10 on macOS (2026-06-22). This
documents the Antigravity CLI plugin format so a claude-to-antigravity converter target can be
built. It supersedes docs/specs/gemini.md for new work; Gemini CLI is being removed as a target.
Background
Google replaced the consumer Gemini CLI with Antigravity CLI (binary agy), a Go-based terminal
agent that still runs on Gemini models. It is a distinct CLI with its own install model, plugin
format, and permission system -- not a rename of gemini. Per public reporting, consumer Gemini CLI
access (free / AI Pro / Ultra) was cut off ~2026-06-18 while enterprise Gemini Code Assist and paid
API-key access continue; this repo's decision is to remove the Gemini target entirely and target
Antigravity instead.
All facts below were verified by building a fixture plugin and running agy plugin validate /
agy plugin install / agy plugin list / agy plugin uninstall, not from documentation
(antigravity.google/docs renders client-side and is not machine-readable).
Install model (user-facing)
agy installs a plugin from a local directory or a remote Git repository URL when the source contains a root plugin.json:
agy plugin install https://github.com/EveryInc/compound-engineering-plugin
Local checkout (repository root or bundled .agy/ entry point):
git clone https://github.com/EveryInc/compound-engineering-plugin
agy plugin install ./compound-engineering-plugin
agy plugin install ./compound-engineering-plugin/.agy # equivalent via symlinked manifest
agy plugin install <target>requires<target>to be a directory containing aplugin.jsonat its root (agy plugin validate .fails with "missing plugin.json" otherwise), or a remote Git URL whose root containsplugin.json.agy plugin install <plugin>@<marketplace>exists for marketplaces; Antigravity does not yet ship a curated marketplace catalog equivalent to Kimi's.kimi-plugin/marketplace.json.agy plugin import [gemini|claude]imports an existing Gemini-CLI / Claude install; on this machineagy plugin listshowedcompound-engineeringalready imported withsource: gemini-cli.- Other subcommands:
list,uninstall <name>,enable <name>,disable <name>,validate [path],link <mp> <target>.
Compound Engineering publishes root plugin.json plus skills/ so remote Git install works without
a clone step. The committed .agy/ bundle holds a symlinked manifest (plugin.json -> ../plugin.json)
and skills -> ../skills for explicit local .agy installs.
See .agy/INSTALL.md for pinning, validation, and uninstall.
Installed/imported plugins are tracked in an internal registry surfaced by agy plugin list --json
(not a readable plugins/ directory tree). Each entry records name, source
(antigravity | gemini-cli | claude), importedAt, and the components recognized.
Plugin layout (what the converter must emit)
<plugin-root>/
plugin.json # required manifest, at root
skills/<name>/SKILL.md # skills (SKILL.md with YAML frontmatter)
agents/<name>.md # subagents (markdown + frontmatter)
commands/<name>.{toml,md} # commands -- CONVERTED TO SKILLS on install/import
mcp_config.json # MCP servers (root file)
hooks.json # hooks (root file)
agy plugin validate reports each section as processed or skipped (not found), so all component
dirs/files are optional and discovered by convention.
plugin.json
Minimal valid manifest (verified):
{ "name": "compound-engineering", "version": "0.0.0" }
nameandversionare sufficient to validate.descriptionand other fields are optional and were not required by the validator. (Version is release-owned in this repo -- see release notes.)
Skills
skills/<name>/SKILL.mdwith standard YAML frontmatter (name,description). Same SKILL.md contract already used by the Claude/Gemini surfaces -- skills appear to port directly.
Agents (subagents)
agents/<name>.md, markdown with frontmatter (name,description). One.mdper agent.
Commands -> skills
commands/<name>.tomlandcommands/<name>.mdboth validate and are reported as "converted to skills". Antigravity has no separate runtime command primitive; commands become skills on install. Converter implication: we can emit commands as skills directly rather than shipping a command format.
MCP servers (mcp_config.json)
Root file shaped { "mcpServers": { "<name>": { ... } } }. Verified field names:
- stdio server:
{ "command": "...", "args": [...] } - remote server:
{ "serverUrl": "https://..." }-- NOTurland NOThttpUrl. Validator error for the wrong key:MCP server "<name>" must have either command or serverUrl.
Converter implication: map the Gemini/Claude remote-MCP url field to serverUrl.
Hooks (hooks.json)
Root file shaped { "hooks": { ... } }. A { "hooks": { "PreToolUse": [] } } shape validates
(top-level container confirmed). The per-event hook schema (matchers, command shape, event names
beyond PreToolUse) was NOT exhaustively verified in this spike and must be confirmed before
emitting real hooks.
Permissions / interactive question tool
agygates tool execution via TUI permission prompts (/permissionsslash command and atoolPermissionsetting:always-proceed|request-review|strict|proceed-in-sandbox), pluspermissionsallow/deny/ask rules in settings -- not a Gemini-CLI-styleask_usertool.- The interactive blocking-question tool exposed to agents is
ask_question(confirmed in live usage). Plugin skill prose that lists per-harness blocking-question tools should useask_questionfor Antigravity (this was applied in the Wave 1 skill sweep).
Context files
agystill readsGEMINI.md(workspace) andAGENTS.mdas context.GEMINI.mdis therefore retained even though the Gemini converter target is removed. Google may later consolidate this intoAGENTS.md; treat that as TBD.
Settings (reference)
Global settings live at ~/.gemini/antigravity-cli/settings.json (keys observed in the bundled CLI
guide include permissions, toolPermission, trustedWorkspaces, model, sandbox, status line).
Builtin skills ship under ~/.gemini/antigravity-cli/builtin/skills/.
Open questions for implementation
- Exact
hooks.jsonper-event schema (matcher/command shape, supported event names). - Whether
agy plugin installsupports a monorepo subdirectory or only a rootplugin.json. - Whether a generated root
plugin.json(vs.claude-plugin/plugin.json) is the right emission target, and how it coexists with the existing Claude/Codex manifests at the repo root. Resolved for CE: rootplugin.jsonis the Antigravity manifest;.agy/plugin.jsonsymlinks to it. - Marketplace (
<plugin>@<marketplace>,agy plugin link) distribution — deferred until Antigravity documents a stable catalog schema (unlike Kimi's.kimi-plugin/marketplace.json).