<?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: Thomas Colvin</title>
    <description>The latest articles on DEV Community by Thomas Colvin (@atomadic).</description>
    <link>https://dev.to/atomadic</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%2F3909533%2Fd0637740-1232-4569-b211-dd2bd9f1bd9b.png</url>
      <title>DEV Community: Thomas Colvin</title>
      <link>https://dev.to/atomadic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atomadic"/>
    <language>en</language>
    <item>
      <title>Why AI coding agents need an architecture compiler (and I built one)</title>
      <dc:creator>Thomas Colvin</dc:creator>
      <pubDate>Sat, 02 May 2026 20:12:29 +0000</pubDate>
      <link>https://dev.to/atomadic/why-ai-coding-agents-need-an-architecture-compiler-and-i-built-one-1a2f</link>
      <guid>https://dev.to/atomadic/why-ai-coding-agents-need-an-architecture-compiler-and-i-built-one-1a2f</guid>
      <description>&lt;h2&gt;
  
  
  The problem nobody talks about
&lt;/h2&gt;

&lt;p&gt;AI coding agents write code fast. Too fast. Within a few sessions you end up with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utility functions calling into feature modules&lt;/li&gt;
&lt;li&gt;Feature logic embedded in CLI entry points&lt;/li&gt;
&lt;li&gt;Circular dependencies 3 layers deep&lt;/li&gt;
&lt;li&gt;Database clients instantiated inside pure functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No linter catches this. No formatter fixes it. The codebase &lt;em&gt;works&lt;/em&gt; -- but it's slowly becoming unmaintainable, and the agent helping you has no structural feedback to course-correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Atomadic Forge&lt;/strong&gt; is an architecture compiler. Point it at any Python or JavaScript repo and it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scouts&lt;/strong&gt; -- maps every symbol, tier, dependency, language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wires&lt;/strong&gt; -- finds every import that violates the composition law&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certifies&lt;/strong&gt; -- assigns a score 0-100 with a SHA-256 receipt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforces&lt;/strong&gt; -- auto-fixes violations in-place, dry-run safe&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It runs as an &lt;strong&gt;MCP server&lt;/strong&gt; -- your agent in Cursor or Claude Code can call &lt;code&gt;certify&lt;/code&gt;, &lt;code&gt;wire&lt;/code&gt;, &lt;code&gt;recon&lt;/code&gt;, &lt;code&gt;enforce&lt;/code&gt;, and 25+ other tools directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-tier monadic composition law
&lt;/h2&gt;

&lt;p&gt;Every file belongs to exactly one tier. Tiers compose upward only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a0_qk_constants/     Zero logic. Pure data: constants, enums, TypedDicts.
a1_at_functions/     Pure stateless functions. Only imports: a0.
a2_mo_composites/    Stateful classes, clients, registries. Imports: a0+a1.
a3_og_features/      Features assembled from composites. Imports: a0-a2.
a4_sy_orchestration/ CLI, entry points, top-level wiring. Imports: a0-a3.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real output
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;forge certify &lt;span class="nt"&gt;--project&lt;/span&gt; ./my-ai-built-app

&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"score"&lt;/span&gt;: 47,
  &lt;span class="s2"&gt;"issues"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="s2"&gt;"a1 imports from a3: utils.py -&amp;gt; feature_pipeline.py (7 occurrences)"&lt;/span&gt;,
    &lt;span class="s2"&gt;"circular dependency: auth_client &amp;lt;-&amp;gt; user_service"&lt;/span&gt;,
    &lt;span class="s2"&gt;"a4 contains 340 lines of business logic (belongs in a2/a3)"&lt;/span&gt;
  &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;forge enforce &lt;span class="nt"&gt;--apply&lt;/span&gt; &lt;span class="nt"&gt;--source&lt;/span&gt; ./src

&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"score"&lt;/span&gt;: 91,
  &lt;span class="s2"&gt;"pre_violations"&lt;/span&gt;: 34,
  &lt;span class="s2"&gt;"post_violations"&lt;/span&gt;: 3,
  &lt;span class="s2"&gt;"auto_fixed"&lt;/span&gt;: 31
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;atomadic-forge
forge certify &lt;span class="nt"&gt;--project&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
forge wire &lt;span class="nt"&gt;--source&lt;/span&gt; ./src &lt;span class="nt"&gt;--suggest-repairs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP config:&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;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="nl"&gt;"atomadic-forge"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"forge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"serve"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--project"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/your/project"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="nl"&gt;"FORGE_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-key"&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;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&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;span class="p"&gt;}&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;h2&gt;
  
  
  Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;944 tests&lt;/strong&gt; -- unit, integration, MCP protocol, stdio loop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;29 MCP tools&lt;/strong&gt; standard / &lt;strong&gt;35 tools&lt;/strong&gt; Forge Deluxe&lt;/li&gt;
&lt;li&gt;Python and TypeScript/JavaScript support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live demo&lt;/strong&gt;: &lt;a href="https://forge.atomadic.tech" rel="noopener noreferrer"&gt;forge.atomadic.tech&lt;/a&gt; -- scan any public repo free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source&lt;/strong&gt;: &lt;a href="https://github.com/atomadictech/atomadic-forge" rel="noopener noreferrer"&gt;github.com/atomadictech/atomadic-forge&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop questions in the comments -- I read every one.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>python</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
