<?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: yaron torjeman</title>
    <description>The latest articles on DEV Community by yaron torjeman (@yaron_torjeman_5288cbab83).</description>
    <link>https://dev.to/yaron_torjeman_5288cbab83</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1811546%2F653d1c97-0f99-478f-9420-b1ce9165c195.png</url>
      <title>DEV Community: yaron torjeman</title>
      <link>https://dev.to/yaron_torjeman_5288cbab83</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yaron_torjeman_5288cbab83"/>
    <language>en</language>
    <item>
      <title>Every AI agent framework focuses on making agents smarter. None of them ask what happens when agents screw up.</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Sun, 08 Feb 2026 21:59:04 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/every-ai-agent-framework-focuses-on-making-agents-smarter-none-of-them-ask-what-happens-when-1da1</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/every-ai-agent-framework-focuses-on-making-agents-smarter-none-of-them-ask-what-happens-when-1da1</guid>
      <description>&lt;p&gt;New agent framework drops every week. CrewAI. LangChain. AutoGen. OpenAI Agents SDK.&lt;/p&gt;

&lt;p&gt;They all compete on the same axis: &lt;strong&gt;how smart can we make the agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nobody's competing on: &lt;strong&gt;how do we stop it from deleting prod?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I work in DevOps. I manage Kubernetes clusters, CI/CD pipelines, and cloud infrastructure for a living. I've watched teams build incredible AI agent demos that can manage infrastructure, write code, push deployments.&lt;/p&gt;

&lt;p&gt;Then the security review happens.&lt;/p&gt;

&lt;p&gt;"So this thing can just… run &lt;code&gt;kubectl delete namespace production&lt;/code&gt;?"&lt;/p&gt;

&lt;p&gt;"Well technically"&lt;/p&gt;

&lt;p&gt;"No."&lt;/p&gt;

&lt;p&gt;Demo stays in staging. Forever. I've seen this three times this year alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap nobody's filling
&lt;/h2&gt;

&lt;p&gt;Here's the thing. Airflow, Temporal, n8n — they're great at &lt;em&gt;running&lt;/em&gt; stuff. But they don't care &lt;em&gt;what&lt;/em&gt; they're running. Safety is your problem.&lt;/p&gt;

&lt;p&gt;Agent frameworks? They care about reasoning, tool selection, memory. They don't care what happens when the reasoning is wrong.&lt;/p&gt;

&lt;p&gt;There's a gap between "the agent decided to do X" and "X actually happened in production." Nobody owns that gap.&lt;/p&gt;

&lt;p&gt;So I built something to own it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cordum
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cordum.io" rel="noopener noreferrer"&gt;Cordum&lt;/a&gt; is an open-source control plane that sits between AI agents and infrastructure. Every intent gets intercepted and evaluated &lt;strong&gt;before&lt;/strong&gt; execution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent: "I want to run kubectl delete namespace production"
    ↓
Cordum Safety Kernel: evaluates against policy
    ↓
Decision: DENY — "Destructive operations on production are not allowed"
    ↓
Result: Command never reaches your cluster.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire idea. Policy-as-code, evaluated pre-dispatch, with a full audit trail.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like in practice
&lt;/h2&gt;

&lt;p&gt;You write policies in YAML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;block-destructive-prod&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;destructive&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;production&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Destructive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;prod&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;operations&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;blocked"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;approve-prod-writes&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;production&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;write&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require_approval&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;writes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;need&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;human&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sign-off"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four possible outcomes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decision&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Action proceeds, fully logged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Blocked. Never reaches infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;require_approval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Human gets pinged. Action waits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;constrain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allowed, but with enforced limits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The kernel evaluates every action in under 5ms. Not a sidecar. Not a webhook. It's in the execution path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│  Agent (Claude, GPT, CrewAI, whatever)  │
└─────────────────┬───────────────────────┘
                  ↓
┌─────────────────┴───────────────────────┐
│  Cordum Control Plane                   │
│  ┌──────────────────────────────────┐   │
│  │  Safety Kernel (policy gate)     │   │
│  │  → allow / deny / approve / cap  │   │
│  └──────────────────────────────────┘   │
│  ┌──────────────────────────────────┐   │
│  │  Scheduler + Workflow Engine     │   │
│  └──────────────────────────────────┘   │
└─────────────────┬───────────────────────┘
                  ↓
┌─────────────────┴───────────────────────┐
│  Infrastructure (K8s, AWS, GitHub, etc) │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Built in Go. NATS JetStream for durable messaging. Redis for state. Not a Python wrapper around an LLM API call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cordum is NOT
&lt;/h2&gt;

&lt;p&gt;This matters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not an agent framework.&lt;/strong&gt; It doesn't replace CrewAI or LangChain. It governs them. Use whatever agent framework you want — Cordum sits underneath.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not a workflow engine.&lt;/strong&gt; Airflow runs DAGs. Cordum decides whether a step in your DAG is &lt;em&gt;allowed to run&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not post-hoc logging.&lt;/strong&gt; By the time you're reading logs, the damage is done. Cordum blocks bad actions before they execute.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pack system
&lt;/h2&gt;

&lt;p&gt;Want to add capabilities? Install a pack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cordum pack &lt;span class="nb"&gt;install &lt;/span&gt;slack
cordum pack &lt;span class="nb"&gt;install &lt;/span&gt;kubernetes
cordum pack &lt;span class="nb"&gt;install &lt;/span&gt;github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;16 packs available. Each ships as a signed OCI container. Installs with policy overlays — so new capabilities come with governance built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rough edges
&lt;/h2&gt;

&lt;p&gt;It's v0.1.0. I'm not going to pretend otherwise.&lt;/p&gt;

&lt;p&gt;The docs need work. Some error messages are cryptic. The dashboard is functional, not pretty. I'm one developer building this between my day job and too much coffee.&lt;/p&gt;

&lt;p&gt;But the core — the Safety Kernel, the CAP protocol, the policy engine — that works. It's in production. The architecture decisions are ones I'd make again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think this matters
&lt;/h2&gt;

&lt;p&gt;We're in a weird moment. Everyone's racing to give agents more autonomy. More tool access. More decision-making power. And the governance story is basically: "we'll figure it out later."&lt;/p&gt;

&lt;p&gt;Later is a &lt;code&gt;kubectl delete&lt;/code&gt; away from being too late.&lt;/p&gt;




&lt;p&gt;⭐ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/cordum-io/cordum" rel="noopener noreferrer"&gt;github.com/cordum-io/cordum&lt;/a&gt;&lt;br&gt;
🌐 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://cordum.io" rel="noopener noreferrer"&gt;cordum.io&lt;/a&gt;&lt;br&gt;
📖 &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://cordum.io/docs" rel="noopener noreferrer"&gt;cordum.io/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever had an agent demo killed by a security review — I built this for you.&lt;/p&gt;

&lt;p&gt;What's your team's approach to agent governance? Genuinely curious. I keep hearing "we just don't deploy them to prod" and that can't be the final answer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Mon, 26 Jan 2026 21:02:47 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/-42gh</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/-42gh</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/yaron_torgeman_104570d968" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3733676%2F46aa7d52-3cbc-4fcc-9a8b-8b1fb93bf872.png" alt="yaron_torgeman_104570d968"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/yaron_torgeman_104570d968/-mcp-vs-cap-why-your-ai-agents-need-both-protocols-3g4l" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;# MCP vs CAP: Why Your AI Agents Need Both Protocols&lt;/h2&gt;
      &lt;h3&gt;yaron torgeman ・ Jan 26&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#mcp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#agents&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Fri, 16 Jan 2026 20:37:55 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/-11i1</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/-11i1</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/yaron_torjeman_5288cbab83" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1811546%2F653d1c97-0f99-478f-9420-b1ce9165c195.png" alt="yaron_torjeman_5288cbab83"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/yaron_torjeman_5288cbab83/after-months-of-building-in-my-spare-time-i-just-open-sourced-cordum-a-governance-layer-for-2dkb" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Why I Spent 6 Months Building Guardrails for AI Agents&lt;/h2&gt;
      &lt;h3&gt;yaron torjeman ・ Jan 16&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>ai</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>What Happens When You Give an AI Agent Root Access?</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Fri, 16 Jan 2026 20:33:43 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/what-happens-when-you-give-an-ai-agent-root-access-1nda</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/what-happens-when-you-give-an-ai-agent-root-access-1nda</guid>
      <description>&lt;p&gt;It deletes your production database. Merges a broken PR. Sends 10,000 Slack messages. Spins up $50K worth of EC2 instances.&lt;/p&gt;

&lt;p&gt;I'm kidding. Mostly.&lt;/p&gt;

&lt;p&gt;But here's the thing: &lt;strong&gt;AI agents are getting root access everywhere&lt;/strong&gt;, and we're pretending guardrails will magically appear later.&lt;/p&gt;

&lt;p&gt;They won't.&lt;/p&gt;

&lt;p&gt;So I spent the last few months building &lt;strong&gt;Cordum&lt;/strong&gt; - an open-source governance layer for AI agents. Every action goes through a policy check &lt;em&gt;before&lt;/em&gt; it executes.&lt;/p&gt;

&lt;p&gt;Here's why I built it, how it works, and what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: AI Agents Are Powerful but Terrifying
&lt;/h2&gt;

&lt;p&gt;I've been obsessed with AI agents - not chatbots, but agents that actually &lt;em&gt;do&lt;/em&gt; things. Agents that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge pull requests&lt;/li&gt;
&lt;li&gt;Deploy to Kubernetes&lt;/li&gt;
&lt;li&gt;Update database records&lt;/li&gt;
&lt;li&gt;Send Slack messages on your behalf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The technology is ready. But every time I tried to deploy one to production, the same thing happened:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security said no.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And honestly? They were right.&lt;/p&gt;

&lt;p&gt;Think about it: you're giving an AI the ability to write to production systems, and there's no audit trail, no approval workflow, no way to enforce policies. It's like giving an intern root access and hoping for the best.&lt;/p&gt;

&lt;p&gt;I kept seeing teams stuck in what I call &lt;strong&gt;"PoC Purgatory"&lt;/strong&gt; - amazing demos that never ship because there's no governance story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Policy-Before-Dispatch
&lt;/h2&gt;

&lt;p&gt;What if every AI action had to pass through a policy check &lt;em&gt;before&lt;/em&gt; it executed?&lt;/p&gt;

&lt;p&gt;That's the core idea behind Cordum.&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  │ --&amp;gt; │ Safety Kernel │ --&amp;gt; │   Action    │
└─────────────┘     └──────────────┘     └─────────────┘
                           │
                    ┌──────┴──────┐
                    │   Policy    │
                    │  (as code)  │
                    └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before ANY job executes, the Safety Kernel evaluates your policy and returns one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Allow&lt;/strong&gt; - proceed normally&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Deny&lt;/strong&gt; - block with reason&lt;/li&gt;
&lt;li&gt;👤 &lt;strong&gt;Require Approval&lt;/strong&gt; - human in the loop&lt;/li&gt;
&lt;li&gt;⏳ &lt;strong&gt;Throttle&lt;/strong&gt; - rate limit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Show Me the Code
&lt;/h2&gt;

&lt;p&gt;Here's what a policy looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# policy.yaml&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require-approval-for-prod&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;write&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require_approval&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;writes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;need&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;human&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;approval"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;block-destructive&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;delete&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;drop&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;destroy&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Destructive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;operations&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowed"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;allow-read-only&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;allow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When an agent tries to do something dangerous, Cordum intervenes:&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;"job_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;"job_abc123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"decision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"require_approval"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Production writes need human approval"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"matched_rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"require-approval-for-prod"&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;The job waits until a human approves it in the dashboard. Full audit trail. Compliance happy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Cordum is a control plane, not an agent framework. It orchestrates and governs agents - it doesn't replace LangChain or CrewAI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────┐
│                    Cordum Control Plane                  │
├─────────────────────────────────────────────────────────┤
│  ┌───────────┐  ┌──────────────┐  ┌─────────────────┐  │
│  │ Scheduler │  │ Safety Kernel │  │ Workflow Engine │  │
│  └───────────┘  └──────────────┘  └─────────────────┘  │
├─────────────────────────────────────────────────────────┤
│  ┌───────────────┐  ┌───────────────────────────────┐  │
│  │  NATS Bus     │  │  Redis (State)                │  │
│  └───────────────┘  └───────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
         │                    │                    │
    ┌────┴────┐          ┌────┴────┐          ┌───┴────┐
    │ Worker  │          │ Worker  │          │ Worker │
    │ (Slack) │          │ (GitHub)│          │ (K8s)  │
    └─────────┘          └─────────┘          └────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tech stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt; - Core control plane (~15K lines)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NATS JetStream&lt;/strong&gt; - Message bus with at-least-once delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; - State store for jobs, workflows, context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; - Dashboard with real-time updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt; 5ms policy evaluation latency&lt;/li&gt;
&lt;li&gt;10k+ events/sec per node&lt;/li&gt;
&lt;li&gt;100% deterministic replay&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Protocol: CAP
&lt;/h2&gt;

&lt;p&gt;I also built a protocol called &lt;strong&gt;CAP&lt;/strong&gt; (Cordum Agent Protocol). Think of it as MCP (Model Context Protocol) but for distributed orchestration.&lt;/p&gt;

&lt;p&gt;MCP is great for tool calling within a single model. But it doesn't cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling across worker pools&lt;/li&gt;
&lt;li&gt;Policy enforcement&lt;/li&gt;
&lt;li&gt;State machine (pending → running → succeeded)&lt;/li&gt;
&lt;li&gt;Heartbeats and worker liveness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CAP fills those gaps. It's a separate repo with SDKs for Go, Python, Node, and C++.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Hello World worker in Go&lt;/span&gt;
&lt;span class="n"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewWorker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&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;Pool&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;"my-workers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Subjects&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"job.hello.*"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"job.hello.greet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JobContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&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;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Succeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, %s!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pre-Built Packs
&lt;/h2&gt;

&lt;p&gt;Nobody wants to write integrations from scratch. Cordum comes with 16 pre-built packs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Packs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Slack, MS Teams, Webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevOps&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Jira&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;Kubernetes, Terraform, Vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;Prometheus, Sentry, OpenTelemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI/LLM&lt;/td&gt;
&lt;td&gt;MCP Bridge, MCP Client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Install with one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cordumctl pack &lt;span class="nb"&gt;install &lt;/span&gt;slack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Want to try it? Here's the 60-second version:&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/cordum-io/cordum
&lt;span class="nb"&gt;cd &lt;/span&gt;cordum
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://localhost:8082" rel="noopener noreferrer"&gt;http://localhost:8082&lt;/a&gt; - that's your dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Safety as a feature, not a constraint
&lt;/h3&gt;

&lt;p&gt;I initially thought of governance as a "necessary evil" - something enterprises need for compliance. But I've come to see it as a &lt;strong&gt;feature&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you can prove that every AI action was evaluated against policy and logged, you unlock use cases that were previously impossible. Banks can use AI agents. Healthcare can use AI agents. The "permission to write" becomes a competitive advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The protocol matters more than I expected
&lt;/h3&gt;

&lt;p&gt;I spent a lot of time on CAP, and it paid off. Having a clean protocol means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers can be written in any language&lt;/li&gt;
&lt;li&gt;The control plane can evolve independently&lt;/li&gt;
&lt;li&gt;Third parties can build compatible tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Open source is a distribution strategy
&lt;/h3&gt;

&lt;p&gt;I could have built this as a closed SaaS from day one. But open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds trust (you can read the code)&lt;/li&gt;
&lt;li&gt;Enables self-hosting (enterprises love this)&lt;/li&gt;
&lt;li&gt;Creates a community funnel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The business model is open core: self-hosted is free forever, cloud/enterprise features are paid.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Helm chart&lt;/strong&gt; for Kubernetes deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cordum Cloud&lt;/strong&gt; - managed version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual workflow editor&lt;/strong&gt; in the dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More packs&lt;/strong&gt; - AWS, GCP, PagerDuty, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://cordum.io" rel="noopener noreferrer"&gt;https://cordum.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/cordum-io/cordum" rel="noopener noreferrer"&gt;https://github.com/cordum-io/cordum&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Protocol:&lt;/strong&gt; &lt;a href="https://github.com/cordum-io/cap" rel="noopener noreferrer"&gt;https://github.com/cordum-io/cap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://cordum.io/docs" rel="noopener noreferrer"&gt;https://cordum.io/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building AI agents and want governance built in, give it a try. Star the repo if you find it useful ⭐&lt;/p&gt;

&lt;p&gt;I'd love feedback - what's missing? What would make this useful for your projects?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! I'm happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sec</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why I Spent 6 Months Building Guardrails for AI Agents</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Fri, 16 Jan 2026 20:23:00 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/after-months-of-building-in-my-spare-time-i-just-open-sourced-cordum-a-governance-layer-for-2dkb</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/after-months-of-building-in-my-spare-time-i-just-open-sourced-cordum-a-governance-layer-for-2dkb</guid>
      <description>&lt;p&gt;Here's why I built it, how it works, and what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: AI Agents Are Powerful but Terrifying
&lt;/h2&gt;

&lt;p&gt;I've been obsessed with AI agents - not chatbots, but agents that actually &lt;em&gt;do&lt;/em&gt; things. Agents that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge pull requests&lt;/li&gt;
&lt;li&gt;Deploy to Kubernetes&lt;/li&gt;
&lt;li&gt;Update database records&lt;/li&gt;
&lt;li&gt;Send Slack messages on your behalf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The technology is ready. But every time I tried to deploy one to production, the same thing happened:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security said no.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And honestly? They were right.&lt;/p&gt;

&lt;p&gt;Think about it: you're giving an AI the ability to write to production systems, and there's no audit trail, no approval workflow, no way to enforce policies. It's like giving an intern root access and hoping for the best.&lt;/p&gt;

&lt;p&gt;I kept seeing teams stuck in what I call &lt;strong&gt;"PoC Purgatory"&lt;/strong&gt; - amazing demos that never ship because there's no governance story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Policy-Before-Dispatch
&lt;/h2&gt;

&lt;p&gt;What if every AI action had to pass through a policy check &lt;em&gt;before&lt;/em&gt; it executed?&lt;/p&gt;

&lt;p&gt;That's the core idea behind Cordum.&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  │ --&amp;gt; │ Safety Kernel │ --&amp;gt; │   Action    │
└─────────────┘     └──────────────┘     └─────────────┘
                           │
                    ┌──────┴──────┐
                    │   Policy    │
                    │  (as code)  │
                    └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before ANY job executes, the Safety Kernel evaluates your policy and returns one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Allow&lt;/strong&gt; - proceed normally&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Deny&lt;/strong&gt; - block with reason&lt;/li&gt;
&lt;li&gt;👤 &lt;strong&gt;Require Approval&lt;/strong&gt; - human in the loop&lt;/li&gt;
&lt;li&gt;⏳ &lt;strong&gt;Throttle&lt;/strong&gt; - rate limit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Show Me the Code
&lt;/h2&gt;

&lt;p&gt;Here's what a policy looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# policy.yaml&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require-approval-for-prod&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;write&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require_approval&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;writes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;need&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;human&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;approval"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;block-destructive&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;delete&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;drop&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;destroy&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Destructive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;operations&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowed"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;allow-read-only&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;risk_tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;allow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When an agent tries to do something dangerous, Cordum intervenes:&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;"job_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;"job_abc123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"decision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"require_approval"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Production writes need human approval"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"matched_rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"require-approval-for-prod"&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;The job waits until a human approves it in the dashboard. Full audit trail. Compliance happy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Cordum is a control plane, not an agent framework. It orchestrates and governs agents - it doesn't replace LangChain or CrewAI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────┐
│                    Cordum Control Plane                  │
├─────────────────────────────────────────────────────────┤
│  ┌───────────┐  ┌──────────────┐  ┌─────────────────┐  │
│  │ Scheduler │  │ Safety Kernel │  │ Workflow Engine │  │
│  └───────────┘  └──────────────┘  └─────────────────┘  │
├─────────────────────────────────────────────────────────┤
│  ┌───────────────┐  ┌───────────────────────────────┐  │
│  │  NATS Bus     │  │  Redis (State)                │  │
│  └───────────────┘  └───────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
         │                    │                    │
    ┌────┴────┐          ┌────┴────┐          ┌───┴────┐
    │ Worker  │          │ Worker  │          │ Worker │
    │ (Slack) │          │ (GitHub)│          │ (K8s)  │
    └─────────┘          └─────────┘          └────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tech stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt; - Core control plane (~15K lines)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NATS JetStream&lt;/strong&gt; - Message bus with at-least-once delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; - State store for jobs, workflows, context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; - Dashboard with real-time updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt; 5ms policy evaluation latency&lt;/li&gt;
&lt;li&gt;10k+ events/sec per node&lt;/li&gt;
&lt;li&gt;100% deterministic replay&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Protocol: CAP
&lt;/h2&gt;

&lt;p&gt;I also built a protocol called &lt;strong&gt;CAP&lt;/strong&gt; (Cordum Agent Protocol). Think of it as MCP (Model Context Protocol) but for distributed orchestration.&lt;/p&gt;

&lt;p&gt;MCP is great for tool calling within a single model. But it doesn't cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling across worker pools&lt;/li&gt;
&lt;li&gt;Policy enforcement&lt;/li&gt;
&lt;li&gt;State machine (pending → running → succeeded)&lt;/li&gt;
&lt;li&gt;Heartbeats and worker liveness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CAP fills those gaps. It's a separate repo with SDKs for Go, Python, Node, and C++.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Hello World worker in Go&lt;/span&gt;
&lt;span class="n"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewWorker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&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;Pool&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;"my-workers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Subjects&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"job.hello.*"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"job.hello.greet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="n"&gt;cordum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JobContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&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;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Succeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, %s!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pre-Built Packs
&lt;/h2&gt;

&lt;p&gt;Nobody wants to write integrations from scratch. Cordum comes with 16 pre-built packs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Packs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Slack, MS Teams, Webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevOps&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Jira&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;Kubernetes, Terraform, Vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;Prometheus, Sentry, OpenTelemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI/LLM&lt;/td&gt;
&lt;td&gt;MCP Bridge, MCP Client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Install with one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cordumctl pack &lt;span class="nb"&gt;install &lt;/span&gt;slack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Want to try it? Here's the 60-second version:&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/cordum-io/cordum
&lt;span class="nb"&gt;cd &lt;/span&gt;cordum
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://localhost:8082" rel="noopener noreferrer"&gt;http://localhost:8082&lt;/a&gt; - that's your dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Safety as a feature, not a constraint
&lt;/h3&gt;

&lt;p&gt;I initially thought of governance as a "necessary evil" - something enterprises need for compliance. But I've come to see it as a &lt;strong&gt;feature&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you can prove that every AI action was evaluated against policy and logged, you unlock use cases that were previously impossible. Banks can use AI agents. Healthcare can use AI agents. The "permission to write" becomes a competitive advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The protocol matters more than I expected
&lt;/h3&gt;

&lt;p&gt;I spent a lot of time on CAP, and it paid off. Having a clean protocol means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers can be written in any language&lt;/li&gt;
&lt;li&gt;The control plane can evolve independently&lt;/li&gt;
&lt;li&gt;Third parties can build compatible tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Open source is a distribution strategy
&lt;/h3&gt;

&lt;p&gt;I could have built this as a closed SaaS from day one. But open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds trust (you can read the code)&lt;/li&gt;
&lt;li&gt;Enables self-hosting (enterprises love this)&lt;/li&gt;
&lt;li&gt;Creates a community funnel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The business model is open core: self-hosted is free forever, cloud/enterprise features are paid.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Helm chart&lt;/strong&gt; for Kubernetes deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cordum Cloud&lt;/strong&gt; - managed version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual workflow editor&lt;/strong&gt; in the dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More packs&lt;/strong&gt; - AWS, GCP, PagerDuty, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://cordum.io" rel="noopener noreferrer"&gt;https://cordum.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/cordum-io/cordum" rel="noopener noreferrer"&gt;https://github.com/cordum-io/cordum&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Protocol:&lt;/strong&gt; &lt;a href="https://github.com/cordum-io/cap" rel="noopener noreferrer"&gt;https://github.com/cordum-io/cap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://cordum.io/docs" rel="noopener noreferrer"&gt;https://cordum.io/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building AI agents and want governance built in, give it a try. Star the repo if you find it useful ⭐&lt;/p&gt;

&lt;p&gt;I'd love feedback - what's missing? What would make this useful for your projects?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! I'm happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Announcing Bridge: Open-Source Resource Management for Terraform and Kubernetes</title>
      <dc:creator>yaron torjeman</dc:creator>
      <pubDate>Sat, 20 Jul 2024 18:39:53 +0000</pubDate>
      <link>https://dev.to/yaron_torjeman_5288cbab83/announcing-bridge-open-source-resource-management-for-terraform-and-kubernetes-18f1</link>
      <guid>https://dev.to/yaron_torjeman_5288cbab83/announcing-bridge-open-source-resource-management-for-terraform-and-kubernetes-18f1</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I’m excited to share my latest open-source project called Bridge! 🌉 It’s designed to help manage and integrate resources seamlessly across different tools like Terraform and Kubernetes.&lt;/p&gt;

&lt;p&gt;I’m looking for feedback and contributions to make it even better. You can find the project on GitHub: &lt;a href="https://github.com/bridge-yt/bridge" rel="noopener noreferrer"&gt;Bridge on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Any thoughts or contributions are welcome!&lt;/p&gt;

&lt;h1&gt;
  
  
  OpenSource #DevOps #Terraform #Kubernetes #Cloud
&lt;/h1&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
