<?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: Mohsen Seyedkazemi Ardebili</title>
    <description>The latest articles on DEV Community by Mohsen Seyedkazemi Ardebili (@mskazemi).</description>
    <link>https://dev.to/mskazemi</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%2F3997511%2Ff85584b3-05ee-47b7-b358-34484bbd147a.png</url>
      <title>DEV Community: Mohsen Seyedkazemi Ardebili</title>
      <link>https://dev.to/mskazemi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mskazemi"/>
    <language>en</language>
    <item>
      <title>Find where two AI agent runs diverged</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Sat, 10 Oct 2026 09:41:50 +0000</pubDate>
      <link>https://dev.to/mskazemi/find-where-two-ai-agent-runs-diverged-55fp</link>
      <guid>https://dev.to/mskazemi/find-where-two-ai-agent-runs-diverged-55fp</guid>
      <description>&lt;p&gt;Your agent gave one answer yesterday and a different one today. Same code, same input file, a different decision. Before you can fix anything you need to know where the two runs parted ways. Did the prompt change, did the model reply change, or did something after the model call change?&lt;/p&gt;

&lt;p&gt;This tutorial is for engineers who run agents in Python and want to answer that from two recorded runs instead of from memory. You will capture two runs as &lt;a href="https://novafabric.ai/docs/architecture/run-capsule/" rel="noopener noreferrer"&gt;Run Capsules&lt;/a&gt;, compare them with &lt;code&gt;nova diff&lt;/code&gt;, read which model call changed, and turn the same comparison into a CI gate. Every command and output below was captured from the released &lt;code&gt;novafabric 0.104.0&lt;/code&gt;. Long paths and skipped lines are marked with &lt;code&gt;…&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you need
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.12 or newer (the package declares &lt;code&gt;Requires-Python: &amp;gt;=3.12&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install novafabric openai&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;examples/blackbox_demo/&lt;/code&gt; directory from the public &lt;a href="https://github.com/MSKazemi/novafabric" rel="noopener noreferrer"&gt;MSKazemi/novafabric&lt;/a&gt; repository, copied into an empty working directory. Run every command from that working directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No API key and no hosted model are involved. The example ships a small OpenAI-compatible mock server on &lt;code&gt;127.0.0.1:9099&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The scenario
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;agent.py&lt;/code&gt; reads a payment-service config, asks a model for one recommended change, and writes the answer to &lt;code&gt;outputs/decision.json&lt;/code&gt;. The mock server answers in one of two ways, chosen by a request header the agent sends: a risky answer (disable rate limiting) or a safe one (reduce &lt;code&gt;max_connections&lt;/code&gt;). That gives you two runs whose behaviour differs for a known reason, so you can check that the diff points at the right place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: start the mock model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python blackbox_demo/mock_llm_server.py &amp;amp;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-demo-no-key-needed
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://127.0.0.1:9099
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NOVAFABRIC_SUGGEST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: capture the first run
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;nova capture&lt;/code&gt; wraps the command with no code changes. Model calls from Python workloads are recorded automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ nova capture -- python blackbox_demo/agent.py --mode bad
✓ Capsule written: …/.novafabric/capsules/01M4FBTQ7FVQEZBWQGFD2RVTW2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the capsule path in a variable (your run IDs will differ):&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="nv"&gt;BAD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.novafabric/capsules/01M4FBTQ7FVQEZBWQGFD2RVTW2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: capture the second run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ nova capture -- python blackbox_demo/agent.py --mode fixed
✓ Capsule written: …/.novafabric/capsules/01M4FBVEZDG7XVBYJBB9WD6Q8D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: diff the two runs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ nova diff "$BAD" "$FIXED"
  changed=3  added=0  removed=0

Model calls:
  ~ call at span 5fef2505ba0bd78e
Outputs:
  ~ outputs/decision.json
  ~ outputs/stdout.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three items changed (&lt;code&gt;~&lt;/code&gt;): one model call and two output files. Nothing was added or removed. For the machine-readable record, add &lt;code&gt;--output-format json&lt;/code&gt;; the model-call pair reports &lt;code&gt;request_changed: false&lt;/code&gt; and &lt;code&gt;response_changed: true&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to read it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;aligned: 1&lt;/code&gt;&lt;/strong&gt;: the diff paired the one model call in each run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;request_changed: false&lt;/code&gt;, &lt;code&gt;response_changed: true&lt;/code&gt;&lt;/strong&gt;: the agent sent the same request both times and got a different reply. The runs diverged at the model's answer, not in your prompt-building code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;environment.changes: []&lt;/code&gt;&lt;/strong&gt;: no recorded environment difference to chase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;outputs&lt;/code&gt;&lt;/strong&gt;: both files changed downstream of that reply.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: use it as a CI gate
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;--assert-no-regressions&lt;/code&gt; makes &lt;code&gt;nova diff&lt;/code&gt; exit 1 when it finds &lt;strong&gt;any&lt;/strong&gt; structural change between the two runs, including added or removed calls. Comparing a run with itself exits 0. On GitHub Actions, &lt;code&gt;--output-format github-annotation&lt;/code&gt; prints one annotation per change.&lt;/p&gt;

&lt;p&gt;Read the gate for what it is: it answers "did anything change?", not "did it get worse?". A safer answer fails it just as a riskier one does, as it did here.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this does not do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It does not judge the change.&lt;/strong&gt; The diff is structural: it tells you which call and which files differ, not whether the new behaviour is better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any difference counts.&lt;/strong&gt; Against a live model, two runs of the same prompt can return different text, and the gate fails on that too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic model-call capture is for Python workloads.&lt;/strong&gt; Other clients go through &lt;code&gt;nova api-proxy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sealing is opt-in&lt;/strong&gt; and was not used here. The capsule format is pre-1.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full version, with every command output, the replay section and the CI examples, is on the original page: &lt;a href="https://novafabric.ai/blog/find-where-two-agent-runs-diverged/" rel="noopener noreferrer"&gt;https://novafabric.ai/blog/find-where-two-agent-runs-diverged/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://novafabric.ai/blog/find-where-two-agent-runs-diverged/" rel="noopener noreferrer"&gt;novafabric.ai&lt;/a&gt;. NovaFabric is open source (Apache-2.0) and pre-1.0: &lt;a href="https://github.com/MSKazemi/novafabric" rel="noopener noreferrer"&gt;github.com/MSKazemi/novafabric&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>debugging</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I got tired of typing, so I built a free, offline voice-typing tool (open source, contributors wanted)</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Thu, 08 Oct 2026 15:04:54 +0000</pubDate>
      <link>https://dev.to/mskazemi/i-got-tired-of-typing-so-i-built-a-free-offline-voice-typing-tool-open-source-contributors-2fgn</link>
      <guid>https://dev.to/mskazemi/i-got-tired-of-typing-so-i-built-a-free-offline-voice-typing-tool-open-source-contributors-2fgn</guid>
      <description>&lt;p&gt;I built &lt;strong&gt;YazSes&lt;/strong&gt;: hold a key, speak, release, and your words are typed into whatever app has focus. It runs speech-to-text locally (faster-whisper on CPU), so nothing leaves your machine: no cloud, no account, no API key.&lt;/p&gt;


&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/u4m5Cvexjq0" width="315" height="560"&gt;
    &lt;/iframe&gt;
  &lt;/div&gt;


&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/MSKazemi/yazses/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Snap&lt;/strong&gt;&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="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;yazses
&lt;span class="nb"&gt;sudo &lt;/span&gt;snap connect yazses:audio-record   &lt;span class="c"&gt;# microphone&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;snap connect yazses:raw-input      &lt;span class="c"&gt;# hold-to-talk key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;macOS (Apple Silicon)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap MSKazemi/yazses &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; brew trust MSKazemi/yazses &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; yazses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MSKazemi.YazSes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Any OS with Python 3.11+&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;yazses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yazses quickstart   &lt;span class="c"&gt;# 3 steps tailored to your machine, read-only&lt;/span&gt;
yazses doctor       &lt;span class="c"&gt;# verify microphone, hotkey and text injection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why offline?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your voice never leaves the machine.&lt;/li&gt;
&lt;li&gt;No subscription, no API key, works without internet.&lt;/li&gt;
&lt;li&gt;It also transcribes recordings and captures meetings with speaker labels, locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub (stars welcome): &lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install guides: &lt;a href="https://mskazemi.com/yazses/install-linux.html" rel="noopener noreferrer"&gt;Linux&lt;/a&gt; · &lt;a href="https://mskazemi.com/yazses/macos-install.html" rel="noopener noreferrer"&gt;macOS&lt;/a&gt; · &lt;a href="https://mskazemi.com/yazses/windows-install.html" rel="noopener noreferrer"&gt;Windows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://mskazemi.com/yazses" rel="noopener noreferrer"&gt;https://mskazemi.com/yazses&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which OS are you on? Tell me what breaks and I'll fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to contribute? Here is where you can help in 15 minutes
&lt;/h2&gt;

&lt;p&gt;You do not need to be a speech-recognition expert. Real, open tasks right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌍 &lt;strong&gt;Native speaker of Persian, Urdu, Thai, Vietnamese, Telugu, Ukrainian, Traditional Chinese...?&lt;/strong&gt; Several translations of the docs have never been read by a native speaker. Fixing a sentence is a valid first PR.&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Pick a &lt;code&gt;good first issue&lt;/code&gt;&lt;/strong&gt;: &lt;a href="https://github.com/MSKazemi/yazses/labels/good%20first%20issue" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/labels/good%20first%20issue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐧 &lt;strong&gt;Test it on your distro / desktop&lt;/strong&gt; (Wayland, X11, Windows, macOS) and open an issue with the output of &lt;code&gt;yazses doctor&lt;/code&gt;. Bug reports from real machines are gold.&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Read the guide&lt;/strong&gt;: &lt;a href="https://github.com/MSKazemi/yazses/blob/main/.github/CONTRIBUTING.md" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/blob/main/.github/CONTRIBUTING.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The test suite runs offline (no microphone, no model download), so you can run it in a minute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv run python &lt;span class="nt"&gt;-m&lt;/span&gt; pytest tests/ &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try it, then tell me
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo&lt;/strong&gt; so others can find it: &lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⬇️ &lt;strong&gt;Install it&lt;/strong&gt; with the one-liner above and run &lt;code&gt;yazses doctor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Comment below&lt;/strong&gt; with your OS and what happened. I reply to every comment.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>linux</category>
      <category>showdev</category>
    </item>
    <item>
      <title>AI Agents Need More Than Logs: Why I Built NovaFabric</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Wed, 07 Oct 2026 10:10:58 +0000</pubDate>
      <link>https://dev.to/mskazemi/ai-agents-need-more-than-logs-why-i-built-novafabric-1emd</link>
      <guid>https://dev.to/mskazemi/ai-agents-need-more-than-logs-why-i-built-novafabric-1emd</guid>
      <description>&lt;p&gt;AI agents are becoming more powerful.&lt;/p&gt;

&lt;p&gt;They can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modify code&lt;/li&gt;
&lt;li&gt;call APIs&lt;/li&gt;
&lt;li&gt;execute shell commands&lt;/li&gt;
&lt;li&gt;change cloud infrastructure&lt;/li&gt;
&lt;li&gt;read and write files&lt;/li&gt;
&lt;li&gt;interact with other agents&lt;/li&gt;
&lt;li&gt;make decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there is a simple question that is still surprisingly hard to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;After an AI agent finishes its work, can we prove what it actually did?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Usually, the answer is: &lt;strong&gt;not completely&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is the problem behind &lt;strong&gt;NovaFabric&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logs are useful, but logs are not evidence
&lt;/h2&gt;

&lt;p&gt;Today we have many good observability tools. They can show things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent started
↓
LLM called
↓
Tool called
↓
API called
↓
File modified
↓
Agent finished
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful for debugging. But imagine that six months later something goes wrong. An auditor, security engineer, researcher, or developer may ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model was used?&lt;/li&gt;
&lt;li&gt;What prompt did it receive?&lt;/li&gt;
&lt;li&gt;What did the model return?&lt;/li&gt;
&lt;li&gt;Which tools did the agent call, and with what arguments?&lt;/li&gt;
&lt;li&gt;Which files changed?&lt;/li&gt;
&lt;li&gt;Which network services were contacted?&lt;/li&gt;
&lt;li&gt;What software versions were installed?&lt;/li&gt;
&lt;li&gt;Were secrets captured?&lt;/li&gt;
&lt;li&gt;Was the record changed after the run?&lt;/li&gt;
&lt;li&gt;Can we reproduce or inspect the execution again?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A traditional trace does not necessarily answer all of these questions. And more importantly, a normal database record can potentially be changed later.&lt;/p&gt;

&lt;p&gt;That is where the idea of &lt;strong&gt;execution evidence&lt;/strong&gt; becomes useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think of an AI run as an artifact
&lt;/h2&gt;

&lt;p&gt;NovaFabric takes a different approach. Instead of thinking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent → Logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;it thinks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent
   ↓
Execution
   ↓
Portable Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NovaFabric captures a run into something called a &lt;strong&gt;Run Capsule&lt;/strong&gt;: a structured folder describing one execution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;capsule/
├── capsule.yaml
├── trace.jsonl
├── model-calls.jsonl
├── tool-calls.jsonl
├── env.lock
├── redaction-proof.json
├── replay.yaml
└── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The execution should leave behind something you can keep, inspect, compare, replay, sign, and share.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The research paper models the capsule using &lt;strong&gt;15 entity types&lt;/strong&gt;, including model calls, tool calls, file events, network calls, human approvals, environment information, lineage, redaction records, replay information, and tamper-evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five verbs explain most of NovaFabric
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0vw8mdo8d08fqtr8mgmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0vw8mdo8d08fqtr8mgmx.png" alt="NovaFabric: from AI agent runs to verifiable evidence - capture, seal, replay, diff, audit" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Capture → Seal → Replay → Diff → Audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1. Capture
&lt;/h3&gt;

&lt;p&gt;First, capture what happened during the execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nova capture python my_agent.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NovaFabric can wrap a command without requiring the application itself to be rewritten. It aims to capture model calls, tool calls, files, network activity, environment, inputs and outputs. The result is a portable &lt;strong&gt;Run Capsule&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Seal
&lt;/h3&gt;

&lt;p&gt;Capturing information is not enough. If somebody modifies the record afterward, we want that modification to be detectable.&lt;/p&gt;

&lt;p&gt;NovaFabric combines established technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DSSE&lt;/strong&gt; for signing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RFC 3161&lt;/strong&gt; trusted timestamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merkle logs&lt;/strong&gt; for append-only history&lt;/li&gt;
&lt;li&gt;cryptographic redaction records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important point: NovaFabric is &lt;strong&gt;not inventing new cryptography&lt;/strong&gt;. It combines existing standards into one evidence system for AI-agent executions. That integration, rather than a new signing algorithm, is the paper's main contribution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before sealing:  "This file says the agent did X."

After sealing:   "This file says the agent did X,
                  and we can detect if somebody changes it later."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is an important limitation here. &lt;strong&gt;Tamper-evident does not mean tamper-proof.&lt;/strong&gt; NovaFabric can detect later modification of properly sealed evidence. It cannot prove that a trusted signing party told the truth when the evidence was originally created. The paper explicitly defines this trust boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Replay
&lt;/h3&gt;

&lt;p&gt;AI systems have another problem: reproducibility. Run the same prompt tomorrow and you may not get the same answer. So NovaFabric does not pretend every AI execution can be reproduced bit-for-bit. Instead, it defines four replay modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forensic replay&lt;/strong&gt; - execute nothing; reconstruct and inspect what happened (incident investigation, security review, audit, debugging).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mocked replay&lt;/strong&gt; - use previously recorded model responses instead of calling the model again, to test the surrounding application logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exact replay&lt;/strong&gt; - try to recreate the same environment, model, data, and execution, when deterministic conditions exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic replay&lt;/strong&gt; - run against another model and compare the &lt;em&gt;meaning&lt;/em&gt; of the new output with the original, e.g. when upgrading from Model v1 to v2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The paper is deliberately careful here: only the mocked mode is deterministic by construction with respect to model inputs, while forensic mode executes nothing.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Diff
&lt;/h3&gt;

&lt;p&gt;Run B produces a bad result. What changed? Maybe the model, the prompt, a dependency, a tool response, the environment, or the output. NovaFabric provides a structural diff between capsules, comparing the structure of runs instead of giant text logs.&lt;/p&gt;

&lt;p&gt;In the paper's controlled experiment, structural diff correctly localized all &lt;strong&gt;140 injected mutations&lt;/strong&gt; across seven tested mutation classes. That could make questions like this easier to investigate:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It worked yesterday. Why did the agent fail today?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. Audit
&lt;/h3&gt;

&lt;p&gt;Finally, the evidence can be packaged into an &lt;strong&gt;Evidence Bundle&lt;/strong&gt;. Another person should not have to trust your database; you can hand them a portable artifact containing the evidence and the cryptographic information needed to verify it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent execution → Run Capsule → Cryptographic seal → Evidence Bundle → Auditor / Researcher / Security Team
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The paper specifies an offline verification path using standard technologies rather than requiring the verifier to trust a NovaFabric server. However, it also states that this independent-verifier interoperability path had &lt;strong&gt;not yet been exercised by an independently implemented verifier&lt;/strong&gt; at publication time. That distinction matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use OpenTelemetry?
&lt;/h2&gt;

&lt;p&gt;I like OpenTelemetry, and NovaFabric uses OpenTelemetry concepts. But the problems are different:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observability&lt;/th&gt;
&lt;th&gt;Execution evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What is happening?&lt;/td&gt;
&lt;td&gt;What happened?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find errors&lt;/td&gt;
&lt;td&gt;Reconstruct the execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metrics and traces&lt;/td&gt;
&lt;td&gt;Portable run artifact&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational debugging&lt;/td&gt;
&lt;td&gt;Audit and forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usually mutable storage&lt;/td&gt;
&lt;td&gt;Tamper-evident evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live system&lt;/td&gt;
&lt;td&gt;Historical execution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;NovaFabric is &lt;strong&gt;not intended to replace Prometheus, OpenTelemetry, Langfuse, LangSmith, or similar systems&lt;/strong&gt;. It focuses on another question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can a past execution be replayed, compared, and proven?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What about secrets?
&lt;/h2&gt;

&lt;p&gt;Capturing everything creates another problem: an agent may see API keys, tokens, passwords, or credentials, and you do not want them inside a bundle sent to another company or auditor. NovaFabric includes secret redaction and a redaction attestation.&lt;/p&gt;

&lt;p&gt;But a redaction attestation means "the scanner says it detected and removed this secret." It does &lt;strong&gt;not&lt;/strong&gt; prove that an unknown secret does not exist somewhere else in the capsule. The paper makes this explicit: completeness depends on the scanner, its rules, and the locations it checks. Being clear about these boundaries is especially important for security tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did the research evaluation find?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model calls captured:                 100% in tested scenarios
MCP tool calls captured:              100% in tested scenarios
Tested tampering classes detected:    3 / 3
Structural mutations localized:       140 / 140
Redaction (14 credential types):      14 / 14 removed
Provenance graph, 10M-edge blast-radius p99:   45.5 ms
Provenance graph, 100M-edge single-client p99: 167.9 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But some results exposed weaknesses too. Mocked replay avoided live model calls in &lt;strong&gt;10/10&lt;/strong&gt; tested scenarios, but only &lt;strong&gt;2/10&lt;/strong&gt; tool-using workloads completed, because tool responses were not yet being substituted in the evaluated version. That was one of the most useful outcomes of the research: the evaluation did not only produce good benchmark numbers, it found real defects.&lt;/p&gt;

&lt;h2&gt;
  
  
  An unexpected lesson
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The pipeline ran successfully" is not the same as "the evidence is correct."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Several problems were discovered because the tests checked what &lt;em&gt;should have been recorded&lt;/em&gt;, rather than simply checking whether the program exited successfully. At one point some evidence streams were missing even though capture appeared to work. In another experiment, an ingest service returned successful HTTP responses even though its configured metadata database had no tables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Did it run?" is a weak test.
"Can we prove the expected things actually happened?" is a much stronger one.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  NovaFabric today
&lt;/h2&gt;

&lt;p&gt;NovaFabric is open source and self-hosted. The project has moved beyond the exact version evaluated in the paper, so the paper should be read as a &lt;strong&gt;research snapshot&lt;/strong&gt;, not a complete description of today's repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;novafabric

nova capture python my_agent.py
nova validate &amp;lt;capsule&amp;gt;
nova replay &amp;lt;capsule&amp;gt; &lt;span class="nt"&gt;--mode&lt;/span&gt; forensic
nova diff &amp;lt;capsule-a&amp;gt; &amp;lt;capsule-b&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project is still &lt;strong&gt;beta&lt;/strong&gt;. Some local functionality is more mature, while server, cluster-scale, and some at-scale components remain experimental. I do not want to describe experimental infrastructure as production-proven.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger idea
&lt;/h2&gt;

&lt;p&gt;As AI agents move from chat interfaces into systems that actually &lt;strong&gt;do things&lt;/strong&gt; - changing production infrastructure, approving financial operations, modifying software, moving important data, operating HPC systems, coordinating other agents - observability alone will not be enough. Eventually someone will ask: &lt;em&gt;What exactly happened? Can you prove it? Can you reproduce it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the space NovaFabric is exploring. Not another agent framework, not another tracing dashboard, but infrastructure for turning an execution into something we can &lt;strong&gt;capture → seal → replay → compare → audit&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;NovaFabric is Apache-2.0 and open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MSKazemi/novafabric" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/novafabric&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://novafabric.ai" rel="noopener noreferrer"&gt;https://novafabric.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research paper:&lt;/strong&gt; &lt;a href="https://arxiv.org/abs/2609.12582" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2609.12582&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work on AI agents, MLOps, HPC, security, observability, provenance, or reproducibility, I would love your feedback. Especially this question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When your AI agent makes an important decision today, what evidence will you still have six months from now?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>YazSes</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Wed, 23 Sep 2026 11:32:26 +0000</pubDate>
      <link>https://dev.to/mskazemi/yazses-3950</link>
      <guid>https://dev.to/mskazemi/yazses-3950</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvy6mtv9aqtk9uhr1hi2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvy6mtv9aqtk9uhr1hi2.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Help Us Build an Open, Offline Hands-Free Desktop</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Wed, 23 Sep 2026 11:31:04 +0000</pubDate>
      <link>https://dev.to/mskazemi/help-us-build-an-open-offline-hands-free-desktop-13ip</link>
      <guid>https://dev.to/mskazemi/help-us-build-an-open-offline-hands-free-desktop-13ip</guid>
      <description>&lt;p&gt;YazSes started with a simple idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hold a key, speak, and have your words typed into almost any desktop application — locally, without sending your audio to a cloud service by default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But voice is only one part of hands-free computer interaction.&lt;/p&gt;

&lt;p&gt;What if the same open-source project could eventually let you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;look toward a window and dictate into it,&lt;/li&gt;
&lt;li&gt;look roughly at something and say &lt;strong&gt;“close this”&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;move a pointer using your head,&lt;/li&gt;
&lt;li&gt;use an intentional facial gesture as a switch,&lt;/li&gt;
&lt;li&gt;use dwell when another physical switch is unavailable,&lt;/li&gt;
&lt;li&gt;combine gaze + speech + head movement + switch input,&lt;/li&gt;
&lt;li&gt;and safely fall back when the camera is uncertain?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the direction of the &lt;strong&gt;YazSes eye / camera control programme&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And this is an invitation to help us build it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6iid7zs9hc8rc159dh1k.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6iid7zs9hc8rc159dh1k.gif" alt="YazSes demo" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  First: this is not “perfect eye tracking with a laptop webcam”
&lt;/h2&gt;

&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;A normal laptop webcam is &lt;strong&gt;not&lt;/strong&gt; the same thing as a dedicated infrared eye tracker.&lt;/p&gt;

&lt;p&gt;We do not want to pretend otherwise.&lt;/p&gt;

&lt;p&gt;Commodity-camera gaze may be useful for answering a coarse question such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which window or region is the user looking toward?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should not automatically be treated as a precision mouse pointer capable of selecting a tiny icon or placing a text caret.&lt;/p&gt;

&lt;p&gt;Our current design gives different modalities different jobs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Input that may fit it best&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generate text&lt;/td&gt;
&lt;td&gt;Speech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Choose a pane/window&lt;/td&gt;
&lt;td&gt;Coarse gaze&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolve “this” or “that window”&lt;/td&gt;
&lt;td&gt;Gaze + speech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move a pointer continuously&lt;/td&gt;
&lt;td&gt;Head pose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commit an action&lt;/td&gt;
&lt;td&gt;Face switch, voice, dwell, keyboard, EMG, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precision gaze pointing&lt;/td&gt;
&lt;td&gt;Future dedicated eye-tracker backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recover from uncertainty&lt;/td&gt;
&lt;td&gt;Current focus, voice controls, keyboard/switch, or explicit abstention&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One principle from the design summarizes this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Perception proposes; an intent-bearing action commits.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your eyes can help say &lt;strong&gt;where&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your voice or another deliberate action can say &lt;strong&gt;what to do&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That matters because our eyes are always looking at something.&lt;/p&gt;

&lt;p&gt;Looking at a button should not automatically mean clicking it.&lt;/p&gt;




&lt;h1&gt;
  
  
  Some gaze functionality already exists
&lt;/h1&gt;

&lt;p&gt;This is not just a concept document.&lt;/p&gt;

&lt;p&gt;YazSes already contains working gaze-related code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Glance-Type gaze routing
&lt;/h2&gt;

&lt;p&gt;The implemented gaze path can sample webcam gaze, use a calibration map, resolve a target window, and route the next dictation toward it.&lt;/p&gt;

&lt;p&gt;When confidence is insufficient, it falls back rather than blindly choosing another window.&lt;/p&gt;

&lt;p&gt;The relevant runtime code already exists in the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/yazses/gaze/mediapipe_backend.py
src/yazses/gaze/calibrate.py
src/yazses/gaze/targeter.py
src/yazses/gaze/route.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look-to-window routing is currently associated particularly with the X11 desktop path, and cross-platform semantics are one of the things we still need to improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gaze + speech deixis
&lt;/h2&gt;

&lt;p&gt;YazSes also has a particularly interesting interaction:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;look + speak&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“focus that window”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“close this”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The speech provides the operation while the gaze snapshot provides context for what &lt;strong&gt;this&lt;/strong&gt; or &lt;strong&gt;that&lt;/strong&gt; refers to.&lt;/p&gt;

&lt;p&gt;Destructive gaze-routed actions can go through confirmation instead of being executed blindly.&lt;/p&gt;

&lt;p&gt;The important part is that gaze provides context rather than becoming an automatic click mechanism.&lt;/p&gt;




&lt;h1&gt;
  
  
  Other pieces already exist — but are not complete runtime features
&lt;/h1&gt;

&lt;p&gt;This is where the project becomes interesting for contributors.&lt;/p&gt;

&lt;p&gt;Several useful cores already exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implicit gaze calibration
&lt;/h2&gt;

&lt;p&gt;There is already a pure implicit-calibration implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/yazses/gaze/implicit.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can update a calibration model from &lt;code&gt;(gaze, click)&lt;/code&gt; observations using recursive least squares.&lt;/p&gt;

&lt;p&gt;It also contains important safeguards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reject low-confidence samples,&lt;/li&gt;
&lt;li&gt;reject extreme residuals,&lt;/li&gt;
&lt;li&gt;use a forgetting factor,&lt;/li&gt;
&lt;li&gt;compare a candidate calibration against a baseline,&lt;/li&gt;
&lt;li&gt;keep the original calibration unless the candidate performs better on held-out samples.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the pure estimator is not the same as a complete feature.&lt;/p&gt;

&lt;p&gt;The runtime still needs proper opt-in click observation, sample association, persistence and rollback work.&lt;/p&gt;




&lt;h1&gt;
  
  
  Head-Pointer is another example
&lt;/h1&gt;

&lt;p&gt;YazSes already contains the pure head-pose-to-pointer core:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/yazses/headpointer/pointer.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;yaw/pitch → cursor delta mapping,&lt;/li&gt;
&lt;li&gt;a configurable dead zone,&lt;/li&gt;
&lt;li&gt;and a dwell-click state machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;head movement
      ↓
  yaw / pitch
      ↓
dead zone + mapping
      ↓
pointer movement
      ↓
optional dwell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But this is &lt;strong&gt;not currently a complete Head-Pointer desktop feature&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The missing engineering includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shared camera/head-pose input,&lt;/li&gt;
&lt;li&gt;a platform-neutral pointer interface,&lt;/li&gt;
&lt;li&gt;X11 output,&lt;/li&gt;
&lt;li&gt;Wayland output,&lt;/li&gt;
&lt;li&gt;macOS output,&lt;/li&gt;
&lt;li&gt;Windows output,&lt;/li&gt;
&lt;li&gt;pause/resume,&lt;/li&gt;
&lt;li&gt;recentering,&lt;/li&gt;
&lt;li&gt;signal-loss handling,&lt;/li&gt;
&lt;li&gt;dwell feedback,&lt;/li&gt;
&lt;li&gt;and reliable emergency stopping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A continuous accessibility control without a dependable stop path is not something we want to ship.&lt;/p&gt;




&lt;h1&gt;
  
  
  Face gestures should become switches — not direct actions
&lt;/h1&gt;

&lt;p&gt;Another planned capability is deliberate facial input.&lt;/p&gt;

&lt;p&gt;Imagine intentionally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;opening your mouth,&lt;/li&gt;
&lt;li&gt;raising your eyebrows,&lt;/li&gt;
&lt;li&gt;making another calibrated expression,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and having that produce an abstract &lt;strong&gt;switch event&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eyebrow movement → directly click something
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;camera
   ↓
face/blendshape signal
   ↓
gesture detector
   ↓
abstract switch event
   ↓
user-configured action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;The camera detector should recognize intent.&lt;/p&gt;

&lt;p&gt;It should not contain desktop-action policy.&lt;/p&gt;

&lt;p&gt;The eventual switch could be mapped to things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start/stop dictation,&lt;/li&gt;
&lt;li&gt;click,&lt;/li&gt;
&lt;li&gt;confirm,&lt;/li&gt;
&lt;li&gt;cancel,&lt;/li&gt;
&lt;li&gt;pause the pointer,&lt;/li&gt;
&lt;li&gt;participate in a gesture chord.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;YazSes already has an input-agnostic Gesture Chord core:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/yazses/gesture/chords.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the &lt;strong&gt;Face-Gesture Switch itself does not currently have a runtime detector/adapter implementation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That distinction was important enough that we are currently correcting stale documentation which previously implied otherwise:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MSKazemi/yazses/pull/541" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/pull/541&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  One camera, not three competing camera loops
&lt;/h1&gt;

&lt;p&gt;If gaze, head pose and facial switches all use the same webcam, each feature should not independently open the camera and run its own face model.&lt;/p&gt;

&lt;p&gt;The architecture under review proposes a shared perception source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         camera
                            |
                            v
                  +-------------------+
                  | Shared Perception |
                  | one camera owner  |
                  | one face model    |
                  +---------+---------+
                            |
          +-----------------+-----------------+
          |                 |                 |
          v                 v                 v
      GazeSignal       HeadPoseSignal      FaceSignal
          |                 |                 |
          v                 v                 v
      calibration       Head-Pointer      Face Switch
          |                 |                 |
          +-----------------+-----------------+
                            |
                     safety / feedback
                            |
                         YazSes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Raw frames stay inside the perception layer.&lt;/p&gt;

&lt;p&gt;Consumers should receive small derived signals.&lt;/p&gt;

&lt;p&gt;That has several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one webcam owner,&lt;/li&gt;
&lt;li&gt;less duplicated computation,&lt;/li&gt;
&lt;li&gt;fewer camera-contention bugs,&lt;/li&gt;
&lt;li&gt;easier testing,&lt;/li&gt;
&lt;li&gt;clearer privacy boundaries,&lt;/li&gt;
&lt;li&gt;easier failure handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also means most of the system can be tested with deterministic numeric inputs rather than requiring a physical webcam in CI.&lt;/p&gt;




&lt;h1&gt;
  
  
  Privacy needs to be part of the architecture
&lt;/h1&gt;

&lt;p&gt;Camera-based accessibility software deserves careful handling of data.&lt;/p&gt;

&lt;p&gt;For this programme, the intended boundary is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Camera processing stays local.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Raw webcam frames should not become part of normal logs, evaluation exports, issue reports or network requests.&lt;/p&gt;

&lt;p&gt;For engineering evaluation, we care about derived measurements such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;target successes,&lt;/li&gt;
&lt;li&gt;wrong-target events,&lt;/li&gt;
&lt;li&gt;fallback events,&lt;/li&gt;
&lt;li&gt;calibration error,&lt;/li&gt;
&lt;li&gt;confidence,&lt;/li&gt;
&lt;li&gt;false activations,&lt;/li&gt;
&lt;li&gt;accidental clicks,&lt;/li&gt;
&lt;li&gt;pointer acquisition time,&lt;/li&gt;
&lt;li&gt;recovery after signal loss,&lt;/li&gt;
&lt;li&gt;display resolution and scaling,&lt;/li&gt;
&lt;li&gt;OS/session,&lt;/li&gt;
&lt;li&gt;broad camera category.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We do &lt;strong&gt;not&lt;/strong&gt; need public contributors to upload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;face photos,&lt;/li&gt;
&lt;li&gt;face videos,&lt;/li&gt;
&lt;li&gt;raw webcam frames,&lt;/li&gt;
&lt;li&gt;private screen contents,&lt;/li&gt;
&lt;li&gt;private dictated text,&lt;/li&gt;
&lt;li&gt;medical information,&lt;/li&gt;
&lt;li&gt;passwords or tokens,&lt;/li&gt;
&lt;li&gt;device serial numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is another important boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public GitHub QA is not automatically research participation
&lt;/h2&gt;

&lt;p&gt;We eventually want good evidence about whether these interfaces actually work.&lt;/p&gt;

&lt;p&gt;But a person who posts an engineering result on GitHub should not silently become a participant in a research paper.&lt;/p&gt;

&lt;p&gt;The programme therefore separates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CI / synthetic evidence
        ↓
community engineering QA
        ↓
separately consented research
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A future human-participant study should have its own protocol and consent process.&lt;/p&gt;

&lt;p&gt;That separation is already part of the planning work.&lt;/p&gt;




&lt;h1&gt;
  
  
  “It worked on my laptop” is not enough
&lt;/h1&gt;

&lt;p&gt;Camera interaction can vary dramatically between environments.&lt;/p&gt;

&lt;p&gt;We eventually need evidence across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows,&lt;/li&gt;
&lt;li&gt;macOS,&lt;/li&gt;
&lt;li&gt;Linux X11,&lt;/li&gt;
&lt;li&gt;GNOME Wayland,&lt;/li&gt;
&lt;li&gt;KDE Wayland,&lt;/li&gt;
&lt;li&gt;different webcams,&lt;/li&gt;
&lt;li&gt;different laptops,&lt;/li&gt;
&lt;li&gt;different screen resolutions,&lt;/li&gt;
&lt;li&gt;display scaling,&lt;/li&gt;
&lt;li&gt;multi-monitor configurations,&lt;/li&gt;
&lt;li&gt;different people,&lt;/li&gt;
&lt;li&gt;repeated sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The programme therefore proposes an evidence ladder ranging from pure deterministic tests to real hardware and, separately, controlled human studies.&lt;/p&gt;

&lt;p&gt;The basic idea is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pure unit/state tests
        ↓
cross-platform contract tests
        ↓
synthetic trace replay
        ↓
one real computer
        ↓
another physical computer
        ↓
different people
        ↓
repeated sessions
        ↓
controlled research study
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A green unit test does not prove webcam usability.&lt;/p&gt;

&lt;p&gt;One working laptop does not prove Windows, macOS or Linux support.&lt;/p&gt;

&lt;p&gt;And 1,000 trials from one person are still not 1,000 participants.&lt;/p&gt;




&lt;h1&gt;
  
  
  We also want to explore semantic grounding
&lt;/h1&gt;

&lt;p&gt;One research/development direction is especially interesting.&lt;/p&gt;

&lt;p&gt;Instead of asking the webcam to become dramatically more precise, perhaps precision can come from combining &lt;strong&gt;coarse spatial information with UI semantics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine looking approximately toward a group of controls and saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“click Save”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The gaze or head pointer gives an approximate region.&lt;/p&gt;

&lt;p&gt;The operating system accessibility tree can provide structured nearby candidates.&lt;/p&gt;

&lt;p&gt;Speech provides the requested operation.&lt;/p&gt;

&lt;p&gt;Then the resolver can produce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grounded target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ambiguous — don't guess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unresolved — don't act
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coarse gaze / pointer location
              +
structured UI candidates
              +
spoken intent
              ↓
       target resolver
              ↓
 grounded / ambiguous / unresolved
              ↓
         safety policy
              ↓
            action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current proposal deliberately starts with structured accessibility information rather than making screenshots, OCR or vision-language models the default.&lt;/p&gt;

&lt;p&gt;If structured UI data is insufficient, we should &lt;strong&gt;measure that gap first&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Where are we today?
&lt;/h1&gt;

&lt;p&gt;This is important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The complete hands-free system described in this post is not released.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As of &lt;strong&gt;September 23, 2026&lt;/strong&gt;, the architecture, implementation sequence, evaluation model and contributor workflow are being reviewed in:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MSKazemi/yazses/pull/413" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/pull/413&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The umbrella hands-free epic is:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MSKazemi/yazses/issues/102" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/issues/102&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PR #413 is a &lt;strong&gt;planning / architecture / evaluation PR&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; itself ship:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head-Pointer runtime,&lt;/li&gt;
&lt;li&gt;Face-Gesture Switch runtime,&lt;/li&gt;
&lt;li&gt;dedicated eye-tracker support,&lt;/li&gt;
&lt;li&gt;a completed hands-free preset,&lt;/li&gt;
&lt;li&gt;research results,&lt;/li&gt;
&lt;li&gt;or new webcam data collection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation is deliberate.&lt;/p&gt;

&lt;p&gt;We want the architecture, privacy rules, safety boundaries, testing approach and dependencies to be understandable &lt;strong&gt;before&lt;/strong&gt; dozens of implementation PRs start landing.&lt;/p&gt;

&lt;p&gt;There is also active repository coordination work around the design records, including an ADR-numbering collision tracked in:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MSKazemi/yazses/issues/524" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/issues/524&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So please treat the &lt;strong&gt;live issue status&lt;/strong&gt; as authoritative rather than assuming every visible eye-control issue is ready for implementation.&lt;/p&gt;




&lt;h1&gt;
  
  
  We are looking for contributors
&lt;/h1&gt;

&lt;p&gt;This is the main reason for this post.&lt;/p&gt;

&lt;p&gt;If you have experience with any of these areas, we would really value your help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;MediaPipe&lt;/li&gt;
&lt;li&gt;computer vision&lt;/li&gt;
&lt;li&gt;assistive technology&lt;/li&gt;
&lt;li&gt;accessibility engineering&lt;/li&gt;
&lt;li&gt;HCI&lt;/li&gt;
&lt;li&gt;gaze interaction&lt;/li&gt;
&lt;li&gt;head tracking&lt;/li&gt;
&lt;li&gt;switch access&lt;/li&gt;
&lt;li&gt;AAC&lt;/li&gt;
&lt;li&gt;Windows UI Automation&lt;/li&gt;
&lt;li&gt;macOS Accessibility APIs&lt;/li&gt;
&lt;li&gt;Linux AT-SPI&lt;/li&gt;
&lt;li&gt;X11&lt;/li&gt;
&lt;li&gt;Wayland&lt;/li&gt;
&lt;li&gt;XDG Desktop Portal / RemoteDesktop&lt;/li&gt;
&lt;li&gt;pointer/input architecture&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;privacy engineering&lt;/li&gt;
&lt;li&gt;human-subject evaluation&lt;/li&gt;
&lt;li&gt;technical documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do &lt;strong&gt;not&lt;/strong&gt; need expertise in everything above.&lt;/p&gt;

&lt;p&gt;The roadmap is intentionally decomposed so contributors can work on small pieces.&lt;/p&gt;

&lt;p&gt;Expected early implementation areas after the planning gate include things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shared perception signal contracts,&lt;/li&gt;
&lt;li&gt;a platform-neutral &lt;code&gt;PointerSink&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;deterministic evaluation schemas,&lt;/li&gt;
&lt;li&gt;safe gaze-calibration plumbing,&lt;/li&gt;
&lt;li&gt;accessibility-tree target contracts,&lt;/li&gt;
&lt;li&gt;privacy-safe evaluation tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But please check the issue before starting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule is simple
&lt;/h2&gt;

&lt;p&gt;For eye-control work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start an implementation issue only when its live issue says &lt;code&gt;READY&lt;/code&gt; and has the &lt;code&gt;help wanted&lt;/code&gt; label.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For coding-agent work, the repository uses an additional &lt;code&gt;agent-ready&lt;/code&gt; gate.&lt;/p&gt;

&lt;p&gt;A visible &lt;strong&gt;PLANNED&lt;/strong&gt; issue exists so people can understand the roadmap. It does not mean the dependencies are ready.&lt;/p&gt;




&lt;h1&gt;
  
  
  You will also be able to help without writing code
&lt;/h1&gt;

&lt;p&gt;Real hardware testing will eventually be extremely important.&lt;/p&gt;

&lt;p&gt;The project has planned small validation slots for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows,&lt;/li&gt;
&lt;li&gt;macOS,&lt;/li&gt;
&lt;li&gt;GNOME Wayland,&lt;/li&gt;
&lt;li&gt;KDE Wayland,&lt;/li&gt;
&lt;li&gt;X11,&lt;/li&gt;
&lt;li&gt;HiDPI,&lt;/li&gt;
&lt;li&gt;multi-monitor setups,&lt;/li&gt;
&lt;li&gt;repeated-session testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those tasks are intentionally being kept small.&lt;/p&gt;

&lt;p&gt;The goal is eventually to let somebody run one defined test pack on one computer and report:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PASS / PARTIAL / FAIL / BLOCKED&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A failure is useful evidence.&lt;/p&gt;

&lt;p&gt;But those hardware slots are &lt;strong&gt;not ready yet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They depend on the local evaluator and relevant runtime/safety features being completed first.&lt;/p&gt;

&lt;p&gt;Please don't invent your own data-collection process for them.&lt;/p&gt;




&lt;h1&gt;
  
  
  Accessibility experience is as valuable as code
&lt;/h1&gt;

&lt;p&gt;There is another kind of contribution that matters even more.&lt;/p&gt;

&lt;p&gt;If you use or support someone who uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;eye tracking,&lt;/li&gt;
&lt;li&gt;switch access,&lt;/li&gt;
&lt;li&gt;AAC,&lt;/li&gt;
&lt;li&gt;head tracking,&lt;/li&gt;
&lt;li&gt;dwell interaction,&lt;/li&gt;
&lt;li&gt;alternative pointing devices,&lt;/li&gt;
&lt;li&gt;hands-free computing,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;we would like to hear from you.&lt;/p&gt;

&lt;p&gt;Developers should not decide accessibility defaults simply by asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What feels comfortable to me?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Questions such as these need experience and evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How long should dwell be?&lt;/li&gt;
&lt;li&gt;Which facial gestures are practical?&lt;/li&gt;
&lt;li&gt;Which gestures cause fatigue?&lt;/li&gt;
&lt;li&gt;What should happen when tracking disappears?&lt;/li&gt;
&lt;li&gt;How should pause/recovery work?&lt;/li&gt;
&lt;li&gt;What causes accidental activation?&lt;/li&gt;
&lt;li&gt;What feedback is necessary?&lt;/li&gt;
&lt;li&gt;Which controls must always remain independently disableable?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If our assumptions are wrong, finding that out &lt;strong&gt;before implementation&lt;/strong&gt; is much cheaper than finding it out after release.&lt;/p&gt;




&lt;h1&gt;
  
  
  How to get involved right now
&lt;/h1&gt;

&lt;p&gt;Start here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;YazSes repository&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then look at:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Hands-free / accessibility epic #102&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/MSKazemi/yazses/issues/102" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/issues/102&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Eye/camera architecture and evaluation PR #413&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/MSKazemi/yazses/pull/413" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/pull/413&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;General contributor guide&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://mskazemi.com/yazses/contribute/start.html" rel="noopener noreferrer"&gt;https://mskazemi.com/yazses/contribute/start.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right now, reviewing PR #413 and challenging the design is genuinely useful.&lt;/p&gt;

&lt;p&gt;Tell us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what assumption is wrong,&lt;/li&gt;
&lt;li&gt;which failure mode we missed,&lt;/li&gt;
&lt;li&gt;which platform API we should use,&lt;/li&gt;
&lt;li&gt;whether the proposed abstraction is unnecessarily complicated,&lt;/li&gt;
&lt;li&gt;whether an accessibility interaction would be uncomfortable,&lt;/li&gt;
&lt;li&gt;whether the test plan measures the wrong thing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A thoughtful:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This architecture will fail because…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;can be more valuable than a large pull request.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I hope we can build
&lt;/h1&gt;

&lt;p&gt;The goal is not an impressive webcam demo.&lt;/p&gt;

&lt;p&gt;The goal is a practical, open-source &lt;strong&gt;multimodal hands-free desktop control layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Something where a person can:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speak to create text.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Glance to provide context.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move using head pose.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit using a deliberate switch, dwell, voice or another input.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine modalities instead of depending on one perfect sensor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop the system immediately when needed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fall back safely when confidence disappears.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And do the processing locally on their own computer.&lt;/p&gt;

&lt;p&gt;There is a lot left to build.&lt;/p&gt;

&lt;p&gt;That's exactly why we are inviting people in now, while the architecture and implementation boundaries are still open to improvement.&lt;/p&gt;

&lt;p&gt;If this is an area you care about, please look at the repository, read the plan, challenge our assumptions, and tell us where you would like to help.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👁️ &lt;strong&gt;Hands-free epic:&lt;/strong&gt; &lt;a href="https://github.com/MSKazemi/yazses/issues/102" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/issues/102&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏗️ &lt;strong&gt;Current eye-control planning PR:&lt;/strong&gt; &lt;a href="https://github.com/MSKazemi/yazses/pull/413" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses/pull/413&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers, accessibility users, researchers, testers and documentation contributors are all welcome.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>software</category>
    </item>
    <item>
      <title>IDKMesh: What if AI agents had to prove their work?</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Mon, 21 Sep 2026 19:15:11 +0000</pubDate>
      <link>https://dev.to/mskazemi/idkmesh-what-if-ai-agents-had-to-prove-their-work-5bg4</link>
      <guid>https://dev.to/mskazemi/idkmesh-what-if-ai-agents-had-to-prove-their-work-5bg4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frr7mgdxeketjk1hdfupa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frr7mgdxeketjk1hdfupa.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;A few days ago I wrote about one result from IDKMesh: a panel of 25 verifiers that, after measuring their shared errors, was effectively worth only one independent verifier.&lt;/p&gt;

&lt;p&gt;That experiment is interesting, but it starts in the middle of the story.&lt;/p&gt;

&lt;p&gt;So this post is the simpler version:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is IDKMesh, why am I building it, and how is it supposed to work?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;AI agents are getting very good at producing things.&lt;/p&gt;

&lt;p&gt;They can write code, edit files, call tools, generate tests, open pull requests, and sometimes operate infrastructure.&lt;/p&gt;

&lt;p&gt;But there is a basic problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An agent saying “I finished the task” is not the same as evidence that the task was done correctly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If we scale from one agent to ten agents, or one hundred agents, generation becomes faster.&lt;/p&gt;

&lt;p&gt;Verification can become the bottleneck.&lt;/p&gt;

&lt;p&gt;And if all of those agents or reviewers make similar mistakes, adding more of them may only give us more confidence, not more truth.&lt;/p&gt;

&lt;p&gt;That is the problem IDKMesh is exploring.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is IDKMesh?
&lt;/h2&gt;

&lt;p&gt;IDKMesh is an open-source research and engineering project about coordinating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;humans,&lt;/li&gt;
&lt;li&gt;AI agents,&lt;/li&gt;
&lt;li&gt;software tools,&lt;/li&gt;
&lt;li&gt;verifiers,&lt;/li&gt;
&lt;li&gt;and different kinds of compute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;around uncertain work.&lt;/p&gt;

&lt;p&gt;The name comes from a simple idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I don’t know. You don’t know. Together, the mesh can discover, build, verify, and learn.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For me, the most important word is not “mesh.”&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;verify&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;IDKMesh tries to separate the thing that does the work from the thing that decides whether the work should be trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple example
&lt;/h2&gt;

&lt;p&gt;Imagine I give an AI agent this task:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix a bug in a Python project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A normal agent workflow might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task
  ↓
AI agent
  ↓
Code change
  ↓
“Done”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is useful, but the same system that created the answer is also telling us the answer is good.&lt;/p&gt;

&lt;p&gt;IDKMesh is aiming for something more like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human goal
    ↓
Bounded Work Unit
    ↓
One or more replaceable workers
    ↓
Candidate results
    ↓
Independent verification
    ↓
Recorded evidence
    ↓
Human / governance decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The worker can propose.&lt;/p&gt;

&lt;p&gt;The verifier can check.&lt;/p&gt;

&lt;p&gt;The evidence can be inspected later.&lt;/p&gt;

&lt;p&gt;And the final authority stays separate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worker success != acceptance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That small rule changes a lot.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;At a high level, IDKMesh uses a few simple building blocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Give the worker a bounded job
&lt;/h3&gt;

&lt;p&gt;Instead of giving an agent unlimited authority over a project, work is described as a &lt;strong&gt;Work Unit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The task says what needs to be done, what the boundaries are, and what security constraints apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Let workers produce candidates
&lt;/h3&gt;

&lt;p&gt;A worker is allowed to try.&lt;/p&gt;

&lt;p&gt;There can be multiple attempts.&lt;/p&gt;

&lt;p&gt;The first answer does not need to become the final answer.&lt;/p&gt;

&lt;p&gt;Workers are replaceable. Their output is a candidate.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Verify separately
&lt;/h3&gt;

&lt;p&gt;A verifier should not simply trust the worker’s own completion claim.&lt;/p&gt;

&lt;p&gt;Verification has its own plan and produces its own result.&lt;/p&gt;

&lt;p&gt;This is where tests, independent reviewers, policy checks, or other evidence can enter.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Keep the evidence
&lt;/h3&gt;

&lt;p&gt;IDKMesh treats provenance and verification results as real artifacts, not temporary chat messages.&lt;/p&gt;

&lt;p&gt;The goal is to be able to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the task?&lt;/li&gt;
&lt;li&gt;Who or what produced this result?&lt;/li&gt;
&lt;li&gt;What checked it?&lt;/li&gt;
&lt;li&gt;Which evidence supported the decision?&lt;/li&gt;
&lt;li&gt;Can we replay or inspect it later?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Keep the final decision explicit
&lt;/h3&gt;

&lt;p&gt;A worker does not get merge authority just because it says “success.”&lt;/p&gt;

&lt;p&gt;A verifier recommendation is also not automatically the final decision.&lt;/p&gt;

&lt;p&gt;The integration step stays explicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Place the IDKMesh explainer image here.]&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you actually use today?
&lt;/h2&gt;

&lt;p&gt;This part is important because I do not want to describe research as a finished product.&lt;/p&gt;

&lt;p&gt;The full &lt;strong&gt;Verified Swarm Runner is not yet a production-ready multi-agent platform&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The repository is still a research and engineering foundation.&lt;/p&gt;

&lt;p&gt;But one useful tool is already available: &lt;strong&gt;&lt;code&gt;idkmesh gate-audit&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It takes verdicts from a review panel you already have and asks a practical question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many independent votes is this panel actually worth?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository also contains experiments, schemas, validators, simulations, interoperability work, and pieces of the future runner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;If you have Python 3.11+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/MSKazemi/idkmesh
&lt;span class="nb"&gt;cd &lt;/span&gt;idkmesh

python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
idkmesh gate-audit examples/gate-audit/panel-votes.example.json &lt;span class="nt"&gt;--pretty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also run the repository demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No model API key is required for that demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want IDKMesh to become
&lt;/h2&gt;

&lt;p&gt;The long-term idea is bigger than a review tool.&lt;/p&gt;

&lt;p&gt;I want to explore whether large groups of humans and AI agents can work on real problems without making trust an afterthought.&lt;/p&gt;

&lt;p&gt;That means learning how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;divide work into bounded tasks,&lt;/li&gt;
&lt;li&gt;run multiple independent attempts,&lt;/li&gt;
&lt;li&gt;use different workers and tools,&lt;/li&gt;
&lt;li&gt;measure whether verification is actually independent,&lt;/li&gt;
&lt;li&gt;keep reproducible evidence,&lt;/li&gt;
&lt;li&gt;learn from failures,&lt;/li&gt;
&lt;li&gt;and scale without giving autonomous workers unlimited authority.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not know yet how far this model can scale.&lt;/p&gt;

&lt;p&gt;That uncertainty is part of the project.&lt;/p&gt;

&lt;p&gt;The repository is designed to test those questions rather than pretend they are already solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open source?
&lt;/h2&gt;

&lt;p&gt;Because a system about verification should itself be inspectable.&lt;/p&gt;

&lt;p&gt;If IDKMesh makes a claim, I want the experiment, code, result, or limitation to be visible.&lt;/p&gt;

&lt;p&gt;And I especially want other people to find the assumptions that are wrong.&lt;/p&gt;

&lt;p&gt;If you are interested in AI agents, verification, distributed systems, CI, developer tooling, or human-in-the-loop systems, take a look at &lt;strong&gt;MSKazemi/idkmesh&lt;/strong&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;You do not need to understand the whole project to contribute.&lt;/p&gt;

&lt;p&gt;Even showing where the newcomer path is confusing is useful evidence.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was prepared with AI assistance and manually reviewed against the current IDKMesh repository before publication.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested DEV tags:&lt;/strong&gt; &lt;code&gt;#ai&lt;/code&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#python&lt;/code&gt; &lt;code&gt;#agents&lt;/code&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Our linter's "safe" autofix would have silently disabled RBAC</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Sun, 20 Sep 2026 21:54:58 +0000</pubDate>
      <link>https://dev.to/mskazemi/our-linters-safe-autofix-would-have-silently-disabled-rbac-log</link>
      <guid>https://dev.to/mskazemi/our-linters-safe-autofix-would-have-silently-disabled-rbac-log</guid>
      <description>&lt;p&gt;KubeIntellect is an AI agent that runs &lt;code&gt;kubectl&lt;/code&gt; against a live cluster, so its tools carry a role check and a human-approval gate. Both depend on one thing: the tool actually receiving the run config the graph injects. This is the parameter that receives it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RunnableConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;InjectedToolArg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# type: ignore[assignment]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That line is wrong in every way a reviewer is trained to notice. The default is &lt;code&gt;None&lt;/code&gt;, but the annotation does not say &lt;code&gt;| None&lt;/code&gt;. mypy complains, which is why there is a &lt;code&gt;type: ignore&lt;/code&gt; sitting on it. Ruff wants to rewrite the &lt;code&gt;Optional[...]&lt;/code&gt; spelling of it. Every instinct says clean this up.&lt;/p&gt;

&lt;p&gt;Cleaning it up disables role-based access control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the annotation is load-bearing
&lt;/h2&gt;

&lt;p&gt;LangChain finds the parameter to inject by walking the type hints and comparing with &lt;code&gt;is&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;type_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;type_hints&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;type_&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;RunnableConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is an identity comparison against one exact class object. &lt;code&gt;RunnableConfig | None&lt;/code&gt; is a &lt;code&gt;UnionType&lt;/code&gt;, not that object. It does not match, so no parameter is selected, so nothing is injected.&lt;/p&gt;

&lt;p&gt;Three functions, run against langchain-core 1.6.2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RunnableConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;InjectedToolArg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;widened&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RunnableConfig&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;InjectedToolArg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;optional_form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RunnableConfig&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;InjectedToolArg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bare           -&amp;gt; injected param: 'config'
widened        -&amp;gt; injected param: None
optional_form  -&amp;gt; injected param: None
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No error. No warning. The tool still runs. It just receives &lt;code&gt;config=None&lt;/code&gt; forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually lost
&lt;/h2&gt;

&lt;p&gt;The caller's role comes off that config, and the fallback is the problem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;user_role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;user_role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;configurable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the config gone, &lt;code&gt;config&lt;/code&gt; is falsy and every call executes as &lt;code&gt;admin&lt;/code&gt;. A &lt;code&gt;readonly&lt;/code&gt; API key stops being read-only. The check that returns &lt;code&gt;[Permission Denied] Your API key has read-only access&lt;/code&gt; is still there, still covered by its unit tests, still passing — and it never fires, because the role it compares against is no longer the caller's role.&lt;/p&gt;

&lt;p&gt;To be precise about the other half, since overstating this would be easy: the human-approval gate does not break the same way. &lt;code&gt;hitl_bypass&lt;/code&gt; also comes off the config and defaults to &lt;code&gt;False&lt;/code&gt;, so losing the config makes the tool prompt for approval &lt;em&gt;more&lt;/em&gt; often, not less. The RBAC default is the one that fails open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that makes it a trap rather than a bug
&lt;/h2&gt;

&lt;p&gt;Nobody has to be careless to introduce this. The tooling volunteers it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ruff check &lt;span class="nt"&gt;--select&lt;/span&gt; UP045 probe.py
&lt;span class="go"&gt;UP045 [*] Use `X | None` for type annotations
&lt;/span&gt;&lt;span class="gp"&gt; --&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;probe.py:5:35
&lt;span class="go"&gt;help: Convert to `X | None`
[*] 1 fixable with the `--fix` option.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;[*]&lt;/code&gt; means ruff classifies that rewrite as a &lt;strong&gt;safe&lt;/strong&gt; fix. Not &lt;code&gt;--unsafe-fixes&lt;/code&gt;. Plain &lt;code&gt;ruff check --fix&lt;/code&gt; — the command people run without reading the diff — converts a working authorization boundary into a no-op.&lt;/p&gt;

&lt;p&gt;A behavioral test will not save you either. The tools most likely to get "cleaned up" are the ones that never read &lt;code&gt;config&lt;/code&gt; at all: they pass every test they have while silently receiving &lt;code&gt;None&lt;/code&gt;. We found exactly that shape in four of our own read verbs. Harmless there, because those verbs make no authorization decision — but it is the same defect, one file away from a place where it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we did instead of a comment
&lt;/h2&gt;

&lt;p&gt;There is a comment on the line. Comments do not fail CI.&lt;/p&gt;

&lt;p&gt;The guard is a test that asserts the annotation itself. It scans every &lt;code&gt;config: Annotated[..., InjectedToolArg]&lt;/code&gt; parameter in the source and fails if any is not bare &lt;code&gt;RunnableConfig&lt;/code&gt;. Alongside it are two dynamic canaries that build a real tool with each spelling and assert, against whatever langchain version is actually installed, that the required form &lt;em&gt;is&lt;/em&gt; injected and the forbidden form is &lt;em&gt;not&lt;/em&gt; — so the day the library changes its matching rule, a test says so instead of production.&lt;/p&gt;

&lt;p&gt;There is also a test asserting the scanner finds the known sites, because a regex that matched nothing would make every other assertion in the file vacuously true.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general version
&lt;/h2&gt;

&lt;p&gt;When a framework dispatches on type identity, your annotation is not documentation. It is runtime configuration written in the type language — and anything that "improves" your types can change behavior: a linter, a type checker, an IDE quick-fix, or an agent asked to clean up implicit &lt;code&gt;Optional&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you have a line like that, the fix is not a louder comment. It is a test that fails when someone improves it.&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/MSKazemi/kubeintellect" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/kubeintellect&lt;/a&gt;&lt;br&gt;
The guard: &lt;code&gt;v4/tests/test_injected_config_invariant.py&lt;/code&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>security</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>A 25-verifier panel measured an effective size of 1.00</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Sun, 20 Sep 2026 21:48:15 +0000</pubDate>
      <link>https://dev.to/mskazemi/a-25-verifier-panel-measured-an-effective-size-of-100-lgg</link>
      <guid>https://dev.to/mskazemi/a-25-verifier-panel-measured-an-effective-size-of-100-lgg</guid>
      <description>&lt;p&gt;Generation got cheap. Trustworthy review did not.&lt;/p&gt;

&lt;p&gt;So we add reviewers. More eyes on the PR, more verifiers in the gate, a panel of LLM judges instead of one. The assumption underneath is that each additional reviewer adds independent evidence.&lt;/p&gt;

&lt;p&gt;That assumption is measurable. I measured it, and it did not hold.&lt;/p&gt;

&lt;h2&gt;
  
  
  What IDKMesh is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/MSKazemi/idkmesh" rel="noopener noreferrer"&gt;IDKMesh&lt;/a&gt; is an open-source research project (Apache-2.0, Python 3.11+) asking how humans, AI agents, tools, and heterogeneous compute can coordinate on uncertain goals and turn proposals into &lt;em&gt;verified useful work&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is a research preview, not production software, and the repository is deliberately conservative about what it claims: every number below traces to a committed experiment record you can re-run.&lt;/p&gt;

&lt;p&gt;The thesis in one line: &lt;strong&gt;reviewer count is not independent evidence count.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The coordination model treats generation as cheap and verification as the scarce resource:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work arrives as a &lt;strong&gt;bounded Work Unit&lt;/strong&gt; that must declare its security bounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replaceable workers&lt;/strong&gt; attempt it. Multiple attempts are expected; candidates are disposable.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;separate, verifier-owned evaluation plan&lt;/strong&gt; judges those candidates. Worker completion is not acceptance.&lt;/li&gt;
&lt;li&gt;Results become &lt;strong&gt;reproducible evidence&lt;/strong&gt; - result manifests, verification results, provenance digests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration is an explicit decision&lt;/strong&gt; gated on that evidence, not on a green impression.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bundled demo makes the boundary concrete: it runs the real validators against committed fixtures and &lt;em&gt;deliberately rejects&lt;/em&gt; four invalid ones - including a task with no security contract, and a worker result that accepts itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring a gate
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;idkmesh gate-audit&lt;/code&gt; takes verdicts you have already collected and reports what the panel is actually worth. Here is the bundled example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gate-audit-report-v0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gate_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example-five-verifier-gate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence_class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"synthetic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"candidates"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"verifiers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"known_good"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"known_bad"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nominal_votes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"mean_verifier_accuracy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"mean_pairwise_error_correlation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0916&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"effective_votes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.6944&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"heuristic_n_eff"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.6588&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"probes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"breached"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"breach_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.667&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"warnings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"2/3 seeded known-bad probes were accepted by the panel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read the third key before the interesting one: &lt;code&gt;"evidence_class": "synthetic"&lt;/code&gt;. Those five reviewers are invented, and &lt;code&gt;1.69&lt;/code&gt; is a demonstration of the arithmetic, not a measurement of anything real. The project keeps a hard line between synthetic demonstration and observed evidence - so here is the observed side.&lt;/p&gt;

&lt;h2&gt;
  
  
  The observed result
&lt;/h2&gt;

&lt;p&gt;Experiment E017 built a panel where every verifier is a &lt;strong&gt;program&lt;/strong&gt;, not a model: a &lt;em&gt;partial test oracle&lt;/em&gt; that draws inputs from one named region of a problem's input domain (&lt;code&gt;tiny&lt;/code&gt;, &lt;code&gt;small&lt;/code&gt;, &lt;code&gt;large&lt;/code&gt;, &lt;code&gt;extreme&lt;/code&gt;, &lt;code&gt;duplicate&lt;/code&gt;) and accepts a candidate only if it matches a reference implementation on all of them.&lt;/p&gt;

&lt;p&gt;5 regions x 5 seeds = &lt;strong&gt;25 verifiers&lt;/strong&gt;, run over a 72-candidate corpus whose ground truth comes from executing hidden tests. Every verifier's Youden &lt;em&gt;J&lt;/em&gt; is significantly positive after Bonferroni correction - mean accuracy &lt;code&gt;0.7956&lt;/code&gt;. So the panel genuinely works, individually.&lt;/p&gt;

&lt;p&gt;Error correlation between them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;same region (declared dependent)     mean rho = +0.8924
diff region (declared independent)   mean rho = +0.5263
all pairs                            mean rho = +0.5873
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifiers that share &lt;em&gt;no declared attribute&lt;/em&gt; still share 53% of their errors. A metadata group boundary is not an independence boundary.&lt;/p&gt;

&lt;p&gt;Then the part that matters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25-verifier majority error : 0.2083
single verifier            : 0.2044
measured effective size    : 1.00  (of 25 nominal)
N/(1+(N-1)rho) heuristic   : 1.66
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The panel was worth no more than one of its members. Twenty-five nominal votes, an effective size of 1.00, and the standard correlation correction still overstated it by 1.66x.&lt;/p&gt;

&lt;p&gt;The whole measurement ran in about 5 seconds on one laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the usual correction doesn't rescue this
&lt;/h2&gt;

&lt;p&gt;The familiar fix is to discount for correlation with &lt;code&gt;N_eff = N/(1+(N-1)rho)&lt;/code&gt;. Experiment E015 tested that heuristic across a parameter grid and found it exact at &lt;code&gt;rho=0&lt;/code&gt; and &lt;code&gt;rho=1&lt;/code&gt;, wrong in between, and - importantly - &lt;strong&gt;the sign of its error is not fixed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is conservative where verifiers are weak, which is where conservatism is cheap. It is &lt;em&gt;optimistic&lt;/em&gt; where verifiers are accurate and share modest dependence, which is exactly the regime you care about. At &lt;code&gt;p=0.90, rho=0.125&lt;/code&gt; the measured effective size saturates at 4.60 against a heuristic asymptote of 8.00 - and where an independent 9-verifier panel would deliver balanced error &lt;code&gt;0.000891&lt;/code&gt;, the real panel delivers &lt;code&gt;0.0125&lt;/code&gt;. Fourteen times worse.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not claim
&lt;/h2&gt;

&lt;p&gt;Being precise about scope, because it is easy to over-read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No AI review panel has been measured in this repository.&lt;/strong&gt; E017's verifiers are programs. Whether LLM reviewers exhibit the same correlation structure is an open question - and the one I most want data on.&lt;/li&gt;
&lt;li&gt;It is a research preview. Not production software.&lt;/li&gt;
&lt;li&gt;It is not on PyPI yet, so installation is from a clone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/MSKazemi/idkmesh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;idkmesh
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements-phase0.txt
python scripts/demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No model account or API key needed.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/MSKazemi/idkmesh" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/idkmesh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have verdict logs from a real review gate - human reviewers, LLM judges, or CI checks - pointing &lt;code&gt;gate-audit&lt;/code&gt; at them is the experiment I would most like to see someone else run. Especially if it disagrees with the above.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>ai</category>
      <category>testing</category>
    </item>
    <item>
      <title>I recorded my Kubernetes AI agent failing, on purpose</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Sun, 13 Sep 2026 00:22:41 +0000</pubDate>
      <link>https://dev.to/mskazemi/i-recorded-my-kubernetes-ai-agent-failing-on-purpose-1ib2</link>
      <guid>https://dev.to/mskazemi/i-recorded-my-kubernetes-ai-agent-failing-on-purpose-1ib2</guid>
      <description>&lt;p&gt;Most demos of AI-for-infrastructure tools show a clean run. I think that is exactly backwards, and I want to explain why by walking through the thirty seconds of my own demo that a normal product video would have cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scene
&lt;/h2&gt;

&lt;p&gt;A deployment is crash-looping. The agent has already diagnosed it. I ask it to restart the deployment.&lt;/p&gt;

&lt;p&gt;It stops and asks for approval. I approve. The restart runs, and the command succeeds.&lt;/p&gt;

&lt;p&gt;Then I ask the follow-up question: did the restart change anything?&lt;/p&gt;

&lt;p&gt;No. The pods fail with the same error. A restart was never going to supply a missing environment variable. The agent re-reads the pods, re-reads the events, and names the same root cause it found at the very beginning: &lt;code&gt;DATABASE_URL&lt;/code&gt; is not set, so the container exits 1.&lt;/p&gt;

&lt;p&gt;The restart was a reasonable thing to try and the wrong thing to fix it, and the system is the one saying so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why that scene is the product
&lt;/h2&gt;

&lt;p&gt;The worst failure for an incident-response tool is not being unhelpful. It is emitting something that &lt;em&gt;looks&lt;/em&gt; like a real diagnosis and is not. At 3am a confident wrong answer costs more than no answer, because it sends a tired human down a wrong path with false authority.&lt;/p&gt;

&lt;p&gt;So the design follows from that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The approval gate is at the tool boundary, not in the prompt.&lt;/strong&gt; A guardrail written into a system prompt is a suggestion, and models can be argued out of suggestions. Instead every mutating operation passes through one chokepoint that returns exactly three answers: do it, ask a human, or refuse. The model does not get a vote, so there is nothing to talk around.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detectors are compiled predicates, not model calls.&lt;/strong&gt; They are always on, they run on every observation, and they cost zero tokens. The LLM is only invoked once a detector actually fires. Watching your cluster is free; thinking about it is the expensive part, so it happens last.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every decision is appended to a hash-chained log.&lt;/strong&gt; A run can be replayed afterwards instead of remembered. If you are going to let software touch production, "what exactly did it do, and why" has to be answerable after the fact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roles are real.&lt;/strong&gt; readonly, operator, admin and superadmin, enforced per key.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it reads
&lt;/h2&gt;

&lt;p&gt;kubectl for cluster state, Prometheus for metrics via PromQL, and Loki for logs via LogQL. It answers in plain English and quotes the evidence it actually read, so you can check it rather than trust it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The video
&lt;/h2&gt;

&lt;p&gt;Eight minutes, every terminal scene a verbatim recording against a live cluster. Nothing typed by hand, nothing reconstructed. The approval-gate segment starts at 2:27.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/je-K_w3vgGY" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In your browser, nothing to install: &lt;a href="https://kubeintellect.com/demo" rel="noopener noreferrer"&gt;https://kubeintellect.com/demo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pip install kubeintellect&lt;/code&gt; - AGPL-3.0, self-hosted, bring your own LLM provider&lt;/li&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/MSKazemi/kubeintellect" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/kubeintellect&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The v1 architecture is written up in the Journal of Grid Computing (&lt;a href="https://doi.org/10.1007/s10723-026-09837-6" rel="noopener noreferrer"&gt;https://doi.org/10.1007/s10723-026-09837-6&lt;/a&gt;), with a preprint at &lt;a href="https://arxiv.org/abs/2509.02449" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2509.02449&lt;/a&gt;. The repo is several generations past that now.&lt;/p&gt;

&lt;p&gt;If you run Kubernetes in production, the thing I most want to hear is which failure you would throw at it that I have not handled.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Offline voice dictation on Linux, without the cloud</title>
      <dc:creator>Mohsen Seyedkazemi Ardebili</dc:creator>
      <pubDate>Mon, 22 Jun 2026 19:49:15 +0000</pubDate>
      <link>https://dev.to/mskazemi/offline-voice-dictation-on-linux-without-the-cloud-16jd</link>
      <guid>https://dev.to/mskazemi/offline-voice-dictation-on-linux-without-the-cloud-16jd</guid>
      <description>&lt;h1&gt;
  
  
  Offline voice dictation on Linux, without the cloud
&lt;/h1&gt;

&lt;p&gt;Voice dictation is incredibly useful, but most people only meet it through cloud services: Google, Apple, Microsoft, or commercial tools that send audio away from your machine.&lt;/p&gt;

&lt;p&gt;That is convenient, but it is not always ideal.&lt;/p&gt;

&lt;p&gt;Sometimes you want dictation that works locally. Sometimes you are writing code, notes, private messages, medical text, research ideas, or internal company material. Sometimes you simply do not want every voice input to depend on an internet connection, an API key, or a subscription.&lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;YazSes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YazSes&lt;/strong&gt; is an open-source, offline voice-dictation tool for Linux. You hold a key, speak, release, and your words are transcribed locally with &lt;code&gt;faster-whisper&lt;/code&gt; and typed into the focused app.&lt;/p&gt;

&lt;p&gt;No cloud.&lt;br&gt;
No API key.&lt;br&gt;
No subscription.&lt;br&gt;
Audio stays on your machine.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;&lt;br&gt;
Site: &lt;a href="https://mskazemi.github.io/yazses/" rel="noopener noreferrer"&gt;https://mskazemi.github.io/yazses/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem: most dictation is cloud-first
&lt;/h2&gt;

&lt;p&gt;Voice typing has become common, but the default experience is usually cloud-based.&lt;/p&gt;

&lt;p&gt;For many users, that is fine. For others, it is a problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You may not want private speech sent to a third-party service.&lt;/li&gt;
&lt;li&gt;You may want dictation that keeps working offline.&lt;/li&gt;
&lt;li&gt;You may want a tool that is scriptable, inspectable, and open source.&lt;/li&gt;
&lt;li&gt;You may want voice input for Linux, terminals, editors, and custom workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux users especially often have fewer polished dictation options than users on macOS or Windows. And for developers, accessibility users, and privacy-conscious users, “just use the cloud dictation built into something else” is not always enough.&lt;/p&gt;
&lt;h2&gt;
  
  
  What YazSes does
&lt;/h2&gt;

&lt;p&gt;YazSes is designed around a simple workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hold a key.&lt;/li&gt;
&lt;li&gt;Speak.&lt;/li&gt;
&lt;li&gt;Release.&lt;/li&gt;
&lt;li&gt;The text appears in the app you are using.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The transcription runs locally using &lt;code&gt;faster-whisper&lt;/code&gt;. The output is then inserted into the currently focused app, so it can work with editors, terminals, browsers, chat apps, notes, and other everyday tools.&lt;/p&gt;

&lt;p&gt;The goal is not to build a big AI assistant. YazSes is intentionally smaller and more predictable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is offline dictation plus voice commands. It is not an LLM agent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction matters. YazSes does not browse your files, reason over your project, or take autonomous actions. It listens when you trigger it, transcribes locally, and can map specific spoken commands to specific actions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install and quick setup
&lt;/h2&gt;

&lt;p&gt;For Python users, the basic install is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
pipx install yazses&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On Linux, you can also use Snap:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
sudo snap install yazses&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A typical first setup flow is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
yazses doctor&lt;br&gt;
yazses enroll&lt;br&gt;
yazses start&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The idea is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;doctor&lt;/code&gt; checks your system setup.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enroll&lt;/code&gt; helps configure your voice/input workflow.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start&lt;/code&gt; runs the dictation daemon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that, you can hold the trigger key, speak, and release to type into the current app.&lt;/p&gt;
&lt;h2&gt;
  
  
  Voice commands and macros
&lt;/h2&gt;

&lt;p&gt;Plain dictation is useful, but developers and power users often need more than text.&lt;/p&gt;

&lt;p&gt;YazSes also supports voice commands for common editor and terminal workflows. For example, phrases can map to actions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“undo that”&lt;/li&gt;
&lt;li&gt;“save file”&lt;/li&gt;
&lt;li&gt;“go to line 42”&lt;/li&gt;
&lt;li&gt;“run the tests”&lt;/li&gt;
&lt;li&gt;“rename this to user_id”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is useful because voice input is not only about writing paragraphs. Sometimes you want to control repetitive editing actions without leaving your flow.&lt;/p&gt;

&lt;p&gt;YazSes also supports macros and personal vocabulary, so the tool can become more useful for your own workflow over time.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;At a high level, the pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger key
   ↓
Record audio while held
   ↓
Voice activity / endpoint handling
   ↓
Local faster-whisper transcription
   ↓
Command grammar or plain text
   ↓
Type into the focused app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important design choice is that the speech-to-text step happens locally. Your audio does not need to be uploaded to a cloud service to become text.&lt;/p&gt;

&lt;p&gt;This makes YazSes useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;private notes&lt;/li&gt;
&lt;li&gt;coding sessions&lt;/li&gt;
&lt;li&gt;terminal workflows&lt;/li&gt;
&lt;li&gt;accessibility experiments&lt;/li&gt;
&lt;li&gt;offline environments&lt;/li&gt;
&lt;li&gt;privacy-focused Linux setups&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;YazSes is still evolving, and I want to be honest about the current scope.&lt;/p&gt;

&lt;p&gt;First, YazSes is &lt;strong&gt;Linux-first&lt;/strong&gt; right now. The repository also contains macOS and Windows backends/install guides, but those builds are still more experimental. I would especially welcome testers on macOS and Windows.&lt;/p&gt;

&lt;p&gt;Second, Linux input behavior can depend on your desktop environment. X11 and Wayland can behave differently, especially around global hotkeys and text injection.&lt;/p&gt;

&lt;p&gt;Third, YazSes is not an LLM agent. It will not plan tasks, browse your repository, or make decisions for you. It is a local dictation and command tool.&lt;/p&gt;

&lt;p&gt;Fourth, accuracy depends on your microphone, environment, model choice, accent, and vocabulary. The goal is to make the setup practical and tunable, but speech recognition is never perfect for everyone out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I made it open source
&lt;/h2&gt;

&lt;p&gt;I wanted a tool that was useful, inspectable, and privacy-friendly.&lt;/p&gt;

&lt;p&gt;Voice input is too important to be locked behind cloud-only systems. It can help with productivity, accessibility, fatigue, coding, writing, and everyday computer use.&lt;/p&gt;

&lt;p&gt;For me, the ideal version of this tool is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple enough to trust&lt;/li&gt;
&lt;li&gt;local by default&lt;/li&gt;
&lt;li&gt;useful on Linux&lt;/li&gt;
&lt;li&gt;friendly to developers&lt;/li&gt;
&lt;li&gt;helpful for accessibility users&lt;/li&gt;
&lt;li&gt;extensible with commands and macros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the direction I am trying to take YazSes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/MSKazemi/yazses" rel="noopener noreferrer"&gt;https://github.com/MSKazemi/yazses&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Project site:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mskazemi.github.io/yazses/" rel="noopener noreferrer"&gt;https://mskazemi.github.io/yazses/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pipx install yazses&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or on Linux with Snap:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo snap install yazses&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I would really appreciate feedback, especially on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transcription accuracy&lt;/li&gt;
&lt;li&gt;setup problems&lt;/li&gt;
&lt;li&gt;Linux desktop compatibility&lt;/li&gt;
&lt;li&gt;X11 vs Wayland behavior&lt;/li&gt;
&lt;li&gt;useful voice commands&lt;/li&gt;
&lt;li&gt;accessibility use cases&lt;/li&gt;
&lt;li&gt;macOS and Windows testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the project is useful to you, a GitHub star, issue, or test report would help a lot.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
