agy-review
GitHub

Open source, MIT

An independent reviewer that has to show its work

Code review, security review, task delegation and translation by Google Antigravity. From Claude Code, Codex or your terminal. Read-only, no permission prompts, and every finding is checked against your real code.

  • Findings re-checked in your files
  • Exit codes for agents and CI
  • 12 languages

Runs on Bun or Node 18.18+. Your code is sent to Google's model: review only what you may share.

Quick start
/plugin marketplace add Ealireza/agy-review
/plugin install agy-review@agy-review
/agy-review:setup
/agy-review:verify
/agy-review:security --symbol saveUpload

Why the report is trustworthy

A model that reviews code will sometimes invent a problem. This tool never takes its word for anything.

Quote it or it did not happen

Every finding must carry the exact code it is about. The script looks that quote up in the real file.

Not found means rejected

Invented findings are dropped and listed separately. A wrong line number is corrected, not trusted.

The script decides

The verdict, the counts and the CI gate are computed from verified findings only, never copied from the model.

Nothing found is not approval

If findings were rejected, coverage is low or a model failed, the verdict is inconclusive and the exit code is 4.

What a verified finding looks like

Real output on a small file with planted bugs, reviewed by Claude Sonnet 4.6 through Antigravity.

Verified: this exact code exists at line 6

app.py:6  [P0 | security | confidence high | CWE-89]

SQL injection via string concatenation in get_user

Evidence

cur.execute("SELECT * FROM users WHERE name = '" + name + "'")

Fix

cur.execute("SELECT * FROM users WHERE name = ?", (name,))

Rejected: the quoted code was not found in the file

app.py  [critical | P0]

Remote code execution via os.system

Evidence

os.system(command)

evidence quote not found in the cited file (possible hallucination)

How a review runs

Five steps, one script. Static targets never give the model any tool.

  1. You ask

    Review a diff, a branch, a file, a line range, one function or a snippet.

  2. The target is prepared

    The script reads and numbers the code itself, or opens the repository behind a read-only guard.

  3. Antigravity reviews

    The model you chose returns a strict JSON report: severity, priority, category, evidence, fix.

  4. Every claim is checked

    Quotes are found in your files, lines are corrected, inventions are rejected, secrets are redacted.

  5. You get a verdict

    Markdown or JSON, stable finding ids, and an exit code that agents and CI can act on.

Built for people and for agents

Any target

Uncommitted changes, a branch, a commit, a file, a line range, one function by name, or code piped in from memory.

Security review

OWASP and CWE mapping, exploitability, attack scenario, data flow, a secret and bad-pattern scanner, and the callers and callees of your code.

Loops and CI

Stable JSON, finding ids that survive line shifts, comparison with the previous report, and a gate: exit 10 when a verified high finding exists.

Models and effort

List the models in your agy, pick one per project or globally, cross-check with several, and let effort be chosen automatically with the reason shown.

Tasks and translation

Hand any self-contained task to Antigravity. Translate with tone, audience and glossary, and verify that code, URLs and placeholders survived.

Sub-agents and skills

Skills for Claude Code and Codex, plus reviewer, security and worker sub-agents that any larger process can call.

New in 1.0.1

Stop paying Claude and Codex tokens to refresh your graphify graph

graphify updates now run on Antigravity, in the background, on every commit, merge, checkout and rebase. Your agent spends 0 tokens on them and you need no API key.

Pinned to a cheap model

graphify's backend is pinned to a local server backed by Antigravity, so it can never fall back to your Opus, Fable or Codex session.

A commit never waits

The hook starts the update in the background. In a real run git commit returned in 0.3 seconds and the graph updated in 22 seconds with one Antigravity call.

No write or exec rights

The model only reads text and answers text. graphify writes its own files, a prompt injection in a document cannot make the model do anything, and secrets are redacted.

bun agy-review.mjs --graphify doctor
bun agy-review.mjs --graphify setup --yes
git commit -m "docs and code"     # returns at once; the graph updates itself on Antigravity

It uses your Antigravity quota, so it is cheaper, not free. Images are not extracted on this path.

Install

Pick your host. Nothing else is required besides Antigravity, git and Bun or Node.

/plugin marketplace add Ealireza/agy-review
/plugin install agy-review@agy-review

Then, once: /agy-review:setup /agy-review:verify

Verify on your machine: reads work, writes are blocked.

Use it

The same script behind every skill, command and sub-agent.

Review a function with its context

bun agy-review.mjs --symbol applyDiscount \
  --context "applies at most one coupon, never below 0" \
  --format json --fail-on high --output review.json

Security review that must pass

bun agy-review.mjs --security --symbol saveUpload \
  --context "filename and body come from an untrusted request" \
  --fail-on high --previous sec.json --format json --output sec2.json
# exit 0 pass | 10 fix P0/P1 | 4 inconclusive, not a pass

Translate with tone and a glossary

bun agy-review.mjs --preset translate --to German --tone friendly \
  --audience "new developers" --glossary glossary.json \
  --input README.md --output docs/README.de.md

Choose the model once

bun agy-review.mjs --list-models
bun agy-review.mjs --set model=claude-sonnet-4-6
bun agy-review.mjs --set models=gemini-3.8-flash-high,claude-sonnet-4-6

Honest about its limits

Read this before you trust it with anything important.

What it does

  • Static reviews, tasks and translations run agy with no tools in an empty folder: it cannot read or write your files.
  • Agentic reviews run behind a deny-by-default guard hook, refuse to start without it, and warn if your working tree changed.
  • Hard-coded secrets are redacted before anything is sent to a model.
  • A CVE from a model is always labelled unverified. The tool never invents or confirms one.

What it is not

  • Not an OS sandbox. The guard filters commands; a determined prompt injection in reviewed code could look for a gap.
  • Your code is sent to Google's model. Do not review what you may not share.
  • Findings can be wrong. No findings never means secure.
  • The agentic path with the real permission flag was not run by the author. Run verify once on your machine.

Questions

Does it change my code?

No. Static modes cannot. Agentic mode blocks writes and warns if your tree differs afterwards. It never commits, stashes or checks anything out, and it never fixes findings itself.

Does it cost money?

The plugin is free and open source. Each review uses your own Antigravity quota.

Is Bun faster than Node here?

Not measurably. Startup was about 56 ms with Node and 64 ms with Bun on the author's Windows machine, and a review takes tens of seconds because of the model. Bun is the default, Node works the same.

Which model should I use?

Run the models command and choose; the tool does not rank them for you. For critical code cross-check with two models: findings both report are marked.

What if Gemini refuses a security prompt?

Its content filter sometimes does. If you did not pick a model, the tool retries once with a non-Gemini model and says so.

How do I update to a new version?

Run the update check, then update the plugin for your host and refresh the guard and the graphify hooks. The README has the exact commands for Claude Code, Codex and a plain clone.

Can an agent run it in a loop?

Yes. Review, fix the P0 and P1 findings, review again with the previous report, and stop on exit code 0. Exit code 4 is not a pass.