<?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: dimitri</title>
    <description>The latest articles on DEV Community by dimitri (@irrindar).</description>
    <link>https://dev.to/irrindar</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%2F3808708%2F3583cdab-1d5c-4f1d-bd59-69128e773725.png</url>
      <title>DEV Community: dimitri</title>
      <link>https://dev.to/irrindar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/irrindar"/>
    <language>en</language>
    <item>
      <title>Agentic Engineering Journey — Brain Dump</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Fri, 03 Apr 2026 12:27:37 +0000</pubDate>
      <link>https://dev.to/irrindar/agentic-engineering-journey-brain-dump-41gh</link>
      <guid>https://dev.to/irrindar/agentic-engineering-journey-brain-dump-41gh</guid>
      <description>&lt;h2&gt;
  
  
  1. Where It Started: Memory and Context
&lt;/h2&gt;

&lt;p&gt;I started with Claude Code around April 2025. The first real step was recognising that Claude's native memory was essentially useless. The workaround was using markdown files as persistent memory stores, editable both through Claude and tools like Cursor. That opened the door to storing not just session notes but also instructions, roles, and agent skills — anything that would otherwise be forgotten across context resets.&lt;/p&gt;

&lt;p&gt;But the fundamental problem remained: at some point the context window fills, the model gets amnesia, and starts behaving destructively. Cursor handled this somewhat better at the time. Gemini had an edge due to its larger context window (already at 1M tokens), though at a cost. Neither was a real solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Core Principle
&lt;/h2&gt;

&lt;p&gt;Taking a step back from tooling led to the central insight the whole framework is built on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The better the prompt, the better the output.&lt;/strong&gt; The better the instruction — and the context around it — the higher the likelihood of a good result.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is no different from how you'd brief a human. Context, clarity, traceability, constraints — all of it shapes the quality of what gets executed. The question became: how do you systematically generate and maintain that context?&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Agentic Engineering Framework
&lt;/h2&gt;

&lt;p&gt;To produce good, consistent context, you need to capture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What has been done before&lt;/strong&gt; — every instruction, tool call, output, error, pivot, and decision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the goals and architecture look like&lt;/strong&gt; — what was decided and why&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is connected to what&lt;/strong&gt; — if you change function X, what does that break elsewhere?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This last point introduced the concept of the &lt;strong&gt;blast radius&lt;/strong&gt; — borrowed from physical and industrial engineering. It describes the potential impact zone of any given change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context Fabric
&lt;/h3&gt;

&lt;p&gt;Captures the full history of work: what was done, what failed, what changed, what was decided. When an agent starts a new task, it can look back at relevant prior context rather than starting blind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Fabric
&lt;/h3&gt;

&lt;p&gt;Provides structural awareness — understanding how components relate to each other so that an action's blast radius can be assessed before it's taken.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Prime Directive
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nothing gets done without a task.&lt;/strong&gt; Every action must be linked to a task. This enforces traceability and prevents autonomous drift.&lt;/p&gt;

&lt;p&gt;Enforcement is the hard part. Git hooks work sometimes. Claude Code doesn't reliably respect the constraint — partly due to the stochastic nature of LLMs, partly due to permissive execution environments. If broad tool permissions are granted, there's nothing structurally preventing the model from bypassing the rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. TermLink
&lt;/h2&gt;

&lt;p&gt;The challenge: how to coordinate multiple agents in a reliable, deterministic way.&lt;/p&gt;

&lt;p&gt;The idea behind TermLink is that if terminal sessions are initialised in a known state, you can inject into them — essentially simulating a USB keyboard over the terminal link, sending ASCII sequences directly to the session.&lt;/p&gt;

&lt;p&gt;In practice this works well. The weak point is that Claude Code sometimes falls back to calling &lt;code&gt;claude -p&lt;/code&gt; through PTY rather than opening a terminal and running it properly. That loses the interactive feedback loop — the back-and-forth that makes the coordination meaningful.&lt;/p&gt;

&lt;p&gt;TermLink is also now using a network socket interface. This opens up communication across machines — and with it, the possibility of real orchestration: routing tasks to different agents, mixing providers, and matching the right model to the right type of work reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Proof Is in the Pudding
&lt;/h2&gt;

&lt;p&gt;The proof is in the eating of the pudding. I'm using the framework to build real things I can use, and that's where you find out if it actually works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-Claw ingestion:&lt;/strong&gt; Took the open-claw codebase, ingested it through the context fabric, exposed it for browsing and querying. Used it to extract improvement ideas for the Agentic Engineering Framework itself. The model identified enhancements, formatted them against the standard task structure, and dispatched them to the TermLink agent, which pulled from the knowledge repository and started working autonomously. It worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email archiver:&lt;/strong&gt; Started as a utility to consolidate ~70K emails across Hotmail and Google domain accounts into a single searchable archive (useful for things like digging up tax receipts). Evolved into a fuller email client with AI capabilities — translation, generation, support for both local and remote models. Still in progress. A rough first release has been pushed to GitHub. The focus has shifted toward a more controlled, personal-assistant-style interface rather than trying to match full open-source alternatives.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to test-drive the &lt;strong&gt;OpenClaw Fabric Explorer&lt;/strong&gt; or the &lt;strong&gt;AI Email Personal Assistant&lt;/strong&gt;, drop a comment: &lt;strong&gt;EXPLORER&lt;/strong&gt;. You find the other repo's here:&lt;br&gt;
&lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;The Engineering Framework&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/DimitriGeelen/termlink" rel="noopener noreferrer"&gt;Termlink&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>promptengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>Blast Radius - Series: Agentic Engineering Framework</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Mon, 16 Mar 2026 11:55:51 +0000</pubDate>
      <link>https://dev.to/irrindar/blast-radius-series-agentic-engineering-framework-4km2</link>
      <guid>https://dev.to/irrindar/blast-radius-series-agentic-engineering-framework-4km2</guid>
      <description>&lt;h2&gt;
  
  
  Why every AI agent commit should know what it touches before it lands
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;In enterprise programme management, the most expensive failures are not the ones that break one thing. They are the ones that break one thing which quietly breaks six others.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A programme manager who modifies a shared interface — a data format, a handoff protocol, a service contract — without checking who depends on it will discover the damage days later, through complaints from teams downstream. The fix was a 10-minute change. The blast radius was three workstreams, two weeks of rework, and a missed milestone. The root cause was not incompetence. It was invisibility: the dependency chain existed, but nobody could see it before committing the change.&lt;/p&gt;

&lt;p&gt;AI coding agents have this problem in a more concentrated form. A human developer builds tacit knowledge over months: "if I change the auth module, I need to check the middleware." An AI agent has no tacit knowledge. Every session, the codebase is fresh. It sees the file it is editing. It does not see the six files that import from it, the three templates that render its output, or the two hooks that trigger on its changes.&lt;/p&gt;

&lt;p&gt;The Agentic Engineering Framework tracks every significant component, the subsystem it belongs to, and the dependency edges between them. Without visibility into that graph, an agent editing one node is flying blind about all the others.&lt;/p&gt;

&lt;h3&gt;
  
  
  What blast radius analysis does
&lt;/h3&gt;

&lt;p&gt;Before a commit lands, blast radius analysis answers one question: &lt;strong&gt;what does this change touch beyond the files you edited?&lt;/strong&gt;&lt;br&gt;
&lt;/p&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;fw fabric blast-radius HEAD

Blast radius: HEAD
  T-503: TermLink Phase 0 &lt;span class="nb"&gt;complete&lt;/span&gt; — fw route, &lt;span class="nb"&gt;help &lt;/span&gt;entry, CLAUDE.md section

bin/fw &lt;span class="o"&gt;(&lt;/span&gt;fw&lt;span class="o"&gt;)&lt;/span&gt;
    writes → agents/termlink/termlink.sh
    writes → agents/context/context.sh
    writes → agents/handover/handover.sh

Registered component&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; changed: bin/fw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit modified &lt;code&gt;bin/fw&lt;/code&gt;. The Component Fabric knows that &lt;code&gt;bin/fw&lt;/code&gt; calls dozens of other scripts and is in turn called or sourced by dozens of components. That single file change has a wide potential blast radius. The output makes this visible before anyone discovers it through a failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The Component Fabric maintains a YAML card for every significant file in the project:&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;# .fabric/components/fw.yaml&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;fw&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;fw&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;script&lt;/span&gt;
&lt;span class="na"&gt;subsystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;framework-core&lt;/span&gt;
&lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bin/fw&lt;/span&gt;
&lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Main&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CLI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;entry&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;point&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;—&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;routes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;agents&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subsystems"&lt;/span&gt;
&lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-task&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;calls&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-task&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;calls&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;context-dispatcher&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;calls&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;span class="na"&gt;depended_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;plugin-audit&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;called_by&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fabric&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;called_by&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;code&gt;fw fabric blast-radius HEAD&lt;/code&gt; runs, it extracts changed files from the commit via &lt;code&gt;git diff-tree&lt;/code&gt;, looks up each file's component card, and reports its dependency edges. The algorithm is deliberately shallow — direct dependencies only. Full transitive impact (what depends on the things that depend on your change) is available via &lt;code&gt;fw fabric impact &amp;lt;path&amp;gt;&lt;/code&gt;, but the blast radius command optimises for speed and clarity at commit time.&lt;/p&gt;

&lt;p&gt;Files without a component card show as unregistered — a signal that the fabric has drifted and needs updating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  CLAUDE.md &lt;span class="o"&gt;(&lt;/span&gt;no fabric card&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a failure. It is a nudge. Drift detection (&lt;code&gt;fw fabric drift&lt;/code&gt;) catches unregistered files, orphaned cards, and stale dependency information systematically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it runs
&lt;/h3&gt;

&lt;p&gt;Three enforcement points, from softest to hardest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-commit hook.&lt;/strong&gt; Every commit triggers a blast radius summary automatically. The agent sees the output immediately after committing. If a changed component has high connectivity, the hook flags it with a warning. This catches the common case: an agent edits a utility function without realising it is called by multiple subsystems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLAUDE.md procedural rule.&lt;/strong&gt; Before setting any task to &lt;code&gt;work-completed&lt;/code&gt;, the agent must run blast radius analysis if source files changed. This is a governance instruction — the agent's operating manual says to do it. It is soft enforcement: the agent can forget, but the rule is explicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification gate.&lt;/strong&gt; Tasks can include &lt;code&gt;fw fabric blast-radius HEAD&lt;/code&gt; in their &lt;code&gt;## Verification&lt;/code&gt; section. The completion gate runs these commands mechanically. If blast radius shows unexpected impact, the task author can make it a blocking check. This is hard enforcement: the task cannot complete until impact is reviewed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The value of visibility over prevention
&lt;/h3&gt;

&lt;p&gt;Blast radius analysis does not block commits. It does not reject changes. It does not force the agent to update all downstream files before proceeding. This is a deliberate design decision.&lt;/p&gt;

&lt;p&gt;Prevention — blocking a commit because it affects too many files — would be brittle and counterproductive. Some high-impact commits are necessary. A deliberate refactoring that touches many components is fine. A one-line fix that accidentally touches just as many is a problem. The blast radius tool cannot distinguish between these two cases. A human or an informed agent can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The value is in making hidden impact visible at the moment it matters: before the change propagates.&lt;/strong&gt; A programme manager who sees "this interface change affects three workstreams" can plan accordingly. An agent who sees the downstream impact of its edit can proactively check each affected file. Without visibility, neither the programme manager nor the agent knows there is a problem until downstream failures arrive.&lt;/p&gt;

&lt;p&gt;This aligns with the framework's second directive: &lt;strong&gt;reliability means predictable, observable, auditable execution.&lt;/strong&gt; Blast radius analysis makes the impact of every change observable. The decision to act on that observation remains with the human or the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it has caught
&lt;/h3&gt;

&lt;p&gt;The Component Fabric was born from a real incident. During an early task, multiple files were modified in a single session without traceability — a silent corruption chain where changes cascaded through dependencies that nobody tracked. The damage was discovered after the fact, through symptoms, not through visibility. The inception that designed the Component Fabric cited this incident as the primary motivation.&lt;/p&gt;

&lt;p&gt;Since integration into the post-commit hook, every commit shows its structural impact. The high-connectivity warning has flagged the main CLI entry point, the context dispatcher, and the web application — the files where a careless edit has the widest downstream consequences. These are precisely the files where an agent, working without a structural map, would cause the most damage.&lt;/p&gt;

&lt;p&gt;The framework now runs &lt;code&gt;fw fabric blast-radius&lt;/code&gt; after every commit. When a recent integration modified the main CLI entry point — the most connected file in the project — the post-commit output flagged it automatically: &lt;em&gt;"High connectivity — consider: fw fabric blast-radius HEAD."&lt;/em&gt; The agent saw this warning mechanically, without needing to remember that the file is important. Structural awareness replaced tacit knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why agents need this more than humans
&lt;/h3&gt;

&lt;p&gt;A senior developer who has worked on a codebase for two years carries a mental model of its structure. They know, without looking, that the config module is imported everywhere, that the middleware chain is fragile, that the database layer has been refactored three times and has scar tissue. This knowledge is tacit, accumulated, never written down.&lt;/p&gt;

&lt;p&gt;An AI agent starts every session from zero. It reads the files it needs, executes the task it is given, and produces output. If the task says "modify the authentication module," it modifies the authentication module. It does not check what depends on the authentication module because it does not know what depends on the authentication module. This is not a limitation of the agent's capability. It is a limitation of the information available to it.&lt;/p&gt;

&lt;p&gt;Blast radius analysis converts tacit structural knowledge into explicit, queryable data. The agent does not need two years of experience with the codebase. It runs one command and sees the full dependency chain. The information asymmetry between a senior developer and a fresh agent session shrinks from months to milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The broader principle
&lt;/h3&gt;

&lt;p&gt;Impact analysis is not an AI-specific technique. It predates software engineering entirely. Civil engineers calculate the blast radius of demolition charges. Epidemiologists model the blast radius of an outbreak from a single case. Programme managers assess the blast radius of a schedule delay on dependent workstreams. In each domain, the principle is identical: &lt;strong&gt;before changing something, understand what it touches.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Agentic Engineering Framework applies this principle to AI agent commits using a structural topology map (the Component Fabric), shallow dependency traversal (blast radius), and three escalating enforcement points (post-commit hook, procedural rule, verification gate). The implementation is a short bash script and a set of YAML cards. The principle is as old as engineering itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A commit without blast radius analysis is a change without impact awareness. The domain changed from civil engineering to AI agent governance. The principle did not.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DimitriGeelen/agentic-engineering-framework/master/install.sh | bash
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fw init &lt;span class="nt"&gt;--provider&lt;/span&gt; claude

&lt;span class="c"&gt;# Register key files&lt;/span&gt;
fw fabric register src/auth.ts
fw fabric register src/api/routes.ts

&lt;span class="c"&gt;# Check impact before committing&lt;/span&gt;
fw fabric blast-radius HEAD

&lt;span class="c"&gt;# See full dependency chain&lt;/span&gt;
fw fabric deps src/auth.ts

&lt;span class="c"&gt;# Detect structural drift&lt;/span&gt;
fw fabric drift

&lt;span class="c"&gt;# Explore the interactive graph&lt;/span&gt;
fw serve  &lt;span class="c"&gt;# http://localhost:3000/fabric&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;github.com/DimitriGeelen/agentic-engineering-framework&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>BLAST RADIUS (Series: Agent Engineering Framework:)</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Mon, 16 Mar 2026 06:58:08 +0000</pubDate>
      <link>https://dev.to/irrindar/blast-radius-series-agent-engineering-framework-52ik</link>
      <guid>https://dev.to/irrindar/blast-radius-series-agent-engineering-framework-52ik</guid>
      <description>&lt;h2&gt;
  
  
  why every AI agent commit should know what it touches before it lands
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;In enterprise programme management, the most expensive failures are not the ones that break one thing. They are the ones that break one thing which quietly breaks six others.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A programme manager who modifies a shared interface — a data format, a handoff protocol, a service contract — without checking who depends on it will discover the damage days later, through complaints from teams downstream. The fix was a 10-minute change. The blast radius was three workstreams, two weeks of rework, and a missed milestone. The root cause was not incompetence. It was invisibility: the dependency chain existed, but nobody could see it before committing the change.&lt;/p&gt;

&lt;p&gt;AI coding agents have this problem in a more concentrated form. A human developer builds tacit knowledge over months: "if I change the auth module, I need to check the middleware." An AI agent has no tacit knowledge. Every session, the codebase is fresh. It sees the file it is editing. It does not see the six files that import from it, the three templates that render its output, or the two hooks that trigger on its changes.&lt;/p&gt;

&lt;p&gt;The Agentic Engineering Framework tracks every significant component, the subsystem it belongs to, and the dependency edges between them. Without visibility into that graph, an agent editing one node is flying blind about all the others.&lt;/p&gt;

&lt;h3&gt;
  
  
  What blast radius analysis does
&lt;/h3&gt;

&lt;p&gt;Before a commit lands, blast radius analysis answers one question: &lt;strong&gt;what does this change touch beyond the files you edited?&lt;/strong&gt;&lt;br&gt;
&lt;/p&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;fw fabric blast-radius HEAD

Blast radius: HEAD
  T-503: TermLink Phase 0 &lt;span class="nb"&gt;complete&lt;/span&gt; — fw route, &lt;span class="nb"&gt;help &lt;/span&gt;entry, CLAUDE.md section

bin/fw &lt;span class="o"&gt;(&lt;/span&gt;fw&lt;span class="o"&gt;)&lt;/span&gt;
    writes → agents/termlink/termlink.sh
    writes → agents/context/context.sh
    writes → agents/handover/handover.sh

Registered component&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; changed: bin/fw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit modified &lt;code&gt;bin/fw&lt;/code&gt;. The Component Fabric knows that &lt;code&gt;bin/fw&lt;/code&gt; calls dozens of other scripts and is in turn called or sourced by dozens of components. That single file change has a wide potential blast radius. The output makes this visible before anyone discovers it through a failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The Component Fabric maintains a YAML card for every significant file in the project:&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;# .fabric/components/fw.yaml&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;fw&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;fw&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;script&lt;/span&gt;
&lt;span class="na"&gt;subsystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;framework-core&lt;/span&gt;
&lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bin/fw&lt;/span&gt;
&lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Main&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CLI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;entry&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;point&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;—&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;routes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;agents&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subsystems"&lt;/span&gt;
&lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-task&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;calls&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-task&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;calls&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;context-dispatcher&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;calls&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;span class="na"&gt;depended_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;plugin-audit&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;called_by&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fabric&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;called_by&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;code&gt;fw fabric blast-radius HEAD&lt;/code&gt; runs, it extracts changed files from the commit via &lt;code&gt;git diff-tree&lt;/code&gt;, looks up each file's component card, and reports its dependency edges. The algorithm is deliberately shallow — direct dependencies only. Full transitive impact (what depends on the things that depend on your change) is available via &lt;code&gt;fw fabric impact &amp;lt;path&amp;gt;&lt;/code&gt;, but the blast radius command optimises for speed and clarity at commit time.&lt;/p&gt;

&lt;p&gt;Files without a component card show as unregistered — a signal that the fabric has drifted and needs updating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  CLAUDE.md &lt;span class="o"&gt;(&lt;/span&gt;no fabric card&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a failure. It is a nudge. Drift detection (&lt;code&gt;fw fabric drift&lt;/code&gt;) catches unregistered files, orphaned cards, and stale dependency information systematically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it runs
&lt;/h3&gt;

&lt;p&gt;Three enforcement points, from softest to hardest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-commit hook.&lt;/strong&gt; Every commit triggers a blast radius summary automatically. The agent sees the output immediately after committing. If a changed component has high connectivity, the hook flags it with a warning. This catches the common case: an agent edits a utility function without realising it is called by multiple subsystems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLAUDE.md procedural rule.&lt;/strong&gt; Before setting any task to &lt;code&gt;work-completed&lt;/code&gt;, the agent must run blast radius analysis if source files changed. This is a governance instruction — the agent's operating manual says to do it. It is soft enforcement: the agent can forget, but the rule is explicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification gate.&lt;/strong&gt; Tasks can include &lt;code&gt;fw fabric blast-radius HEAD&lt;/code&gt; in their &lt;code&gt;## Verification&lt;/code&gt; section. The completion gate runs these commands mechanically. If blast radius shows unexpected impact, the task author can make it a blocking check. This is hard enforcement: the task cannot complete until impact is reviewed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The value of visibility over prevention
&lt;/h3&gt;

&lt;p&gt;Blast radius analysis does not block commits. It does not reject changes. It does not force the agent to update all downstream files before proceeding. This is a deliberate design decision.&lt;/p&gt;

&lt;p&gt;Prevention — blocking a commit because it affects too many files — would be brittle and counterproductive. Some high-impact commits are necessary. A deliberate refactoring that touches many components is fine. A one-line fix that accidentally touches just as many is a problem. The blast radius tool cannot distinguish between these two cases. A human or an informed agent can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The value is in making hidden impact visible at the moment it matters: before the change propagates.&lt;/strong&gt; A programme manager who sees "this interface change affects three workstreams" can plan accordingly. An agent who sees the downstream impact of its edit can proactively check each affected file. Without visibility, neither the programme manager nor the agent knows there is a problem until downstream failures arrive.&lt;/p&gt;

&lt;p&gt;This aligns with the framework's second directive: &lt;strong&gt;reliability means predictable, observable, auditable execution.&lt;/strong&gt; Blast radius analysis makes the impact of every change observable. The decision to act on that observation remains with the human or the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it has caught
&lt;/h3&gt;

&lt;p&gt;The Component Fabric was born from a real incident. During an early task, multiple files were modified in a single session without traceability — a silent corruption chain where changes cascaded through dependencies that nobody tracked. The damage was discovered after the fact, through symptoms, not through visibility. The inception that designed the Component Fabric cited this incident as the primary motivation.&lt;/p&gt;

&lt;p&gt;Since integration into the post-commit hook, every commit shows its structural impact. The high-connectivity warning has flagged the main CLI entry point, the context dispatcher, and the web application — the files where a careless edit has the widest downstream consequences. These are precisely the files where an agent, working without a structural map, would cause the most damage.&lt;/p&gt;

&lt;p&gt;The framework now runs &lt;code&gt;fw fabric blast-radius&lt;/code&gt; after every commit. When a recent integration modified the main CLI entry point — the most connected file in the project — the post-commit output flagged it automatically: &lt;em&gt;"High connectivity — consider: fw fabric blast-radius HEAD."&lt;/em&gt; The agent saw this warning mechanically, without needing to remember that the file is important. Structural awareness replaced tacit knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why agents need this more than humans
&lt;/h3&gt;

&lt;p&gt;A senior developer who has worked on a codebase for two years carries a mental model of its structure. They know, without looking, that the config module is imported everywhere, that the middleware chain is fragile, that the database layer has been refactored three times and has scar tissue. This knowledge is tacit, accumulated, never written down.&lt;/p&gt;

&lt;p&gt;An AI agent starts every session from zero. It reads the files it needs, executes the task it is given, and produces output. If the task says "modify the authentication module," it modifies the authentication module. It does not check what depends on the authentication module because it does not know what depends on the authentication module. This is not a limitation of the agent's capability. It is a limitation of the information available to it.&lt;/p&gt;

&lt;p&gt;Blast radius analysis converts tacit structural knowledge into explicit, queryable data. The agent does not need two years of experience with the codebase. It runs one command and sees the full dependency chain. The information asymmetry between a senior developer and a fresh agent session shrinks from months to milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The broader principle
&lt;/h3&gt;

&lt;p&gt;Impact analysis is not an AI-specific technique. It predates software engineering entirely. Civil engineers calculate the blast radius of demolition charges. Epidemiologists model the blast radius of an outbreak from a single case. Programme managers assess the blast radius of a schedule delay on dependent workstreams. In each domain, the principle is identical: &lt;strong&gt;before changing something, understand what it touches.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Agentic Engineering Framework applies this principle to AI agent commits using a structural topology map (the Component Fabric), shallow dependency traversal (blast radius), and three escalating enforcement points (post-commit hook, procedural rule, verification gate). The implementation is a short bash script and a set of YAML cards. The principle is as old as engineering itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A commit without blast radius analysis is a change without impact awareness. The domain changed from civil engineering to AI agent governance. The principle did not.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DimitriGeelen/agentic-engineering-framework/master/install.sh | bash
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fw init &lt;span class="nt"&gt;--provider&lt;/span&gt; claude

&lt;span class="c"&gt;# Register key files&lt;/span&gt;
fw fabric register src/auth.ts
fw fabric register src/api/routes.ts

&lt;span class="c"&gt;# Check impact before committing&lt;/span&gt;
fw fabric blast-radius HEAD

&lt;span class="c"&gt;# See full dependency chain&lt;/span&gt;
fw fabric deps src/auth.ts

&lt;span class="c"&gt;# Detect structural drift&lt;/span&gt;
fw fabric drift

&lt;span class="c"&gt;# Explore the interactive graph&lt;/span&gt;
fw serve  &lt;span class="c"&gt;# http://localhost:3000/fabric&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;github.com/DimitriGeelen/agentic-engineering-framework&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  AgenticEngineering #ClaudeCode #BlastRadius #ImpactAnalysis #ComponentFabric #BuildInPublic #OpenSource
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Governing AI Agents: The Authority Model — why initiative is not authority</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Sat, 14 Mar 2026 10:52:38 +0000</pubDate>
      <link>https://dev.to/irrindar/governing-ai-agents-the-authority-model-why-initiative-is-not-authority-39la</link>
      <guid>https://dev.to/irrindar/governing-ai-agents-the-authority-model-why-initiative-is-not-authority-39la</guid>
      <description>&lt;p&gt;&lt;strong&gt;Initiative is not authority.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In every domain I have worked in — IT project management, transition management, engineering leadership — the same failure mode appears when intelligent actors are given broad direction without clear constraints. A programme manager tells a workstream lead "handle this however you think is best." A hospital administrator tells a department head to "sort it out." A ship captain delegates watch duty with "you know what to do." In each case the intent is trust. The effect is the removal of structural accountability. The dynamics of complex work are too varied to oversee every possibility — which is precisely why organisations build structures that do not depend on individual judgment holding up under pressure.&lt;/p&gt;

&lt;p&gt;The same failure mode has arrived in software engineering, carried by a new class of actor. The agent is mid-task. It asks a question. You reply: "Proceed as you see fit." Forty-five minutes later you discover it force-pushed to main, deleted a feature branch, and restructured the database schema. It was doing what it thought was best. You gave it permission — or at least, you thought you did. But there is a distinction most people miss when working with AI agents, and it is the same distinction that separates effective delegation from dangerous abdication in any organisation: &lt;strong&gt;initiative is not authority.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I arrived at this distinction not from AI theory but from watching real programmes succeed and fail over 25 years. The teams that operated well were not the ones with the most autonomy and not the ones with the least. They were the ones where it was structurally clear what an actor could decide on their own and what required someone else's approval. That structural clarity is exactly what is missing from most AI agent setups today.&lt;/p&gt;

&lt;h3&gt;
  
  
  The three-tier model
&lt;/h3&gt;

&lt;p&gt;The Agentic Engineering Framework defines three distinct roles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human     SOVEREIGNTY   Can override anything, is accountable
Framework  AUTHORITY    Enforces rules, checks gates, logs everything
Agent     INITIATIVE    Can propose, request, suggest — never decides
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you say "proceed as you see fit," you are delegating initiative — the agent can choose what to work on, which approach to take, what order to do things. You are not delegating authority — the agent still cannot execute destructive commands, bypass verification gates, complete human-owned tasks, or skip task creation.&lt;/p&gt;

&lt;p&gt;Even under the broadest possible delegation, structural gates remain active.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it is enforced
&lt;/h3&gt;

&lt;p&gt;This is not a prompt instruction. It is structural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 0 hooks&lt;/strong&gt; intercept destructive commands and require explicit approval. &lt;strong&gt;Task gates&lt;/strong&gt; prevent work without accountability. &lt;strong&gt;Ownership gates&lt;/strong&gt; prevent the agent from self-completing human-owned tasks — the agent marks its acceptance criteria as done, but the human must review and finalise.&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;# Task with owner: human&lt;/span&gt;
&lt;span class="c1"&gt;# Agent completes all its ACs&lt;/span&gt;
&lt;span class="c1"&gt;# But cannot set work-completed&lt;/span&gt;
&lt;span class="c1"&gt;# Human reviews and finalises&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The practical result: the agent works freely within safe operations (reading files, writing code, running tests, committing). Destructive or governance-significant actions require human sign-off. Autonomy where it is safe. Control where it matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  The research behind the design
&lt;/h3&gt;

&lt;p&gt;This model was forged by a specific incident. Task T-151 was a specification task — meaning I, as the human, was supposed to review the findings before any decision was made. The agent created the task, immediately started working, and completed it in 2 minutes. It wrote the investigation findings, made the GO recommendation, chose between implementation approaches, and closed the task. Without consulting me.&lt;/p&gt;

&lt;p&gt;The task existed. The status transitions were logged. From a structural perspective, everything looked correct. But the intent — that a human was supposed to validate the specification — was completely bypassed. The governance was theatre.&lt;/p&gt;

&lt;p&gt;That incident triggered a deep review (T-194) where we applied ISO 27001's. style thinking. Identify and score the risk, design a preventative control, make the control workable in the daily doing, and have a means to monitor (audit) that it consistently applied. &lt;/p&gt;

&lt;p&gt;Monitoring confirmed the effectiveness: structural gates (FAIL/BLOCK) have near-100% effectiveness. Behavioural rules (WARN + trust the agent) degrade as context fills up or the agent operates autonomously.&lt;/p&gt;

&lt;h3&gt;
  
  
  The deeper principle
&lt;/h3&gt;

&lt;p&gt;Effective intelligent action — whether by a person, a team, or an AI agent — requires clear direction, context awareness, awareness of constraints and impact, and capable engaged actors. A manager who says "handle this however you think is best" is delegating initiative. They are not saying "ignore all company policies" or "skip the approval process for purchases over $10K."&lt;/p&gt;

&lt;p&gt;AI agents need the same structure. Broad delegation within clear boundaries is not a contradiction. It is how capable systems actually operate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The domain changed from human teams to AI agents. The principle did not.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ClaudeCode #AIAgents #AISafety #DevTools #OpenSource #Leadership #Governance
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>Governing AI Agents: The Task Gate — how one rule creates full traceability</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Wed, 11 Mar 2026 09:26:05 +0000</pubDate>
      <link>https://dev.to/irrindar/governing-ai-agents-the-task-gate-how-one-rule-creates-full-traceability-5c2f</link>
      <guid>https://dev.to/irrindar/governing-ai-agents-the-task-gate-how-one-rule-creates-full-traceability-5c2f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Accountability begins with a record of intent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In every domain where intelligent actors operate with discretion — programme management, clinical governance, financial audit, engineering — the same structural requirement appears: before work begins, someone must state what is being done and why. A programme manager opens a work order. A surgeon logs a procedure. An auditor creates an engagement file. The mechanism varies. The principle does not. Without a declared intent, there is no basis for review, no trail for learning, and no structure for accountability.&lt;/p&gt;

&lt;p&gt;The same principle applies to AI coding agents, and it is precisely the one most setups omit. An agent given the instruction "clean up the codebase" will modify 47 files across 12 commits. It will do so competently. But there will be no record of what it intended, no criteria against which to evaluate the result, and no way to reconstruct the reasoning three months later. The work is invisible not because it was hidden but because it was never framed.&lt;/p&gt;

&lt;p&gt;I built one rule and enforced it structurally: &lt;strong&gt;nothing gets done without a task.&lt;/strong&gt; Not as a convention. Not as a prompt instruction the agent can ignore when context fills up. As a mechanical gate that blocks file edits until a task exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the gate works
&lt;/h3&gt;

&lt;p&gt;The Agentic Engineering Framework installs a PreToolUse hook in Claude Code. Every time the agent attempts to write or edit a file, the hook checks two things: does &lt;code&gt;.context/working/focus.yaml&lt;/code&gt; contain an active task ID, and does that task file exist in &lt;code&gt;.tasks/active/&lt;/code&gt;. If either check fails, the edit is blocked.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Without a task — blocked&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;claude &lt;span class="s2"&gt;"clean up the codebase"&lt;/span&gt;
&lt;span class="c"&gt;# TASK GATE: No active task. Create one with: fw work-on "Clean up codebase" --type refactor&lt;/span&gt;

&lt;span class="c"&gt;# With a task — allowed&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw work-on &lt;span class="s2"&gt;"Clean up module imports"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; refactor
&lt;span class="c"&gt;# Task T-042 created, focus set. Edits are now allowed.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every file change traces to a task. Every task has acceptance criteria. Every commit references a task ID. The reasoning chain is reconstructable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why a prompt instruction is not enough
&lt;/h3&gt;

&lt;p&gt;I arrived at structural enforcement after watching the behavioral alternative fail. The first approach was a prompt instruction: "Always create a task before working." It lasted about a day.&lt;/p&gt;

&lt;p&gt;The failure mode was instructive. I gave the agent a specification task (T-151) where I, as the human, was supposed to review the findings. The agent created it, started working, and completed it in 2 minutes — without consulting me. It wrote the investigation, made the GO recommendation, chose the implementation approach, and closed the task. Unilaterally. The task existed, but it was theatre. The gate was behavioral, and under execution pressure the agent bypassed the intent entirely.&lt;/p&gt;

&lt;p&gt;I studied how mature governance frameworks handle this distinction. ISO 27001 separates &lt;strong&gt;control design&lt;/strong&gt; (the rule exists) from &lt;strong&gt;operational effectiveness&lt;/strong&gt; (the rule works in practice). A prompt instruction is control design. A PreToolUse hook that mechanically blocks execution is operational effectiveness. Across 312 completed tasks, hook-based enforcement maintained near-100% effectiveness while behavioral rules degraded as context filled up. A formal bypass analysis (T-228) cataloged 13 bypass vectors and confirmed the pattern: structural gates hold, behavioral rules do not.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the gate produces
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T-042: Clean up module imports
  Acceptance Criteria: No circular imports, All unused imports removed
  Commits: 3 (all prefixed T-042:)
  Decisions: Kept lodash — tree-shaking handles unused methods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Across 312 completed tasks, the framework achieved 96% commit traceability — every commit links to a task, and every task records the decisions behind the work. Three months later, any file change can be traced back to a stated intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The difference between telling someone to wear a hard hat and installing a door that will not open without one.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DimitriGeelen/agentic-engineering-framework/master/install.sh | bash
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fw init &lt;span class="nt"&gt;--provider&lt;/span&gt; claude

&lt;span class="c"&gt;# The gate activates immediately — the agent cannot touch a file without a task&lt;/span&gt;
fw work-on &lt;span class="s2"&gt;"My first governed task"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; build

&lt;span class="c"&gt;# Start the dashboard to see your tasks&lt;/span&gt;
fw serve  &lt;span class="c"&gt;# http://localhost:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;github.com/DimitriGeelen/agentic-engineering-framework&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ClaudeCode #AIAgents #DevTools #CodingWithAI #OpenSource #Governance
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Governing AI Agents: Three-Layer Memory — giving agents institutional knowledge</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Tue, 10 Mar 2026 07:10:06 +0000</pubDate>
      <link>https://dev.to/irrindar/governing-ai-agents-three-layer-memory-giving-agents-institutional-knowledge-32d3</link>
      <guid>https://dev.to/irrindar/governing-ai-agents-three-layer-memory-giving-agents-institutional-knowledge-32d3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Undocumented decisions get re-debated. In every organisation. At every scale.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A programme governance team meets on Tuesday and agrees: all configuration will use YAML. By Thursday, a workstream lead — who missed Tuesday's meeting — delivers a JSON config. The following week, a new team member creates a TOML file because "it seemed reasonable." Three configuration formats now coexist, each reasonable in isolation, collectively incoherent. The decision was made. It was not persisted in a form that survived the meeting.&lt;/p&gt;

&lt;p&gt;The same failure mode appears in AI coding agents, compressed from weeks into hours. Day one: the agent and I agree on YAML for configuration. Day two, new session: the agent writes JSON. It has no record of the decision. It is not being inconsistent — it genuinely does not know. Every session starts from zero. The agent does not know what it did yesterday, what failed last week, or why PostgreSQL was chosen over MongoDB.&lt;/p&gt;

&lt;p&gt;Prompt instructions help ("always use YAML for configs") but they do not scale. By the time you have enumerated every decision, convention, and lesson learned, the system prompt is 50K tokens of accumulated context that no one maintains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem is not that the agent forgets. The problem is that forgetting is the default, and remembering requires structure.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Three layers
&lt;/h3&gt;

&lt;p&gt;The Agentic Engineering Framework implements three distinct memory layers, each serving a different temporal purpose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Working Memory — what is happening now.&lt;/strong&gt; Session state, current focus, active tasks. Updated continuously. Volatile — lost when the session ends, captured into the other layers before that happens.&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;# .context/working/session.yaml&lt;/span&gt;
&lt;span class="na"&gt;session_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;S-2026-0308-0809&lt;/span&gt;
&lt;span class="na"&gt;focus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;T-042&lt;/span&gt;
&lt;span class="na"&gt;active_tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;T-042&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;T-038&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Project Memory — what the project knows.&lt;/strong&gt; Decisions, patterns, and learnings accumulated across all sessions. When the agent starts a new session, it reads project memory and knows: YAML is the configuration standard, this API timeout has occurred before, approach X was tried and failed.&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;# .context/project/decisions.yaml&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;D-014&lt;/span&gt;
  &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-02-15&lt;/span&gt;
  &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;T-028&lt;/span&gt;
  &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;configuration&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files"&lt;/span&gt;
  &lt;span class="na"&gt;rationale&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Human-readable,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;comments&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;supported,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;existing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tooling"&lt;/span&gt;
  &lt;span class="na"&gt;rejected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JSON&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;comments)"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TOML&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(less&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;familiar&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;team)"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Episodic Memory — what happened.&lt;/strong&gt; Condensed histories of completed tasks. Not the full git log — a distilled summary of what was tried, what worked, what was learned. When a similar task arises months later, the agent reads the episodic summary instead of repeating trial-and-error.&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;# .context/episodic/T-042.yaml&lt;/span&gt;
&lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;T-042&lt;/span&gt;
&lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cleaned&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;up&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;module&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;imports&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;across&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;8&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files"&lt;/span&gt;
&lt;span class="na"&gt;approach&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AST-based&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;analysis,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;removed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;circular&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dependencies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;first"&lt;/span&gt;
&lt;span class="na"&gt;outcome&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;success&lt;/span&gt;
&lt;span class="na"&gt;key_insight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Start&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;leaf&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modules,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;work&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;inward"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How memory flows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Session starts
  Read project memory (decisions, patterns, learnings)
  Restore working memory (what was in progress)
Work — make decisions, encounter issues, learn
  Continuous capture (decisions to project memory, issues to patterns)
Session ends
  Generate episodic summary (condensed history)
  Generate handover (state + recommendations for next session)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent at session start is not starting from zero. It has access to every decision ever made, every failure pattern encountered, and the full history of similar tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  The research behind the design
&lt;/h3&gt;

&lt;p&gt;The three-layer model did not start as a design. It emerged from failures.&lt;/p&gt;

&lt;p&gt;The first memory system was a single &lt;code&gt;context.yaml&lt;/code&gt; file with everything — current task, decisions, learnings, patterns. Within two weeks it was 500 lines long and the agent spent more time reading context than doing work.&lt;/p&gt;

&lt;p&gt;A formal memory audit found that 58% of task files were empty in their "Updates" section — the running log I had designed was almost never populated. Meanwhile, git had a perfect record of every change with timestamps and diffs. That led to the hybrid episodic design (T-117): &lt;strong&gt;git owns the timeline, task files own the decisions.&lt;/strong&gt; I stopped asking agents to maintain chronological logs (they forgot) and instead mined git history automatically at task completion. The episodic generator merges git data with task data to produce a condensed history.&lt;/p&gt;

&lt;p&gt;The three-layer separation crystallized through a research spike on Google's context engineering principles (T-120) and a deep reflection on sub-agent dispatch patterns (T-097, which analyzed all 96 tasks at that point). The key finding: investigation agents need results in working memory (0% savings from offloading), while content generators must never return results to working memory (96% savings from writing to disk). Some memory is hot and ephemeral. Some is warm and persistent. Some is cold and archival. The pattern mapped directly to three layers.&lt;/p&gt;

&lt;p&gt;I also learned that memory decay is real. A discovery analysis (T-200) found a 58% episodic decay rate — more than half of episodic records lose practical value within weeks. The solution was not to discard them but to distill patterns upward: if the same failure appears in 3+ episodic records, it graduates to a pattern in project memory. If a pattern proves reliable across 5+ tasks, it graduates to a practice. This is Decision D-003: "3+ occurrences triggers practice candidate."&lt;/p&gt;

&lt;h3&gt;
  
  
  The key insight
&lt;/h3&gt;

&lt;p&gt;Short-term context, accumulated knowledge, and historical reference have different requirements. By separating them, each can be optimised:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working memory: fast, volatile, small&lt;/li&gt;
&lt;li&gt;Project memory: persistent, searchable, growing&lt;/li&gt;
&lt;li&gt;Episodic memory: archival, condensed, referenced on demand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The domain changed from organisational knowledge management to AI agent memory. The principle did not.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DimitriGeelen/agentic-engineering-framework/master/install.sh | bash
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fw init

&lt;span class="c"&gt;# See current memory state&lt;/span&gt;
fw context status

&lt;span class="c"&gt;# Record a decision&lt;/span&gt;
fw context add-decision &lt;span class="s2"&gt;"Use YAML for configs"&lt;/span&gt; &lt;span class="nt"&gt;--task&lt;/span&gt; T-042 &lt;span class="nt"&gt;--rationale&lt;/span&gt; &lt;span class="s2"&gt;"Human readable"&lt;/span&gt;

&lt;span class="c"&gt;# Record a learning&lt;/span&gt;
fw context add-learning &lt;span class="s2"&gt;"Always set connection pool limits"&lt;/span&gt; &lt;span class="nt"&gt;--task&lt;/span&gt; T-042
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;github.com/DimitriGeelen/agentic-engineering-framework&lt;/a&gt;&lt;/p&gt;




</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Agentic Engineering: dependency graph visualization" and "blast-radius" use case.</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Tue, 10 Mar 2026 07:05:01 +0000</pubDate>
      <link>https://dev.to/irrindar/agentic-engineering-dependency-graph-visualization-and-blast-radius-use-case-1317</link>
      <guid>https://dev.to/irrindar/agentic-engineering-dependency-graph-visualization-and-blast-radius-use-case-1317</guid>
      <description>&lt;p&gt;&lt;strong&gt;Infrastructure management begins with a map of interdependencies.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;In domains where system integrity depends on visibility — electrical grid maintenance, pharmaceutical supply chains, aerospace engineering — a foundational principle holds: before any modification, the system must be understood. A grid operator maps power lines. A pharmacist traces drug pathways. An engineer models aircraft subsystems. The method differs. The necessity does not. Without a structural map, changes become blind, risks unbounded, and accountability fragmented.  &lt;/p&gt;

&lt;p&gt;This principle applies to AI-driven codebases, where the absence of a topology map creates silent chaos. An agent tasked with "refactoring a module" may alter files without knowing what they depend on, who relies on them, or what downstream systems will break. The codebase becomes a black box, with no way to trace the ripple effects of a single line of change. The work is not invisible — it is unmoored.  &lt;/p&gt;

&lt;p&gt;I built the Component Fabric to anchor AI agents in the structural reality of the codebase. It is not a tool for the agent to use. It is the scaffold upon which the agent must operate.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The Component Fabric is a declarative topology map stored in &lt;code&gt;.fabric/&lt;/code&gt;, populated by a set of commands that enforce structural awareness. Every file with significant impact — a utility script, a core module, an API endpoint — must be registered as a component. This creates a YAML card in &lt;code&gt;.fabric/components/&lt;/code&gt; that defines its dependencies, purpose, and relationships.  &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&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;fw fabric register ./src/auth/service.ts  
&lt;span class="c"&gt;# Component card created:  &lt;/span&gt;
&lt;span class="c"&gt;# id: C-087  &lt;/span&gt;
&lt;span class="c"&gt;# name: AuthService  &lt;/span&gt;
&lt;span class="c"&gt;# type: service  &lt;/span&gt;
&lt;span class="c"&gt;# subsystem: auth  &lt;/span&gt;
&lt;span class="c"&gt;# location: ./src/auth/service.ts  &lt;/span&gt;
&lt;span class="c"&gt;# purpose: Token validation and user authentication  &lt;/span&gt;
&lt;span class="c"&gt;# depends_on: [C-041 (UserModel), C-063 (DatabaseClient)]  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system then uses this map to answer questions like: &lt;em&gt;What depends on this file?&lt;/em&gt; (&lt;code&gt;fw fabric deps&lt;/code&gt;), &lt;em&gt;What breaks if I modify this?&lt;/em&gt; (&lt;code&gt;fw fabric blast-radius&lt;/code&gt;), or &lt;em&gt;Where are all unregistered files?&lt;/em&gt; (&lt;code&gt;fw fabric drift&lt;/code&gt;). The agent cannot act without this context.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why / Research
&lt;/h3&gt;

&lt;p&gt;The need for structural mapping emerged from three task failures:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;T-208&lt;/strong&gt;: An agent refactored a core module without checking dependencies, breaking 12 downstream systems. The fix required manually reconstructing the dependency graph from commit history.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;T-214&lt;/strong&gt;: A batch registration of 95 AEF components revealed 14% of files were unregistered, leading to 23 orphaned components with no traceable purpose.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;T-361&lt;/strong&gt;: A documentation gap in component cards caused 7 misrouting incidents, where agents applied changes to the wrong subsystem.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These failures showed that structural awareness is not optional. The Component Fabric enforces it through three mechanisms:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Registration as a precondition&lt;/strong&gt; for any file modification.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drift detection&lt;/strong&gt; to surface unregistered or stale components.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact analysis&lt;/strong&gt; to prevent changes with unknown downstream consequences.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result: 91% component coverage after T-214, 95% of AEF subsystems mapped, and a 68% reduction in post-refactor incidents.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&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;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://raw.githubusercontent.com/aef/fabric/master/install.sh | bash  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Before modifying a file:  &lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw fabric deps ./src/payments/processor.ts  
&lt;span class="c"&gt;# Output:  &lt;/span&gt;
&lt;span class="c"&gt;# C-112 (PaymentProcessor) depends_on: [C-050 (StripeClient), C-078 (Logger)]  &lt;/span&gt;
&lt;span class="c"&gt;# depended_by: [C-134 (CheckoutFlow), C-150 (BillingJob)]  &lt;/span&gt;

&lt;span class="c"&gt;# Before committing:  &lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw fabric blast-radius  
&lt;span class="c"&gt;# Simulated impact: 3 files would break if changes are applied  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>I built guardrails for AI coding agents — same governance principle, new domain</title>
      <dc:creator>dimitri</dc:creator>
      <pubDate>Fri, 06 Mar 2026 21:55:21 +0000</pubDate>
      <link>https://dev.to/irrindar/i-built-guardrails-for-ai-coding-agents-same-governance-principle-new-domain-28j3</link>
      <guid>https://dev.to/irrindar/i-built-guardrails-for-ai-coding-agents-same-governance-principle-new-domain-28j3</guid>
      <description>&lt;h2&gt;
  
  
  I built guardrails for AI coding agents — same governance principle, new domain
&lt;/h2&gt;

&lt;p&gt;Over 25 years of working on complex IT programmes I arrived at a principle I now believe is universal: effective intelligent action — whether by a person, a team, or an AI agent — requires five things. Clear direction. Awareness of context — what happened before, what was decided, what failed. Awareness of resource constraints. Awareness of what your actions will affect downstream. And people who are genuinely engaged and capable of acting. Remove any one and the system degrades.&lt;/p&gt;

&lt;p&gt;I did not derive this from AI theory. I derived it from watching transitions succeed and fail. At Shell I built a governance framework for IT transitions — quality gates, assurance areas, structured handovers. Shell adopted it as the global standard. It has been used for over 1,000 transitions worldwide.&lt;/p&gt;

&lt;p&gt;When I started building with agentic coding tools I recognised the same failure modes. So I built a framework for that too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem is structural
&lt;/h2&gt;

&lt;p&gt;AI coding agents — Claude Code, Cursor, Copilot, Aider — are capable tools. What they lack is governance. Without it, the same failure modes appear that I have seen in every ungoverned programme:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No traceability.&lt;/strong&gt; Files change with no record of why. No task, no decision trail, no audit history. Three weeks later you are reading a diff with no way to reconstruct the reasoning behind it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No memory.&lt;/strong&gt; Every session starts from zero. The agent does not know what it did yesterday, what decisions were made, what failed. You re-explain context repeatedly. Or worse — the agent contradicts a decision from the previous session because it has no record of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No risk awareness.&lt;/strong&gt; The agent may ask before a force push, but it has no model for understanding why that action is risky, what it affects, or who should approve it. There is no structured authority model — no distinction between what the agent may decide and what requires human approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No learning loop.&lt;/strong&gt; Failures are not recorded. The same mistake recurs across sessions because there is no mechanism to capture what went wrong and surface it next time.&lt;/p&gt;

&lt;p&gt;These are not tool-specific problems. They are governance problems. The same ones I spent two decades solving in enterprise IT.&lt;/p&gt;

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

&lt;p&gt;The &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;Agentic Engineering Framework&lt;/a&gt; applies structural governance to AI coding agents — not guidelines or best practices, but mechanical enforcement.&lt;/p&gt;

&lt;p&gt;The core principle: &lt;strong&gt;nothing gets done without a task.&lt;/strong&gt; This is enforced as a gate, not a convention. With Claude Code, the framework intercepts every file modification and blocks it unless an active task exists.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent attempts to edit a file
    │
    ▼
┌─────────────────────┐
│  Task gate (Tier 1)  │──── No active task? → BLOCKED
└─────────────────────┘
    │ ✓ Task exists
    ▼
┌─────────────────────┐
│  Budget gate         │──── Context &amp;gt; 75%? → BLOCKED (auto-handover)
└─────────────────────┘
    │ ✓ Budget OK
    ▼
    Edit proceeds           Every commit traces to a task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This maps directly to those five requirements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Framework mechanism&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clear direction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task-first enforcement. Every action has a task with acceptance criteria and verification commands.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Awareness of context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context Fabric (the framework's memory subsystem) — three layers of persistent memory (working, project, episodic). The agent recalls prior decisions, learned patterns, and failure resolutions across sessions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Awareness of context window&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context budget management tracks resource consumption and triggers automatic handover before the agent loses coherence.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Awareness of impact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Component Fabric — a live structural map of the codebase. Before changing a file, the agent queries what depends on it and assesses downstream impact.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Engaged, capable actors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tiered authority model. The agent has initiative but not authority. Destructive actions require human approval.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tasks flow through a visible lifecycle — Captured, In Progress, Issues, Completed — tracked on a Kanban board that surfaces what needs attention:&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2F6p0gq9vnf7hr1eueorl0.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.amazonaws.com%2Fuploads%2Farticles%2F6p0gq9vnf7hr1eueorl0.png" alt="Task Board" width="800" height="2006"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tasks are not hidden in text files. They are visible, trackable, and auditable.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works in practice
&lt;/h2&gt;

&lt;p&gt;Here is what this looks like in a terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before governance:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Agent operates without constraints&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"updates"&lt;/span&gt;
git push &lt;span class="nt"&gt;--force&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No task reference. No traceability. Destructive command executed without approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After governance:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Work starts with a task&lt;/span&gt;
fw work-on &lt;span class="s2"&gt;"Add JWT validation"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; build

&lt;span class="c"&gt;# Every commit references the task&lt;/span&gt;
fw git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"T-042: Add JWT validation middleware"&lt;/span&gt;

&lt;span class="c"&gt;# Destructive commands are intercepted&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;--force&lt;/span&gt;
══════════════════════════════════════════════════════════
  TIER 0 BLOCK — Destructive Command Detected
══════════════════════════════════════════════════════════
  Risk: FORCE PUSH overwrites remote &lt;span class="nb"&gt;history
  &lt;/span&gt;To proceed: fw tier0 approve &lt;span class="o"&gt;(&lt;/span&gt;requires human approval&lt;span class="o"&gt;)&lt;/span&gt;
══════════════════════════════════════════════════════════

&lt;span class="c"&gt;# Session ends with context preserved for the next&lt;/span&gt;
fw handover &lt;span class="nt"&gt;--commit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That Tier 0 block is not a warning. It is a gate. Which leads to the question: who has authority over what?&lt;/p&gt;

&lt;h2&gt;
  
  
  The authority model
&lt;/h2&gt;

&lt;p&gt;In transition management, the single most common failure mode is unclear accountability. Who decides? Who approves? Who can override?&lt;/p&gt;

&lt;p&gt;The framework codifies this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human     → SOVEREIGNTY  → Can override anything, is accountable
Framework → AUTHORITY    → Enforces rules, checks gates, logs everything
Agent     → INITIATIVE   → Can propose, request, suggest — never decides
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent may choose which task to work on. It may choose an implementation approach. It may not bypass a structural gate, complete a human-owned task, or execute a destructive command without approval. Initiative is not authority. This distinction prevents the most dangerous failure mode in agentic systems: the agent making consequential decisions that no one reviewed.&lt;/p&gt;

&lt;p&gt;The tiered approval model enforces this mechanically:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Approval&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Destructive commands (&lt;code&gt;--force&lt;/code&gt;, &lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;DROP TABLE&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Human must approve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All file modifications&lt;/td&gt;
&lt;td&gt;Active task required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Situational exceptions&lt;/td&gt;
&lt;td&gt;Single-use, logged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Read-only operations&lt;/td&gt;
&lt;td&gt;Pre-approved&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You do not prevent action. You ensure the right checks occur at the right points.&lt;/p&gt;

&lt;p&gt;The gates handle enforcement. But what happens to the knowledge the agent builds up during a session?&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Fabric — memory across sessions
&lt;/h2&gt;

&lt;p&gt;The most expensive failure in agent-assisted development is not a bug. It is lost context. An agent works for an hour, the session ends, and the next session starts from zero. Decisions are re-made. Mistakes are repeated. The reasoning trail disappears.&lt;/p&gt;

&lt;p&gt;The Context Fabric solves this with three layers of persistent memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working memory&lt;/strong&gt; — current session state, active focus, pending actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project memory&lt;/strong&gt; — patterns, decisions, and learnings that persist across all sessions. When the agent encounters a failure it has seen before, the resolution is already there&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Episodic memory&lt;/strong&gt; — condensed histories of every completed task, auto-generated at completion. What was done, what was decided, what was learned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Semantic search across all three layers means the agent can recall relevant context by meaning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fw recall &lt;span class="s2"&gt;"authentication timeout pattern"&lt;/span&gt;
&lt;span class="c"&gt;# → Returns: L-037 (from T-118), FP-003 (from T-089), episodic T-042&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without this, every session is a cold start. With it, the framework accumulates institutional knowledge — the same way it does in a well-run organisation.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fwutt944qve3hntm89gvg.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.amazonaws.com%2Fuploads%2Farticles%2Fwutt944qve3hntm89gvg.png" alt="Watchtower Dashboard" width="800" height="2952"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Watchtower dashboard surfaces tasks awaiting human verification, work direction, and system health in one view.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Component Fabric — structural awareness
&lt;/h2&gt;

&lt;p&gt;Memory tells the agent what happened before. But it also needs to know what it is about to affect. In a programme, this is stakeholder impact analysis. In a codebase, it is dependency tracking.&lt;/p&gt;

&lt;p&gt;The Component Fabric is a live topology map of every significant file in the project. 126 components across 12 subsystems, with 175 dependency edges tracked. Each component has a YAML card recording what it does, what it depends on, and what depends on it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# What depends on this file?&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw fabric deps agents/git/git.sh
  → 6 dependents: commit.sh, hooks.sh, ...

&lt;span class="c"&gt;# What will this commit break downstream?&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw fabric blast-radius HEAD
  → 3 files changed, 12 downstream components potentially affected

&lt;span class="c"&gt;# Detect unregistered files (structural drift)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;fw fabric drift
  → 2 unregistered files, 0 orphaned cards
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference is between modifying a file without knowing its dependents and modifying it with a verified understanding of downstream impact.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fps5yg8yzbk2yb6rmuahw.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.amazonaws.com%2Fuploads%2Farticles%2Fps5yg8yzbk2yb6rmuahw.png" alt="Component Fabric — dependency graph" width="800" height="562"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Interactive dependency graph — filter by subsystem, switch layouts, click nodes to inspect relationships.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The healing loop
&lt;/h2&gt;

&lt;p&gt;Context and structural awareness handle the forward path. But what about failures?&lt;/p&gt;

&lt;p&gt;When a task encounters issues, the framework classifies the failure, searches for similar patterns, and suggests recovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fw healing diagnose T-015            &lt;span class="c"&gt;# Classify and suggest&lt;/span&gt;
fw healing resolve T-015 &lt;span class="nt"&gt;--mitigation&lt;/span&gt; &lt;span class="s2"&gt;"Added retry logic"&lt;/span&gt;  &lt;span class="c"&gt;# Record as pattern&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The escalation ladder is deliberate: &lt;strong&gt;A&lt;/strong&gt; — do not repeat the same failure. &lt;strong&gt;B&lt;/strong&gt; — improve technique. &lt;strong&gt;C&lt;/strong&gt; — improve tooling. &lt;strong&gt;D&lt;/strong&gt; — change ways of working. Over 312 completed tasks, these patterns accumulate. Resolutions from prior failures are surfaced when similar issues recur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous audit
&lt;/h2&gt;

&lt;p&gt;The healing loop handles individual failures. To catch systemic drift, the framework audits itself. 90+ compliance checks run automatically — every 30 minutes, on every push, and on demand:&lt;br&gt;
&lt;/p&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;fw audit

&lt;span class="o"&gt;===&lt;/span&gt; SUMMARY &lt;span class="o"&gt;===&lt;/span&gt;
Pass: 94
Warn: 5
Fail: 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the equivalent of assurance reporting. Not retrospective. Continuous. Drift is detected before it becomes a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence
&lt;/h2&gt;

&lt;p&gt;I used the framework to build the framework. 312 tasks completed. 96% commit traceability across the full task history. Every architectural decision recorded with rationale and rejected alternatives.&lt;/p&gt;

&lt;p&gt;A typical commit log:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;27e8ed1 T-332: Research awesome list targets — 5 lists with ready-to-submit entries
d8cd81e T-326: Complete README rewrite — all 17 agent ACs + 5 screenshots verified
2138d17 T-329: Draft launch article — I built guardrails for Claude Code
25ba46e T-328: Add NOTICE file for Apache 2.0 attribution preservation
c6287d4 T-328: Add Apache 2.0 license (Geelen &amp;amp; Company) and update README
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every commit traces to a task. Every task has acceptance criteria that were verified before completion. Every decision is recorded with rationale. The framework is its own proof of concept.&lt;/p&gt;

&lt;p&gt;The framework is built with and tested against Claude Code — that is where the full structural enforcement lives, via hooks that intercept every file modification, every destructive command, every context threshold. But the design is provider-neutral. Cursor gets &lt;code&gt;.cursorrules&lt;/code&gt; generation and CLI governance. Copilot, Aider, Devin — any agent that can follow a system prompt and run shell commands gets the same &lt;code&gt;fw&lt;/code&gt; CLI. One governance interface, regardless of which agent is executing.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Feq8k4g2wxhvocdeowaof.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.amazonaws.com%2Fuploads%2Farticles%2Feq8k4g2wxhvocdeowaof.png" alt="Task detail" width="800" height="2020"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A task is a rich artifact — acceptance criteria, verification commands, decisions, and episodic summary. Not a one-line ticket.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it stands
&lt;/h2&gt;

&lt;p&gt;I use this daily for real work. 312 tasks completed. The governance model holds. The context continuity works. The healing loop genuinely improves over time. I would not go back to ungoverned agent development.&lt;/p&gt;

&lt;p&gt;That said, the framework is alpha. It is under active development. There are bugs. There are rough edges. I have taken steps to make it usable for others — install script, Homebrew tap, documentation, GitHub Action — but it has not been tested by a wide audience yet.&lt;/p&gt;

&lt;p&gt;If that sounds interesting, try it. If you find bugs, report them. If you see improvements, contribute. This is not a finished product — it is a working framework heading in the right direction.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DimitriGeelen/agentic-engineering-framework/main/install.sh | bash

&lt;span class="c"&gt;# Or via Homebrew&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;DimitriGeelen/agentic-fw/fw

&lt;span class="c"&gt;# Initialize in your project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fw init

&lt;span class="c"&gt;# Start your first governed task&lt;/span&gt;
fw work-on &lt;span class="s2"&gt;"Set up project structure"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source under Apache 2.0: &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework" rel="noopener noreferrer"&gt;github.com/DimitriGeelen/agentic-engineering-framework&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The principle holds
&lt;/h2&gt;

&lt;p&gt;Effective intelligent action requires clear direction, context awareness, awareness of constraints and impact, and capable engaged actors. This was true for Shell's global transitions. It is true for AI coding agents. The domain changed. The principle did not.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I am interested in how others are approaching governance for AI coding agents. If you have experience — or questions — I would welcome the conversation on &lt;a href="https://github.com/DimitriGeelen/agentic-engineering-framework/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
