What shipped on Tuesday, October 13, 2026
Today CodeOtter goes public on Show HN. It is a self-hosted AI code reviewer that runs on your hardware, not ours. The full source is at github.com/dharmeshgurnani/CodeOtter under the GNU Affero General Public License v3.0 (AGPL-3.0) — free to use, copy, distribute, and modify. Modified network services must publish their source.
Three things distinguish the architecture from the AI reviewers that shipped in 2025 and 2026:
- The scoring engine is deterministic. A typed rubric engine (
POST /v1/systemone) owns every 0–100 gauge and every binary pre-merge gate. A language model never gets the token for the scores. AQuality: 42from CodeOtter is reproducible and defensible in a postmortem because the rubric says why. - The narrative engine is separate. System 2 writes the executive summary, the file-by-file walkthrough, and the inline
suggestionblocks. Either engine operates standalone; you can re-run System 1 alone for a known-goodAGENTS.mdflip. - The diff never leaves your hardware. The review runs on a Docker container or a Compose stack on your machine. Models download once at admin time into
pb_data. There is no auto-update, no telemetry, no SaaS fallback. You can prove this withtcpdumpon the review host.
The Show HN thread URL is set in src/lib/siteConfig.ts the moment the post goes live; the homepage strip picks it up automatically.
The architecture in one paragraph
Every pull request triggers a parallel execution of the two engines on the diff:
const [s1Result, llmResult] = await Promise.all([ runSystemOneRubrics(diff, guidelines), runLanguageWalkthrough(diff, guidelines) ]); const record = judge(s1Result, llmResult);
System 1 returns a typed scorecard: six calibrated 0–100 gauges and nine binary merge gates, none of which depend on the LLM. System 2 returns a narrative review powered by Claude, OpenAI, MiniMax, or OpenRouter via BYOK, or by local GGUF sidecars running on the box itself. judge() normalizes untrusted model output into a single record before it is written to PocketBase. The full deep-dive is on /blog/dual-engine-architecture-for-the-ai-era.
What is not here yet — the limitations we will not hide
A credible launch post names its own weak spots. The current build has three:
- Cold start. The first local review of the day takes ~5 minutes while models warm up and shards hash-check. After that, reviews land in seconds. If you want sub-second at all times, point System 2 at a hosted model via BYOK; System 1 numbers do not depend on the LLM.
- AGPL-3.0 is OSI-approved copyleft. You can self-host, fork, customize, and ship CodeOtter inside your product. If you offer a modified version as a network service, you must publish the source for that modified version. If you need an Apache 2.0 upstream, PR-Agent is the closer architectural cousin; the license posture is the trade-off.
- The dashboard is functional, not glossy. UX polish is on the ROADMAP for later quarters. If your team wants the slickest SaaS dashboard and does not care where the code lives, CodeRabbit leads on that axis.
Where to read next
- Longevity — Self-Hosted AI Code Review: The 2026 Buyer's Guide. The five architectural questions that decide every AI-reviewer purchase in 2026, with TCO math for a 50-engineer team over three years.
- Architecture — Why We Built a Dual-Engine Architecture (System One + LLM). The calibration problem in full and the System 1 / System 2 split behind the AGPL-3.0 release.
- Offline — Running 100% Offline AI Code Reviews with Local GGUF, laya & CodeReviewer Sidecars.
- Team rules — How CodeOtter Turns AGENTS.md From a Wiki Page Into a Merge Gate. The
Guidelinesgate that fails closed and the 1-click "Dismiss & remember rule" flow. - Battlecards — CodeOtter vs CodeRabbit, CodeOtter vs Greptile, CodeOtter vs PR-Agent.
Call to action
- Star github.com/dharmeshgurnani/CodeOtter. Stars are how a self-hosted OSS project signals viability to procurement.
- Self-host.
docker compose upon a $20/mo VPS or a MacBook. Models download once at admin time. No account required. - Discuss on the Show HN thread — the URL is in the homepage strip on launch day. The maintainer is in-thread for the launch day and the week after.
AGPL-3.0 · Free to self-host · $0/seat · Zero telemetry · Single Docker image + PocketBase + Node 20. The dual-engine System 1 + System 2 pipeline is the same in the platform dashboard, in CI, and in the local CLI.


