<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Javier García Camacho</title>
    <description>The latest articles on DEV Community by Javier García Camacho (@dimoncelli).</description>
    <link>https://dev.to/dimoncelli</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4233908%2Fc7a7da2e-58d8-45e6-bc3a-200e166238d9.png</url>
      <title>DEV Community: Javier García Camacho</title>
      <link>https://dev.to/dimoncelli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dimoncelli"/>
    <language>en</language>
    <item>
      <title>Why Your Coding Agent Agrees With Its Own Bugs: Building cold-jury, a Zero-Dep Cross-CLI Review Gate</title>
      <dc:creator>Javier García Camacho</dc:creator>
      <pubDate>Mon, 09 Nov 2026 08:58:40 +0000</pubDate>
      <link>https://dev.to/dimoncelli/why-your-coding-agent-agrees-with-its-own-bugs-building-cold-jury-a-zero-dep-cross-cli-review-gate-4cgn</link>
      <guid>https://dev.to/dimoncelli/why-your-coding-agent-agrees-with-its-own-bugs-building-cold-jury-a-zero-dep-cross-cli-review-gate-4cgn</guid>
      <description>&lt;p&gt;&lt;em&gt;Applying Google's Elephant-Goldfish pattern and arXiv:2607.21656 to run sterile, cross-model hostile code reviews in Node.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you ask the same coding agent session that just wrote a 300-line change to review its own &lt;code&gt;git diff&lt;/code&gt; before committing, it will almost always rubber-stamp it.&lt;/p&gt;

&lt;p&gt;That is not a prompt engineering problem. It is a structural context problem: over the course of the conversation, the model has already rationalized every shortcut, extra abstraction, and edge-case assumption in its context window. Asking it to audit that same thread asks it to contradict its own recent reasoning.&lt;/p&gt;

&lt;p&gt;Recent empirical benchmarks confirm how steep this self-bias is. In &lt;strong&gt;Cross-Model LLM Code Review&lt;/strong&gt; (&lt;a href="https://arxiv.org/abs/2607.21656" rel="noopener noreferrer"&gt;arXiv:2607.21656&lt;/a&gt;, evaluated across 116 tasks on LiveCodeBench):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Having &lt;strong&gt;Claude Sonnet 4&lt;/strong&gt; review its own drafts yielded &lt;strong&gt;+0.0 percentage points&lt;/strong&gt; of improvement (&lt;code&gt;91.4%&lt;/code&gt; -&amp;gt; &lt;code&gt;91.4%&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Having &lt;strong&gt;Claude Sonnet 4&lt;/strong&gt; review drafts written by &lt;strong&gt;OpenAI Codex&lt;/strong&gt; jumped pass rates from &lt;strong&gt;&lt;code&gt;71.6%&lt;/code&gt; to &lt;code&gt;89.7%&lt;/code&gt; (+18.1 percentage points)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Even a weaker model (&lt;strong&gt;GPT-4o-mini&lt;/strong&gt;, &lt;code&gt;69.0%&lt;/code&gt; baseline) reviewing &lt;strong&gt;Claude Sonnet 4&lt;/strong&gt; improved Claude's final score from &lt;strong&gt;&lt;code&gt;91.4%&lt;/code&gt; to &lt;code&gt;94.0%&lt;/code&gt; (+2.6 percentage points)&lt;/strong&gt; because uncorrelated error distributions expose blind spots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To automate that cross-examination without cloud lock-in or heavy wrappers, I built and open-sourced &lt;strong&gt;&lt;a href="https://github.com/Dimoncelli/cold-jury" rel="noopener noreferrer"&gt;cold-jury&lt;/a&gt;&lt;/strong&gt; (MIT).&lt;/p&gt;




&lt;h3&gt;
  
  
  What &lt;code&gt;cold-jury&lt;/code&gt; Does
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;cold-jury&lt;/code&gt; is a zero-dependency Node.js (&lt;code&gt;&amp;gt;=20.0.0&lt;/code&gt;) CLI and universal AAIF Skill (&lt;code&gt;SKILL.md&lt;/code&gt;, &lt;code&gt;agents/openai.yaml&lt;/code&gt;, &lt;code&gt;.claude-plugin&lt;/code&gt;) that implements Google's &lt;strong&gt;&lt;a href="https://github.com/google/elephant-goldfish-model" rel="noopener noreferrer"&gt;Elephant-Goldfish Model (EGM)&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your coding agent is the Elephant&lt;/strong&gt;: it holds full repository memory, user history, and task context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cold-jury&lt;/code&gt; spawns three ephemeral Goldfish jurors&lt;/strong&gt; in a &lt;strong&gt;different CLI&lt;/strong&gt; (&lt;code&gt;Writer != Juror&lt;/code&gt;) inside isolated temporary working directories (&lt;code&gt;fs.mkdtempSync&lt;/code&gt;) with no conversation memory, no project dotfiles, and a stripped environment variable allowlist.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each juror receives only two inputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single-sentence scope specification (&lt;code&gt;--spec&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The redacted unified &lt;code&gt;git diff&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The 4-Stage Pipeline
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Local Pre-Flight Secret Shield (Before Any Subprocess Spawns)
&lt;/h4&gt;

&lt;p&gt;Sending a raw &lt;code&gt;git diff&lt;/code&gt; or &lt;code&gt;--spec&lt;/code&gt; string to an external CLI risks leaking live credentials that accidentally landed in the working tree. Before &lt;code&gt;cold-jury&lt;/code&gt; spawns any child process, a local scanner inspects both the diff and the &lt;code&gt;--spec&lt;/code&gt; text across &lt;strong&gt;17 credential families&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private keys (&lt;code&gt;-----BEGIN ... PRIVATE KEY-----&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;AWS (&lt;code&gt;AKIA...&lt;/code&gt;, &lt;code&gt;ASIA...&lt;/code&gt;), Stripe (&lt;code&gt;sk_live_...&lt;/code&gt;, &lt;code&gt;rk_live_...&lt;/code&gt;), Anthropic (&lt;code&gt;sk-ant-...&lt;/code&gt;), OpenAI (&lt;code&gt;sk-proj-...&lt;/code&gt;), GitHub (&lt;code&gt;ghp_...&lt;/code&gt;, &lt;code&gt;github_pat_...&lt;/code&gt;), Google (&lt;code&gt;AIza...&lt;/code&gt;), Slack (&lt;code&gt;xoxb-...&lt;/code&gt;), SendGrid (&lt;code&gt;SG....&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; secret assignments, &lt;code&gt;Authorization: Bearer&lt;/code&gt; headers, JWTs, database URIs with embedded passwords (&lt;code&gt;postgres://user:pass@...&lt;/code&gt;), and high-entropy secret assignments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a &lt;strong&gt;&lt;code&gt;P0&lt;/code&gt; secret&lt;/strong&gt; is detected, &lt;code&gt;cold-jury&lt;/code&gt; &lt;strong&gt;short-circuits immediately with exit code &lt;code&gt;1&lt;/code&gt; (&lt;code&gt;BLOCK&lt;/code&gt;)&lt;/strong&gt; before a single byte leaves your machine. Lower-severity tokens are replaced in-memory with &lt;code&gt;[REDACTED:&amp;lt;RULE_ID&amp;gt;]&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Cross-Vendor Juror Selection (&lt;code&gt;Writer != Juror&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;cold-jury doctor&lt;/code&gt; discovers which CLIs are installed and authenticated on your machine across five supported engines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claude&lt;/code&gt; (Anthropic Claude Code)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;codex&lt;/code&gt; (OpenAI Codex CLI)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemini&lt;/code&gt; (Google Gemini CLI)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;opencode&lt;/code&gt; (OpenCode CLI)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ollama&lt;/code&gt; (Local Ollama models, verified via live HTTP &lt;code&gt;/api/tags&lt;/code&gt; check so stopped daemons are marked &lt;code&gt;OFFLINE&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you run &lt;code&gt;cold-jury review --author codex&lt;/code&gt;, the selector automatically picks the highest-leverage available non-author CLI (prioritizing &lt;code&gt;claude &amp;lt;-&amp;gt; codex&lt;/code&gt; cross-family pairings).&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Three Parallel Adversarial Probes in Sterile Rooms
&lt;/h4&gt;

&lt;p&gt;Instead of asking one generic "please review this diff" prompt, &lt;code&gt;cold-jury&lt;/code&gt; runs three narrow, hostile probes concurrently (&lt;code&gt;Promise.allSettled&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;appsec&lt;/code&gt;&lt;/strong&gt;: CWE-mapped vulnerabilities (command/SQL injection, SSRF, XSS, path traversal, auth bypass, hardcoded secrets).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;correctness&lt;/code&gt;&lt;/strong&gt;: logic bugs, unhandled rejections, race conditions, off-by-one errors, null/undefined dereferences, broken edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;surgical&lt;/code&gt;&lt;/strong&gt;: YAGNI and scope discipline (&lt;code&gt;ponytail-surgical-coding&lt;/code&gt;) — flags drive-by refactors, unrequested abstractions, and dead code outside &lt;code&gt;--spec&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To prevent prompt injection from untrusted strings inside the diff itself, the diff is wrapped in per-run random nonce fences (&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;DIFF_8f3a...&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;), and every child process is spawned with &lt;code&gt;shell: false&lt;/code&gt; (plus explicit &lt;code&gt;cmd.exe /d /s /c&lt;/code&gt; metacharacter validation on Windows &lt;code&gt;.cmd&lt;/code&gt; shims to mitigate &lt;code&gt;CVE-2024-27980&lt;/code&gt;, and &lt;code&gt;--end-of-options&lt;/code&gt; on &lt;code&gt;git diff&lt;/code&gt; ranges to prevent &lt;code&gt;CWE-88&lt;/code&gt; argument injection).&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Deterministic Gate (&lt;code&gt;PASS = 0&lt;/code&gt;, &lt;code&gt;BLOCK = 1&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Findings are deduplicated across probes and evaluated against your severity threshold (&lt;code&gt;--fail-on P1&lt;/code&gt; by default). Any &lt;code&gt;P0&lt;/code&gt; or &lt;code&gt;P1&lt;/code&gt; finding—or any failed/timed-out probe (fail-closed)—returns exit code &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Quickstart (Zero Install or Universal Skill)
&lt;/h3&gt;

&lt;p&gt;You can run it directly from GitHub on any Node &lt;code&gt;&amp;gt;=20&lt;/code&gt; machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Check installed CLIs and cross-review matrix&lt;/span&gt;
npx &lt;span class="nt"&gt;--yes&lt;/span&gt; github:Dimoncelli/cold-jury doctor

&lt;span class="c"&gt;# 2. Run a cross-CLI hostile review on your current git diff&lt;/span&gt;
npx &lt;span class="nt"&gt;--yes&lt;/span&gt; github:Dimoncelli/cold-jury review &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--author&lt;/span&gt; claude &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--spec&lt;/span&gt; &lt;span class="s2"&gt;"Validate JWT audience claim and reject expired refresh tokens"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Install a non-bypassable git pre-push hook&lt;/span&gt;
npx &lt;span class="nt"&gt;--yes&lt;/span&gt; github:Dimoncelli/cold-jury init-hook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install it as a native &lt;strong&gt;Agent Skill&lt;/strong&gt; for Claude Code, Codex, Gemini CLI, Cursor, or OpenCode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add Dimoncelli/cold-jury
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository is MIT-licensed, ships with &lt;code&gt;0&lt;/code&gt; runtime npm dependencies (&lt;code&gt;24 files, 31.6 kB&lt;/code&gt; packed), and runs 164 automated tests across Linux, macOS, and Windows:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Dimoncelli/cold-jury" rel="noopener noreferrer"&gt;https://github.com/Dimoncelli/cold-jury&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love feedback from anyone running multi-agent coding workflows—especially on additional secret patterns, probe heuristics, or local Ollama model pairings you find effective for code review.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>node</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
