<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dave Talks Tech]]></title><description><![CDATA[Dave Talks Tech]]></description><link>https://davecoleman.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 29 Oct 2026 09:17:39 GMT</lastBuildDate><atom:link href="https://davecoleman.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The next frontier is context - not models]]></title><description><![CDATA[Are we overengineering AI agents? Explore how context saturation, redundant instructions, and excessive orchestration may limit AI reasoning.]]></description><link>https://davecoleman.hashnode.dev/the-next-frontier-is-context-not-models</link><guid isPermaLink="true">https://davecoleman.hashnode.dev/the-next-frontier-is-context-not-models</guid><category><![CDATA[AI]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[context engineering]]></category><category><![CDATA[agentic AI]]></category><category><![CDATA[Prompt Engineering]]></category><category><![CDATA[AI Architecture]]></category><category><![CDATA[llm]]></category><dc:creator><![CDATA[David Coleman]]></dc:creator><pubDate>Sat, 24 Oct 2026 01:54:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/b0c8af7b-ae63-4dd2-91ca-f2d730ebc31a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the last 18 months, AI has experienced massive gains. We have released new models almost monthly. Every model is "better" than the last, and often cheaper! Do more with less! Do the same things better and faster! Do things we couldn't do before! Do all the things!</p>
<p>During this time, we've also introduced skills, plugins, marketplaces, agents and so many different ways of organizing knowledge. This is great. every one of these innovations has helped us build towards the next step in our AI journey.</p>
<p>But increasingly, I'm seeing a different conversation happening inside companies. It's no longer "what's the next big thing we're missing?" but rather, "what do we do with all this stuff?"</p>
<p>I recently ran an internal audit at my workplace. Nearly 6,000 skills spread across thousands of marketplaces and repositories. I categorized every single skill. And what did I discover?</p>
<p>The ten largest capability categories accounted for <strong>2,444 unique skill locations.</strong> That's 45.57%.</p>
<p>The top 20 accounted for <strong>3,508 unique skill locations.</strong> That's 65.41%.</p>
<p>Think about that. Just 20 broad categories of capabilities account for nearly two-thirds of our entire skills landscape.</p>
<p>That doesn't mean they're all doing exactly the same thing. But it raises an interesting question:</p>
<p><strong>Are our needs really that different, or are we solving the same problems over and over again?</strong></p>
<h2>From Proliferation to Saturation</h2>
<p>The consolidation discussion predates AI. It predates computing. Humans have always used tools, and making a new tool for every job has always been inefficient.</p>
<p>So why are we joyously baking hundreds of variations of skills like "open a Jira ticket" or "edit a wiki page"? Are our needs really so unique?</p>
<p>My skills analysis identified 3,508 skill locations across just 20 common capability categories. An average of 175 per category. That doesn't mean 175 identical implementations of every capability. But it does raise an interesting question: how much of this variation represents genuinely different needs, and how much is simply reinvention?</p>
<p><strong>Context.</strong> That's often the answer.</p>
<p>I've previously published a paper on the power of <a href="https://hashnode.com/edit/cmp23f4g800li2dlcfyo18rls">composed context assembly</a>, exploring how shared capabilities can be adapted to different organizational needs through dynamically assembled context.</p>
<p>But there's a problem that composition alone doesn't solve: <strong>repetition</strong>.</p>
<p>My skills analysis revealed a landscape of strikingly similar capabilities, implemented over and over again across the enterprise. My analysis of agents revealed a related, but subtly different problem: repeated context across many subagents. Bloated context. Including context assembled by my own engine.</p>
<p>A swarm of subagents, performing similar tasks from different perspectives, would often carry many of the same instructions. Each agent received its own blocks of composed context, sometimes repeating substantial portions of what its peers had already been given.</p>
<p>We had achieved customization. We had achieved reuse. We had even solved much of the problem of distributing organizational knowledge.</p>
<p><strong>But at what cost?</strong></p>
<p>More tokens. More repeated instructions. More opportunities for conflicting guidance. And potentially, more interference with the very reasoning we were trying to improve.</p>
<p>We had solved the problem of getting the right context to the right agents.</p>
<p>Now we had to ask whether we were giving them too much.</p>
<p><strong>The cost was context saturation.</strong></p>
<h2>Distillation</h2>
<p>Let's take a relatively simple system: code review.</p>
<p>We start with a system prompt, a reviewer persona, Jira ticket information, and a code coverage report. We tell the agent to fetch the PR, extract the diff, read the patch, analyze each line, apply a long list of rules, and definitely, definitely <em>don't</em> do an equally long list of prohibited things.</p>
<p>We've built a highly bespoke skill, packed with situation-specific instructions.</p>
<p>But is this the best way?</p>
<p>So we do what good software engineers do. We abstract.</p>
<p>We extract the common review process into a reusable system prompt. We introduce personas to provide different expert perspectives. We compose organizational rules and domain knowledge through context assembly, injecting the appropriate context for each review.</p>
<p>Now we have a reusable skill, dynamically customized for different teams, repositories, and review scenarios.</p>
<p>Success! Right?</p>
<p>Well, we've taken a huge, specific prompt and turned it into an even bigger, abstract one. The original instructions are still there, and now we've layered dynamically assembled context on top.</p>
<p>Was this better? DRY says so.</p>
<p>We had optimized for reuse, maintainability, and customization. But we hadn't necessarily optimized for the model consuming all this context.</p>
<p>And these are fundamentally different problems.</p>
<p>A system can be beautifully abstracted, perfectly DRY, and still be terribly inefficient at execution.</p>
<p><strong>We had confused software engineering efficiency with context efficiency.</strong></p>
<h2>Have We Forgotten the Bitter Lesson?</h2>
<p>In 2019, Richard Sutton published <a href="http://www.incompleteideas.net/IncIdeas/BitterLesson.html">The Bitter Lesson</a>. His observation was uncomfortable: throughout the history of AI, researchers repeatedly invested in carefully engineered, human-designed approaches, only to see more general methods eventually surpass them as computation scaled.</p>
<p>And yet, here we are.</p>
<p>We have models capable of reasoning across enormous bodies of knowledge, adapting to unfamiliar problems, and navigating complex workflows.</p>
<p>And what do we do?</p>
<p>We write thousands of lines of instructions telling them how to think.</p>
<p>We prescribe their steps. We anticipate their decisions. We build elaborate orchestration around them. Then we add more instructions to compensate when the results aren't what we expected.</p>
<p>Does any of this sound familiar?</p>
<p>Sutton's lesson wasn't about prompts or agents. But I wonder whether our enthusiasm for engineering every detail of agent behavior is creating a modern version of the same trap.</p>
<p><strong>We may be spending more effort teaching our agents how to solve problems than allowing them to demonstrate what they already know.</strong></p>
<p>That's not an argument for removing constraints or abandoning engineering discipline. It's an argument for questioning which constraints actually improve outcomes, and which simply encode our own assumptions.</p>
<h2>Separation</h2>
<p>A long-established principle in software engineering is <em>separation of concerns</em>: each component should have a clear responsibility.</p>
<p>Yet the way we write skills today often violates this principle. A single skill might contain a persona's expertise, task instructions, outcome definitions, domain knowledge, and exhaustive rules describing what to do and what not to do.</p>
<p>We've bundled everything together because we want the agent to have everything it might need. But does it really need all of that, all at once?</p>
<p>Research such as <a href="https://direct.mit.edu/tacl/article/doi/10.1162/tacl_a_00638/119630/Lost-in-the-Middle-How-Language-Models-Use-Long">Lost in the Middle</a> highlights an important limitation: just because information is present in a model's context doesn't mean the model will effectively use it.</p>
<p>And there's another side to this problem. Simply giving an agent a reference to a file doesn't guarantee that it will read it, either.</p>
<p>These are different failure modes, but they point toward the same architectural opportunity: <strong>separating context discovery from context acquisition and application.</strong></p>
<p>Instead of loading every piece of potentially relevant information up front, we can make it discoverable and allow the agent to retrieve what it needs, when it needs it. Essential instructions can remain explicit, while supporting knowledge and evidence can be loaded on demand.</p>
<p>This is why we encourage keeping <code>CLAUDE.md</code> and <code>AGENTS.md</code> files lean, focused on guidance that applies to most operations within a repository rather than every possible scenario.</p>
<p>The same principle applies to skills.</p>
<p>Let's return to our pull request review example. What if, instead of embedding the review process, expertise, evidence, and classification rules into one enormous prompt, we separated them into distinct artifacts?</p>
<pre><code class="language-plaintext">Skill body:
You are reviewing a pull request.

The patch is here: &lt;path to patch&gt;
The PR description and conversation: &lt;path to PR JSON&gt;
Your expertise: &lt;path to expert lens&gt;
The Jira story and discussion: &lt;path to Jira JSON&gt;
Code coverage: &lt;path to lcov report&gt;
Finding severity guidelines: &lt;path to severity guide&gt;

Apply your expert perspective to the PR.
Use the available evidence and guidelines to identify
and classify meaningful findings.
</code></pre>
<p>Notice what we've removed.</p>
<p>We're no longer telling the model how to read a patch, how to walk through every line, or prescribing a long sequence of reasoning steps. We're giving it a task, a perspective, access to evidence, and the criteria for evaluating its findings.</p>
<p><strong>The skill describes what the agent needs to accomplish, not every step it must take to accomplish it.</strong></p>
<p>Of course, there's a tradeoff.</p>
<p>We can't guarantee that the model will read every referenced file. But loading everything into its context doesn't guarantee that it will reason over everything, either.</p>
<p>The challenge isn't simply to provide less context. It's to ensure that essential context is acquired and applied, while avoiding the cost of loading everything indiscriminately.</p>
<p>And perhaps most importantly, to recognize that <strong>making knowledge available to an agent is not the same as making that knowledge useful.</strong></p>
<h2>Personas, Prompts, Pink Elephants, Oh My!</h2>
<p>You may have noticed that in my example, I didn't talk much about guardrails. I didn't spend exhaustive effort telling the model what it may not do.</p>
<p>This brings me to the "pink elephant problem."</p>
<p>Tell someone not to think about a pink elephant. What's the first thing that comes to mind?</p>
<p>A pink elephant, of course.</p>
<p>Models aren't people, and they don't necessarily respond to negative instructions the way humans do. But there's an interesting parallel: every instruction we add introduces more concepts, conditions, and potential distractions into the model's context. Even the things we're telling it <em>not</em> to do.</p>
<p>There's an interesting lesson here for how we write agent instructions.</p>
<p>Rather than exhaustively describing everything an agent must not do, perhaps we should spend more effort describing the behavior we actually want.</p>
<p>"Don't do X" tells the model what to avoid. "When encountering X, do Y instead" gives it a constructive path forward.</p>
<p>This doesn't mean negative instructions are inherently bad, or that security boundaries should be left to clever prompt engineering. Permissions, sandboxing, and authorization belong in enforceable systems wherever possible.</p>
<p>But when we're describing how an agent should perform its work, I suspect we could eliminate a surprising amount of unnecessary instruction simply by focusing on desired outcomes rather than anticipated mistakes.</p>
<p>And that brings us back to the question: <strong>how much of our carefully engineered context is actually helping?</strong></p>
<h2>So much has changed. Yet so much stays the same</h2>
<p>Models have improved by leaps and bounds over the years, but these insightful papers expose concepts that have outlasted the AI models of their time. We've spent the last two years learning how to give agents more capabilities, more instructions, and more context.</p>
<p>Perhaps the next challenge isn't figuring out what else we can give them, but understanding what they actually need.</p>
<p>That means separating capabilities from expertise, evidence from instructions, and constraints from execution. It means making context discoverable without making all of it mandatory. And it means being willing to question whether our carefully engineered prompts are helping the model, or getting in its way.</p>
<p>The next frontier may not be how much context we can assemble.</p>
<p>It may be how much we can leave out.</p>
]]></content:encoded></item><item><title><![CDATA[Why Most AI Platforms Fail at Scale: Context, Governance, and the Missing Execution Layer]]></title><description><![CDATA[Most AI systems fail not because models lack capability, but because behavior doesn’t scale. A new approach to context-driven AI execution.]]></description><link>https://davecoleman.hashnode.dev/why-most-ai-platforms-fail-at-scale-context-governance-and-the-missing-execution-layer</link><guid isPermaLink="true">https://davecoleman.hashnode.dev/why-most-ai-platforms-fail-at-scale-context-governance-and-the-missing-execution-layer</guid><category><![CDATA[AI]]></category><category><![CDATA[software architecture]]></category><category><![CDATA[Platform Engineering ]]></category><category><![CDATA[Prompt Engineering]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[David Coleman]]></dc:creator><pubDate>Tue, 12 May 2026 03:50:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/037d2f73-92f4-4f4a-a8bb-f6fbaaa99ceb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<p><em>This paper describes a general system model for AI execution at scale. While informed by real-world experience, it is not specific to any single organization or implementation.</em></p>
<h2>The Problem: Inconsistency at Scale</h2>
<p>Organizations are rapidly moving from small-scale AI experimentation to broad, enterprise-wide adoption. What works for a handful of individuals  -  prompting, ad-hoc workflows, locally defined tools  -  begins to break down as usage scales across hundreds or thousands of people. At that scale, the problem is no longer access to capability. It is consistency of execution.</p>
<p>To address this, we introduce a model we refer to as <em>Context-Assembled Execution (CAE)</em>.</p>
<p>In this model, behavior is not embedded in tools or reconstructed through prompting. Instead, it is assembled dynamically at the moment of execution from structured layers of context.</p>
<p>This paper describes CAE as a system pattern, and introduces <em>DCAP (Dynamic Context Assembly Platform)</em> as a reference architecture for implementing it.</p>
<p>Together, they define a shift in how AI systems operate at scale:</p>
<ul>
<li><p>CAE defines the execution model</p>
</li>
<li><p>DCAP provides the system that makes it real</p>
</li>
</ul>
<p>In large organizations, we've seen teams independently build overlapping solutions to the same problems. Similar tasks produce different outcomes depending on who invokes them. Organizational standards are applied unevenly, if at all. Context is copied, repeated, and lost. Costs grow unpredictably as systems rely on increasingly large and redundant inputs. What begins as acceleration at the individual level does not stabilize as it scales. It compounds.</p>
<p>Each new team introduces its own variations. Each variation becomes another branch of behavior to maintain. Context grows, but not coherently  -  copied across prompts, duplicated across tools, and redefined in slightly different ways. Over time, the system does not converge toward consistency. It diverges.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/688850f5-7f0a-4555-bd6f-06490790ffe9.png" alt="The Problem: Divergence at Scale - when teams build in isolation, similar work produces different outcomes, context is duplicated, standards drift and costs grow unpredictably" style="display:block;margin:0 auto" />

<blockquote>
<p>The Problem: Divergence at Scale - when teams build in isolation, similar work produces different outcomes, context is duplicated, standards drift and costs grow unpredictably</p>
</blockquote>
<p>At scale, this creates a failure mode that is already beginning to surface in large organizations. Organizations lose the ability to reason about how work is being performed. Outputs become unpredictable. Standards become advisory rather than enforced. Trust in automated systems erodes - not because they are incapable, but because they are inconsistent.</p>
<p>In many organizations, this transition is subtle. It does not appear as a single failure, but as a growing loss of alignment that becomes harder to correct over time. This is the point at which adoption stalls. This is the point when costs go exponential. This is when the system fails - not due to lack of capability, but due to lack of control.</p>
<hr />
<h3>Why Current Approaches Don't Readily Scale</h3>
<p>This is not a limitation of the underlying models. It is a limitation of the systems built around them.</p>
<p>Most current approaches treat capabilities  - skills, tools, agents  - as the primary unit of design. Behavior is embedded directly into these capabilities, or reconstructed through repeated prompting at the point of use. Both approaches fail to scale. Embedding behavior leads to duplication and drift as teams fork and customize implementations. Prompting relies on human consistency that does not exist at enterprise scale.</p>
<p>What is missing is a consistent way to govern how work is executed without constraining who performs it.</p>
<p>This becomes immediately visible in even the simplest workflows. A task like creating a Jira ticket appears uniform, but in practice varies widely across teams  - each with different fields, standards, and expectations. Without a consistent way to apply that context at execution time, behavior fragments, duplication increases, and outcomes diverge. The diagram below illustrates how this variation emerges - and why it compounds as systems scale.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/5c3f225a-e419-4d63-aa2e-cbceb5811c04.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Why Current Approaches Don't Scale</p>
</blockquote>
<hr />
<p>A Different Approach: Context as the Source of Behavior</p>
<p>Most systems attempt to solve this problem by enforcing behavior directly.</p>
<p>They embed rules into tools, define rigid workflows, or rely on repeated prompting to shape outcomes at the moment of use. At small scale, this works. At enterprise scale, it breaks. Rules become brittle, tools diverge, and prompting becomes inconsistent. The system fragments because behavior has no stable place to live.</p>
<p>The approach described here is based on a different premise: that governance should not be enforced mechanically, but interpreted dynamically.</p>
<p>Instead of encoding behavior into capabilities, this model introduces a context assembly layer that defines how work should be performed at the moment it is executed. Organizational standards, team conventions, and individual expertise are not embedded in the tool  - they are assembled, layered, and presented to the model as structured context.</p>
<p>There is no rigid rules engine enforcing behavior through fixed pass/fail logic. The model itself becomes the governing mechanism, reasoning over structured context the same way an experienced practitioner would - evaluating constraints, resolving conflicts, and applying judgment.</p>
<p>This shifts the role of the system entirely. Instead of enforcing behavior, it shapes it. Capabilities remain simple. Context becomes authoritative. And governance moves from something the system executes to something the model understands.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/61c2df44-9660-441f-b9c4-c91e825260e7.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Context as a source for a scalable Jira capability</p>
</blockquote>
<hr />
<p>Context-Assembled Execution (CAE)</p>
<p>Context-Assembled Execution (CAE) is a model for AI systems in which behavior is not embedded in capabilities but dynamically constructed at execution time from layered context.</p>
<p>Instead of encoding rules into tools or relying on repeated prompting, CAE externalizes behavior into structured context layers - such as company policy, organizational standards, and individual expertise - which are assembled and interpreted by the model at the moment work is performed.</p>
<p>This model mirrors the CSS cascade: context is composed top-down from layers of authority, while resolution occurs bottom-up, where more specific context overrides more general guidance.</p>
<p>In CAE:</p>
<ul>
<li><p>Capabilities remain simple and reusable</p>
</li>
<li><p>Context defines behavior</p>
</li>
<li><p>Governance is applied dynamically, not enforced statically</p>
</li>
</ul>
<p>This enables consistent execution at scale without sacrificing flexibility, allowing systems to converge over time rather than fragment.</p>
<hr />
<h3>Dynamic Context Assembly Platform (DCAP)</h3>
<p>DCAP (Dynamic Context Assembly Platform) is a reference architecture for implementing Context-Assembled Execution.</p>
<p>It provides a runtime system that:</p>
<ul>
<li><p>Collects context from layered sources of authority</p>
</li>
<li><p>Assembles that context dynamically at execution time Injects it into model-driven capabilities</p>
</li>
<li><p>Produces governed outcomes based on interpreted context</p>
</li>
</ul>
<p>DCAP functions as a control plane for AI execution, enabling consistent, policy-aware behavior across teams, systems, and environments.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/68d0dcbd-d77c-4dd3-8fac-ac99c8ebdfb7.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>How Authority Cascades and Evaluates in DCAP - Context is composed from layers of authority (top-down) and resolved by specificity (bottom-up), similar to CSS. More specific context overrides more general guidance.</p>
</blockquote>
<h3>Reference Architecture: Context-Assembled Execution</h3>
<p>At a high level, the system consists of four components:</p>
<p><strong>Capabilities:</strong><br />Discrete functions that perform work, such as generate code, review a change, execute a workflow - these are typically skills or plugins in many AI systems today</p>
<p><strong>Context Layers:</strong><br />Structured layers of guidance defined at different levels of authority: company, org, team, repo, individual Each of these layers contributes uniquely to the constraints, preferences, and domain specific knowledge necessary to execute a task</p>
<p><strong>Context Assembler:</strong><br />A runtime component responsible for gathering and composing context from all of these layers at the moment of execution.</p>
<p><strong>Execution Engine:</strong><br />This is the model invocation itself, which receives:</p>
<ul>
<li><p>The requested capability  -  for example, a pull request capability</p>
</li>
<li><p>The assembled context (for example, an engineer in the Rocket division at Acme Corp, operating within a repository with defined architecture patterns, ownership rules, and team standards)</p>
</li>
<li><p>The user's input</p>
</li>
</ul>
<p>The model interprets the combined context and produces an outcome</p>
<hr />
<h3>Example: Pull Request Review</h3>
<p>Let's take an example of a common operation developers perform daily  -  reviewing a pull request.</p>
<p>In the traditional system, review logic is embedded in personal knowledge, or perhaps automated as a prompt, copied and pasted and tweaked. Maybe you have created a skill, and others have installed that skill and tweaked it to reflect their style or focus.</p>
<p>What happens when we do this?</p>
<ul>
<li><p>Review logic becomes embedded in scripts or prompts</p>
</li>
<li><p>Teams and individuals fork and modify behavior</p>
</li>
<li><p>Standards blur and drift over time</p>
</li>
</ul>
<p>Let's look at a new model:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/e1335087-e1d0-470e-b535-8e41c9437682.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>A new model for AI systems</p>
</blockquote>
<p>At runtime, these layers are assembled into a structured context with a preamble describing to the model how to interpret them. The <em>capability</em> has no embedded knowledge of the domain-specific context being injected.</p>
<p>What the capability is aware of is HOW, WHERE and WHY it will consume assembled context. This means that the skill is aware of its role in an enterprise scale system, and it is intentionally abstract, deferring all non-essential decisions to the policy layers.</p>
<p>In our example, a pull request capability knows how to open a pull request, read the diff and then some fundamental instructions, such as "suggest inline changes where appropriate. Explain your rationale for feedback. Give the user a recommendation." These do not change across an enterprise. These represent the most abstract definition of a pull request review. The key is that the capability knows that it should load the effective policy for this user and apply it to the underlying fundamental tasks  -  <em><strong>a policy aware capability understands its place in an enterprise.</strong></em></p>
<hr />
<h3>Key Properties of the Model</h3>
<p>This architecture introduces several important properties:</p>
<p><strong>Separation of concerns</strong><br />Capabilities perform work. Context defines behavior.</p>
<p><strong>Dynamic governance</strong><br />Rules are evaluated and applied at execution time, not enforced statically.</p>
<p><strong>Composability</strong><br />New context layers can be added without modifying capabilities.</p>
<p><strong>Convergence over time</strong><br />Improvements to capabilities benefit all users.<br />Improvements to context refine behavior locally without fragmentation.</p>
<p>DCAP is a control plane for AI execution. It assembles the right context at the right moment, lets the model interpret it, and governs the outcome - action by action.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/276ed75f-dee3-43a7-a203-a7625cc4e668.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>DCAP control plane architecture</p>
</blockquote>
<hr />
<h3>Contrast With Existing Systems</h3>
<p>Most current systems embed behavior in one of two places:</p>
<ul>
<li><p>Inside the capability itself</p>
</li>
<li><p>Inside repeated prompts at invocation time</p>
</li>
</ul>
<p>Both approaches lead to duplication and drift. In this model, behavior is externalized and composed dynamically, allowing the system to scale without fragmentation.</p>
<hr />
<h3>How the System Scales: Layered Context</h3>
<p>This separation has a direct impact on how capabilities evolve over time.</p>
<p>In most mature systems, variation does not live inside the capability itself. It is defined externally - through layered configuration, policy, and override. Infrastructure behaves differently across environments without being rewritten. Identity systems enforce global standards while allowing local exceptions. Interfaces adapt through cascading rules rather than duplication.</p>
<p>AI systems are currently missing this layer entirely. In many environments, tools and scripts proliferate because variation has nowhere else to live. A capability that performs well in one team is copied and modified for another. Small differences in workflow, naming, validation, or policy become embedded directly into the implementation. Over time, the organization accumulates multiple versions of the same capability, each partially maintained and inconsistently applied.</p>
<p>This is not a new problem. It is a solved one - just not yet applied to AI. Many languages and systems have faced this evolution.</p>
<p>Early systems often embedded structure and behavior directly into rigid, verbose formats. XML became a standard for representing data and configuration, but at scale it proved difficult to work with  -  too heavy, too repetitive, and hard to evolve.</p>
<p>JSON emerged as a simpler alternative, reducing friction and making data easier to compose and consume. Later, formats like YAML further optimized for readability and layered configuration, allowing systems to express variation more cleanly without duplicating structure.</p>
<p>The pattern is consistent: as systems scale, structure moves out of rigid implementations and into more flexible, composable layers.</p>
<p>AI systems are now encountering the same transition.  </p>
<p>What XML was to early systems, embedded behavior and prompt duplication are to AI today.  </p>
<p>What JSON and YAML enabled  -  clear, layered, composable structure  -  is what context assembly introduces for AI execution.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/244b27c3-bea4-4709-96a7-964c3e07e499.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Evolution of Data and AI Systems :  Two evolutions. The same pattern.</p>
</blockquote>
<p>When context is externalized, variation moves out of the capability and into the layers that define how it should behave in different situations. A single implementation can serve many contexts, shaped at execution time rather than rewritten at design time. Improvements to the capability benefit every team that uses it, while improvements to context refine behavior locally without creating divergence.</p>
<p>The system begins to converge instead of fragment. Capabilities stabilize. Context evolves. And investment compounds across the organization rather than being diluted by duplication.</p>
<hr />
<h3>Layered Authority and Context Composition</h3>
<p>In systems that operate at scale, this kind of control is not achieved through a single source of truth, but through layers of authority.</p>
<p>This pattern is not unique to AI. It is how enterprise systems have long managed complexity  -  through structured hierarchies of policy, configuration, and override.</p>
<p>Global standards define what must always be true. Organizational and team-level guidance refine how those standards are applied. Local environments introduce specificity. Individuals retain the ability to adapt behavior based on context and experience. Each layer contributes, and each layer has a clear scope of influence.</p>
<p>The same structure applies here.</p>
<p>Without layering, governance collapses toward one of two extremes: it becomes too rigid to adapt, or too loose to enforce.</p>
<p>Context is assembled from a hierarchy of layers, each representing a different level of authority - from company-wide guidance to individual preference.</p>
<p>It is not loaded in advance or applied globally. It is assembled in response to action.</p>
<p>When work is about to be performed  -  whether generating code, reviewing a change, or executing a workflow  -  the system gathers the relevant context from each layer and composes it at that moment. The model receives not a static policy, but context that is specific to the action being taken.</p>
<p>When layers disagree, resolution follows the simple pattern already proven by CSS: more specific context overrides more general guidance, with the ability for any layer to define non-overridable constraints where required. This ensures that governance is applied precisely where it matters  -  at the point of execution  -  rather than carried broadly across unrelated work.</p>
<p>This is not a static configuration. It is a dynamic composition of guidance that reflects both global standards and local nuance  -  applied at the moment work is performed.</p>
<hr />
<h3>Redefining Contribution in AI Systems</h3>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/7f4d658b-7bcb-42bd-9728-b8983023b4ea.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Same Skill, Different Context, Different Outcome</p>
</blockquote>
<p>This model changes how individual contribution is defined.</p>
<p>In traditional workflows, contribution is measured by the artifacts a person produces. As execution becomes increasingly automated, that definition breaks down. The value is no longer limited to the output itself, but to the context that shapes how that output is generated.</p>
<p>In this system, individuals do not just produce results. They define how results are produced.</p>
<p>By encoding their judgment, preferences, and domain knowledge into their own context layer, their contribution persists across every task they perform. It compounds over time, shaping the behavior of otherwise generic capabilities and producing outputs that reflect their expertise rather than replacing it.</p>
<p>At the same time, this model does not require that expertise to be centralized. Individuals retain control over what remains local and what is contributed upstream. This preserves autonomy while still allowing collective improvement.</p>
<p>The result is a system where expertise is not embedded in isolated artifacts, but continuously applied - visible in every outcome, without needing to be manually reintroduced.</p>
<hr />
<h3>Conclusion: Context Defines Behavior</h3>
<p>As AI systems take on a larger role in execution, the question is no longer what they are capable of, but how their behavior is shaped.</p>
<p>Systems that treat context as incidental will produce outputs that are technically correct but operationally inconsistent. Systems that embed context directly into tools will fragment a s variation accumulates. Neither approach can sustain scale.</p>
<p>What is required is a model in which context is not an afterthought, but the primary mechanism of control.</p>
<p>This is not a new idea. It is how complex systems have always operated - through layered authority, dynamic composition, and context applied at the moment of action. AI systems have simply lacked this layer.</p>
<p>The result is a shift in how we think about execution itself.</p>
<p>Capabilities no longer define behavior. Context does.</p>
<p>Governance is no longer enforced by the system. It is understood by the model.</p>
<p>And scale is no longer achieved by standardizing tools, but by shaping the context in which those tools operate.</p>
<p>Once this layer exists, the problem changes.</p>
<p>The question is no longer how to build better capabilities.</p>
<p>It is how to define the context that makes those capabilities behave correctly  - every time, across every environment, for every user.</p>
<p>That is the system.</p>
<p>That is how AI behaves consistently at scale.</p>
]]></content:encoded></item><item><title><![CDATA[You Don’t Need an Agent for That]]></title><description><![CDATA[Most AI agents aren’t autonomous systems - they’re deterministic workflows with targeted inference. Learn when software should own orchestration, and when…]]></description><link>https://davecoleman.hashnode.dev/you-don-t-need-an-agent-for-that</link><guid isPermaLink="true">https://davecoleman.hashnode.dev/you-don-t-need-an-agent-for-that</guid><category><![CDATA[ai agents]]></category><category><![CDATA[Prompt Engineering]]></category><category><![CDATA[Orchestration]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[David Coleman]]></dc:creator><pubDate>Sun, 10 May 2026 06:15:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/122ebcdd-382e-4430-a1ed-f43aa429847b.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every week, another framework promises autonomous agents that plan, reason, reflect, and act.</p>
<p>But after building production AI systems inside enterprise engineering workflows, I keep coming back to a simpler observation:</p>
<p>Most “agents” aren’t autonomous systems.</p>
<p>They’re deterministic workflows with probabilistic branching.</p>
<p>Or, as Inigo Montoya might say:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69f96e0b46610fd6065e1ad8/1bc142f7-6e59-44b1-899e-4420860b46f5.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p><em>“You keep using that word. I do not think it means what you think it means.”</em></p>
</blockquote>
<hr />
<h3>What does "Agent" mean?</h3>
<blockquote>
<h5><strong>agent</strong></h5>
<h6>/ā′jənt/</h6>
<h6><strong>noun</strong></h6>
<ol>
<li><p>One that acts or has the power or authority to act.</p>
</li>
<li><p>One empowered to act for or represent another.</p>
</li>
<li><p>A means by which something is done or caused; an instrument.</p>
</li>
</ol>
</blockquote>
<p>Clearly it is obvious why we have chosen the word "agent". We are constructing prompts and systems to perform work for us.</p>
<p>In AI, and in software in general, an "agent" is defined as:</p>
<blockquote>
<p><strong>a software system that autonomously perceives its environment, makes decisions, and takes actions to achieve specific goals with minimal human intervention</strong></p>
</blockquote>
<p>Stop. Read that. Now read it again. Notice what is NOT there. It never says AI. It never says LLM. It never says model. It says "a software system". Can this software system use AI? Absolutely. Must it?</p>
<p>No.</p>
<h3>An Agent does work for you. That's it.</h3>
<p>Does it have to be a fancy ai model that spends 1k tokens per second to process some data that you can <code>jq</code> on the command line? Sure. It can be. But should it?</p>
<p>Does it have to dynamically write python based on a prompt that says "examine the state of my system, and call my jenkins end point and if there are failing jobs, and they have failed more than 5 times parse their logs?". Sure. But should it?</p>
<p>Once more for the folks in the back: no.</p>
<h3>Don't ask the model to do what you can do better</h3>
<p>This isn't about tokens. This is about common sense. You want to agentify a workflow? Fabulous. You know exactly what you want it to do.</p>
<p>Write that code.</p>
<p>When you cannot efficiently perform a task statically, that's when you call for backup. Ask the model. Do some inference. Build a targeted prompt. Give it exactly the context it needs. </p>
<p>It doesn’t benefit from inheriting every tool call, every log, and every piece of system state. It certainly doesn’t benefit from ten minutes of token burn in KV cache. In fact that often has the opposite effect. The model is far more likely to try to optimize for some result it infers from the progression of that huge leadup. Or, in other words: hallucinate. Most often hallucination comes from muddy context.</p>
<h3>Your “Always-On Agent” Is Probably a Webhook</h3>
<p>Lately the hype has shifted. Not just agents, now it's "always on agents". Agents that monitor your repos. Watch your pipelines. Track your incidents. Review your pull requests. Work while you sleep.</p>
<p>Sounds impressive, doesn't it?</p>
<p>But here’s the uncomfortable truth: This isn’t new. We’ve been building event-driven systems for decades. The only difference is that now we sometimes insert inference into the chain.</p>
<p>A pull request opens. A CI build fails. A queue receives a message. A cron job wakes up.</p>
<p>In other words: software happened.</p>
<p>Not an agent sitting in a dark room “thinking.” Not a model continuously reflecting on your infrastructure. Just an event-driven system doing what software has done well for decades.</p>
<p>And yes, we can absolutely push this further.</p>
<p>We can hand the model the keys and make it the orchestrator:</p>
<pre><code class="language-markdown">You are an autonomous build monitoring agent.
Check Jenkins for failed jobs.
If a job has failed more than 5 times:
  - Fetch the last 100 log lines
  - Compare with previous failures
  - If the failures are similar, notify the owning team
  - If the failures differ, open an investigation issue

If no failures exist:
  - Sleep and check again in 5 minutes
</code></pre>
<p>Can an LLM do this?</p>
<p>Absolutely.</p>
<p>Modern models are surprisingly good at tool calling, branching logic, and dynamic execution planning.</p>
<p>But here’s the uncomfortable question:</p>
<p>Why are you asking a probabilistic system to perform deterministic orchestration?</p>
<p>Polling.<br />Branching.<br />Retries.<br />Threshold checks.<br />Ownership routing.<br />Backoff.<br />Circuit breaking.</p>
<p>These are not "unsolved AI problems".</p>
<p>These are software engineering problems. And software already solves them extremely well.</p>
<p>Every time you move deterministic control flow into a model, you introduce:</p>
<ul>
<li><p>more latency</p>
</li>
<li><p>more cost</p>
</li>
<li><p>more nondeterminism</p>
</li>
<li><p>more debugging complexity</p>
</li>
<li><p>more opportunities for hallucinated control flow</p>
</li>
</ul>
<p>So where should the model live?</p>
<p>Not here:</p>
<p><code>LLM → Observe → Branch → Retry → Decide → Route</code></p>
<p>But here:</p>
<p><code>Code → Observe → Filter → Branch → LLM → Directional Inference → Code</code></p>
<blockquote>
<p>Let software own the workflow. 
Let the model own the ambiguity.</p>
</blockquote>
<p>That’s where AI starts becoming leverage instead of theater.</p>
<h3>Stop Paying Inference Tax For Deterministic Logic</h3>
<p>You know the drill. You write a prompt. Your agent starts to work, and you watch your tokens drip drip drip away. And somewhere in that process you start to notice: "gee did it really just cost 1k tokens to do a git pull?". Yes. Yes it did.</p>
<p>Every time you move deterministic control flow into a model, you pay an inference tax:</p>
<ul>
<li>latency</li>
<li>cost</li>
<li>nondeterminism</li>
<li>observability gaps</li>
<li>harder incident debugging</li>
</ul>
<p>Do you really want to spend tokens and introduce complexity for a task that you can do reliably, repeatably, and more quickly - for free?</p>
<p>Or do you want to take that process, and use ai to build a script that delegates to llm calls when inference is the only solution? Spend those tokens once, build a bash script. a node script, a python script. A combination of the 3, leverage node for json, leverage python for strings, leverage bash for cli delegation.</p>
<p>Write software.</p>
<p>Then you can define a skill. the skill says a few short lines:</p>
<pre><code class="language-markdown">I am an orchestration agent for the Acme Corp Code Builder:
I am fired by the git commit action:
run the ./build.sh script
```sh
./build.sh &gt; build.log
```

if we have failures, run ./analyze-build-failures.sh
```sh
./analyze-build-failures.sh build.log &gt; actions.json
```
review actions.json. take the actions recommended.
...
etc
</code></pre>
<p>In each of these scripts, you use static code to do any static steps. Why? because it's free. Can an AI do it? Sure, for a price. For a few hundred or thousand tokens.</p>
<p>But when you have genuinely probabilistic work:</p>
<pre><code class="language-javascript">  const response = await client.responses.create({
    model: "gpt-5",
    input: `
You are a senior SRE.

Analyze these repeated CI failures and tell me:

1. Are these likely infrastructure issues, test flakiness, or code regressions?
2. What should an engineer check first?

Jobs:
${JSON.stringify(concerningJobs, null, 2)}
`
  });
</code></pre>
<p>Now your AI is doing exactly what AI is built for. Making inferences. Making judgment calls. Augmenting your deterministic code with the power of AI.</p>
<hr />
<h3>You need software for that</h3>
<p>So, no, you didn't need an "agent" for that. You needed software for that. Software that leverages AI in exactly the right place to make the jump from "cool script" to "system critical sentinel"</p>
<p>Is it still "an agent"? Sure. But it's an "ai agent". It's an ai-augmented software agent. A proven software architecture — now augmented with targeted inference where judgment actually matters.</p>
<p>The next time someone says, “We need an agent for this.”
Ask a simpler question first:</p>
<p>Do we need an agent?
Or do we just need better software?</p>
<p>Often, once you distill all the hype, the answer is "we need SOFTWARE for this!"</p>
]]></content:encoded></item></channel></rss>