<?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: Michael Egner</title>
    <description>The latest articles on DEV Community by Michael Egner (@michaelegner).</description>
    <link>https://dev.to/michaelegner</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%2F4175928%2F5af1c2b3-5311-44c6-b45e-ea0bade547fe.jpg</url>
      <title>DEV Community: Michael Egner</title>
      <link>https://dev.to/michaelegner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michaelegner"/>
    <language>en</language>
    <item>
      <title>Your Coding Agent Can Read the Repository. Does It Know the Architecture?</title>
      <dc:creator>Michael Egner</dc:creator>
      <pubDate>Tue, 13 Oct 2026 10:30:00 +0000</pubDate>
      <link>https://dev.to/michaelegner/your-coding-agent-can-read-the-repository-does-it-know-the-architecture-2593</link>
      <guid>https://dev.to/michaelegner/your-coding-agent-can-read-the-repository-does-it-know-the-architecture-2593</guid>
      <description>&lt;p&gt;AI coding agents can inspect a repository, but in existing distributed systems the architecture context they need often lives elsewhere. Using Pitstop, I show how AIP gives Claude Code evidence-qualified context for a small event change and makes explicit what still needs inspection.&lt;/p&gt;

&lt;h2&gt;
  
  
  A seemingly small event change
&lt;/h2&gt;

&lt;p&gt;The task looked ordinary:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In &lt;code&gt;MaintenanceJobFinished&lt;/code&gt;, replace &lt;code&gt;StartTime&lt;/code&gt; and &lt;code&gt;EndTime&lt;/code&gt; with a single &lt;code&gt;Duration&lt;/code&gt; field. The workshop only needs to report how long a job took. Plan the change.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first sight, this looks like a local event-contract change. A coding agent can find the event and search the repository for usages of the two fields.&lt;/p&gt;

&lt;p&gt;But before changing a shared event, another question matters:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What else should be inspected before making this change?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is where architecture context becomes useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  AIP changes the inspection boundary
&lt;/h2&gt;

&lt;p&gt;I ran the task against the hosted Live AIP Demo.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;WorkshopManagementAPI&lt;/code&gt;, AIP established that the service publishes through the &lt;code&gt;Pitstop&lt;/code&gt; messaging destination and resolved &lt;strong&gt;five receiving services&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of them was &lt;code&gt;ReportingService&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That matters because &lt;code&gt;ReportingService&lt;/code&gt; is deliberately added in the demo fork and is not listed as a consumer in the upstream Pitstop documentation.&lt;/p&gt;

&lt;p&gt;AIP does not claim that &lt;code&gt;ReportingService&lt;/code&gt; consumes &lt;code&gt;MaintenanceJobFinished&lt;/code&gt; specifically. Its evidence establishes a narrower fact: the service is a receiver on the same messaging destination and therefore belongs inside the boundary that should be investigated.&lt;/p&gt;

&lt;p&gt;For the coding task, that was enough:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The agent now had five concrete receiver services to consider before changing the event.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Architecture context had changed the next action before any code was edited.&lt;br&gt;
&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/pp40rhjk1ak0umpj6jgn.png" rel="noopener noreferrer"&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%2Fs05tnm91k89mehjsxmi9.png" alt="Figure 1" width="799" height="529"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1. AIP establishes five receiver services for &lt;code&gt;WorkshopManagementAPI&lt;/code&gt; and exposes the evidence behind that architecture context.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Then the agent read the code
&lt;/h2&gt;

&lt;p&gt;AIP did not tell the agent how to implement the change.&lt;/p&gt;

&lt;p&gt;It told the agent &lt;strong&gt;where it needed to look&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent then clearly separated its own findings from AIP evidence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My reading of the code (not AIP evidence)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That inspection found direct dependencies on &lt;code&gt;StartTime&lt;/code&gt; and &lt;code&gt;EndTime&lt;/code&gt;, left some receivers unresolved pending deeper inspection, and uncovered another risk inside &lt;code&gt;WorkshopManagementAPI&lt;/code&gt;: the service is event-sourced, so already-stored &lt;code&gt;MaintenanceJobFinished&lt;/code&gt; events still contain the old fields and must remain replayable.&lt;/p&gt;

&lt;p&gt;The problem was no longer simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;replace two fields with one&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It had become:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;change a distributed event contract without breaking existing consumers or historical events.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the important transition in the story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/b73n1ma5uyft8wg4a78z.png" rel="noopener noreferrer"&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%2Fxfryglil3owfc9exqcak.png" alt="Figure 2" width="800" height="548"&gt;&lt;/a&gt;&lt;em&gt;Figure 2. After AIP establishes the inspection boundary, the agent performs its own code analysis. It finds direct field dependencies, keeps unresolved receivers explicit, and identifies stored-event replay as an additional compatibility risk.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The plan changed
&lt;/h2&gt;

&lt;p&gt;The agent's first implementation step was not to edit the event.&lt;/p&gt;

&lt;p&gt;It was to inspect the receivers AIP had identified and determine how each one handles the message.&lt;/p&gt;

&lt;p&gt;Only after that did the plan move to implementation and compatibility.&lt;/p&gt;

&lt;p&gt;Because the old event shape may still exist in persisted events and consumers, the agent proposed an incremental migration rather than assuming the contract could be replaced in one step.&lt;/p&gt;

&lt;p&gt;The important point is not the exact migration technique.&lt;/p&gt;

&lt;p&gt;It is that better architecture context changed the plan.&lt;/p&gt;

&lt;p&gt;A task that initially looked local turned out to cross several service boundaries and include a historical-event compatibility problem.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture evidence and code evidence answer different questions
&lt;/h2&gt;

&lt;p&gt;The agent still searched the repository. That was necessary.&lt;/p&gt;

&lt;p&gt;But source inspection and architecture evidence answer different questions.&lt;/p&gt;

&lt;p&gt;Code can tell the agent how &lt;code&gt;StartTime&lt;/code&gt; and &lt;code&gt;EndTime&lt;/code&gt; are used.&lt;/p&gt;

&lt;p&gt;It cannot, by itself, establish which service relationships are relevant in a particular running system.&lt;/p&gt;

&lt;p&gt;AIP can establish those architecture relationships.&lt;/p&gt;

&lt;p&gt;It cannot, from that fact alone, claim what a receiver does with a particular event or field.&lt;/p&gt;

&lt;p&gt;The distinction is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Architecture evidence tells the agent where to inspect.&lt;br&gt;&lt;br&gt;
Code inspection tells the agent what the implementation does.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this change, both were necessary.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where the evidence stops matters
&lt;/h2&gt;

&lt;p&gt;The strongest part of the Claude response may be what it did &lt;strong&gt;not&lt;/strong&gt; claim.&lt;/p&gt;

&lt;p&gt;AIP did not know which receivers read &lt;code&gt;StartTime&lt;/code&gt; or &lt;code&gt;EndTime&lt;/code&gt;. It also did not establish which receivers consume &lt;code&gt;MaintenanceJobFinished&lt;/code&gt; specifically.&lt;/p&gt;

&lt;p&gt;So the agent did not infer that &lt;code&gt;ReportingService&lt;/code&gt; must depend on those fields merely because AIP placed it on the same messaging path.&lt;/p&gt;

&lt;p&gt;Instead, it carried the uncertainty into the plan and marked the service for further inspection.&lt;/p&gt;

&lt;p&gt;That behavior matters in existing systems.&lt;/p&gt;

&lt;p&gt;A language model can produce a plausible explanation for missing information very easily. Architecture intelligence should help it distinguish:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;what is established&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;from&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;what still needs investigation&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AIP did not identify "the breaking consumers."&lt;/p&gt;

&lt;p&gt;It identified the &lt;strong&gt;architecture boundary the agent needed to investigate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent then used the code to determine what was actually affected.&lt;/p&gt;
&lt;h2&gt;
  
  
  What matters for the change
&lt;/h2&gt;

&lt;p&gt;Coding agents already know how to inspect code.&lt;/p&gt;

&lt;p&gt;The harder problem in an existing distributed system is often deciding &lt;strong&gt;where to inspect before changing it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Pitstop example suggests a useful division of responsibility.&lt;/p&gt;

&lt;p&gt;AIP establishes reusable, evidence-qualified architecture context.&lt;/p&gt;

&lt;p&gt;The coding agent uses that context to inspect the implementation and plan a bounded change.&lt;/p&gt;

&lt;p&gt;Tests, builds, migrations and other deterministic tools verify the implementation.&lt;/p&gt;

&lt;p&gt;AIP does not need to become the coding agent or the verification toolchain.&lt;/p&gt;

&lt;p&gt;Its job is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Help the agent establish the architecture context that matters for the next bounded change without reconstructing that context from scratch.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And equally important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make clear what the available evidence does not establish.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The hosted Live AIP Demo is public and read-only, with no account or token required. You need Claude Code 2.1.292 or later.&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/EdwinVW/pitstop.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pitstop
git checkout 306b5fbd0febceb6b0d0706f152a0520ca1a993a

claude plugin marketplace add michaelegner/architecture-intelligence-platform
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;aip@aip-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Claude Code, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin configure aip@aip-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aip_mcp_url = https://mcp.daip.io/mcp
aip_token   = empty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart Claude Code.&lt;/p&gt;

&lt;p&gt;Ask the following, using yesterday's UTC date:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In the Pitstop service WorkshopManagementAPI, replace the StartTime and EndTime fields of the MaintenanceJobFinished event with a single Duration field. Plan the change. Use environment pitstop-demo and the window &amp;lt;YYYY-MM-DD&amp;gt;T00:00:00Z to &amp;lt;YYYY-MM-DD&amp;gt;T23:59:59Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full setup and troubleshooting: &lt;a href="https://github.com/michaelegner/architecture-intelligence-platform/blob/main/examples/pitstop-demo/TRY_IT_HOSTED.md" rel="noopener noreferrer"&gt;Try it hosted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/michaelegner/architecture-intelligence-platform" rel="noopener noreferrer"&gt;Architecture Intelligence Platform on GitHub&lt;/a&gt;&lt;/p&gt;

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