Gemini Relay • Antigravityv1.2.0
Roadmap
Gemini Relay is at v1.2.0: an MCP server that drives the Antigravity CLI (agy) in print mode, with the legacy Gemini CLI still selectable via GEMINI_MCP_BACKEND=gemini. What follows is where the project stands and where it is going — not a release schedule.
Evolution
Click to enlarge
Timeline
Click to enlarge
Shipped in v1.2.0 — 2026-09-03
- Nine MCP tools:
gemini-ask,gemini-plan,gemini-image,gemini-models,gemini-doctor,gemini-brainstorm,gemini-fetch-chunk,gemini-ping,gemini-help. agyas the primary engine, with capability detection fromagy --helpso the backend adapts to whatever build is installed rather than assuming a version.- Model selection across the Gemini 3.8 / 3.7 / 3.6 Flash and 3.1 Pro families, reasoning
effort, executionmode, andjsonSchema-enforced structured output. - The project-root jail for every
@filereference (CVE-2026-0755), symlinks included.
In the working tree, not yet released
Each of these came out of a live field audit against agy 1.1.27:
- No command-line length limit, on a build that advertises
--input-format. There the prompt reaches agy on stdin as one stream-json NDJSON message, so a large@fileprompt no longer dies withspawn ENAMETOOLONG. Builds without it — including one whoseagy --helpprobe timed out — keep the old-p <prompt>path and its argv cap. - agy's own error text. A failed run reports what agy said — invalid model selection, exhausted quota, dropped login — instead of
Command failed with exit code 1: Unknown error. @means "something that exists". Files, directories (@.included) and globs expand; everything else stays verbatim.node_modules,.git,distand secret-looking files are skipped during directory and glob expansion — those two skips do not apply to a file you name directly, though a binary, an unreadable file or one past the budget is still dropped — under a 256 KB per-file and 2 MB per-prompt budget that names what it left out.- The conversation id comes back. A plain-text
gemini-askreply ends with the id of the conversation it created or continued whenever agy reported one, so a follow-up needs no digging in agy's cache. AjsonSchemaorchangeModereply omits it, because that body is parsed;gemini-planandgemini-brainstormnever report one. - Login and quota in
gemini-doctor. It now runs the free, zero-tokenagy -p "/usage" --output-format jsonand reports each bucket's remaining fraction and reset time, rather than declaring "System Ready" over a signed-out account. - Slash prompts are off by default, on a build that advertises
--disable-slash-commands. There the flag is sent unless a caller passesallowSlashCommands: true, so a prompt beginning with/reaches the model. A build without the flag — including one whoseagy --helpprobe timed out — expands the/prompt as before. - Refused tool calls are visible. A run that exits successfully but reports
denied_actionssays so in a notice, instead of an edit appearing to have happened. - The retirement notice fires once per process, not on every reply from every tool.
- Prompt bodies stay out of the logs. The argv handed to agy is logged as its shape — flags survive, every value becomes its length — and no argv is retained between calls. A tool call is logged as its name plus its arguments, with every string value reduced to
<N chars>and every other value — a boolean, a number,addDirs, ajsonSchemaobject — printed in full, so neither the prompt nor the files inlined into it reach client log files. - New parameters surfaced from agy:
agent(a customagent.mdpersona),skipPermissions, andsizeongemini-image. - Node floor raised to 18.19.0, matching what the test runner actually needs; CI covers 18.x, 20.x and 22.x.
Direction
Known gaps, roughly in the order they are worth closing:
- Real progress instead of canned messages.
--output-format stream-jsonemits typedstep_updateevents with text deltas and tool calls; the relay currently reports a rotating set of status lines every 25 seconds. - Concurrency. Runs are serialized behind one queue because each rewrites agy's conversation cache. Reading the conversation id from the result object makes that queue — and the transcript-scraping fallback behind it — removable.
- Attachments. agy accepts images, audio and video as inputs; the relay has no attachment parameter, so only text files ride along as
@file. - Re-test
--sandbox. The relay reports that it cannot guarantee isolation on the agy backend. That notice predates agy 1.1.5, and headless runs have honoured permission settings since; the claim deserves re-measuring rather than repeating. - Capability cache lifetime.
agy --helpis probed once per server process, so an agy that self-updates underneath a long-running server is driven with stale assumptions.
Have a different priority? Open an issue or start a discussion.