<?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: Chris</title>
    <description>The latest articles on DEV Community by Chris (@ccwha).</description>
    <link>https://dev.to/ccwha</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%2F3824634%2Fee3fdf6c-f903-41dd-a78a-31f18a428287.png</url>
      <title>DEV Community: Chris</title>
      <link>https://dev.to/ccwha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ccwha"/>
    <language>en</language>
    <item>
      <title>Agent Format: Kubernetes-Style Declarative Definitions for AI Agents</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Sat, 14 Mar 2026 23:12:33 +0000</pubDate>
      <link>https://dev.to/ccwha/agent-format-kubernetes-style-declarative-definitions-for-ai-agents-483n</link>
      <guid>https://dev.to/ccwha/agent-format-kubernetes-style-declarative-definitions-for-ai-agents-483n</guid>
      <description>&lt;p&gt;If you've built AI agents across multiple teams or projects, you've probably hit this: every framework defines agents differently, and switching frameworks means rewriting everything.&lt;/p&gt;

&lt;p&gt;I came across &lt;a href="https://agentformat.org" rel="noopener noreferrer"&gt;Agent Format&lt;/a&gt; — an open, vendor-neutral spec for defining AI agents declaratively. The analogy is Kubernetes: before K8s, infrastructure was imperative scripts. K8s made it declarative. Agent Format does the same for agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in an &lt;code&gt;.agf.yaml&lt;/code&gt;?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;schema_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;

&lt;span class="na"&gt;metadata&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;my_agent&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;My Agent&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;

&lt;span class="na"&gt;interface&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
    &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;query&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;

&lt;span class="na"&gt;action_space&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mcp_servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my_tools&lt;/span&gt;
      &lt;span class="na"&gt;server_ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost/mcp/tools&lt;/span&gt;
      &lt;span class="na"&gt;allowed_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;search&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;summarize&lt;/span&gt;

&lt;span class="na"&gt;execution_policy&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;agf.react&lt;/span&gt;
  &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gemini-2.5-pro&lt;/span&gt;
    &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;You are a helpful assistant.&lt;/span&gt;
    &lt;span class="na"&gt;max_steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

&lt;span class="na"&gt;constraints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;max_token_usage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five sections, five concerns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;What It Captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;metadata&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identity, versioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;I/O contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;action_space&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tools, MCP servers, sub-agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;execution_policy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;How the agent reasons (ReAct, sequential, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;constraints&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Budgets, limits, governance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Adapter Model
&lt;/h2&gt;

&lt;p&gt;Any framework can implement an adapter that reads &lt;code&gt;.agf.yaml&lt;/code&gt; and converts it to its native agent type. The parser has zero dependency on any runtime SDK. So your LangChain team, your ADK team, and your custom Python team can all work from the same agent definition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting for production use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tighten-only invariant&lt;/strong&gt;: Child agents can never exceed parent constraints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-layer governance&lt;/strong&gt;: Agent-level + org-level policies, composed at runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-loop&lt;/strong&gt;: Per-tool, conditional approval gates as first-class concepts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where It Fits
&lt;/h2&gt;

&lt;p&gt;It's designed to complement MCP (tools) and A2A (agent-to-agent communication):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Format&lt;/strong&gt; = what the agent IS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; = how agents USE tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A&lt;/strong&gt; = how agents TALK to each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full spec: &lt;a href="https://agentformat.org" rel="noopener noreferrer"&gt;https://agentformat.org&lt;/a&gt;&lt;br&gt;
Engineering blog with the backstory: &lt;a href="https://eng.snap.com/agent-format" rel="noopener noreferrer"&gt;https://eng.snap.com/agent-format&lt;/a&gt;&lt;br&gt;
JSON Schema: &lt;a href="https://agentformat.org/schema/1.0/agentformat-schema.json" rel="noopener noreferrer"&gt;https://agentformat.org/schema/1.0/agentformat-schema.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Worth checking out if you're building agents at any scale. Curious what others think about standardizing at this layer.&lt;/p&gt;

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