<?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: Gordon Chase</title>
    <description>The latest articles on DEV Community by Gordon Chase (@gorchase).</description>
    <link>https://dev.to/gorchase</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%2F4245256%2Fbe89761f-eb50-4ce9-8163-5bfb4c99750f.png</url>
      <title>DEV Community: Gordon Chase</title>
      <link>https://dev.to/gorchase</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gorchase"/>
    <language>en</language>
    <item>
      <title>Why Kodama Software Factory Being Open Source Feels Like a Breath of Fresh Air</title>
      <dc:creator>Gordon Chase</dc:creator>
      <pubDate>Sun, 15 Nov 2026 11:09:00 +0000</pubDate>
      <link>https://dev.to/gorchase/why-kodama-being-apache-20-open-source-feels-like-a-breath-of-fresh-air-2nbe</link>
      <guid>https://dev.to/gorchase/why-kodama-being-apache-20-open-source-feels-like-a-breath-of-fresh-air-2nbe</guid>
      <description>&lt;p&gt;A coding agent in a terminal is great for one developer on one laptop. The trouble starts the day your company wants to run agents as a team across a hundred repositories—with separate roles, review gates, audit trails, and shared credentials.&lt;/p&gt;

&lt;p&gt;Right now, almost everyone trying to solve that problem wants to sell you a new SaaS subscription.&lt;/p&gt;

&lt;p&gt;You know the pitch: connect your GitHub organization to our cloud, hand over write tokens to private repositories, route your internal context and logs through our multi-tenant black box, and pay per seat—or marked-up compute minutes—while your own Kubernetes cluster sits right there doing nothing.&lt;/p&gt;

&lt;p&gt;That is why stumbling onto &lt;strong&gt;&lt;a href="https://github.com/optimiware/kodama" rel="noopener noreferrer"&gt;Kodama&lt;/a&gt;&lt;/strong&gt; feels so refreshing. Instead of wrapping container orchestration and human approvals behind a hosted paywall, Kodama ships the whole software factory as &lt;strong&gt;Apache-2.0 open-source software in Go&lt;/strong&gt;—ready to run on rootless Podman on a Linux laptop in minutes, and on the Kubernetes cluster you already operate in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Kodama Actually Is
&lt;/h2&gt;

&lt;p&gt;Louis introduced Kodama on DEV with a line that sticks: &lt;em&gt;&lt;a href="https://dev.to/optimod/kodama-run-coding-agents-as-a-team-at-scale-on-your-own-kubernetes-28e1"&gt;“Like OpenClaw, but for teams.”&lt;/a&gt;&lt;/em&gt; Even if you have never touched OpenClaw, the core product model fits in one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A pipeline is an ordered list of actions; an action runs a container or requests an answer; an execution runs a pipeline once; a task is a conversation that starts executions.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you have ever used container-native CI like Drone, the first half feels immediately familiar: containers run in order, share a workspace, and exit zero or nonzero.&lt;/p&gt;

&lt;p&gt;The second half is what turns CI into a software factory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An action does not have to run a container.&lt;/strong&gt; It can pause the line and request a decision from a role (&lt;code&gt;role/reviewer&lt;/code&gt;) or an automated policy service (&lt;code&gt;service/&amp;lt;id&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An agent is just another container command.&lt;/strong&gt; Claude Code, Codex, OpenCode, Pi, or an ordinary shell script all plug into the exact same pipeline alongside your build and test images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks hold the shared history.&lt;/strong&gt; People, scripts, or editor agents submit tasks via REST, MCP, or &lt;code&gt;kodactl&lt;/code&gt;. Reviewers work from a role inbox; failed executions land in the operators' inbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works Under the Hood
&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%2F5jn67x5dwlyfn8hhd5bz.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%2F5jn67x5dwlyfn8hhd5bz.png" alt="Kodama architecture explainer: clients and userland services talk to the kodama server control plane (Shell and Kernel), backed by PostgreSQL and NATS JetStream, driving Podman or Kubernetes Job workloads" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes Kodama a pleasure to inspect is how cleanly its architecture draws boundaries (&lt;code&gt;KODAMA.md&lt;/code&gt; lays out the entire v2 design and 20 acceptance criteria in one readable spec):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shell (Control Plane):&lt;/strong&gt; Owns tenants, projects, OIDC and service-token identity, authorization, tasks, role inboxes, envelope-encrypted secrets, and a single operation router with &lt;strong&gt;REST&lt;/strong&gt; and &lt;strong&gt;MCP&lt;/strong&gt; edges (used by &lt;code&gt;kodactl&lt;/code&gt; and editor integrations alike).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kernel (Execution Engine):&lt;/strong&gt; Advances ordered executions, enforces action deadlines, and recovers cleanly after crashes—without depending on HTTP, Git, OIDC, or message brokers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durable State &amp;amp; Messaging:&lt;/strong&gt; &lt;strong&gt;PostgreSQL&lt;/strong&gt; is the source of truth for state, approval receipts, and the event table (isolated per tenant and project with forced row-level security). &lt;strong&gt;NATS JetStream&lt;/strong&gt; distributes events and live logs; if the broker hiccups, integrations wait, but executions do not lose state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workloads (&lt;code&gt;Podman&lt;/code&gt; or &lt;code&gt;Kubernetes Jobs&lt;/code&gt;):&lt;/strong&gt; Locally, actions run as rootless Podman containers. In production, each container action is a plain Kubernetes &lt;code&gt;Job&lt;/code&gt; mounting a workspace &lt;code&gt;PVC&lt;/code&gt;—&lt;strong&gt;no custom CRDs and no Kubernetes operator&lt;/strong&gt; to babysit. Workloads authenticate back to the Shell with short-lived execution tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Userland Services:&lt;/strong&gt; Git hosting, coding agents, and external adapters live outside control-plane internals and use the public API and approval verification.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Open Source Beats Another Agent SaaS Here
&lt;/h2&gt;

&lt;p&gt;Some software categories make sense as SaaS. Your software delivery control plane—where code, credentials, review authority, and release history meet—is where open source and self-hosting shine brightest. Four details in Kodama show why:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Your keys, code, and decisions stay in your cluster
&lt;/h3&gt;

&lt;p&gt;With Kodama, your repositories, pipeline state, and approval records stay in your own database and cluster. Even better: workload containers never need raw &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; or &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; secrets. Agents point their base URL at Kodama's built-in &lt;strong&gt;model proxy&lt;/strong&gt; using an execution token that is revoked when the execution waits or finishes. Only the model prompts your agents send go to the LLM provider you configure.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Waiting for a human costs zero compute
&lt;/h3&gt;

&lt;p&gt;In many hosted agent platforms, human-in-the-loop workflows feel awkward or expensive because sandboxes stay warm or sessions time out after half an hour. In Kodama:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a pipeline reaches a &lt;code&gt;role/reviewer&lt;/code&gt; approval step, &lt;strong&gt;zero workload containers run&lt;/strong&gt; while waiting (up to 30 days). The workspace volume is preserved and the execution credential is revoked until a reviewer approves.&lt;/li&gt;
&lt;li&gt;When an agent gets stuck mid-task and posts a question to a role inbox, Kodama ends the execution cleanly. Answering the question starts a fresh execution with the full task conversation mounted at &lt;code&gt;/kodama/task.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Real separation of duties—including against the agent itself
&lt;/h3&gt;

&lt;p&gt;Two security properties stood out right away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Role checks have teeth:&lt;/strong&gt; If an &lt;code&gt;Engineer&lt;/code&gt; starts an execution and tries &lt;code&gt;kodactl approve &amp;lt;id&amp;gt;&lt;/code&gt; on a &lt;code&gt;Reviewer&lt;/code&gt; gate, Kodama refuses with &lt;code&gt;forbidden&lt;/code&gt;. Even holding &lt;code&gt;Admin&lt;/code&gt; does not grant review authority. When paired with Kodama's Git service, &lt;code&gt;main&lt;/code&gt; can require a verified approval bound to the &lt;strong&gt;exact candidate commit, target ref, and expected base&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents cannot edit the pipeline that governs them:&lt;/strong&gt; Kodama does not auto-discover pipeline YAML from Git pushes. Pipelines are applied explicitly via the API (&lt;code&gt;kodactl pipeline apply&lt;/code&gt;). A coding agent with branch-push access cannot sneak a change into &lt;code&gt;.kodama/&lt;/code&gt; to skip tests or bypass review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Deliberate simplicity (and honest boundaries)
&lt;/h3&gt;

&lt;p&gt;SaaS marketing pages love promising infinite flexibility. Kodama's specification spends real ink on what it &lt;strong&gt;refuses&lt;/strong&gt; to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No DAGs, no &lt;code&gt;when&lt;/code&gt; expressions, no loops, no parallel branches inside a pipeline.&lt;/strong&gt; A pipeline is an ordered list; branching logic belongs in a shell script or tool you can actually unit-test. Scale comes from scheduling many independent task executions across Kubernetes Jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plain, honest status notes:&lt;/strong&gt; Current release &lt;code&gt;0.2.1&lt;/code&gt; is exercised locally on Linux with rootless Podman 5+, and live-validated in cloud deployment on Scaleway (with OpenTofu roots also implemented for AWS and GCP). Its container isolation separates tenants across namespaces, default-deny &lt;code&gt;NetworkPolicy&lt;/code&gt;, KMS-backed secrets, and PostgreSQL RLS—built for organizations running trusted engineering tools, not as an untrusted hostile-code sandbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Locally in Four Commands
&lt;/h2&gt;

&lt;p&gt;If you have a Linux box with rootless Podman 5+ (&lt;code&gt;systemctl --user enable --now podman.socket&lt;/code&gt;), you can inspect the ~100-line installer (it verifies &lt;code&gt;SHA256SUMS&lt;/code&gt;, installs into &lt;code&gt;~/.local/bin&lt;/code&gt;, and never asks for &lt;code&gt;root&lt;/code&gt;) and spin up the full stack—PostgreSQL, NATS, Kodama server, Git service, and four local roles (&lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;engineer&lt;/code&gt;, &lt;code&gt;reviewer&lt;/code&gt;, &lt;code&gt;operator&lt;/code&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 -fsSL https://raw.githubusercontent.com/optimiware/kodama/master/install.sh &lt;span class="o"&gt;|&lt;/span&gt; sh
kodama up
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.kodama/instances/default/env.sh
kodactl whoami
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you are done experimenting, &lt;code&gt;kodama down --purge&lt;/code&gt; cleans up every container and volume.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub (Apache-2.0, Go):&lt;/strong&gt; &lt;a href="https://github.com/optimiware/kodama" rel="noopener noreferrer"&gt;github.com/optimiware/kodama&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full architecture &amp;amp; spec:&lt;/strong&gt; &lt;a href="https://github.com/optimiware/kodama/blob/master/KODAMA.md" rel="noopener noreferrer"&gt;KODAMA.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quickstart &amp;amp; docs:&lt;/strong&gt; &lt;a href="https://optimi.com/en/docs/kodama/getting-started" rel="noopener noreferrer"&gt;optimi.com/en/docs/kodama/getting-started&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hands-on walkthrough:&lt;/strong&gt; &lt;a href="https://dev.to/optimod/kodama-run-coding-agents-as-a-team-at-scale-on-your-own-kubernetes-28e1"&gt;Kodama: run coding agents as a team, at scale, on your own Kubernetes&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>kubernetes</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
