Comparison with Hosted Reviewers
A source-backed evaluation checklist: implemented paths, deployment boundaries, flag-off features and known gaps.
Son of Anton offers operator-controlled model and validation choices. It does not establish feature parity or review-quality superiority over a hosted reviewer. This page compares evaluation requirements with the inspected implementation, not competitor pricing, benchmarks or current product claims.
R/ is son-of-anton-review, branch feat/cloudflare-native. P/ is son-of-anton-operator-parity, branch feat/greptile-operator-parity. The engine and parity API are not one merged deployable tree. anton-ui and anton-ui-trace-parity likewise have different capabilities.
Decide by operating model
Use the operator-controlled approach when you need to choose the model provider, own the review infrastructure and inspect its run evidence, and can operate the required services. Evaluate a hosted alternative when managed onboarding, vendor support or capabilities missing below are requirements. Source access, support commitments, public availability and license rights must be established separately; local source is not a public distribution offer.
Do not call this product open source yet. The verified handoff records a private product repository and no established license. The local package still declares private: true, points at the old repository URL and contains no license field (R/package.json:1-25). Package privacy alone does not determine legal rights; neither a README statement nor access to this workspace grants an open-source license.
Implemented paths and their limits
| Requirement | Inspected implementation | Evidence |
|---|---|---|
| Choose the review model | OpenRouter recommended; OpenAI, Anthropic and Codex alternatives. Node and native selection variables differ. | R/src/model-provider.js:15,169-325; R/worker.mjs:43-54; R/cloudflare-native/container/entrypoint.mjs:314-348 |
| Choose isolated validation | Managed Crabbox, E2B, Cloudflare Sandbox and a self-host command. Local host execution is a separate explicit opt-in, not a fallback. | R/src/validation-executor.js:30-49,485-579 |
| Inspect review cost | Token-based model rate cards and wall-clock validation estimates. Unknown pricing is not zero; these are not invoices. | R/src/model-provider.js:39-93; R/src/validation-executor.js:146-202 |
| Run without native Cloudflare containers | Node server plus a bounded queue-draining worker; shared SQLite or legacy Durable Object queue configuration is required across processes. | R/server.mjs:27-50; R/src/worker-runner.js:29-72 |
| Separate the App private key from review containers | Native key-broker service; scoped clone/publish callers. The broker helper can also mint without a repository list, so scope depends on the caller. | R/cloudflare-native/src/key-broker-core.js:15-55; R/cloudflare-native/container/entrypoint.mjs:110-118 |
| Dry-run publication | Native code defaults to shadow, but the checked-in manifest explicitly selects live. Node constructs a live publisher when App credentials are supplied. | R/cloudflare-native/src/publish-mode.js:26-69; R/cloudflare-native/wrangler.jsonc:132-136; R/worker.mjs:35-41 |
| Configure workspace review policy | Defaults and admission/formatting helpers exist in the engine; settings API and editor are on parity trees. | R/src/operator-review-policy.js:25-108,154-238; P/cloudflare/src/review-policy-api.js:48-63; anton-ui-trace-parity/src/views/Settings.tsx:182-268 |
| Explore graph impact | Context graph computes impacted paths, inferred tests and risk drivers. These are static relationships, not runtime proof. | R/src/context-graph.js:90-145 |
| Track finding continuity | Fingerprints, comparison states and same-head disposition checks. Omission on an unchanged head is not automatically a fix. | R/src/finding-evolution.js:201-211,267-375; R/src/review-service.js:397-413 |
| Derive feedback priors | Outcome ledger produces heuristic addressed rates and lens guidance. This is not complete GitHub reaction-based learning. | R/src/addressed-rate.js:92-149,178-214; R/src/codex-review-runner.js:2232-2238 |
See Model providers, Validation executors and Dashboard settings before configuring any of these paths.
Review ergonomics
Findings are not inline review comments
The model finding schema contains a path but no line coordinates. The publisher posts a PR review body, check run and optional issue comments. It can patch an existing check id; it does not update an existing PR review body or post per-line review comments. The declared inlineComments config key is not an implemented inline publisher.
This matters when your workflow depends on commenting directly on a changed line, applying a patch in GitHub or gathering reactions to individual inline findings. A path and title are not sufficient to offer those workflows.
Evidence: R/src/codex-review-runner.js:210-224; R/src/github-publisher.js:22-79; R/src/config.js:5-9.
Prompt to Fix is text, not an applyable patch
promptToFix defaults false. When enabled, the review includes a copyable instruction block naming the commit and actionable findings. It does not contain an automatically applyable GitHub suggestion or a verified fix. The coding assistant must inspect and verify the change independently.
Evidence: R/src/operator-review-policy.js:41; R/src/review-format.js:235-242.
Repository context is not credential configuration
The runner can read context such as AGENTS.md, CLAUDE.md, pr-review-agent.yml, .github/CODEOWNERS and .cursor/rules. The prompt treats repository and operator guidance as untrusted review data. Policy storage and runtime environment remain separate authorities; see Repo scoping.
Evidence: R/src/codex-review-runner.js:1499-1526,1840-1853.
Diagrams are ASCII
The prompt requests plain-text arrows/boxes, explicitly not Mermaid. The review renderer uses a text fence for sequenceDiagram. Documentation pages may use Mermaid; that does not change posted review output.
Evidence: R/src/codex-review-runner.js:1875; R/src/review-format.js:235.
Built but not default behavior
| Feature | Gate and actual default | Deployment limitation |
|---|---|---|
| Hypothesis primary review | GILF_HYPOTHESIS_PRIMARY=1, off by default | No automatic shadow swarm with flags unset; a worker must exist. |
| Prime worker | GILF_PRIME_SHADOW=1, or implied by primary flag unless explicitly 0 | The primary flag can make its output authoritative. Do not describe all Prime output as never published. |
| LLM planner | GILF_HYPOTHESIS_PLANNER=1, off | Also needs a worker and non-Codex planner provider; static hypotheses remain a floor. |
| Artifact evidence | GILF_EVIDENCE_ARTIFACTS=1, off | Needs artifact storage. Enforcement marks unsupported execution claims unverified rather than reducing severity. |
| Model inversion | GILF_MODEL_INVERSION, off | Heuristic author detection and configured alternate target; failures can fall back to the primary provider. |
| Auto-approve | autoApprove.enabled: false | Requires confidence 5, complete pinned coverage, no missing validation, allowed risk and filters, and no substantive findings. |
| PR description summary | updatePrDescription: false | Publisher checks head SHA and preserves text outside its owned markers. |
The native projection forwards none of the swarm, Prime, planner, inversion or evidence flags. Enabling them requires integration code changes, not just Worker variables. The policy toggles are different from process flags.
Evidence: R/src/codex-review-runner.js:2300-2314,2657-2707,3248-3267,3342-3353,3517-3569; R/cloudflare-native/src/container-env.js:15-86; R/src/operator-review-policy.js:227-238; R/src/github-publisher.js:82-103. See Roadmap and flags.
Gaps and branch-only capabilities
| Requirement | Current evidence and limit |
|---|---|
| GitLab / Bitbucket | Inspected SCM integration reports provider: 'github'; no GitLab/Bitbucket adapter was found in the inspected engine or parity source trees. R/src/scm-store.js:59-76. |
| Developer CLI for a local diff | The shipped gilf-review CLI operates on stored runs and queues (usage, harness, show, requeue, reports), not an arbitrary local diff review. R/src/operator-cli.js:574-644; R/package.json:9-12. |
| IDE / MCP integration | The standalone private anton-mcp package now serves MCP SDK v2: public HTTP documentation/onboarding, plus local stdio operator reads and opt-in, confirmed memory/review commands over P's APIs. It does not merge P into the native engine, install an IDE extension or review arbitrary local diffs. See MCP connection and permissions. |
| Ticket context | Partial on parity: explicit Linear issue snapshot preview/import exists, plus Confluence and Devin source previews. This is not automatic ticket discovery for every PR, and not a Jira integration. P/src/memory-source-import.js:11-18,170-183,224-232. |
| Built-in deterministic SAST / SCA | No dedicated Semgrep/Trivy/OSV/Snyk/Gitleaks integration was found in the inspected runtime source. A repository's own validation scripts may still run scanners. |
| Browser verification | A Frontend Behavior hypothesis exists; that is not a built-in browser-driving evidence collector. R/src/review-hypotheses.js:54-61; the validation dispatcher is R/src/validation-executor.js:485-579. |
| Historical quality benchmark | The benchmark CLI scores supplied fixture outputs. The inspected fixture directory contains v5-smoke.json; it is not a representative historical-PR quality corpus. R/evals/v5-benchmark-cli.mjs:10-24,106-131. |
| Unified dashboard and review engine | Expanded settings/reports/Test Lab APIs and UI are on parity trees. Native public fetch routes to ingress, not those APIs. R/cloudflare-native/src/main.js:26-29; P/cloudflare/src/worker.js:142-157; anton-ui/worker/proxy-utils.js:15-23; anton-ui-trace-parity/worker/proxy-utils.js:15-38. |
No numerical superiority, uptime, savings or addressed-rate claim follows from this table. Validate the exact deployed branch, provider, schema and run evidence before making an operational comparison.