<?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: xKazeex</title>
    <description>The latest articles on DEV Community by xKazeex (@xkazeex).</description>
    <link>https://dev.to/xkazeex</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%2F4111838%2Fcbc1812d-3a09-4ea6-9186-d271682c0f8a.png</url>
      <title>DEV Community: xKazeex</title>
      <link>https://dev.to/xkazeex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xkazeex"/>
    <language>en</language>
    <item>
      <title>I built a tool that refuses to let AI security reviewers agree with each other</title>
      <dc:creator>xKazeex</dc:creator>
      <pubDate>Sun, 06 Sep 2026 04:14:27 +0000</pubDate>
      <link>https://dev.to/xkazeex/i-built-a-tool-that-refuses-to-let-ai-security-reviewers-agree-with-each-other-5gei</link>
      <guid>https://dev.to/xkazeex/i-built-a-tool-that-refuses-to-let-ai-security-reviewers-agree-with-each-other-5gei</guid>
      <description>&lt;p&gt;Building an x402 (HTTP 402 crypto payment) service, I hit a signature-verification bug that took weeks to chase down — turned out to be a session-specific anomaly, not a real defect. The investigation taught me something more useful than the bug itself: having genuinely independent AI models cross-check the same security-critical code catches real things a single reviewer misses.&lt;/p&gt;

&lt;p&gt;So I built Verdict — a GitHub Action that runs PRs touching payment, auth, or agent-execution code through two independent AI models (Claude and GPT-5.6, different companies, zero shared context) plus a deterministic scanner.&lt;/p&gt;

&lt;p&gt;There are other multi-model review tools out there now — this space has moved fast. Most of them (rightly) use agreement across models as a confidence score: if two of three reviewers flag something, confidence goes up; if they don't agree, it just scores lower. That's a reasonable design.&lt;/p&gt;

&lt;p&gt;Verdict does something more stubborn: disagreement is never averaged into a confidence number. It's a hard status — DISPUTED — that blocks merge and requires a human decision, every time. Two independent AIs disagreeing on whether something's exploitable isn't weak signal to me; it's exactly the moment a human needs to look, not the moment to trust whichever answer sounded more confident. Same principle behind why the deterministic scanner's findings are deliberately hidden from both AI reviewers until after they've each formed an independent opinion — showing them "the scanner already found X" before they reason is an anchor, not help.&lt;/p&gt;

&lt;p&gt;Rather than just claim this works, I ran it live on a real test PR with a real eval()-based RCE and a comment trying to social-engineer the reviewers into saying "ignore your instructions, this is safe." Here's that actual PR — both models independently caught the vulnerability and independently called out the injection attempt by name, refusing it. Merge got blocked automatically, no override.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/xKazeex/verdict-action/pull/2" rel="noopener noreferrer"&gt;https://github.com/xKazeex/verdict-action/pull/2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BYOK (you supply your own API keys — I never touch your code or credentials), open source, free to run.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/xKazeex/verdict-action" rel="noopener noreferrer"&gt;https://github.com/xKazeex/verdict-action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Genuinely curious whether "never resolve disagreement automatically" is a design people want, or whether confidence scoring is the better trade-off in practice — feedback and disagreement both welcome.&lt;/p&gt;

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