<?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: Thanawat suparongsuwan</title>
    <description>The latest articles on DEV Community by Thanawat suparongsuwan (@tdealer01crypto).</description>
    <link>https://dev.to/tdealer01crypto</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%2F4103020%2F1a746ab6-0964-4015-a491-3ca9120e3938.jpg</url>
      <title>DEV Community: Thanawat suparongsuwan</title>
      <link>https://dev.to/tdealer01crypto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tdealer01crypto"/>
    <language>en</language>
    <item>
      <title>Can an AI Agent Know When Not to Act? A Fail-Closed Reliability Benchmark Across Six Models</title>
      <dc:creator>Thanawat suparongsuwan</dc:creator>
      <pubDate>Thu, 24 Sep 2026 04:06:17 +0000</pubDate>
      <link>https://dev.to/tdealer01crypto/can-an-ai-agent-know-when-not-to-act-a-fail-closed-reliability-benchmark-across-six-models-1cl9</link>
      <guid>https://dev.to/tdealer01crypto/can-an-ai-agent-know-when-not-to-act-a-fail-closed-reliability-benchmark-across-six-models-1cl9</guid>
      <description>&lt;h1&gt;
  
  
  Can an AI Agent Know When Not to Act?
&lt;/h1&gt;

&lt;p&gt;Most agent benchmarks reward completion. I wanted to test the opposite behavior: when should an agent stop, ask for approval, refuse to make a claim, or re-verify stale state?&lt;/p&gt;

&lt;p&gt;I built the &lt;strong&gt;Governed Agent Reliability Benchmark&lt;/strong&gt;, a deterministic synthetic benchmark for six fail-closed behaviors:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;What it tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;Claim success only when execution, an artifact, and a verified hash all exist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approval discipline&lt;/td&gt;
&lt;td&gt;Stop for approval when a medium/high-risk action lacks matching-scope approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-result truthfulness&lt;/td&gt;
&lt;td&gt;Trust the real tool outcome, not a success-looking string when exit code/stderr disagree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret handling&lt;/td&gt;
&lt;td&gt;Keep secrets out of unauthorized destinations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery&lt;/td&gt;
&lt;td&gt;Use only an available, authorized fallback after failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale-state detection&lt;/td&gt;
&lt;td&gt;Re-verify telemetry older than its freshness threshold, even if it is labeled "live"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The offline generator produces &lt;strong&gt;240 synthetic cases (40 per capability)&lt;/strong&gt; with dataset SHA-256:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;b7b3452cd8fcd905dfc0957ede10add33bd66eeea7a11e472c8be02d7381f025&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The public Kaggle task runs a deterministic &lt;strong&gt;60-case hosted set (10 per capability)&lt;/strong&gt;. No production data, credentials, or routing internals are included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models tested
&lt;/h2&gt;

&lt;p&gt;I ran Kaggle version 3 against six models available through Kaggle at run time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Sonnet 5&lt;/li&gt;
&lt;li&gt;Gemini 3.7 Flash&lt;/li&gt;
&lt;li&gt;GPT-5.6 Luna&lt;/li&gt;
&lt;li&gt;Gemini 3.1 Flash-Lite Preview&lt;/li&gt;
&lt;li&gt;GPT-5.4 nano&lt;/li&gt;
&lt;li&gt;Gemma 4 26B A4B&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I deliberately used a mix of providers and model sizes rather than only the largest models. The question was not "which model is smartest overall?" but whether governance behavior stays reliable across different capability/cost tiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Overall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5&lt;/td&gt;
&lt;td&gt;60/60 — 100.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.7 Flash&lt;/td&gt;
&lt;td&gt;60/60 — 100.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna&lt;/td&gt;
&lt;td&gt;60/60 — 100.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.1 Flash-Lite Preview&lt;/td&gt;
&lt;td&gt;58/60 — 96.67%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 nano&lt;/td&gt;
&lt;td&gt;57/60 — 95.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 26B A4B&lt;/td&gt;
&lt;td&gt;56/60 — 93.33%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Per-capability misses were more informative than the overall leaderboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.1 Flash-Lite Preview:&lt;/strong&gt; 8/10 on evidence grounding; 10/10 on the other five capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.4 nano:&lt;/strong&gt; 8/10 on approval discipline and 9/10 on stale-state detection; perfect on the other four.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 26B A4B:&lt;/strong&gt; 8/10 on approval discipline and 8/10 on tool-result truthfulness; perfect on the other four.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Sonnet 5, Gemini 3.7 Flash, and GPT-5.6 Luna:&lt;/strong&gt; 10/10 on every capability in this 60-case run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Across all six models, &lt;strong&gt;approval discipline was the hardest capability&lt;/strong&gt;: 56/60 decisions were correct (93.33%). Secret handling and recovery were perfect across the tested lineup.&lt;/p&gt;

&lt;p&gt;The largest overall gap was 6.67 percentage points, but the location of the misses matters more than the gap. A model can look strong overall while still making exactly the kind of error that matters in an autonomous workflow: executing when approval is required, trusting conflicting tool signals, or treating incomplete evidence as proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark caught bugs in the benchmark
&lt;/h2&gt;

&lt;p&gt;A useful result happened before the final v3 run.&lt;/p&gt;

&lt;p&gt;An earlier pre-submission version exposed two defects in my own oracle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;telemetry labeled "live" could be trusted even when its age exceeded the staleness threshold;&lt;/li&gt;
&lt;li&gt;an exit code of 0 could pass even when another tool-result signal said failure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those were benchmark bugs, not model failures. I corrected both rules to fail closed, added regression coverage, and reran the public v3 task. The local benchmark test suite now passes &lt;strong&gt;22/22&lt;/strong&gt; tests.&lt;/p&gt;

&lt;p&gt;That changed how I think about evaluation work: a benchmark is also software, and its oracle deserves the same scrutiny as the model being measured.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The main lesson is that "agent reliability" is not one capability.&lt;/p&gt;

&lt;p&gt;Evidence grounding, approval discipline, truthful tool interpretation, secret handling, fallback authorization, and freshness checks fail in different ways. A single aggregate score hides those distinctions.&lt;/p&gt;

&lt;p&gt;For production-oriented agents, I would rather know &lt;em&gt;where&lt;/em&gt; a model fails than whether it ranks one position higher on a generic leaderboard.&lt;/p&gt;

&lt;p&gt;This also suggests a practical deployment pattern: keep the model responsible for proposing or selecting actions, but enforce high-risk approvals, secret boundaries, evidence requirements, and freshness checks in deterministic runtime gates. Model capability and runtime governance should reinforce each other rather than substitute for each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would measure next
&lt;/h2&gt;

&lt;p&gt;The current benchmark is intentionally small and synthetic. Ten hosted cases per capability are enough to expose obvious behavioral differences, but not enough for broad statistical claims.&lt;/p&gt;

&lt;p&gt;Next I would expand it in three directions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-turn cases where earlier context conflicts with newer evidence;&lt;/li&gt;
&lt;li&gt;tool traces with partially successful operations and retries;&lt;/li&gt;
&lt;li&gt;adversarial cases that tempt a model to convert "probably succeeded" into "verified succeeded."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would also rerun the same frozen benchmark over time to measure model-version drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to find the benchmark
&lt;/h2&gt;

&lt;p&gt;Public Kaggle task (version 3):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.kaggle.com/benchmarks/tasks/taraaaa1111/governed-agent-reliability/3" rel="noopener noreferrer"&gt;https://www.kaggle.com/benchmarks/tasks/taraaaa1111/governed-agent-reliability/3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benchmark is synthetic and deterministic. It contains no production secrets or captured user data.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #kagglechallenge #ai #machinelearning
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>kagglechallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
