Repository navigation
feat(crossreview): Antigravity CLI as a reviewer and a host - #1
Merged
EvilFreelancer merged 3 commits intoNov 1, 2026
Merged
Conversation
In print mode `agy` takes the prompt only as the value of -p and reads no
plain text from stdin, so a `< {brief} > {out}` template cannot reach it
without putting the brief into argv. Its stream-json input has no such
limit, so the helper now speaks it:
- {brief_json}: the brief wrapped into one ASCII JSON line, written once
per run as brief.stream.json and fed to stdin;
- {out_json}: reviews/<name>.jsonl, the CLI's event stream; when the
reviewer ends, the response of the last `result` event becomes the
usual reviews/<name>.md.
A result whose status is not SUCCESS fails the reviewer whatever the exit
code and keeps the text it carried; denied tool calls go to .err; a stream
cut short by a timeout leaves the last agent response as a partial review;
a brief that is not UTF-8 is refused up front instead of being altered.
Also: the agents.tsv row, a parser for `agy models`, a warning for a
command that mixes the plain and the stream placeholders, tests with a stub
agy driven through the table's own template, the documentation, and the
version bump to 2.1.0.
Checked on Antigravity CLI 1.3.0 (Windows): detect, models, probe, and real
reviews on gemini-3.8-flash-high and gemini-3.1-pro-high. Its print mode
does not block file writes even with --mode plan; references/agents.md and
the README say so.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…}/{out} command
The first version taught the helper two placeholders of its own,
{brief_json} and {out_json}. A roster command is run by three runners: the
helper, Coddy's built-in coordinator, and a shell without Python. Only the
first knew those placeholders; the coordinator skips an entry that has no
{brief} and {out}, so the reviewer would not have run inside Coddy.
Now the stream-json exchange lives in scripts/agy-stream.py (brief on
stdin, review on stdout) and the table row is an ordinary line:
python3 "{scripts}/agy-stream.py" {bin} {model} < {brief} > {out}
{scripts}, the directory of the table, is filled in together with {bin} by
the helper and both detection twins. The run and collect code of the helper
is back to what it was; it keeps the `agy models` parser.
Also: `antigravity` as a host (global roster next to its settings.json in
~/.gemini/antigravity-cli, local one in .agents; aliases agy and
antigravity-cli), and a test that runs the row through PowerShell the way
Coddy does.
The cost: this reviewer needs Python, the roster holds the absolute path of
the adapter, and a timeout no longer leaves a partial review (the
conversation id in .err recovers it).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found by a cross-review of the branch (Claude Fable 5.1, Codex gpt-6.1-sol): - the conversation id was reported only after the CLI had exited, so a reviewer that timed out left nothing to recover it with; the adapter now reads the event stream line by line and writes the id at once; - a failed result with an empty response dropped the text the CLI had streamed; it is printed now; - the adapter path sat in double quotes, where a POSIX shell expands `$` and backticks; the POSIX column quotes it in single quotes. Tests: the id survives a timeout, the aborted turn keeps its text, and the parser is checked against event lines captured from agy 1.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Superseded by branch Review findings:
Thank you for the contribution - the model listing, host/roster wiring and documentation are kept. |
EvilFreelancer
added a commit
that referenced
this pull request
Nov 1, 2026
Antigravity (agy) joins the reviewer table: --mode plan with the brief as the -p argument (the koda pattern; the helper refuses a brief too long for one argument), agy models parsing, host/roster folders, detection on all three platforms, docs and tests. Supersedes PR #1, keeping the author's commits.
EvilFreelancer
added a commit
that referenced
this pull request
Nov 1, 2026
Antigravity (agy) joins the reviewer table: --mode plan with the brief as the -p argument (the koda pattern; the helper refuses a brief too long for one argument), agy models parsing, host/roster folders, detection on all three platforms, docs and tests. Supersedes PR #1, keeping the author's commits.
EvilFreelancer
added a commit
that referenced
this pull request
Nov 1, 2026
Antigravity (agy) joins the reviewer table: --mode plan with the brief as the -p argument (the koda pattern; the helper refuses a brief too long for one argument), agy models parsing, host/roster folders, detection on all three platforms, docs and tests. Supersedes PR #1, keeping the author's commits.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds the Antigravity CLI (
agy) as a reviewer,antigravity:<model>, and as a host. Like every other row of the table it is offered only when the CLI is installed, and the model is whatever the user picks at setup.Why it needs more than a table row
Checked on
agy1.3.0:-p, an argument. Plain text on stdin is ignored, so< {brief} > {out}cannot work as is, and a brief in argv is what rule 3 ofAGENTS.mdforbids.--input-format stream-jsondoes read stdin: one JSON message per line,{"event":"user","message":{"content":"…"}}. It requires--output-format stream-json, so stdout becomes an event stream and the answer isresult.response.How
The exchange lives in a small adapter next to the table,
scripts/agy-stream.py(brief on stdin, review on stdout), and the row stays an ordinary command line:{scripts}is the one new placeholder: the directory of the table, filled in together with{bin}by the helper and both detection twins. The run and collect code ofcrossreview.pyis untouched; the helper gains the placeholder, a parser foragy modelsand the host entry.The first commit of this branch did it differently: two placeholders only the helper understood (
{brief_json},{out_json}). The second commit replaces that, because a roster command has three runners, the helper, Coddy's built-in coordinator and a shell without Python, and the coordinator skips an entry without{brief}and{out}. Squash on merge if you prefer one commit.What the adapter does with the stream:
resultwithSUCCESSresponseresultwith another statusfailed;response, or failing that the streamed text, is still printeddenied_actionsin the resultresultThe conversation id goes to stderr as soon as the CLI reports it, so a reviewer that timed out can be recovered with
agy --conversation <id>.Host: the global roster sits next to Antigravity's
settings.jsonin~/.gemini/antigravity-cli, the local one in.agents; aliasesagyandantigravity-cli.Version 2.1.0 in
SKILL.mdand the three manifests. The release mirror into rpa-skills and coddy-agent is left to you.Things to decide
--mode plandid not stop a file write, inside or outside the working directory, when the prompt asked for one. Shell commands are denied, because print mode cannot ask for the permission. I found no per-run switch in 1.3.0. So this reviewer rests on the brief's tool ban and the emptyworkdirectory, the footing Kimi and Koda already have.references/agents.mdand the README say so.init --import --refresh, androsterwarns about it), and a timeout leaves no partial review.~/.gemini/antigravity-cli/skillsto the README install loop and to the lookup list inSKILL.mdbecause that directory exists and holds skills on the machine I checked. Drop both lines if you know better.Verification
python -m unittest discover -s tests: 61 tests pass on Windows 11 (Python 3.14) and on Ubuntu 24.04 under WSL (Python 3.12). Not run on macOS or on Python 3.8.agythrough the table's own row: a 150 KB brief with CRLF and non-ASCII text arrives byte for byte; error, aborted, denied-tool, died, timeout and non-UTF-8 cases; detection agreeing in the Python, sh and PowerShell twins with{scripts}filled; the row run through PowerShell with the prologue Coddy wraps around a command; the parser against event lines captured from the real CLI.detectin both twins,models antigravity,probe, and a real review throughrun/wait/collectongemini-3.8-flash-low(5 KB brief, 32 s).$in it. Not taken: resolving$PSScriptRootthrough junctions (a warning at most).