1. Head-to-head at a glance

CodeOtterPR-Agent / Qodo Merge
DeploymentSelf-hosted (single Docker image or Node 20+) — your hardwareSelf-hosted (Python CLI + Docker; Qodo Merge is managed)
Code leaves your infra❌ Never⚠️ Self-host keeps it local; Qodo Merge ships diffs to Qodo cloud
Telemetry (self-host)Zero — zero outbound callsZero (self-host); varies (Qodo Merge)
Engine patternDual engine — deterministic System 1 (POST /v1/systemone) + streaming System 2 LLMMulti-agent Python CLI workflows — single LLM per workflow
Scoring engine6 calibrated 0–100 gauges (Quality, Blast Radius, Risk, Tests, Readability, PR Hygiene)None — prose + severity tiers, no calibrated rubric output
Score hallucination✅ Eliminated — gauges are deterministic rubric outputs⚠️ Same problem as every other LLM-only reviewer
Pre-merge gates9 typed binary gates (Title, Description, Security, Complexity, Tests, Docs, Scope, Guidelines, Issue requirements)⚠️ Heuristic severity tags only — no gate taxonomy
Offline mode✅ First-class — llama.cpp + GGUF + auto Vulkan/Metal✅ First-class — Ollama and vLLM documented in docs/usage-guide/changing_a_model.md; hosted endpoints are optional
AGENTS.md / CLAUDE.md auto-enforcement✅ Auto-detect at repo root + inject into every review prompt⚠️ .pr_agent.toml only — manual YAML mapping
1-click "Dismiss & remember rule"✅ Persistent team learnings injected automatically❌ Not available
Inline suggestion blocks✅ POST /api/review-suggestions → committable on GitHub✅ Committable suggestions
Incremental delta review✅ prevSha → headSha per commit⚠️ Re-runs the full PR per invocation
PR comment upsert✅ <!-- codeotter:scores --> markers — updates in-place❌ New comment each run (no dedupe)
Architecture / Blast Radius diagram✅ Interactive offline SVG Mermaid❌
Model flexibilityLocal GGUF (DeepSeek, Qwen, Llama, Microsoft CodeReviewer) + BYOK Claude / OpenAI / MiniMax / OpenRouterOpenAI, Azure, Bedrock, Anthropic, Ollama, vLLM, custom OpenAI-compatible
UI surfaceWeb dashboard (30/70 split: scores + interactive diagram) + mascotCLI-first; Qodo Merge has a dashboard
Pricing modelFree, self-hosted ($0/seat forever)$0 OSS self-host; Qodo Merge = sales-quoted ~$15–$25/seat
LicenseGNU Affero General Public License v3.0 (AGPL-3.0) — free self-host, modified network services must publish sourceMIT (community PR-Agent) / Proprietary (Qodo Merge)

2. Architectural differences that actually matter

2.1 Multi-agent Python CLI vs single Docker image + dashboard

PR-Agent is a Python package. Each workflow (/review, /describe, /improve, /ask, /help) is a separate agent; the CLI launches one at a time against a PR. The strength is breadth: 30+ bespoke workflows, custom-tool authoring, and a community that's been extending the tool since 2023. The cost is operational: you wire up pip install, a GitHub Actions runner or webhook receiver, secrets management for Bedrock / Azure / OpenAI, and you live with CLI output as your primary review surface unless you also pay for Qodo Merge.

CodeOtter is a single Docker image (codeotter/codeotter) plus docker-compose.yml. It runs as a webhook receiver for GitHub pull_request events, persists state to PocketBase, ships a built-in dashboard, and exposes the same review behavior via REST (POST /v1/systemone for System 1, streaming SSE for System 2 narrative). Operational cost is "run this container; point a webhook at it."

Honest takeaway: if "30+ bespoke workflows I can fork and extend" is your value, PR-Agent's CLI surface wins. If "one container, one dashboard, no per-workflow plumbing" is your value, CodeOtter wins.

2.2 LLM-only scoring vs deterministic System 1 + streaming System 2

PR-Agent reviews are prose + severity tags (🔴 HIGH, 🟡 MEDIUM, 🟢 LOW). The model is asked to summarize and tag; there is no calibrated numeric output you can diff between PRs. Two PRs with identical diffs can return different scores if the model version drifts.

CodeOtter's POST /v1/systemone returns rubric-defensible gauges — Quality: 78 (up from 71) because the rubric said so, not because the chat model felt like it. System 2 streams the narrative review alongside the deterministic numbers, so reviewers see both: a score with a rubric trail and a paragraph explaining what the LLM noticed.

DimensionPR-AgentCodeOtter
Numeric outputSeverity tags only6 calibrated 0–100 gauges from POST /v1/systemone
ReproducibilityModel-version dependentDeterministic (rubric output)
Audit trailDiff + LLM proseDiff + rubric inputs + raw gauge values
Drift over timeYes (model upgrades shift scores)No (rubric is versioned with the platform)

Honest takeaway: if "severity tags are enough and prose is fine," PR-Agent delivers. If you need rubric-defensible scores you can defend in a postmortem or compliance audit, CodeOtter's System 1 is in a different category.

2.3 MIT PR-Agent vs AGPL-3.0 CodeOtter

PR-Agent is MIT. You can fork it, white-label it, sell a hosted version of it, and contribute back upstream under the standard MIT terms. That's the deepest OSS posture in this comparison set.

CodeOtter is GNU Affero General Public License v3.0 (AGPL-3.0). You can self-host it forever, modify it, ship it inside your company, and never pay a cent. The "modified network services must publish source" clause is the only meaningful constraint; for teams that want to use an AI code reviewer (rather than sell one), AGPL-3.0 is functionally equivalent to Apache 2.0 from an operator's perspective.

ContextMIT (PR-Agent)AGPL-3.0 (CodeOtter)
Self-host forever✅✅
Modify and ship internally✅✅
Sell as SaaS✅❌
Sell a derivative product✅⚠️ Allowed if you host it for the buyer, not as a managed service
Fork and relicense✅❌
OSI-approved✅✅ (AGPL-3.0 is OSI-approved copyleft; modified network services must publish source)

Honest takeaway: MIT is the right license if you want maximum freedom to fork and resell without the source-publication obligation. AGPL-3.0 is the right license if you want maximum freedom to use the tool forever without per-seat billing or a vendor changing the terms under you, and you're fine with publishing source for any modified version you operate as a network service. Both are defensible. Pick the license posture that matches what you're actually trying to do.

3. Pricing & TCO — 50-engineer team, 3-year horizon

Anchored to PR-Agent's repo (zero license cost) + Qodo Merge's sales-quoted managed tier (per 04-competitor-matrix-and-seo-playbook.md §1.3 estimate of $15–$25/seat/mo). Assumes 50 active devs, USD list price, no annual prepay discount.

TierCodeOtterPR-Agent OSS self-hostQodo Merge (managed)
Per-seat / month$0$0 license (you pay infra + LLM API)Sales call — typically $15–$25
LLM API cost (50 devs)$0 (local GGUF) or BYOKBYOK OpenAI/Azure/Bedrock — typically $5–$15/dev/mo at moderate useBundled
Infra cost~$20/mo VPS or a Mac miniSameBundled
Monthly cost (50 devs)$20 + LLM$20 infra + $250–$750 LLM = $270–$770$750–$1,250
Year-1 total~$240 + LLM~$3,240–$9,240$9,000–$15,000
3-year total~$720 + LLM~$9,720–$27,720$27,000–$45,000
Cost per PR reviewed~$0~$0.05–$0.13 (LLM-bound)$0.25–$0.42

CodeOtter 3-year TCO: ~$720. PR-Agent OSS 3-year TCO: ~$10K–$28K (mostly LLM API). Qodo Merge 3-year TCO: ~$27K–$45K.

The CodeOtter line item is a small VPS (4 vCPU / 8 GB RAM is plenty for a 50-engineer team — most System 1 work runs on a quantized 0.8B–1.5B GGUF). If you already have a developer Kubernetes cluster or a CI runner pool, the marginal cost is $0, because System 1 doesn't hit any hosted LLM at all.

Honest call: PR-Agent OSS is not the most expensive option in this comparison — Qodo Merge is. PR-Agent's cost is operational (LLM API + Python infra). If your team is comfortable operating Python deps and managing BYOK secrets, PR-Agent OSS at ~$10K–$28K over 3 years is reasonable. CodeOtter is materially cheaper because System 1 is deterministic and System 2 can run on a local quantized GGUF.

4. Privacy & data flow

PR-Agent (self-host, OSS):

  • All workflows run on your infra.
  • Workflow prompts call out to your configured LLM endpoint (OpenAI / Azure / Bedrock / custom). The diff is sent to that endpoint by definition.
  • Qodo Merge ships diffs to Qodo's cloud for managed inference + dashboard.
  • Telemetry: zero in OSS self-host; varies in Qodo Merge.

CodeOtter (self-host):

  • System 1 (POST /v1/systemone) runs entirely on local model sidecars (llama-server, ggmlc, Microsoft CodeReviewer) — no outbound calls.
  • System 2 narrative review can run on a local GGUF or call out to your BYOK Claude/OpenAI/MiniMax/OpenRouter key.
  • If you point both engines at local models, zero diff bytes leave your infra. Period.
  • Logs live in your PocketBase instance.
  • Self-host = your SOC 2 / HIPAA / FedRAMP boundary.

If your CISO has ever said "absolutely not" to a new SaaS, CodeOtter with local GGUF for both engines is the only option in this comparison that genuinely keeps every byte on-prem. PR-Agent self-host gets you close, and the documented workflows default to hosted LLM endpoints, but Ollama and vLLM local stacks are first-class in docs/usage-guide/changing_a_model.md; you'd switch provider config rather than build your own stack to match CodeOtter's zero-egress posture.

5. Where PR-Agent still wins (honest section)

CapabilityWhy PR-Agent still wins today
Workflow breadth30+ documented bespoke workflows (/review, /describe, /improve, /ask, /help, custom tools). Years of community extension. CodeOtter has PR review; PR-Agent has a workflow library.
CLI-first ergonomicsEngineers who love Python CLIs will find PR-Agent native. CodeOtter is web/dashboard-first; the CLI surface is intentionally minimal.
Multi-language model flexibilityOpenAI, Azure, Bedrock, Anthropic, custom OpenAI-compatible — all wired and documented as first-class providers. CodeOtter covers Claude/OpenAI/MiniMax/OpenRouter plus local GGUF, but Azure/Bedrock aren't first-class.
Community / governanceMIT + The-PR-Agent foundation + public roadmap. CodeOtter is AGPL-3.0 single-maintainer (Dharmesh Gurnani) until v1.0 stabilizes.
MaturityPR-Agent has years of OSS adoption. CodeOtter v0.4.0 (2026-09-30) is 7 weeks old as of this comparison.
White-label / SaaS resaleMIT lets you fork PR-Agent and resell it. AGPL-3.0 permits reselling CodeOtter too, but the reseller must publish the source for any modified version offered as a network service. If you want to sell AI code review as a service without the source-publication obligation, PR-Agent is the cleaner option.
Cost floor at small scaleA 5-person team running PR-Agent with shared OpenAI keys pays almost nothing. CodeOtter's value (calibrated scoring, gates, Blast Radius) only pays back at the point where you need audit-grade reviews.

If "workflow library I can extend, fork, and resell" is the deciding factor, PR-Agent is the right answer. CodeOtter is optimized for the team that wants calibrated, self-hosted, $0-forever review on the actual diff.

6. When CodeOtter is the obvious pick

Pick CodeOtter if any of these are true:

  1. You need calibrated scores, not severity tags — Quality: 78 you can defend in a postmortem is more useful than 🔴 HIGH you can't.
  2. Regulated industry — code cannot leave your VPC, and you need the System 1 engine to run on a fully-local GGUF.
  3. Cost-sensitive scale — 50+ engineers and you want to keep the per-PR cost at ~$0 instead of LLM-API-bound.
  4. Air-gapped or VPC-only infra — you already operate your own dev tooling and want a single Docker image.
  5. Team conventions are code — you maintain AGENTS.md / CLAUDE.md and want them auto-detected and enforced at the merge gate, not mapped by hand into YAML.
  6. Score integrity matters — you need rubric-defensible gauges that don't drift when the LLM version changes.
  7. You want a dashboard — your reviewers live in a browser tab, not a terminal scrollback.
  8. You want a Blast Radius diagram — interactive offline Mermaid SVG rendered into the PR thread, no extra plumbing.

7. Migration path from PR-Agent → CodeOtter (1-day cutover)

  1. Hour 0–1: Stand up CodeOtter via docker run codeotter/codeotter (or pnpm start on Node 20.11+).
  2. Hour 1–2: Onboard your top repos. CodeOtter reads AGENTS.md / CLAUDE.md automatically — translate your most important .pr_agent.toml sections into the team's AGENTS.md rules. (Optional: keep .pr_agent.toml for legacy workflows during transition.)
  3. Hour 2–3: Wire GitHub webhook for pull_request events (one YAML manifest).
  4. Hour 3–4: Disable PR-Agent CLI invocations in CI. Enable CodeOtter on the same repos.
  5. Day 2+: Keep PR-Agent around for the bespoke workflows your team depends on (most teams don't). Cancel or pause as you migrate workflows into CodeOtter's review + AGENTS.md enforcement.

You keep every PR comment PR-Agent ever made (GitHub history). You lose nothing except the CLI invocation pattern.

8. FAQ

Is CodeOtter a drop-in replacement for PR-Agent?

For PR review behavior, mostly yes — CodeOtter covers the /review workflow plus deterministic scoring PR-Agent doesn't have. For workflow breadth (/describe, /improve, /ask, custom tools), no — PR-Agent has years of bespoke workflow tooling that CodeOtter doesn't replicate. If your team relies on a specific PR-Agent workflow daily, plan a transition.

Can I run CodeOtter and PR-Agent side-by-side during evaluation?

Yes. CodeOtter reads AGENTS.md and PR-Agent reads .pr_agent.toml — no conflict. Disable PR-Agent repo-by-repo when you're confident.

Does CodeOtter support the same model providers as PR-Agent (OpenAI, Azure, Bedrock, custom)?

For System 2 narrative review: Claude, OpenAI, MiniMax, OpenRouter, and any OpenAI-compatible endpoint (which covers most Azure OpenAI deployments and Bedrock's OpenAI-compatible gateway). Azure-native and Bedrock-native endpoints are accessible via OpenAI-compatible mode but aren't first-class; PR-Agent has stronger first-class support for those. For System 1 deterministic scoring: local GGUF only (Qwen, DeepSeek, Llama, Microsoft CodeReviewer) — no hosted endpoint is wired because System 1 must be deterministic and rubric-defined.

How does CodeOtter's deterministic System 1 engine differ from PR-Agent's LLM-only scoring?

System 1 (POST /v1/systemone) returns 6 calibrated 0–100 gauges (Quality, Blast Radius, Risk, Tests, Readability, PR Hygiene) generated by a typed rubric applied to the diff. The same diff produces the same gauge values regardless of which LLM is loaded for System 2. PR-Agent returns severity tags from the LLM, which shift when the model version changes. If reproducibility between PRs matters, System 1 wins; if severity tiers are enough, PR-Agent delivers.

What about the CLI workflow story — does CodeOtter have a CLI?

CodeOtter is web-first. There is a codeotter-cli for triggering local re-reviews and inspecting gauge history (codeotter review --pr 418), but the primary surface is the dashboard. PR-Agent is CLI-first and feels native to engineers who already live in their terminal.

What's the license difference between CodeOtter (AGPL-3.0) and PR-Agent (MIT)?

AGPL-3.0 (CodeOtter): free to self-host forever, free to modify and ship internally; a modified version offered as a network service must publish its source. MIT (PR-Agent): all of the above plus the right to fork, relicense, and resell as a managed service without the source-publication obligation. If you want to sell AI code review as a service, PR-Agent is the only option here. If you want to use it forever without per-seat billing, both are equivalent from the operator's perspective.

Can I migrate my .pr_agent.toml rules into AGENTS.md automatically?

Not automatically — the syntaxes are different (HCL-style nested config vs. flat Markdown rules). Translation is mechanical for most rule categories (e.g. [review].require_score_feedback = true → AGENTS.md line "reviewer must cite a concrete file:line for every HIGH finding"). CodeOtter's AGENTS.md auto-detect works the moment any AGENTS.md (or CLAUDE.md) exists at the repo root, even if it's a partial migration.

Why is the URL slug pr-agent and not qodo?

"PR-Agent" is the community-governed name (The-PR-Agent) that the OSS audience actually searches for. "Qodo" is the commercial sponsor, and "Qodo Merge" is the managed tier. The slug pr-agent matches the brand the OSS community recognizes; the page H1 reads "CodeOtter vs PR-Agent (Qodo)" so both codeotter vs pr-agent and codeotter vs qodo search queries land on the same page.

9. Sources

CodeOtter (primary)

PR-Agent / Qodo Merge

Competitive intelligence (2026)