<?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: Armando Shkambi</title>
    <description>The latest articles on DEV Community by Armando Shkambi (@ourbando).</description>
    <link>https://dev.to/ourbando</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%2F4036437%2F6998a9df-1ab5-4fad-aded-cfe09cfb9917.png</url>
      <title>DEV Community: Armando Shkambi</title>
      <link>https://dev.to/ourbando</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ourbando"/>
    <language>en</language>
    <item>
      <title>railward: a self-attacking gate for AI agents that signs the proof</title>
      <dc:creator>Armando Shkambi</dc:creator>
      <pubDate>Sun, 19 Jul 2026 11:19:01 +0000</pubDate>
      <link>https://dev.to/ourbando/railward-a-self-attacking-gate-for-ai-agents-that-signs-the-proof-27h9</link>
      <guid>https://dev.to/ourbando/railward-a-self-attacking-gate-for-ai-agents-that-signs-the-proof-27h9</guid>
      <description>&lt;p&gt;Most guardrails for AI coding agents just ask you to trust them. I built one that attacks itself and hands you the proof.&lt;/p&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%2Fw57clncmc90gdvmtpg2m.gif" 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%2Fw57clncmc90gdvmtpg2m.gif" alt="railward demo" width="760" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;railward is a fail-closed gate for untrusted AI coding agents. The agent can propose any action, a small pure function decides allow, deny, or ask, and the decision is fail-closed, so anything a policy does not explicitly permit is refused. The model never reaches the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I care about
&lt;/h2&gt;

&lt;p&gt;It ships with its own adversary: a battery of 41 dangerous commands it must refuse, plus fail-open probes. Every run signs a hash-chained Ed25519 proof of exactly what was blocked. Flip one rule from deny to allow and the proof goes red. The claim is falsifiable, and a stranger can reproduce 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;railward attack &lt;span class="nt"&gt;--out&lt;/span&gt; proof.json
&lt;span class="gp"&gt;41 attacks, 41 blocked, 0 leaked;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;4 fail-open probes, 0 open -&amp;gt; proof.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verify it with nothing installed
&lt;/h2&gt;

&lt;p&gt;Open the browser verifier at &lt;a href="https://ourbando.github.io/railward/verify.html" rel="noopener noreferrer"&gt;https://ourbando.github.io/railward/verify.html&lt;/a&gt; , paste a proof.json, and it recomputes the hash chain and checks the Ed25519 signature in your browser. Nothing is uploaded.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pip install railward&lt;/code&gt;, then use the CLI or the Python library.&lt;/li&gt;
&lt;li&gt;As a Claude Code plugin: &lt;code&gt;/plugin marketplace add Ourbando/railward&lt;/code&gt; then &lt;code&gt;/plugin install railward@railward&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It runs offline, on your own hardware, in pure Python, with almost no dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a control layer, not a guarantee, and the &lt;a href="https://github.com/Ourbando/railward/blob/main/THREAT_MODEL.md" rel="noopener noreferrer"&gt;threat model&lt;/a&gt; is honest about the ceiling no software gate can cross.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribute
&lt;/h2&gt;

&lt;p&gt;The adversary is one line per attack. If you know a dangerous command class it should block, adding it is a one-line PR that joins the signed proof, with your name on the changelog line that closed it.&lt;/p&gt;

&lt;p&gt;MIT, 116 tests green. Stars, forks, and attacks welcome: &lt;a href="https://github.com/Ourbando/railward" rel="noopener noreferrer"&gt;https://github.com/Ourbando/railward&lt;/a&gt;&lt;/p&gt;

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