Skip to main content
Three independent model families that agree on the same finding, without seeing each other’s output, is a stronger signal than any single review.
This is the working recipe for fanning a plan or diff out to Codex, Gemini, and a local MLX model for adversarial review — three different invocation paths, plus the one gotcha each hits, so the fan-out is repeatable instead of rediscovered every time.

Codex — via the Codex CLI

Use the Codex MCP tool (the Codex CLI runtime), not a raw API call — it reads the repository itself instead of needing file contents pasted into the prompt.
  • Sandbox: read-only; approval-policy: never; cwd: the repo under review.
  • Point it at the plan or diff path in the prompt.
Account-pinned modelsA Codex session backed by a ChatGPT account rejects explicit model overrides:
Other Codex-tier model names fail the same way. Fix: omit the model parameter entirely and let the session use its account default. Only pass an explicit model on an API-key-backed Codex session.

Gemini — via the Antigravity (agy) CLI

The reliable CLI path for a Gemini review is Google’s Antigravity agy CLI, not a raw Gemini API call.
  • -p runs one non-interactive prompt; --add-dir grants read access to the files it must see; --model picks the tier.
  • It is read-only without --dangerously-skip-permissions, so it can’t modify anything.
Use the strong reasoner, not a flash tierA flash-tier Gemini model will run, but it can hallucinate on a factual review — for example claiming a current tool “doesn’t exist” or is deprecated. A stale-cutoff small model isn’t reliable for this task. Use the strongest reasoning tier available (for example Gemini 3.1 Pro (High)).

Local model — direct HTTP call

A locally served model that speaks the OpenAI-compatible API (see how the Nix stack serves a model for the serving mechanics) needs no wrapper — call the endpoint directly with the review prompt. If nothing answers on the serving port, the local serving daemon isn’t running. Start it with your platform’s service manager, then poll until the model is loaded:
Call the local model directlyUse the real served model id and send the review prompt straight to the OpenAI-compatible endpoint:
Ground the small modelA 30B-class local model — and any stale-cutoff cloud model — can confidently claim current tools “don’t exist.” Add a system line naming your current toolchain as real and current (for example “Claude Code, Codex CLI, and Gemini CLI are all real, current tools”) to keep the review grounded.

Quick reference

Where to go next

How the Nix stack serves a model

The serving stack and port behind the local endpoint used here.

Choosing a local model

How to pick and verify a model before trusting its review output.

Writing prompts for small models

How to shape the review prompt itself once a small local model is in the loop.

AI orchestration stack

Where multi-model review fits among the rest of the AI tooling.