<?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: Austin Vance</title>
    <description>The latest articles on DEV Community by Austin Vance (@austinbv).</description>
    <link>https://dev.to/austinbv</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F305023%2Fc978f899-9fa5-4b1e-9ad9-e3f60313fd65.jpeg</url>
      <title>DEV Community: Austin Vance</title>
      <link>https://dev.to/austinbv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/austinbv"/>
    <language>en</language>
    <item>
      <title>Agentic Software Engineering Makes Human Context the Budget</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Tue, 04 Aug 2026 17:37:06 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/agentic-software-engineering-makes-human-context-the-budget-1mfb</link>
      <guid>https://dev.to/focused_dot_io/agentic-software-engineering-makes-human-context-the-budget-1mfb</guid>
      <description>&lt;p&gt;Agentic software engineering is moving the bill into human context.&lt;/p&gt;

&lt;p&gt;Code is coming faster, pull requests are piling up faster and validation work lands in ever larger piles of judgment work that still need to be handled by people.&lt;/p&gt;

&lt;p&gt;This feeling has been captured by Honeycomb’s Douglas Soo in his August 3 piece, “LLM-driven development: the exhaustion of context switching for senior engineers, and anxiety of growth for junior engineers”. He writes that while agentic software engineering has the potential to increase the amount of software that is developed by engineering teams, it has the risk of &lt;a href="https://www.honeycomb.io/blog/spend-more-time-talking-to-humans" rel="noopener noreferrer"&gt;shipping more software while understanding less about the software that is being developed&lt;/a&gt;. He writes that in LLM-driven development, “context transfer” becomes an expensive part of the engineering loop. The old software development rhythm of Design, Implementation, Validation, Operation (DIVO) is being compressed in implementation time in the new rhythm of design, implementation and validation in agentic software engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generative AI software development burns human context first
&lt;/h2&gt;

&lt;p&gt;The old software development process had a bias towards the time it took to actually implement the software. So after the team had done a bit of design, the team spent longer writing the code for that design, then there would be code reviews to validate that the code written by the author(s) of the software was suitable for real traffic. After that the software would go live and then the team watched for operational problems, and that in turn would be used for design, implementation, validation and operation of the subsequent versions of the software. This process in software development has been referred to as DIVO, Design, Implementation, Validation, Operation.&lt;/p&gt;

&lt;p&gt;This change in software development is important because the cheap part (implementation) and the scarce part (context) have traded places.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dxbfmwaxjvf70dx8rv7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dxbfmwaxjvf70dx8rv7.png" alt="Side-by-side engineering lifecycle showing implementation shrinking while validation and context transfer expand." width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Implementation shrinks, but the context and validation loop gets heavier.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As we outlined before, &lt;a href="https://focused.io/lab/context-will-replace-your-design" rel="noopener noreferrer"&gt;context also becomes part of the design surface&lt;/a&gt;. So, within the boundaries of an agentic software engineering project, agents can only process as much context as has been previously stored in and connected between documents, tests, traces, ticket entries, comments, examples and a repository’s overall coding structure. A senior engineer later will have to actually re-construct the agent-shaped system around all those agents and contexts.&lt;/p&gt;

&lt;p&gt;It’s an engineering culture problem with an architecture spine, therefore, the limiting resource is no longer keystrokes, but the transfer of judgment to and from the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost model finally has names
&lt;/h2&gt;

&lt;p&gt;Story points have always been sort of fuzzy. Agentic software engineering makes them even fuzzier.&lt;/p&gt;

&lt;p&gt;In the “A Cost Estimation Model for Agentic Software Engineering” paper, the ACEM authors say traditional cost models such as COCOMO II, Function Points, and Story Points assume that software cost is mainly human labor across design, coding, and testing. As software development becomes more agentic, human effort shifts toward planning, specifying, architecting, and validating agent output, while the budget absorbs &lt;a href="https://arxiv.org/abs/2608.02582v1" rel="noopener noreferrer"&gt;LLM tokens, human-in-the-loop oversight, and orchestration infrastructure&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That framework is useful. First, it is easy to quantify the cost of token spend for an LLM. Then, the cost of the human oversight can be hand-waved away by stating that the already existing review process covers this. And last, but not least, the costs of the required infrastructure can be hidden in the agentic software engineering harness and all the additional layers such as sandboxes, eval runners, trace stores, routing layers, CI minutes, and permission layers. The improved way of speaking about the multipliers for the agentic software engineering cost estimation is by stating Revision Factors, Context Factors, and HITL Intensity Scores.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjmwm547s2p7twk0ldh87.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjmwm547s2p7twk0ldh87.png" alt="Stacked cost model for agentic software engineering showing token, human oversight, and infrastructure costs with revision and context amplifiers." width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Token spend is only one layer of the agentic engineering bill.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Yes. The ACEM paper is early and has constants that are symbolic. The important part is that the authors assert that the cost estimation model presented in the paper has &lt;a href="https://arxiv.org/abs/2608.02582v1" rel="noopener noreferrer"&gt;not yet been validated against real project data&lt;/a&gt;, a point worth reiterating in order to keep other people from using this work in a mistaken fashion and prematurely to estimate the costs of agentic software engineering.&lt;/p&gt;

&lt;p&gt;Quit pretending the following costs do not exist and start measuring them inside the organization.&lt;/p&gt;

&lt;p&gt;Also note that count of retries that change direction (as opposed to just more of the same) will be relatively high. So too will be count of review passes that find product misunderstandings (as opposed to simple syntax errors). There will be high count of time spent by engineers in explaining why a 'cleaner' abstraction actually violates an operational invariant. High count of instances where a reviewer cannot approve a change because the relevant branch does not have relevant traces, screenshots, migration plans, or rollback plans (i.e., they are not able to make sense of the change).&lt;/p&gt;

&lt;p&gt;These are the true costs of agentic software engineering, costs that should be incorporated into the budget for agentic software engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context transfer is runtime state
&lt;/h2&gt;

&lt;p&gt;Agents also use organizational state to generate code.&lt;/p&gt;

&lt;p&gt;To my knowledge, this is the formal version of the problem description given in the paper on Context Compaction Theory. Note that in modeling tasks that are to be carried out by coding agents, model calls have bounded context windows. Therefore, agents have to compact the context states that they accumulate while working on a task. They do so by either selecting parts of the state and generating a summary or by generating a summary right away. The two games that are modeled in the above paper are a Context Selection Game and a Context Generation Game. It is then possible to relate generation to &lt;a href="https://arxiv.org/abs/2608.01326v1" rel="noopener noreferrer"&gt;one-way communication complexity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That sounds abstract because it is. Still useful.&lt;/p&gt;

&lt;p&gt;Every team is already running a human version of this game. Senior engineers join conversations, ask questions like “What matters here?” and help to steer the conversation in the right direction. Reviewers decide which files to open, which logs to trust and which product edge cases smell wrong. When writing a PR description, deciding what to put in a ticket and what to delete from chat, teams are making decisions about what matters and what doesn’t.&lt;/p&gt;

&lt;p&gt;Stale system knowledge costs. We’ve already established how &lt;a href="https://focused.io/lab/documentation-drift-breaks-coding-agents" rel="noopener noreferrer"&gt;documentation drift affects the use of coding agents&lt;/a&gt;, but the same drift to documentation affects humans in the same workflow. So an agentic coding workflow that is based on a poor representation of the current system will lead to problems, not just for the agents but for the humans too in the same workflow. The agent follows the out of date README. The reviewer has the current state of the live system in their heads. The junior engineer does a diff to find out what’s changed and learns a new rule that’s actually wrong.&lt;/p&gt;

&lt;p&gt;This is where agentic software engineering can become uncomfortable. A team can be able to produce more code, but at the same time reduce the shared understanding of a team. The throughput graph for such a team can look great, but when the live system asks a question that no one can answer, then there is a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make context a build artifact
&lt;/h2&gt;

&lt;p&gt;Package the context where the work happens.&lt;/p&gt;

&lt;p&gt;So instead of documentation as tedious implementation detail, we turn repeated human explanations into artifacts (as mentioned above) to support the agentic engineering loop.&lt;/p&gt;

&lt;p&gt;This is also the humane version of pairing in the LLM era. Honeycomb argues that LLM-based development moves pairing away from typing code together and toward rapid design and validation in a “rapid feedback” style, with senior engineers modeling judgment and junior engineers driving the actual implementation. That beats generating a huge number of PRs and reading comments on each of them &lt;a href="https://www.honeycomb.io/blog/spend-more-time-talking-to-humans" rel="noopener noreferrer"&gt;after they’ve been put in the queue and fallen far behind&lt;/a&gt;. Queue-backed review comments are not mentorship just because the diff came from an agent.&lt;/p&gt;

&lt;p&gt;A technical approach would be to code up an ‘AtumAI’ style agentic approach to generating datacenter control plane policies. Such an approach would first compile natural language goals into formal specifications of objectives, constraints, decision variables and an evaluation methodology. It would then search for solutions to the formalized problem. In evaluations of such approaches, it has been found that the policies generated by agents for control of datacenter control planes outperform the same policies that have been hand-engineered by experts in terms of various metrics for use in workload placement, for scaling of computer resources, and for management of power in datacenters &lt;a href="https://arxiv.org/abs/2608.02569v1" rel="noopener noreferrer"&gt;in AtumAI’s evaluation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a narrow test, but it illustrates an important point. In general, the more context an agent gets about the world it is acting in, the better it will become. This is particularly the case when the prompt that is given to the agent is not as good as a specification, for example. The cleverly worded prompt is not as good as the eval. The heroic reviewer of the diff is not as good as a workflow that records why a change is safe.&lt;/p&gt;

&lt;p&gt;When a pattern repeats, promote the behavior into deterministic execution. I have previously noted that exploration should turn into &lt;a href="https://focused.io/lab/agentic-workflows-should-get-less-agentic" rel="noopener noreferrer"&gt;straightforward coding work&lt;/a&gt; when the shape is known. The same thing applies to engineering culture. If a senior engineer explains the same operational invariant for the third time, stop burning senior attention on rediscovery. Put that invariant in code, tests, agent instructions, and review checks where it can be found again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership survives by becoming explicit
&lt;/h2&gt;

&lt;p&gt;Agentic coding means branch sprawl and weak ownership.&lt;/p&gt;

&lt;p&gt;The better bargain is boring. Fewer disconnected work streams. Stronger handoff artifacts. &lt;a href="https://focused.io/lab/ai-agent-testing-runs-on-failure-traces" rel="noopener noreferrer"&gt;Live traces that feed back into the next prompt, test, and acceptance criterion&lt;/a&gt;. Review that asks whether the code meets product intent, whether it is safe to operate, and whether the work captured enough learning to make the next run cheaper.&lt;/p&gt;

&lt;p&gt;Process evidence matters here. The ACWorld paper on agentic commerce found that final state alone can miss evaluated errors, while incomplete trajectories still hold useful signals. Its environment validates actions before shared state changes and records interactions for reproducible evaluation of &lt;a href="https://arxiv.org/abs/2608.02441v1" rel="noopener noreferrer"&gt;ongoing transactions&lt;/a&gt;. Software teams have the same problem in a less exotic outfit. A green merge is a final state. The interesting evidence lives in the path: what the agent tried, what the reviewer rejected, which assumption changed, which trace proved the fix, which rollback path exists.&lt;/p&gt;

&lt;p&gt;Software engineering with agents will reward those teams who treat the human context in their process as scarce runtime input. Thus, it should be spent where necessary i.e. where high quality judgment is required. All other situations where similar explanations are needed in the future can be saved by turning them into artifacts that can be used by the agents as well as by the human for verification.&lt;/p&gt;

&lt;p&gt;So fast as to be worth only one line in a software engineering budget, implementation speed!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Agent Governance Gets Audited in the Trace | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Sat, 01 Aug 2026 22:57:45 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/ai-agent-governance-gets-audited-in-the-trace-focused-labs-4n31</link>
      <guid>https://dev.to/focused_dot_io/ai-agent-governance-gets-audited-in-the-trace-focused-labs-4n31</guid>
      <description>&lt;p&gt;New delays in the AI Act mean teams will be lazy in exactly the wrong place.&lt;/p&gt;

&lt;p&gt;The date moved, but the work did not. For those of us building agents in a regulated environment, the work of runtime proof has not changed. It is boring and specific: model, tool, policy, human in the loop, trace for receipt.&lt;/p&gt;

&lt;p&gt;The latest update of the EU Commission on the AI Act Overview (July 31) sets the following dates for rules and duties for the development and deployment of AI: transparency rules for AI systems apply from August 2, 2026 onwards (Annex II, AI Omnibus, Commission’s 31 July update &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai" rel="noopener noreferrer"&gt;in the Commission's 31 July update&lt;/a&gt;); Annex III high-risk obligations enter into force on December 2, 2027 (Annex III high-risk AI, &lt;a href="https://ai-act-service-desk.ec.europa.eu/en/faq" rel="noopener noreferrer"&gt;under the AI Act definitions&lt;/a&gt;); embedded high-risk product obligations enter into force on August 2, 2028.&lt;/p&gt;

&lt;p&gt;Fine. The panic date shifted.&lt;/p&gt;

&lt;p&gt;The engineering problem got more concrete.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfeejamekr8apbhvjhrg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfeejamekr8apbhvjhrg.png" alt="Timeline showing EU AI Act enforcement milestones for AI agents and where runtime evidence work fits." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The delay changes the calendar. It does not change the evidence architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deadline moved, the evidence burden stayed
&lt;/h2&gt;

&lt;p&gt;A spreadsheet represents poor AI governance. It outlines all of the ‘agents’ i.e. processes that the AI is executing and attributes a policy owner to each of the ‘agents’ as well as outlines the associated risks. The board is told that there is a program of work going on in order to implement the required governance.&lt;/p&gt;

&lt;p&gt;Just as a fire escape plan is useful as a map that accompanies the team on the run, not just as a document hung on a wall, a spreadsheet inventory of agents and their associated policies, risk, and board reporting ultimately becomes theater when there is no way to connect it to the actual run of business.&lt;/p&gt;

&lt;p&gt;Connecting governance to execution path for AI systems (&lt;a href="https://digital-strategy.ec.europa.eu/en/library/guidelines-transparency-obligations-providers-and-deployers-ai-systems" rel="noopener noreferrer"&gt;for providers and deployers of AI systems&lt;/a&gt;) is the whole game. By 2 August 2026 Article 50 obligations for transparency will apply to providers and deployers of AI systems. Public disclosure for chatbots, run-level reconstruction for agents.&lt;/p&gt;

&lt;p&gt;What did the agent tell the person? What content did it generate? Which downstream system did it touch? Was the user aware that a machine was involved? Which runtime version made the decision?&lt;/p&gt;

&lt;p&gt;Policy documents do not reconstruct a tool call.&lt;/p&gt;

&lt;p&gt;A governance process that cannot see the execution path of a system cannot apply policy effectively. It is essentially applying policy blindfolded. This is why I keep coming back to the same governance shape: &lt;a href="https://focused.io/lab/ai-agent-governance-follows-the-execution-path" rel="noopener noreferrer"&gt;governance follows the execution path&lt;/a&gt;. The relevant policy layer is around identity, tools, state, approval, trace, and outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents turn compliance into an execution problem
&lt;/h2&gt;

&lt;p&gt;Software governance used to be made up of a comfortable fiction. The approved code path was the behavior of the service. It accepted input and ran through deterministic logic. It might hit a database or two, but in the end it produced output. The audit record for all that activity would sit at the edge as deploy tickets, access reviews, log lines and incident reports.&lt;/p&gt;

&lt;p&gt;Agents make that fiction expensive.&lt;/p&gt;

&lt;p&gt;In complexity, an agent uses tools, sets input arguments and possibly asks for a human intervention. In the process of generating output for the user, it can also potentially disclose information. The same prompt will travel through different trajectories in complex systems, because the context, which was retrieved, changed, a model provider changed behavior or a conversation state crossed a threshold.&lt;/p&gt;

&lt;p&gt;A recent post by Honeycomb goes into more detail about how to monitor AI systems for reliability, and clearly outlines how request-level context, model versions, retrieval results, and tool calls influence whether an AI system will work, and how failures in AI systems are to be analyzed and debugged within a single request &lt;a href="https://www.honeycomb.io/blog/observability-vs-monitoring-for-ai-systems" rel="noopener noreferrer"&gt;inside the actual request&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The compliance version of this also holds. A clean monthly report does not tell the team why one instance of running an agent revealed salary history to the wrong people. A policy committee cannot figure out if the proper data minimization checks were made. A risk taxonomy does not establish if a human had the appropriate authority to interrupt a process.&lt;/p&gt;

&lt;p&gt;The trace has to carry that work.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhuu63pad0734p5my67d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhuu63pad0734p5my67d.png" alt="Flow diagram showing an AI agent runtime evidence pipeline from tool call through policy checks, human approval, trace storage, monitoring, and audit export." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Governance has to be captured at the moment of action.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trace is becoming the compliance surface
&lt;/h2&gt;

&lt;p&gt;The record-keeping article of the AI Act matters here. Article 12 defines how high-risk AI systems shall technically allow automatic recording of events over the lifetime of the system. Such logs shall support risk identification, post-market monitoring and operation monitoring by means of traceability &lt;a href="https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-12" rel="noopener noreferrer"&gt;through traceability&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Article 12 reads like law but behaves like an architecture spec for live AI systems.&lt;/p&gt;

&lt;p&gt;The live agent trace cannot be defined by prompt, completion and latency. The trace needs to follow the steps inside the AI agent's runtime: identity of the AI agent, delegated human user, tool used, resources touched, policy version, policy decision, evaluator result, human approval or rejection, output hash, model version, retrieval set and result status.&lt;/p&gt;

&lt;p&gt;This turns the runtime state layer into a governance layer (as previously explored and mapped &lt;a href="https://focused.io/lab/ai-agent-infrastructure-is-splitting-at-the-state-layer" rel="noopener noreferrer"&gt;state layer where audit records accumulate&lt;/a&gt;) as audit records (including checkpoints, memory, trace IDs, policy decisions, and evaluator results) start to collect in an operational zone where said governance can either be searched evidence or become narrative archaeology.&lt;/p&gt;

&lt;p&gt;C-Trace, a runtime compliance verification framework for AI agents, already looks at ways to transfer consent, purpose, data minimization and erasure as predicates over an execution trace for AI agent applications. The trace is generated by intercepting the tool invocations and model outputs of an AI application. Non-compliant actions are blocked. An audit log is created. Under perfect extraction, the system reports 0% attack success. Under 10% extractor noise, the system keeps attack success at or below 12%. The system keeps false positives at or below 16%. This is the result of an evaluation by the authors &lt;a href="https://arxiv.org/html/2606.19242v1" rel="noopener noreferrer"&gt;in the authors' evaluation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The interesting part: the AI Act can be monitored in real time as the run happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Human oversight is a runtime event
&lt;/h2&gt;

&lt;p&gt;Teams treat human oversight, and the related implementation into policy, as if it were only to do with the required staffing for implementing that policy. Name a human and assign a control.&lt;/p&gt;

&lt;p&gt;Article 14 is more operational than the staffing slide. The Service Desk says oversight measures should enable assigned individuals to understand system capabilities and limitations, monitor operations, interpret outputs, override or reverse outputs, and interrupt the system by way of a stop button or similar procedure &lt;a href="https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-14" rel="noopener noreferrer"&gt;that brings the system to a safe state&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So that's an agent runtime. An approval is a state transition. An override is a recorded decision with actor, authority, input, output, and consequence. An interrupt is control flow.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://focused.io/lab/ai-agent-governance-runs-before-the-tool-call" rel="noopener noreferrer"&gt;policy before the tool call&lt;/a&gt; comes in. Human oversight after the tool has already mutated a record is cleanup activity. Human oversight before risky activity is governance. The trace should clearly show this.&lt;/p&gt;

&lt;p&gt;A lending agent can draft a credit recommendation. A human reviewer can approve, edit, or reject it. A healthcare triage agent can summarize patient history. A supervisor can stop an escalation. A support agent can prepare a deletion workflow. A privacy owner can verify scope before execution.&lt;/p&gt;

&lt;p&gt;These decisions should also be captured as first-class events in the audit trail and not as after-the-fact comments in a case-management system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Post-market monitoring is the part teams skip
&lt;/h2&gt;

&lt;p&gt;The delayed high-risk dates will tempt executives to punt. Post-market monitoring has to become an operational habit before it becomes a compliance obligation.&lt;/p&gt;

&lt;p&gt;Article 72 says providers of high-risk AI systems must establish and document a post-market monitoring system that actively and systematically collects, documents, and analyzes relevant performance data throughout the system lifetime &lt;a href="https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-72" rel="noopener noreferrer"&gt;to evaluate continuous compliance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That phrase, throughout the system lifetime, carries the operational burden.&lt;/p&gt;

&lt;p&gt;An agent changes after launch. A model changes after launch. A retrieval corpus changes after launch. A tool schema changes after launch. A permission boundary changes after launch (loosen up). A user cohort discovers a new path. The test cases never covered that new path. But one evaluator score means customer harm, the other score means no harm. The organization learns something new.&lt;/p&gt;

&lt;p&gt;The important thing: post-market monitoring as a feedback loop. Trace samples from the field are used for evaluation. If the evaluation detects drift, then incidents are replayed and then used as test cases in release gates. The new runtime checks that are developed as part of the release gate process result in the agent getting safer and safer as more evidence is developed and flows in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://focused.io/lab/ai-agents-in-finance-live-or-die-by-runtime-receipts" rel="noopener noreferrer"&gt;Runtime receipts&lt;/a&gt; are critical to financial workflows. A regulated workflow cannot be reduced to a summary of the overall performance of an agent. Rather, the review of such a workflow consists of a receipt containing a description of the action, the authority, the data, the approval, the outcome and the correction path.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an audit packet contains
&lt;/h2&gt;

&lt;p&gt;A full trace is too much for a reviewer to go through and a log line is too little detail to go by. A useful artifact for a reviewer is an audit packet cut from the trace.&lt;/p&gt;

&lt;p&gt;For one agent action, that packet should contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent identity and runtime version.&lt;/li&gt;
&lt;li&gt;Delegated user or service principal.&lt;/li&gt;
&lt;li&gt;Session ID, &lt;a href="https://focused.io/lab/ai-agent-observability-runs-on-conversation-ids" rel="noopener noreferrer"&gt;trace ID&lt;/a&gt;, and parent action.&lt;/li&gt;
&lt;li&gt;Tool, resource, and operation requested.&lt;/li&gt;
&lt;li&gt;Purpose and data categories involved.&lt;/li&gt;
&lt;li&gt;Policy version, policy decision, and reason code.&lt;/li&gt;
&lt;li&gt;Evaluator scores or guardrail outcomes.&lt;/li&gt;
&lt;li&gt;Human approval, edit, rejection, or interrupt event.&lt;/li&gt;
&lt;li&gt;Output hash, result status, and downstream side effect.&lt;/li&gt;
&lt;li&gt;Retention rule, tombstone status, and export location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds like work until the first concrete question arrives.&lt;/p&gt;

&lt;p&gt;Note that the IETF Agent Audit Trail draft is an Internet-Draft and thus not a settled standard. However, for those interested in audit trail records from IETF software agents, this named the shape of JSON records containing the agent's identity, action taken, result of action, trust level, etc. that would form tamper-evident SHA-256 hash chains and optionally be ECDSA signed. JSONL, Syslog and CSV export are discussed as potential output formats for such records &lt;a href="https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-00.txt" rel="noopener noreferrer"&gt;as a proposed audit format&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There's no need to wait for the standard to finish. The field names will change, but the architectural boundary will not. So, for example, if an agent is doing work that could affect people, money, access to information, employment, health, credit or regulated data, that work should create a record that can withstand a hostile read of that record.&lt;/p&gt;

&lt;h2&gt;
  
  
  The teams that start now get a boring advantage
&lt;/h2&gt;

&lt;p&gt;The AI Act delay buys time for architecture, not time for governance-as-documentation theater.&lt;/p&gt;

&lt;p&gt;The next year should be boring work. Firstly, put trace IDs on every run of the system. Secondly, start to version policy decisions. Thirdly, start to capture human interrupts as control-flow events, and then preserve evaluator scores. Finally, start to export action packets, write retention rules, and then above all else, keep raw sensitive data out of records unless a reviewer truly requires it to be in there. Rehearse the audit query before the audit exists.&lt;/p&gt;

&lt;p&gt;This is the unglamorous side of ai agent governance. It will not demo well. Nobody claps for retention metadata.&lt;/p&gt;

&lt;p&gt;But by then, the reason for the decision may have been forgotten. The team without runtime evidence has to interview the system after the fact.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Agent Testing Runs on Failure Traces | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Mon, 27 Jul 2026 22:33:22 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/ai-agent-testing-runs-on-failure-traces-focused-labs-1lo5</link>
      <guid>https://dev.to/focused_dot_io/ai-agent-testing-runs-on-failure-traces-focused-labs-1lo5</guid>
      <description>&lt;p&gt;Agent tests should start from a failure under real traffic.&lt;/p&gt;

&lt;p&gt;Teams want to re-run the exact failure in the trace to test the agent. A test case, not a screenshot, not a dashboard page, not a Slack thread of people agreeing to “watch it.”&lt;/p&gt;

&lt;p&gt;That is where ai agent testing is heading. The useful unit of learning is no longer the benchmark score on Friday afternoon. It is the trace from a real run, turned into a verifier, owned by a team, and wired into the release path.&lt;/p&gt;

&lt;p&gt;I don’t see the mysticalness fading much more from ai agent testing, but the interesting step in LangChain launching the &lt;a href="https://www.langchain.com/blog/towards-automating-eval-engineering" rel="noopener noreferrer"&gt;Eval Engineering Skill&lt;/a&gt; is that the workflow now reads the repo, inspects the agent output, reads the traces, interviews the human who ran the task, and emits Harbor evals. The agent does not generate an opinion about quality. It generates a task the system can execute. The interesting part is that the agent is no longer only doing the work. It helps improve the engine that will run the next task.&lt;/p&gt;

&lt;p&gt;I wrote this months ago: &lt;a href="https://focused.io/lab/agent-traces-rewrite-the-harness" rel="noopener noreferrer"&gt;Traces collected from live agent behavior&lt;/a&gt; only become the basis for harness rewriting once an individual closes the loop from observed failure to change to the harness. This is fundamentally different from just trace storage, a pretty museum of weird agent behavior. Terrible for a test suite, nice for a touring show.&lt;/p&gt;

&lt;h2&gt;
  
  
  A score is a weak owner
&lt;/h2&gt;

&lt;p&gt;Evaluations of agents have carried too much emotional weight. There is a simple number that a model score and a human score (a “judge” in the evaluation lingo) by definition get. Follow that up with a benchmark suite that scores by a few points here and there, and everyone pretends that that score corresponds in a simple manner to how an agent will actually behave under real traffic.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;Failures under real traffic have names: The agent picked the wrong tool. The retriever returned outdated policy text to the agent. Subagent mismeasured the error. Workflow failed to include required human in the loop. Agent attempted to write after a timeout and as a result duplicated side effect of the write.&lt;/p&gt;

&lt;p&gt;An agent’s performance metric can improve in a benchmark setting while live traffic stays confusing. Conversely, a score does not say what broke. The trace says what is failing and why.&lt;/p&gt;

&lt;p&gt;That distinction matters because ownership starts at the failure mode. LangChain’s &lt;a href="https://www.langchain.com/blog/issuebench-how-we-evaluate-engine" rel="noopener noreferrer"&gt;IssueBench writeup&lt;/a&gt;, for instance, describes Engine processing batches of traces, then separating out the clean runs from the issue runs, and failing each of those into categories and attaching relevant traces to open issues or creating new issue cards for newly detected failures. In this way, the primary function of Engine’s input (traces) is turned into a usable stream of engineering work.&lt;/p&gt;

&lt;p&gt;That is a healthier direction for agentic engineering. The artifact has to route. A hallucination, a silent tool error, a missing feature, and a bad recovery path belong to different owners. If the eval cannot preserve this, the team will be left with noise instead of work.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://focused.io/lab/agent-failures-should-open-tickets" rel="noopener noreferrer"&gt;Agent Failures Should Open Tickets&lt;/a&gt;, we wrote the ticketing version of this rule: recurring live-system failures ought to become owned work. In other words, trace + hypothesis + regression check. The new wrinkle is that the ticket should point at an executable eval opened by the failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eval is a repo object
&lt;/h2&gt;

&lt;p&gt;“eval” is still widely used to mean a spreadsheet (e.g. a balance sheet), a prompt (e.g. discussion prompt) a judge configuration (e.g. the evaluation configuration for a Harbor task). So all this feels pretty amorphous and soft.&lt;/p&gt;

&lt;p&gt;A key distinction to keep in mind about Harbor artifacts is that they have boring form. The official &lt;a href="https://www.harborframework.com/docs/tasks" rel="noopener noreferrer"&gt;Harbor task documentation&lt;/a&gt; describes a task directory with &lt;code&gt;instruction.md&lt;/code&gt;, &lt;code&gt;task.toml&lt;/code&gt;, a container environment, solution files, and tests. The &lt;a href="https://www.harborframework.com/docs/core-concepts" rel="noopener noreferrer"&gt;core concepts documentation for Harbor&lt;/a&gt; says roughly the same thing: instruction, container environment, and test script.&lt;/p&gt;

&lt;p&gt;An agent failure that matters should translate to something tangible: an instruction to reproduce the failure, the environment where it happened, the tools and constraints the agent had, a fixture or trace link, a verifier, and an owner who decides what change is allowed to make the test pass.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooixbftdwpdpe40u4kb4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooixbftdwpdpe40u4kb4.png" alt="Flow diagram showing a live trace becoming a failure cluster, an owned issue, a Harbor eval, a harness change, a rerun, and a release gate." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trace matters when it becomes an executable artifact in the delivery loop.&lt;/p&gt;

&lt;p&gt;This is where the primary ai agent workflow conversation needs to get concrete and this is the concrete part: the soft path (agent runs, agent answers, team observes dashboard in a web UI) vs. the useful path (live trace turns into failure cluster turned into an owned issue turned into a Harbor eval turn into a harness change turn into a rerun turned into a release gate).&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks should change the harness
&lt;/h2&gt;

&lt;p&gt;The Deep Agents team is treating benchmarks similarly. In &lt;a href="https://www.langchain.com/blog/how-we-benchmark-deep-agents" rel="noopener noreferrer"&gt;How We Benchmark Deep Agents&lt;/a&gt;, LangChain describes moving toward end-to-end Harbor evals for longer running tasks, then using those results to inform harness tweaks like removing todo-list middleware or slimming down the system prompt.&lt;/p&gt;

&lt;p&gt;That is the right level of abstraction. The eval exists so &lt;a href="https://focused.io/lab/ai-agent-evaluation-steers-the-harness" rel="noopener noreferrer"&gt;evaluation steers the harness&lt;/a&gt; instead of decorating a model leaderboard.&lt;/p&gt;

&lt;p&gt;This is where “ai agent workflow automation” gets tricky to use as a term. Automation conjures up images of more things running automatically. But the reality is to automate the feedback loop (agent fails, get trace, eval fails, fix on main (patches to prompts, tools, routing, context, middleware, model choice, etc.) and then the build proves the fix stayed fixed).&lt;/p&gt;

&lt;p&gt;Deep Agents is a useful example because the harness is the product surface. A todo-list middleware seems benign until evals show that it distracts newer models or burns context. A longer system prompt looks safe until benchmarks show that it crowds out task instructions. A verifier that only checks the final answer looks fine until the trace shows that the agent skipped the required tool.&lt;/p&gt;

&lt;p&gt;The reason to keep running &lt;a href="https://focused.io/lab/ai-agent-evaluation-ends-too-early" rel="noopener noreferrer"&gt;evaluation after the release&lt;/a&gt; is that the data used for pre-release evaluation catches what the team had remembered to encode. And the traces from live evaluation catch what users, tools, permissions, and weird state transitions do to the plan after it has hit reality. Annoying. The job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphs help when the loop has state
&lt;/h2&gt;

&lt;p&gt;But for testing, graph-shaped agent systems make the story easier to follow. LangChain’s &lt;a href="https://www.langchain.com/blog/3-years-of-graph-engineering-with-langgraph" rel="noopener noreferrer"&gt;graph engineering essay&lt;/a&gt; describes LangGraph as a mix of deterministic paths and agentic steps, with nodes for work and edges for what happens next. The &lt;a href="https://docs.langchain.com/oss/python/langgraph/graph-api#send" rel="noopener noreferrer"&gt;LangGraph Graph API&lt;/a&gt; shows conditional edges routing from graph state and &lt;code&gt;Send&lt;/code&gt; fanning out work only known at runtime.&lt;/p&gt;

&lt;p&gt;That matters because agent failures happen across transitions. The agent performed the first step correctly, then retried the wrong thing. It found the right document and sent it to the wrong specialist. It asked for approval while a sibling branch kept writing. It recovered from a tool error by losing the original intent.&lt;/p&gt;

&lt;p&gt;A flat final-answer eval fails to capture that. A trace-linked task can assert the transition the agent took, and the verifier can check the produced artifact, issue category, approval state, absence of side effect, or route shape. That is closer to how agentic AI workflows break under real traffic.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgh4pf940mtuq8zflt1b3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgh4pf940mtuq8zflt1b3.png" alt="Anatomy diagram of an agent eval artifact with instruction, task config, environment, verifier tests, trace fixture, expected result, owner, and release gate." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An eval becomes useful when it has files, fixtures, a verifier, and an owner.&lt;/p&gt;

&lt;p&gt;There are failures worth capturing in an eval artifact and failures that can wait. The rule of thumb is to capture failures that would cost customer trust, failures that recur from the same root cause, and failures that teams argue about after the fix. Everything else can probably stay in triage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approval is part of the workflow
&lt;/h2&gt;

&lt;p&gt;GitHub’s new issue automation controls are a good adjacent signal to us. GitHub recently made a &lt;a href="https://github.blog/changelog/2026-07-23-agent-automation-controls-in-github-issues-in-public-preview" rel="noopener noreferrer"&gt;public preview available for agent automation in Issues&lt;/a&gt;. In this preview, the issue UI shows the rationale for label assignment, field assignment, issue type changes, closing, and assignment. Importantly, all of these approval panels, and associated automation, are merely workflow conveniences and do not map to any server-side security controls.&lt;/p&gt;

&lt;p&gt;A release gate should test what the system enforces, not what the UI suggests. If an approval panel holds a label suggestion, test the suggestion path versus the agent directly applying the change. Test the permission boundary. Test the side-effect boundary when the workflow says rejection means zero side effects.&lt;/p&gt;

&lt;p&gt;So, the release question is whether the trace, artifact, and verifier functioned properly under the same circumstances that previously failed.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://focused.io/lab/you-cant-just-trust-the-vibes-a-deep-dive-on-ai-evaluations-with-sarah-kainec" rel="noopener noreferrer"&gt;vibes are not an evaluation strategy&lt;/a&gt;. A person can like the demo. The dashboard looks great and the trend is up. The judge liked the final answer. The build still needs a particular failing case, and it must turn green when that failure mode is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the loop
&lt;/h2&gt;

&lt;p&gt;AI is simply another component in the larger engineering system. As &lt;a href="https://www.honeycomb.io/blog/shipping-is-your-companys-heartbeat-letter-from-cto" rel="noopener noreferrer"&gt;Honeycomb’s CTO recently wrote in a letter to customers&lt;/a&gt;, AI amplifies the engineering system as it exists. Good practices get amplified. Bad practices get amplified. Engineering rigor matters more when AI enters delivery, not less.&lt;/p&gt;

&lt;p&gt;A team with a healthy delivery system will turn traces into evals (because that is how the org already thinks, traces == evals). Failures create tests. Tests protect changes. Changes ship behind gates. Gates produce evidence.&lt;/p&gt;

&lt;p&gt;A team without this muscle simply want a better dashboard. They’ll call out an interesting trace from time to time, rename a category here or there, add a sentence or two to a prompt. And of course the same failure will recur with a new name, dressed up in a new set of slides or a new Slack thread.&lt;/p&gt;

&lt;p&gt;The engineering advantage is to treat every serious agent failure as a build opportunity. Mine the trace. Name the failure. Create the Harbor task. Assign an owner. Gate the release. Then use the release process to produce evidence that the fix held.&lt;/p&gt;

&lt;p&gt;Then the agent workflow learns from real traffic instead of it being something it tries to survive.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>testing</category>
    </item>
    <item>
      <title>AI Agents in Finance Live or Die by Runtime Receipts | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Thu, 23 Jul 2026 22:13:45 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/ai-agents-in-finance-live-or-die-by-runtime-receipts-focused-labs-33ni</link>
      <guid>https://dev.to/focused_dot_io/ai-agents-in-finance-live-or-die-by-runtime-receipts-focused-labs-33ni</guid>
      <description>&lt;p&gt;The board wants to see the bottom line of the RFP. Show the receipt.&lt;/p&gt;

&lt;p&gt;Financial services boards want to know what they get from the spend on AI in LangChain’s July post titled &lt;a href="https://www.langchain.com/blog/proving-the-roi-of-agentic-ai-in-financial-services" rel="noopener noreferrer"&gt;proving the ROI of agentic AI in financial services&lt;/a&gt;. In the case of agentic RFP responses, AML investigations, portfolio management workflows, and financial services compliance reviews, the work crosses documents, systems, approvals, policies, and people that are typically involved in such financial work.&lt;/p&gt;

&lt;p&gt;One dashboard showing total tokens / uptime will not cut it.&lt;/p&gt;

&lt;p&gt;Financial services already is stressful enough without questioning the value of AI. The data point: &lt;a href="https://www.snowflake.com/en/blog/financial-services-ai-roi-agentic" rel="noopener noreferrer"&gt;68% of the financial-services respondents who used generative AI in a recent Snowflake survey from Snowflake were able to quantify a positive ROI from the technology, with 30% currently using agentic AI in live workflows.&lt;/a&gt; &lt;a href="https://www.moodys.com/web/en/us/creditview/blog/agentic-ai-in-financial-services.html" rel="noopener noreferrer"&gt;Moody's says Research Assistant users consume 60% more research and cut task completion time by 30%&lt;/a&gt;. As a result, financial services moves out of novelty category for agentic AI and goes straight to hard work of proving the value.&lt;/p&gt;

&lt;p&gt;The hard part is proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agentic AI ROI starts with work receipts
&lt;/h2&gt;

&lt;p&gt;Agentic AI ROI quickly goes from clear to fuzzy as soon as teams start to measure the “wrong” unit. Spend is not value. Prompts are not work. A simple monthly usage graph proves activity. That’s to show a better board packet. (a pretty low bar).&lt;/p&gt;

&lt;p&gt;The unit is the completed work item.&lt;/p&gt;

&lt;p&gt;An RFP answer section is a work item. An AML alert disposition is a work item. A KYC exception package is a work item. A risk memo refresh is a work item with input data, a responsible agent, tool calls, model cost, human approvals, policy checks, writes to downstream objects, and so on, until a set of reviews culminates in an outcome for the item, the end result of the agent’s work. The end result has a set of receipts for the finance department (evals, traces, etc.). Each run of a work item through an agent’s tools generates one or more such end result receipts.&lt;/p&gt;

&lt;p&gt;That is the receipt.&lt;/p&gt;

&lt;p&gt;That connects to prior work on &lt;a href="https://focused.io/lab/enterprise-ai-agents-are-runtime-products" rel="noopener noreferrer"&gt;enterprise AI agents as runtime products&lt;/a&gt;. Finance needs the same owned boundary if it wants per-work-item proof.&lt;/p&gt;

&lt;p&gt;LangChain’s finance piece names RFP processing and AML compliance monitoring as agentic use cases, then connects ROI to observability, governance, and economic measurement in the same stack. The operational discipline is making every meaningful run leave a receipt as it executes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa5xnf7eyzysl63s83m6t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa5xnf7eyzysl63s83m6t.png" alt="Architecture diagram showing a financial services agent request flowing through an agent runtime into tools, databases, traces, side-effect receipts, a runtime ledger, and an evidence-backed KPI packet." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ROI proof is assembled while the agent runs, not after the fact in a spreadsheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The runtime is where the receipt gets written
&lt;/h2&gt;

&lt;p&gt;Whatever live agents execute is already in full view of the runtime, so hiding all that inside engineering tools is the self-inflicted wound here.&lt;/p&gt;

&lt;p&gt;An agent runtime handling real work knows the assistant, thread, run, input, tools, retries, costs, interrupts, stream events, and final state. &lt;a href="https://docs.langchain.com/langsmith/deployment" rel="noopener noreferrer"&gt;LangSmith Deployment describes its Agent Server execution model around assistants, threads, and runs&lt;/a&gt;, with durable execution, real-time streaming, and horizontal scaling for agent workloads. &lt;a href="https://docs.langchain.com/langsmith/agent-server-api/stateless-runs/create-background-run" rel="noopener noreferrer"&gt;The background-run API accepts metadata, context, webhooks, feedback keys, stream modes, and durability settings&lt;/a&gt;. That is enough surface area to attach business context before the work disappears into a trace search screen.&lt;/p&gt;

&lt;p&gt;The receipt for a run should be created before the moment the run is created (i.e. before the first tool is called in that run’s execution).&lt;/p&gt;

&lt;p&gt;Assign a task type to the run, attach the business object, cost center, policy, expected output contract, reviewer queue, and downstream system that the side effects will be written to. The runtime can then update the receipt as work is completed.&lt;/p&gt;

&lt;p&gt;For AI agents in finance, the receipt becomes the control surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  A receipt finance, risk, and engineering can read
&lt;/h2&gt;

&lt;p&gt;A runtime receipt is boring on purpose.&lt;/p&gt;

&lt;p&gt;That all gets recorded, and it is boring by design. There’s run ID and thread ID and task, data accessed, tool calls, model+token cost to run, latency to run, retries, approvals (and all the side-effect receipts), an evaluator score and a reviewer’s result, and business outcomes. For RFP sections we get to know if we’re accepting them with or without SME material re-write. For AML alerts they get escalated or closed or sent back for human review. For research memos they can be cited, rejected or re-written.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4ivmgh81q176rn57afe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4ivmgh81q176rn57afe.png" alt="Per-run receipt card listing run ID, thread ID, task type, model cost, latency, data touched, tool calls, approvals, side effects, evaluator score, and business outcome." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A receipt turns a trace into evidence finance, risk, and engineering can all read.&lt;/p&gt;

&lt;p&gt;For Engineering it is debug evidence, for Risk it is authority and data lineage, for Finance it is cost per accepted work item, and for Product it is adoption tied to outcome. This receipt answers different questions for the teams and does not force each to make up its own “truth” for how well things are working.&lt;/p&gt;

&lt;p&gt;Honeycomb has made similar observations in the past about Observability. As they put it in &lt;a href="https://www.honeycomb.io/blog/observability-are-you-measuring-what-matters" rel="noopener noreferrer"&gt;connect technical signals to business outcomes&lt;/a&gt;, because uptime, MTTR, and engineering productivity do not automatically yield a measure of what the business gets from the system. AI increases this already-substantial barrier, in that a healthy model, up service, etc. is not at all sufficient to guarantee that the agent using it will spend its time and money productively, or even at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://focused.io/lab/ai-agent-cost-is-a-runtime-signal" rel="noopener noreferrer"&gt;AI agent cost is a runtime signal&lt;/a&gt;, and its useful question is whether the agent’s work item can be replayed, judged, explained, and tied to business results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aggregate dashboards are too late
&lt;/h2&gt;

&lt;p&gt;They show spend by team, average latency, total runs, error rates, top agents, cost by model, and adoption trends. These are good to keep and to be proud of, but they are late by design, i.e. they cannot be used to prove the value of a single compliance-sensitive action.&lt;/p&gt;

&lt;p&gt;Averages hide important details, especially when it comes to individual expensive runs and costly rework caused by high adoption. The expensive run might be valuable to investigate deeply. The cheap run might be garbage. The agent with high adoption might cause rework, whereas the agent with low adoption is the one doing the riskiest work for the firm.&lt;/p&gt;

&lt;p&gt;The receipt is what lets the rollup make sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opentelemetry.io/blog/2026/otel-grad-now-what/" rel="noopener noreferrer"&gt;OpenTelemetry's graduation post&lt;/a&gt; is worth reading. Even though it’s talk of the future of telemetry and how to abstract it away from current vendor lock-in, it’s anchored firmly in current reality. OpenTelemetry is a graduated CNCF project and the maintainers point out that agent execution (running processes or containers) within agentic workflows (running workflows within workflow managers), and GenAI semantic conventions (as used by current AI and expected to be used in the future) are future workloads that OTel will be able to handle. Therefore, the receipt evidence that a run produced needs to be able to travel between all of the queues, databases, identity providers, SaaS APIs, and code review work-flows that the agent is executing in. The receipt cannot be locked in the private vocabulary of any single vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent work volume turns measurement into architecture
&lt;/h2&gt;

&lt;p&gt;Delegating work to agents as a regular part of one’s operating work is becoming operating volume, not a lab artifact. The recent Codex usage paper reported that &lt;a href="https://arxiv.org/html/2606.26959v1" rel="noopener noreferrer"&gt;active users grew more than fivefold in the first half of 2026&lt;/a&gt;. In addition, there are now more than 10% of users managing three or more agents in current active work at any time, and 26.6% of users using skills in their use of Codex for coding and other knowledge work.&lt;/p&gt;

&lt;p&gt;Parallel execution breaks casual measurement.&lt;/p&gt;

&lt;p&gt;The runtime needs to know what work item is currently active, which is pending approval, which handled customer data, which triggered follow-up jobs, which exceeded cost bounds, and which have side effects. &lt;a href="https://arxiv.org/html/2607.01641v1" rel="noopener noreferrer"&gt;A recent infinite-agent-loop paper found 68 confirmed failures across 47 projects&lt;/a&gt;. All of these failures can cause cost exhaustion, context growth, model denial of service, or repeated external side effects, and are caused by the iterations on the agent and its authority outpacing the system’s ability to observe its runtime behavior.&lt;/p&gt;

&lt;p&gt;The Agent libOS paper gets the systems shape right: long-running agents require &lt;a href="https://arxiv.org/html/2606.03895v1" rel="noopener noreferrer"&gt;process identity, parent-child lineage, lifecycle state, explicit capabilities, human queues, checkpoints, events, and audit records&lt;/a&gt;. In financial-services language that becomes identity, authority, state, approval, evidence, and accountability.&lt;/p&gt;

&lt;p&gt;Just as with money movement, &lt;a href="https://focused.io/lab/agentic-payments-move-spending-authority-into-the-runtime" rel="noopener noreferrer"&gt;spending authority moves into the runtime&lt;/a&gt; and therefore policy, approvals, receipts, and revocation need to be accounted for before the wallet signs the spending of tokens. The runtime should not simply spend tokens and hope finance reconstructs the value later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeated work should become measured paths
&lt;/h2&gt;

&lt;p&gt;The first version of the finance agent is an exploratory one. It will try out various tools, ask for more information here and there, fail evals (which it can recover from), request approval, and in the process learn which path is best.&lt;/p&gt;

&lt;p&gt;Then the repeated paths should harden.&lt;/p&gt;

&lt;p&gt;A weekly RFP process is not something that should stay in a loose agent loop forever. It’s a process of requirements extraction, approved-content retrieval, answers, citations, SME review, and packaging. And those should be a well defined process with well defined gates. (Even if there are also places for ambiguity).&lt;/p&gt;

&lt;p&gt;That is the point behind &lt;a href="https://focused.io/lab/agentic-workflows-should-get-less-agentic" rel="noopener noreferrer"&gt;agentic workflows getting less agentic&lt;/a&gt;. Repeated behavior of an agentic workflow should transform into an observable, doable, legible execution path (and remain agentic as soon as reality changes again). Likewise the ROI of a finance agent does not only grow as it becomes more agentic, it also grows as the agent’s work is first discovered, recorded, measured and then hardened.&lt;/p&gt;

&lt;p&gt;And, side-effect layer. As we’ve written about before, &lt;a href="https://focused.io/lab/ai-agent-orchestration-needs-a-side-effect-ledger" rel="noopener noreferrer"&gt;side-effect receipts&lt;/a&gt; are critical to enabling features like retry, compensation, and ownership tracking when various tools are orchestrating work that causes side effects by running to update live systems. For a finance agent, this would include updating CRM records, requesting documents, opening up new case work, generating client-facing drafts, and opening up new compliance work, etc., all of which would need to be issued with an operation key and receive a corresponding receipt.&lt;/p&gt;

&lt;p&gt;A trace in the workflow captures all the activity that occurred within the agent as it executed the workflow. A side-effect receipt, by contrast, captures the changes that the agent caused outside of the workflow, i.e., the actual side-effects.&lt;/p&gt;

&lt;p&gt;Both belong in the ledger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the ledger before the board asks
&lt;/h2&gt;

&lt;p&gt;A distributed systems lecture is not what the board wants. Fair enough. They just want to know if their money has been converted into real work value.&lt;/p&gt;

&lt;p&gt;To answer that question honestly requires a tremendous amount of engineering discipline to create runtime receipts that are dull enough to be understood by people in finance, risk, and engineering, and to attach all relevant metadata before work begins, to track all changes to authority throughout the process, to ensure that all side effects are recorded as first class facts, to tie the scores from evaluators and the results of human review to the work item in question, and to do rollups from the receipt as opposed to from the vibes that were brought to the work.&lt;/p&gt;

&lt;p&gt;This also changes how one evaluates vendors for finance agent platforms. A platform without per-work receipts for finance, risk, and engineering to share is magic; a runtime with receipts is evidence, easier to defend when the model changes, when a workflow drifts, when a regulator asks for lineage, or when the CFO asks why the AI budget went up again.&lt;/p&gt;

&lt;p&gt;Show the receipt.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>langchain</category>
      <category>ai</category>
    </item>
    <item>
      <title>Agent Protocols Fail at the Seams | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Fri, 17 Jul 2026 21:45:42 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/agent-protocols-fail-at-the-seams-focused-labs-317h</link>
      <guid>https://dev.to/focused_dot_io/agent-protocols-fail-at-the-seams-focused-labs-317h</guid>
      <description>&lt;p&gt;The agent protocols are becoming integrated into normal software infrastructure, making integration easier. And this is making ownership blurrier.&lt;/p&gt;

&lt;p&gt;These all make integration easier, so that’s great for product teams that want agents working together quickly. But then this becomes another failure surface in addition to specification. In this case, content flows quickly, and so do the different standards for delegation and state and all the rest. Meanwhile, ownership has traditionally moved more slowly through the org chart than that, so the mismatch becomes a problem for everybody.&lt;/p&gt;

&lt;p&gt;Research is emerging around the integration of different agent protocols and the security of their composition. A 2026 paper, &lt;a href="https://arxiv.org/abs/2606.28690" rel="noopener noreferrer"&gt;Formal Security Analysis of Agent Protocol Composition&lt;/a&gt;, investigates five agent protocols, finds 35 specification-level findings, backs them with 80 detailed implementation tests, and adds 30 failures found when the protocols were composed together as part of a larger system.&lt;/p&gt;

&lt;p&gt;Finally, the years of pressuring AI agent vendors to connect together are starting to bear fruit. Work that can be done by isolated ‘agents’ is child’s play. The work of an enterprise is to cross boundaries in every direction. It has to traverse files, work items, schedules, databases, customer records in CRM systems, web pages viewed in browsers, software repositories, and APIs for internal services.&lt;/p&gt;

&lt;p&gt;Clean locally. Sketchy globally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Protocols standardize communication, not responsibility
&lt;/h2&gt;

&lt;p&gt;Note to buyers: IBM’s useful definition says &lt;a href="https://www.ibm.com/think/topics/ai-agent-protocols" rel="noopener noreferrer"&gt;AI agent protocols standardize communication&lt;/a&gt; among AI agents and between agents and other system components; they do not standardize workflow coordination, execution, or optimization. Don’t make the stupid mistake of believing protocol support automatically includes control plane functionality.&lt;/p&gt;

&lt;p&gt;MCP (Model Context Protocol) allows agents to discover tools and call them. A2A (Agent to Agent) allows independent agents to interact with each other using a standard interface. ACP (Agent Communication Protocol) allows agents to interact with each other using a REST interface (synchronous and asynchronous, streaming, stateful and stateless, online and offline, long running etc). It describes a thick grammar layer.&lt;/p&gt;

&lt;p&gt;Grammar does not decide who can touch payroll.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://a2a-protocol.org/latest/specification/" rel="noopener noreferrer"&gt;A2A 1.0 specification&lt;/a&gt; describes A2A in terms of three layers: the canonical data model, abstract operations, and bindings to specific protocols. Appendix A gives the enterprise pattern in miniature. An A2A client agent asks an A2A server agent to perform work. The server agent can then use tools and APIs supported by MCP. The architecture is useful for enterprise work and is exactly the direction people are moving AI agents.&lt;/p&gt;

&lt;p&gt;ACP explicitly states the quiet part. The &lt;a href="https://agentcommunicationprotocol.dev/introduction/welcome" rel="noopener noreferrer"&gt;Agent Communication Protocol docs&lt;/a&gt; pitch interoperability between different frameworks, teams, and infrastructures. ACP exposes a REST API and is therefore opaque to the method calling the API. It supports long-running tasks, cancellation, streaming messages, and discovery. But as always: what looks valid as a method call can still be wrong when executed at runtime as part of a longer composed path of actions.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6tbyd3c2ssuhmi8b0zz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6tbyd3c2ssuhmi8b0zz.png" alt="Architecture map showing an A2A client delegating to an A2A server that calls MCP tools while runtime policy and trace audit span the protocol seam." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The risky boundary is where locally valid protocol calls become one composed path.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://focused.io/lab/mcp-security-starts-after-tool-approval" rel="noopener noreferrer"&gt;MCP security starts after tool approval&lt;/a&gt;. Approving a server, registering its tools, and checking schemas only proves that a local component has a shape the client recognizes. Runtime security starts when the system asks a set of questions: What changed? What authority is being carried forward? What content entered the model’s context? What evidence will there be after the action is taken?&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure moves through content, delegation, and authority
&lt;/h2&gt;

&lt;p&gt;The AgentThread paper includes an example that is simple but should make security teams squint. One MCP server fetches attacker-controlled web content. Hidden instructions enter the model context. A second MCP server has file access. The agent reads local data and sends it back out through the first server. &lt;a href="https://arxiv.org/abs/2606.28690" rel="noopener noreferrer"&gt;The paper describes the unsafe behavior as composition, implicit authority transfer, missing consent, and weak audit visibility across the agent runtime&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No single action needs to be out of the ordinary. Get a web page. Read a local file. Send the result of that.&lt;/p&gt;

&lt;p&gt;The failure is the path.&lt;/p&gt;

&lt;p&gt;The old framing of &lt;code&gt;mcp security&lt;/code&gt; as a checklist around one server is too small. CoSAI’s &lt;a href="https://www.coalitionforsecureai.org/wp-content/uploads/2026/03/model-context-protocol-security-1.pdf" rel="noopener noreferrer"&gt;Model Context Protocol Security whitepaper&lt;/a&gt; maps MCP to twelve threat categories and almost forty threats, including identity, access control, input and data boundaries, trust boundaries, lifecycle governance, logging, monitoring, and auditability. That taxonomy belongs in deployment design.&lt;/p&gt;

&lt;p&gt;This is related to the prior post on the tool-call boundary. &lt;a href="https://focused.io/lab/ai-agent-security-happens-at-the-tool-call" rel="noopener noreferrer"&gt;AI agent security happens at the tool call&lt;/a&gt;. But now that the tool call is a node in a larger composed route, the runtime must remember the content and the delegation that happened before calling that tool. A runtime that only checks the tool call is doing the bouncer’s work at one door, while there are tunnels in the building.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK conformance is not runtime safety
&lt;/h2&gt;

&lt;p&gt;I like standards. I want fewer custom connectors. I want agents to connect to tools, agents, and servers without six months of mapping fields between corresponding data objects.&lt;/p&gt;

&lt;p&gt;The AgentThread authors break down security failures at the protocol level to describe separate problems: unsafe behavior within a single protocol, missing SDK recommendations, missing deployment hardening, and unassigned responsibilities in cross-protocol cases. Ultimately, the authors find that agent-protocol insecurity stems from responsibility gaps across protocols, SDKs, and deployments, &lt;a href="https://arxiv.org/abs/2606.28690" rel="noopener noreferrer"&gt;failures that occur when semantic content, delegated authority, and tool access cross protocol boundaries&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When a set of features required for securing agent-protocol interactions is distributed across three SDKs and documented in a wiki, no one ends up owning the seam.&lt;/p&gt;

&lt;p&gt;Multi-agent systems already expose this kind of problem without the added complexity of security. We have written about how &lt;a href="https://focused.io/lab/multi-agent-systems-break-at-the-collaboration-plane" rel="noopener noreferrer"&gt;multi-agent systems break at the collaboration plane&lt;/a&gt;, at the claims, findings, handoffs, and shared-state level between agents. In the worst case, a lost finding turns into a security incident, and a lost authority boundary turns into a breach report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the seam above the protocol stack
&lt;/h2&gt;

&lt;p&gt;The fix starts by treating protocol composition as a runtime surface.&lt;/p&gt;

&lt;p&gt;Standards committees can improve the grammar. Vendors can ship nicer SDKs. Security teams can review popular servers. Good. The runtime that joins MCP, A2A, ACP, AG-UI, browser tools, file tools, and internal APIs still has to own composition policy.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpknbcsd8h8q8w53df0u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpknbcsd8h8q8w53df0u.png" alt="Responsibility matrix showing protocol specs and SDKs handling local grammar while runtime and application owners handle cross-protocol intent, authority, content labels, trace context, and rollback." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Standards define grammar. System ownership has to be assigned above them.&lt;/p&gt;

&lt;p&gt;First, every step across protocol boundaries should leave an execution record: the principal, user or sponsor, original objective, delegated objective, source-content classification, requested tool or action, target resource, credential scope, policy decision, and resulting artifact. Call it a “ledger,” a “receipt chain,” or a “protocol-composition record.” The important thing is that the record exists for the entire composition path and is preserved for the duration of the execution.&lt;/p&gt;

&lt;p&gt;As cross-protocol actions are executed, the authority granted to the previous step in the protocol should be restricted, such that subsequent steps in the protocol require additional justification or authorization, in line with the authority narrowdowns identified above. In particular, A2A delegation should not transfer the ambient authority of the calling principal to subsequent agents, MCP tool calls should be executed with credentials scoped to the task at hand as opposed to the human’s session, and browser-side agents should not silently inherit backend privileges as a result of a convenient protocol bridge.&lt;/p&gt;

&lt;p&gt;Third, untrusted content needs to be labelled by the runtime as to its origin. This will allow policy to determine if later content can be used to justify actions that involve model processing of that untrusted content. A simple prompt-injection defense that only scans new text as it is injected into a model will not be effective if the injected text consists of, for example, web pages, ticket comments, email bodies, etc. Simply labelling such content as originating from the “user” will be insufficient to control its usage, since it would be allowed to be used to justify virtually any subsequent action.&lt;/p&gt;

&lt;p&gt;Fourth, we need to carry trace context with us across protocol boundaries. As we said before, &lt;a href="https://focused.io/lab/agent-traces-need-to-cross-the-mcp-boundary" rel="noopener noreferrer"&gt;agent traces need to cross the MCP boundary&lt;/a&gt; because otherwise we would be left with planner traces with no tool/service spans, a useful story with a missing crime scene. But when protocol composition is involved, the downstream calls made by A2A or ACP can also cross MCP boundaries, and thus the traces they produce need to cross boundaries as well. If instead each of the different protocols produced a separate trace with no correlation between them, then any post-incident review would be pure archaeology.&lt;/p&gt;

&lt;p&gt;Fifth, tracking of what to undo in case of failure (rollback) has to be attached to the composed path as well. The number of steps to undo can easily exceed the number of steps to complete a task already. If a tool creates a ticket, updates a file, sends out an email to customers, updates a CRM like Salesforce, and stores something in memory, then all of these steps have to be undoable as a whole. Otherwise the only thing to do in case of failure is to manually clean up the mess, which is what happens in enterprises already (classic).&lt;/p&gt;

&lt;h2&gt;
  
  
  The runtime is the security boundary buyers actually get
&lt;/h2&gt;

&lt;p&gt;The protocol ecosystem is moving in the right direction. MCP lowered tool integration friction. A2A gives independent agents a shared way to delegate and report task state. ACP gives teams a simple HTTP path for agent interoperability. These are good tools for building useful workflows.&lt;/p&gt;

&lt;p&gt;They are also incomplete by design.&lt;/p&gt;

&lt;p&gt;A protocol specification describes messages, the state through which an agent goes, how an agent is authenticated, and the semantics of the operations that the agent can perform. But, the specific enterprise data structures, human rules for approval, scope of particular credentials, rules for handling an incident, and rules for rolling back actions that have been performed, all of these are outside of the scope of a protocol specification. They live in the &lt;a href="https://focused.io/lab/enterprise-ai-agents-are-runtime-products" rel="noopener noreferrer"&gt;runtime and application architecture around it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So the procurement question should change.&lt;/p&gt;

&lt;p&gt;Don’t just ask if the vendor supports MCP or A2A, because everybody supports the hot acronym eventually. Ask what happens when an agent delegates across A2A, calls an MCP tool, consumes untrusted content, accesses internal data, and returns an artifact to a user. Ask where the runtime’s ledger is. Ask how A2A-delegated credentials are minted for the task at hand. Ask how trace context is propagated throughout the composed protocol chain. Ask how policy sees the origin of new content introduced into a model. Ask how a system would roll back the damage done by a four-step process where each step seemed rational inside the bounds of the current protocol.&lt;/p&gt;

&lt;p&gt;That is the AI agent security boundary now.&lt;/p&gt;

&lt;p&gt;A protocol makes the path easier to build. The team running the system still owns what happens when authority crosses the seam.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Agent Infrastructure Is Splitting at the State Layer | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Thu, 16 Jul 2026 21:40:53 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/ai-agent-infrastructure-is-splitting-at-the-state-layer-focused-labs-27l0</link>
      <guid>https://dev.to/focused_dot_io/ai-agent-infrastructure-is-splitting-at-the-state-layer-focused-labs-27l0</guid>
      <description>&lt;p&gt;The agent stack is so boring where buyers keep looking: the loop.&lt;/p&gt;

&lt;p&gt;Loop in sight, the rest of the system is elsewhere in the loop (the agent loop did not disappear). Even more, a layer has been created to manage durable records of work done by the agent: state (a durable record of the work done by the AI agent to service customer requests). This is the crux of enterprise work. The enterprise will configure a system (AI or not) to create and maintain such records and also decide who can read such records, how long to keep them, what they are allowed to do with such records, etc. With the introduction of the state layer, AI agent infrastructure now splits at the state layer. Model + a prompt-centered agent no longer represents the infrastructure argument for AI agents.&lt;/p&gt;

&lt;p&gt;The state layer of an AI agent is now the dividing line between the agent being a product and the agent being a parlor trick that happens to access Salesforce etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop is the wrong buying surface
&lt;/h2&gt;

&lt;p&gt;The harder questions live one layer down.&lt;/p&gt;

&lt;p&gt;Where does the state live after the tab has been closed? What writes the checkpoint? What happens when a tool call is successfully completed but the model fails before a summary can be generated? Where do traces, policy decisions and permission grants enter the run? What can an enterprise export when the vendor contract expires? Who can delete memory? Who can subpoena memory? Who is responsible for the record when two agents are working with the same customer and writing to the same file?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxj05bp4wclp2t4fwvyz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxj05bp4wclp2t4fwvyz.png" alt="Side-by-side architecture showing a prompt-centered agent beside an agent backed by a durable state layer." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The durable boundary is where the agent becomes operating infrastructure.&lt;/p&gt;

&lt;p&gt;State turns agent behavior into infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The database is becoming the backend
&lt;/h2&gt;

&lt;p&gt;On Thursday, LangChain and MongoDB announced a partnership that frames agent systems as requiring retrieval, persistent memory, operational data access, observability, and reliable deployment. The real launch is a set of tools, and the proof that the partnership matters sits in the “more about” line: &lt;a href="https://www.langchain.com/blog/announcing-the-langchain-mongodb-partnership-the-ai-agent-stack-that-runs-on-the-database-you-already-trust" rel="noopener noreferrer"&gt;"Agents need more than a model and a prompt"&lt;/a&gt;. A tool-centered agent (or prompt-centered builder) is not a product.&lt;/p&gt;

&lt;p&gt;That sentence is doing more work than the launch language around it.&lt;/p&gt;

&lt;p&gt;The official LangGraph documentation notes that &lt;a href="https://docs.langchain.com/oss/python/langgraph/add-memory#use-in-production" rel="noopener noreferrer"&gt;durable memory should use a database-backed checkpointer&lt;/a&gt;, with examples for Postgres, MongoDB, Redis, and Oracle. The LangSmith deployment documentation exposes the state-layer switch directly: &lt;a href="https://docs.langchain.com/langsmith/configure-checkpointer#deploy-by-environment" rel="noopener noreferrer"&gt;set &lt;code&gt;LS_DEFAULT_CHECKPOINTER_BACKEND&lt;/code&gt; to &lt;code&gt;mongo&lt;/code&gt; and provide &lt;code&gt;LS_MONGODB_URI&lt;/code&gt;&lt;/a&gt;. That line belongs in the platform review, right next to storage, deployment, and data residency.&lt;/p&gt;

&lt;p&gt;Boring. Also the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  State is where lock-in turns real
&lt;/h2&gt;

&lt;p&gt;O'Reilly's 2026 AI agent architecture diagram defines &lt;a href="https://www.oreilly.com/radar/the-ai-agents-stack-2026-edition/" rel="noopener noreferrer"&gt;six layers between the LLM and an AI agent running real workloads&lt;/a&gt;. Memory / persistent state is a first level primitive in the architecture above the vector database. This architecture matches the actual experience of the market for the framework layer: easy to switch out when the application is well bounded. State is much harder to switch out.&lt;/p&gt;

&lt;p&gt;TGVP outlined a similar argument for how &lt;a href="https://www.tgvp.vc/releases/tgvp-report-ai-agent-infrastructure-in-2026" rel="noopener noreferrer"&gt;stateful services create moats because memory graphs, identity stores, policy logic, and audit history compound over time&lt;/a&gt;. While I dislike moat arguments for infrastructure (such as how custom UIs in enterprise software create a barrier to entry that replaces simply offering a “connector catalog” which can then be replaced by a single adapter), there is merit in the increased memory graphs, identity stores, policy logic, and audit histories that compound over time.&lt;/p&gt;

&lt;p&gt;I wrote this out originally as part of my vendor evaluation criteria. The first part was model neutrality. This seems to be something people want to hear. Durable memory should use a database-backed checkpointer, and implementation details for that checkpointer should be exposed to review (storage, deployment, data residency, etc) long before the memory format, the trace (or log) schema, the policy and decision-making portions of the state, and the audit export. Open model routing on top of closed state is a nicer cage with better lighting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance follows the state
&lt;/h2&gt;

&lt;p&gt;The state layer also pulls governance out of slideware.&lt;/p&gt;

&lt;p&gt;Agent governance can sound abstract and be confined to slideware when it is stored in policy documents. But as soon as the platform is viewed as a series of layers, the team starts to ask concrete questions about a given run of an agent. For example: who was the principal that started the run off? What was the task that narrowed down the set of permissions that were granted to that principal? What was the tool call that was made that actually crossed the boundary of what that principal was allowed to do with that set of permissions, given by that task? What was the policy that actually allowed that tool call to be made by that principal, given by that task? What was the checkpoint that actually recorded that run of the agent? And what was the trace that actually proves that that run of the agent happened in that order.&lt;/p&gt;

&lt;p&gt;Research into the security of Agent-based systems is only just beginning to explore the boundary between what the agent is granted permission to do and what the MCP server will actually allow the agent to do. AgentBound looked at &lt;a href="https://arxiv.org/html/2510.21236v1" rel="noopener noreferrer"&gt;296 popular MCP servers and found that automatically generated permission manifests worked without modification 80.9% of the time, with 0.6 ms average enforcement overhead&lt;/a&gt;. It is clear that MCP tool access is heading in the direction of explicit manifests and runtime enforcement of access rights rather than the current model of trust-by-default and running of host processes.&lt;/p&gt;

&lt;p&gt;Identity work also dovetails nicely with this analysis. A 2026 AI identity report defines AI identity as &lt;a href="https://arxiv.org/html/2604.23280v1" rel="noopener noreferrer"&gt;a continuous relationship between what an agent declares and what it is observed to do&lt;/a&gt;. This relationship is established through the declaration, the observation, and the confidence in that observation. Thus the same architecture that tracks the state of a productive AI also establishes and tracks the identity of that AI. Declaration without observation is a credential. Observation without a durable store of state is a log. Confidence in the system’s understanding of the relationship between an agent’s declared identity and its observed behavior requires that the system have a durable store of state and be able to compare what has happened to what the system expected to happen.&lt;/p&gt;

&lt;p&gt;Task-scoped access control, a topic we’ve covered in the past, also falls under this topic. A writeup for TrueFoundry’s TBAC (Task-Based Access Control) function explained how current identity-centric access models can strain under the weight of agents, because each task may need to call for a different permission set. That can happen quickly, and is particularly exposed to prompt-injection attacks. In short, TrueFoundry argues that &lt;a href="https://www.truefoundry.com/pt/blog/tbac-task-based-access-control-ai-agents" rel="noopener noreferrer"&gt;task-based controls bundle minimal permissions for the duration of work&lt;/a&gt;. And that’s a great architecture, even if the vendor packaging leaves a bit to be desired.&lt;/p&gt;

&lt;p&gt;We have looked at the authorization side before through &lt;a href="https://focused.io/lab/ai-agent-security-happens-at-the-tool-call" rel="noopener noreferrer"&gt;tool-call security&lt;/a&gt; and agent principals (e.g. running an agent as a user). From a state-layer perspective, these all tie together: authorization, identity, memory, checkpoints, traces and audit records. The record of an agent doing work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stateful loop is the product
&lt;/h2&gt;

&lt;p&gt;A live agent run has a rhythm.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Load memory. Call tool(s) and enforce policy for each. Write trace for each tool call. Record audit event. Update run state. Later, resume run from evidence collected during run&lt;/em&gt;. As mentioned previously, each live agent run will have a history which can be inspected by the platform. Such a history provides much greater value than having the agent’s runs be driven by prompts to which the model may or may not answer correctly.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5rqtrko5tekwivkcc5se.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5rqtrko5tekwivkcc5se.png" alt="Flow diagram showing a stateful agent loop that loads memory, calls tools, writes traces and audit records, and resumes later." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;State compounds.&lt;/p&gt;

&lt;p&gt;The work does not have to be “unlearned” when an agent run is abandoned for whatever reason. A new run of work can start from the exact point at which the previous run left off.&lt;/p&gt;

&lt;p&gt;However, all of this work would be for naught if the evidence from past runs of an agent were not properly monitored. This is why &lt;a href="https://focused.io/lab/agent-monitoring-is-an-infrastructure-workload" rel="noopener noreferrer"&gt;agent monitoring is infrastructure&lt;/a&gt;. The stateful agent loop that we discussed earlier includes a section for “write trace and audit records” for a reason. This is the means by which all of the side effects of a run of an agent are recorded, so that they can be inspected by a human (or automated system) later.&lt;/p&gt;

&lt;p&gt;It is therefore no surprise that &lt;a href="https://focused.io/lab/langchain-bridging-the-gap-to-production-grade-ai-agents" rel="noopener noreferrer"&gt;agent platforms that can handle real workloads&lt;/a&gt; are focused on platform work (as illustrated before).&lt;/p&gt;

&lt;p&gt;The model may still be the expensive line item. The state layer is where operational trust accumulates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform evaluation moves to the state layer
&lt;/h2&gt;

&lt;p&gt;The buying checklist should change.&lt;/p&gt;

&lt;p&gt;Where does it store the checkpoints for previous runs? What is the format of the platform’s memory? How does it join together the information from thread ID, run ID, trace ID, and audit ID? Does it record permission decisions made by a tool call with the record of that tool call, or does it have to rebuild that information from elsewhere? Can it export the state information on the platform surfaces, or is that something that one has to ask support to do for them? (Note that just because something is exported as a state, it doesn’t mean that the state information exported is the same as the information that was stored as state information on the platform surfaces). Can the system delete the memory of one user without affecting the memory of other users that are stored in the same index? How does the system partition out the information that it stores for state information by tenants, by environment, by region, by retention rules, etc.&lt;/p&gt;

&lt;p&gt;Then ask the uncomfortable version: what gets lost during migration?&lt;/p&gt;

&lt;p&gt;Prompt history and agent builder configuration are one thing. Checkpoints, memory, traces, approvals, audit records, and policy history are another. If the vendor can’t migrate all of that to the customer's new backend then the vendor is in control of the live behavior of the agent. Yes, the agent runs on the customer's cloud. Yes, the customer pays for the model and has a model key that the customer uses to sign into the agent. But the memory, the record of the agent’s governance, the record of the agent’s work, that lives somewhere else.&lt;/p&gt;

&lt;p&gt;Own that layer or the agent's memory, governance and operating history belong to someone else's backend.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Agentic Workflows Should Get Less Agentic | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Wed, 15 Jul 2026 03:32:07 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/agentic-workflows-should-get-less-agentic-focused-labs-3h32</link>
      <guid>https://dev.to/focused_dot_io/agentic-workflows-should-get-less-agentic-focused-labs-3h32</guid>
      <description>&lt;p&gt;Agentic workflows are supposed to get boring.&lt;/p&gt;

&lt;p&gt;The first pass can be exploratory and pretty expensive. The tenth pass should be boring and not have to rediscover the solution through a completely new set of tools. That workflow has earned a promotion.&lt;/p&gt;

&lt;p&gt;That is the useful part of the new &lt;a href="https://arxiv.org/html/2607.07052v1" rel="noopener noreferrer"&gt;Progressive Crystallization paper&lt;/a&gt;. It names a lifecycle agent teams are going to rediscover the painful way: agents explore, traces prove repeated behavior, tests turn that behavior into workflow code, and telemetry from those runs decides when the workflow gets demoted back to the agent layer.&lt;/p&gt;

&lt;p&gt;The paper presents data from a cloud-network operations system handling real incidents in which deterministic executions went from 0% to 45% over eight months. In the meantime, the per-incident agent cost went down by more than 70% and the number of incidents doubled. The model did not simply get cheaper. Solved work stopped being agent work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploration belongs upstream
&lt;/h2&gt;

&lt;p&gt;We continue to see agentic workflows get treated as a fixed architecture choice: build an agent, give it tools, add approvals, add observability, and hope the loop gets better.&lt;/p&gt;

&lt;p&gt;The better shape is a lifecycle.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://arxiv.org/html/2607.07052v1" rel="noopener noreferrer"&gt;Progressive Crystallization taxonomy&lt;/a&gt; organizes the various possible forms execution can take in a lifecycle agent. The Type 3 form of execution is 'agent-orchestrated'. That is to say that an agent investigates a problem with bounded autonomy, checkpoints reads and routes writes through human approval. Type 2 forms of execution are 'hybrid'. In a hybrid execution a workflow of steps is owned by a workflow, but the model is used to interpret or classify information at scoped points in the workflow. Type 1 forms of execution are 'deterministic'. They consist of typed API calls, conditionals, and so on, that together form a rigid and non-negotiable execution path. There is no place in a Type 1 workflow for model invocation at runtime.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0h2h0y69voa7kpyqp97q.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0h2h0y69voa7kpyqp97q.png" alt="Lifecycle spectrum showing Type 3 agent exploration promoting through Type 2 hybrid workflow into Type 1 deterministic execution" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The maturity curve moves agency out of repeated execution and leaves it for novelty.&lt;/p&gt;

&lt;p&gt;This is how enterprise teams build out agentic workflows. First, a novel incident gets explored with tools and state. Then, as that incident repeats, the team wants a workflow that implements that path of work. Then, as that workflow starts to get weird on the edge cases, the system needs a path back to exploration. And that's what we've been saying all along about &lt;a href="https://focused.io/lab/langgraph-enterprise-agent-development" rel="noopener noreferrer"&gt;LangGraph as the foundation for enterprise agents&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compile step is the economic boundary
&lt;/h2&gt;

&lt;p&gt;First we "reason" once through a problem. Then we execute that same problem solution over and over again as repeated incidents of the same thing. The Progressive Crystallization paper documents a real-world crystallization workflow, which turns out to be a straightforward incarnation of this fundamental software pattern.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://arxiv.org/html/2604.05150v1" rel="noopener noreferrer"&gt;Compiled AI paper&lt;/a&gt; describes a class of live AI systems in which an LLM is used once to generate an artifact, that artifact is then validated, and then a large amount of code is run with zero execution tokens. The authors evaluate function-calling, reporting 96% task completion with zero execution tokens, and a break-even point of 17 transactions to compile the function. They report 57x reduction in tokens at 1,000 transactions.&lt;/p&gt;

&lt;p&gt;If a workflow gets run repeatedly (i.e., it is a repeatable process), the fact that it is an agentic workflow gets to be a tax on the number of times that workflow gets run. That tax is enforced by runtime inference and, thus, is best countered by reducing the number of runtime inference steps, in particular the number of execution tokens required to run each step of the workflow. There are different approaches to do this (for example, model routing, prompt caching, reducing the size of the LLM used to implement each step of the workflow), all pointing at the same idea: a process repeated enough times becomes worth compiling into a function that can be called directly. We previously laid out the cost argument in &lt;a href="https://focused.io/lab/ai-agent-cost-is-a-runtime-signal" rel="noopener noreferrer"&gt;AI Agent Cost Is a Runtime Signal&lt;/a&gt;, but that was at the level of an entire agent, whereas this tax can be incurred by individual workflows within an agent. That is the basic move behind Compiled AI.&lt;/p&gt;

&lt;p&gt;Note, a workflow that is promoted will have a slightly different contract on the trace. The trace will serve as a candidate specification, which in the end would have to pass acceptance tests. The steps in the promoted workflow would have to have side effects that are idempotent (i.e. with keys, upserts, read-before-writes). The human approvals in the trace would have to be encoded in the workflow as explicit states instead of as mere chat turns. The failure modes of the steps in a promoted workflow would have to be of a particular type (i.e. typed exits).&lt;/p&gt;

&lt;h2&gt;
  
  
  LangGraph keeps the seam visible
&lt;/h2&gt;

&lt;p&gt;So where does the seam go between exploration and execution?&lt;/p&gt;

&lt;p&gt;LangGraph is especially useful in this situation because it does not force a team to decide between using a free-form agent loop, and building a full-fledged workflow engine. Instead, it lets a team use existing Python control flow and wrap API calls and other execution logic with persistence primitives, such as memory and checkpointing. Two primitives in the &lt;a href="https://docs.langchain.com/oss/python/langgraph/functional-api" rel="noopener noreferrer"&gt;Functional API&lt;/a&gt;, &lt;code&gt;@entrypoint&lt;/code&gt; and &lt;code&gt;@task&lt;/code&gt;, are plain, and they end up powerful. An entrypoint defines a workflow, while a task defines work within a given workflow.&lt;/p&gt;

&lt;p&gt;This plainness matters for two reasons. The first is that repeated execution of a particular path through the agent is just repeated execution of a function. Therefore that function can be written as Python code, complete with a model call in the middle if that still makes sense for the application. Second, the task API lets a team write one task for database records and another task for approval. In the first task, the write can carry an idempotency key, and the approval can carry its own. This way, the workflow can still do approval steps, and the workflow still gets the benefit of persisted runtime state for the agent, without doing that in a single, tricky prompt.&lt;/p&gt;

&lt;p&gt;LangGraph also tracks changes to past workflow runs, and implements important implications for a reproducible workflow API. &lt;a href="https://docs.langchain.com/oss/python/langgraph/functional-api" rel="noopener noreferrer"&gt;Saved workflow checkpoints&lt;/a&gt; are loaded into a resumed workflow from the beginning of the entrypoint, re-running &lt;code&gt;@entrypoint&lt;/code&gt; calls and loading saved results from &lt;code&gt;@task&lt;/code&gt; calls completed before the last checkpoint. The &lt;a href="https://docs.langchain.com/oss/python/langgraph/backward-compatibility#non-determinism" rel="noopener noreferrer"&gt;backward compatibility docs&lt;/a&gt; make the implication blunt: adding, removing, or reordering task calls before the last resume point can replay incorrect cached values. Nondeterministic code outside a task can also change behavior during replay.&lt;/p&gt;

&lt;p&gt;Just like compiled code, a crystallized workflow is something that can be run again and again. It can have a version number. It can have a window of time in which to complete (a "drain window"). It can have a set of rules for migrating to a newer version in the middle of a run (a "migration plan"). And a path that has been promoted out of an agent loop is now something that behaves like API calls against a persisted record of the execution of that path. So it can be edited as a whole as a single "implementation", as a single program, rather than as a series of individual edits to individual prompts.&lt;/p&gt;

&lt;p&gt;So the pattern here for live agentic systems, as outlined in the &lt;a href="https://www.langchain.com/blog/how-to-think-about-agent-frameworks" rel="noopener noreferrer"&gt;LangChain documentation for agent frameworks&lt;/a&gt; is to define a system of a combination of workflows and agents and let workflows be the simplest, cheapest, fastest and reliable means to complete a task when it doesn't require agency. Thus the mix of workflows and agents for a system will change over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promotion is an evidence gate
&lt;/h2&gt;

&lt;p&gt;The fastest way to ruin this workflow is to promote it based on vibes.&lt;/p&gt;

&lt;p&gt;A model claiming a repeatable path is largely meaningless. A corpus of traces for same cases going through same path is significantly more valuable. A proposed workflow which passes tests for candidate specification is even more valuable. A promoted path of work with no human overrides, bounded by appropriate tool permissions, idempotent for all side effects, and clean rollback semantics, is starting to look like durable software.&lt;/p&gt;

&lt;p&gt;First, &lt;a href="https://focused.io/lab/approval-queues-are-the-runtime-for-agentic-ai-workflows" rel="noopener noreferrer"&gt;approval queues belong in the runtime for agentic AI workflows&lt;/a&gt;. Once the path is known, &lt;a href="https://focused.io/lab/agent-orchestration-belongs-in-code" rel="noopener noreferrer"&gt;agent orchestration belongs in code&lt;/a&gt;. Evals should sit close to where changes happen, and traces should sit close to the decision. So, the gate to "promotion" (i.e. to live usage of a particular path for a given case) is now just another release gate for a service.&lt;/p&gt;

&lt;p&gt;The checklist of persistent state, re-executable work, idempotent writes, etc. to determine safe replay of the node is boring but there. That's what needs to be there for repeated agent paths to be 'promoted' to newly 'durable' function calls. Until then, they remain fragile in-the-loop workarounds with no persistent contract and hence no way to track, test or reproduce them for regression testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability decides demotion
&lt;/h2&gt;

&lt;p&gt;Promotion gets the money conversation. Demotion keeps the system honest.&lt;/p&gt;

&lt;p&gt;A deterministic workflow can decay. The API that a task uses can change. Firmware can be updated to add a field. A support policy can change. Workflows can continue to pass syntactic validation while slowly drifting away from the real work being done. The promoted system needs a way to notice this kind of decay without incurring the cost of the agent on every run. Traces become the control plane.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opentelemetry.io/blog/2026/genai-observability" rel="noopener noreferrer"&gt;OpenTelemetry's GenAI observability post&lt;/a&gt; describes a single trace for an end-to-end workflow of invoking an agent, having a chat with a model, and executing a tool. Honeycomb's &lt;a href="https://www.honeycomb.io/blog/fast-ai-feedback-loops-honeycomb-opentelemetry" rel="noopener noreferrer"&gt;fast AI feedback loop writeup&lt;/a&gt; shows how similar telemetry can be used to drive SLOs, alerts, and dashboards, and can even be queried with Honeycomb's native query language.&lt;/p&gt;

&lt;p&gt;This is the same reason &lt;a href="https://focused.io/lab/agent-traces-rewrite-the-harness" rel="noopener noreferrer"&gt;Agent Traces Rewrite the Harness&lt;/a&gt; matters: traces of agentic workflow execution under real traffic matter. They become eval cases, they become harness patches, they become release gates, and they provide solid proof that fixes to solved problems actually stay fixed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzno1ewwy3hosxaps0bhs.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzno1ewwy3hosxaps0bhs.png" alt="Promotion and demotion loop showing traces feeding tests, deterministic workflow promotion, monitoring, and fallback when drift appears" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observability turns agent traces into promotion evidence and drift into a demotion trigger.&lt;/p&gt;

&lt;p&gt;The number of repeated incidents where the platform is still burning full agent loops, even after it has seen the pattern before, belongs in front of leadership as the waste signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spend agency on novelty
&lt;/h2&gt;

&lt;p&gt;The goal is not to remove agents from agentic workflows, that would be counterproductive and as silly as keeping all solved paths inside an agent loop forever.&lt;/p&gt;

&lt;p&gt;Agents are valuable because there is always going to be uncertainty and changing reality: new requests, new incidents, misbehaving APIs, and policy exceptions between systems. The agent does all of its work at the boundary of the known process.&lt;/p&gt;

&lt;p&gt;The operating mistake is letting that boundary stay frozen.&lt;/p&gt;

&lt;p&gt;Workflows in live systems should decrease in agency over time. They spend fewer tokens to execute solved work. They save receipts for the execution of risky work. And they use the model for the part of the workflow where judgment still matters.&lt;/p&gt;

&lt;p&gt;The Type 1:2:3 mix is the scoreboard. If every execution stayed Type 3 forever then the platform would be charging the business for amnesia.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Multi-Agent Systems Break at the Collaboration Plane | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Sun, 12 Jul 2026 18:08:49 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/multi-agent-systems-break-at-the-collaboration-plane-focused-labs-45eb</link>
      <guid>https://dev.to/focused_dot_io/multi-agent-systems-break-at-the-collaboration-plane-focused-labs-45eb</guid>
      <description>&lt;p&gt;Multi-agent systems break where agents coordinate.&lt;/p&gt;

&lt;p&gt;This investigation begins much as the last investigation began: with a run that looks workable and a seemingly adequate summary for the supervisor from three individual specialists. The trace looks busy but largely as intended, with a nice stack of model calls as specialists work individually to develop focused answers to well-specified questions from the supervisor. Then there is a human query that changes everything: who knew what when, what did they find out when, and which thing found along the way actually drove the investigation in a particular direction.&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;That silence is the collaboration plane missing from the architecture.&lt;/p&gt;

&lt;p&gt;A common architecture for multi-agent systems has a Supervisor issuing requests to Workers, each of which performs a focused task. The results are returned to the Supervisor, which synthesizes the output from all the workers into a final answer for the Human. LangChain describes this as a subagent architecture, where the main agent calls subagents as tools, keeps track of the conversation memory, and uses stateless Worker calls as a way to isolate context and run in parallel (&lt;a href="https://docs.langchain.com/oss/python/langchain/multi-agent/subagents" rel="noopener noreferrer"&gt;LangChain multi-agent subagents&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Coordination is where things start producing strange results.&lt;/p&gt;

&lt;p&gt;This operating surface, the surface of a system that is used for work or investigation, stores the information needed by a cooperative system to function: the claims made by participants, the current work of every agent, the findings so far, summaries created for other users, and event queues that store the coordination of a team of workers across turns of a conversation. Without preserving evidence of those human-visible parts of the collaboration, the system quickly devolves into vibes tracked with logs rather than cooperative problem solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  The supervisor pattern tops out
&lt;/h2&gt;

&lt;p&gt;AWS Prescriptive Guidance makes the distinction that matters. Workflow agents run through a centralized coordinator. Multi-agent collaboration uses decentralized or role-based peers that negotiate, share information, adapt, and communicate through shared memory, messaging queues, or prompt chains (&lt;a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/agentic-ai-patterns/multi-agent-collaboration.html" rel="noopener noreferrer"&gt;AWS Prescriptive Guidance on multi-agent collaboration&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That collaboration contract looks different. Tracking a workflow means caring about the point where the coordinator delegated a task. Tracking a cooperative investigation means caring about the point where each participant made a locally reasonable move given the evidence available to that participant.&lt;/p&gt;

&lt;p&gt;I have recently come across a clean architecture for collaboration over investigation in Honeycomb's Canvas. In their architecture each investigation is modeled as an AWS AgentCore Runtime session. Instead of each user on the investigation having an isolated chat session with a single model in that session, all the agents on the investigation can read and write to a collaboration plane, and each user has an LLM session inside that investigation session (&lt;a href="https://www.honeycomb.io/blog/multi-agent-collaboration-on-shared-canvas" rel="noopener noreferrer"&gt;Honeycomb's shared-canvas architecture&lt;/a&gt;).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiujhv4frgnyze8wuz6nf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiujhv4frgnyze8wuz6nf.png" alt="Side-by-side architecture showing isolated user runtime sessions versus one investigation runtime session with separate LLM sessions and a shared collaboration plane." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The collaboration boundary belongs to the investigation, not to each user's chat.&lt;/p&gt;

&lt;p&gt;First, this surface is straightforward to manage. Every person can follow a lead. Their agents can follow completely different leads and still work together. In the multi-user case, each user has an LLM session, and the agents for all of the users run within the collaboration plane for that investigation.&lt;/p&gt;

&lt;p&gt;That is the boundary I care about.&lt;/p&gt;

&lt;p&gt;The idea we have long pursued is making agents as manageable as apps, by considering them runtime products made of model calls, tooling, sandboxes, policy, traces, evals, credentials, and audit receipts (&lt;a href="https://focused.io/lab/enterprise-ai-agents-are-runtime-products" rel="noopener noreferrer"&gt;enterprise AI agents are runtime products&lt;/a&gt;). Multi-agent systems add another critical boundary inside that space: the shared state surface that exists across agents collaborating to complete work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared memory is too blunt
&lt;/h2&gt;

&lt;p&gt;A shared memory bucket hides the actual boundary.&lt;/p&gt;

&lt;p&gt;Memory is for facts and information. Collaboration state is for work in progress. Facts can help an agent recover from confusion. Work in progress decides whether the rest of the team gets confused with it.&lt;/p&gt;

&lt;p&gt;When an investigation is shared with other people, the collaboration plane for that investigation contains five buckets: who claimed what hypothesis, what the current actions of the agents and humans are, what has been found, a summary of what each peer found and told their human, and a set of private event queues to coordinate the next moves of the agents and humans (&lt;a href="https://www.honeycomb.io/blog/multi-agent-collaboration-on-shared-canvas" rel="noopener noreferrer"&gt;Honeycomb's collaboration-plane details&lt;/a&gt;).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpphpbhghh317v2v2g5il.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpphpbhghh317v2v2g5il.png" alt="Diagram of a collaboration plane with claims, current activity, findings, peer summaries, and event queues connected to agents and humans." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The shared state is small, boring, and decisive.&lt;/p&gt;

&lt;p&gt;Claims prevent others from duplicating work that has already begun. Current activity shows other agents currently active within the investigation and provides situational awareness, no need for each agent to re-read the entire history of conversation for a topic. Findings allow negative results to travel across an investigation. A hypothesis that has been ruled out by one agent should shrink the search space for other agents investigating similar issues. Peer summaries allow humans to coordinate without forcing each human to read the entire conversation that another human had with an agent. An event queue coordinates turns within a collaboration and prevents work from becoming polling.&lt;/p&gt;

&lt;p&gt;Tiny data model. Large operational consequence.&lt;/p&gt;

&lt;p&gt;The shape is also familiar. Incident teams create a shared record out of the conversations that occur during an incident. Each person claims a thread of work, pins evidence, rules things in or out, and posts a note when context changes. I wrote about the same pattern in &lt;a href="https://focused.io/lab/ai-incident-management-breaks-without-a-shared-record" rel="noopener noreferrer"&gt;AI incident management breaks without a shared record&lt;/a&gt;, because the work is shared evidence under time pressure.&lt;/p&gt;

&lt;p&gt;Agents become manageable only when their shared working space becomes the critical boundary that gets managed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The runtime session is an architecture choice
&lt;/h2&gt;

&lt;p&gt;AWS AgentCore Runtime makes the boundary concrete. The Bedrock AgentCore Runtime docs describe a session as a dedicated microVM with isolated CPU, memory, and filesystem for that session. Runtime sessions of different users are independent. The same runtime supports MCP and A2A communication, long running workloads up to eight hours, filesystem state across stop and restart, and traces for reasoning steps, tool invocations, and model interactions (&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agents-tools-runtime.html" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore Runtime&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Honeycomb took that approach for Canvas and mapped investigations to runtime sessions, because investigations are the durable units of analysis. User chats are transient. Agents come and go, stall and try again, then hand back context. The runtime reflects the nature of the work.&lt;/p&gt;

&lt;p&gt;Generic multi-agent orchestration platforms are easy to demo but difficult to deploy for real work. Counting agents is easy. The state contract is harder: what agents assert to exist, what agents can modify, what gets recorded in trace attributes, what evals check, and what humans have to follow in order to retrace the steps of the agents to a particular conclusion.&lt;/p&gt;

&lt;p&gt;No &lt;code&gt;team_of_agents.final_answer&lt;/code&gt; field will save that design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collaboration bugs do not throw exceptions
&lt;/h2&gt;

&lt;p&gt;MLflow's post about multi-agent observability names three failures that become apparent when multiple agents interact in a shared environment: cascading errors, shared memory pollution, and waiting loops (&lt;a href="https://mlflow.org/blog/observability-multi-agent-part-1" rel="noopener noreferrer"&gt;MLflow on multi-agent observability&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A stale finding is a fact. A specialist can time out while the parent agent waits. A negative result may never reach another agent, so the system spends time and money re-running the same series of tool calls that the first agent already ran. A peer summary can say something misleading, like "payment errors started after the deploy," based on a finding that actually ruled out the deploy in the first place.&lt;/p&gt;

&lt;p&gt;The trace has to expose the collaboration plane, not only the LLM calls around it.&lt;/p&gt;

&lt;p&gt;This means that instead of simply including the text of a message in a span as the event's description, the trace needs span attributes that track coordination objects: &lt;code&gt;claim.created&lt;/code&gt;, &lt;code&gt;claim.released&lt;/code&gt;, &lt;code&gt;finding.superseded&lt;/code&gt;, &lt;code&gt;peer_summary.read&lt;/code&gt;, &lt;code&gt;event_queue.delivered&lt;/code&gt;, &lt;code&gt;hypothesis.invalidated&lt;/code&gt;. The attribute names are less important than the discipline. The trace can now show which agent changed the shared state of the investigation, what evidence an agent attached to a finding, who read a peer summary, what events were delivered to an event queue, and what hypothesis an agent invalidated.&lt;/p&gt;

&lt;p&gt;Awhile back, Focused made the observability point about agentic systems that I am making today about trace semantics: agentic systems need an observable collaboration surface, not a messy tangle of disconnected logs (&lt;a href="https://focused.io/lab/mitigating-risk-unlocking-potential-observability-and-agentic-systems" rel="noopener noreferrer"&gt;observability and agentic systems&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The useful version joins them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eval should grade the handoff
&lt;/h2&gt;

&lt;p&gt;Final-answer evals are too narrow for cooperative systems. They can report that a correct answer was produced by a multi-agent system, but they will not report the bad coordination path that produced it. The same bad path will, in the end, produce a wrong answer that no one will be able to explain.&lt;/p&gt;

&lt;p&gt;I investigated how to measure behavioral structure for cooperative work. The arXiv paper on Entropy-Based Observability for AI Agent Behavior develops trace-derived signals that give insight into agent behavior: action entropy, trajectory entropy, tool entropy, information gain, and outcome entropy. Success, reward, latency, and cost fail to capture behavior that matters. I think these metrics would be useful for getting a handle on the collaboration plane, where such behavioral structure already exists and is now observable (&lt;a href="https://arxiv.org/html/2606.05872v3" rel="noopener noreferrer"&gt;Entropy-Based Observability for AI Agent Behavior&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A collaboration eval should ask boring questions.&lt;/p&gt;

&lt;p&gt;Did the agent check active claims for other agents before starting to work on a finding? Was there enough evidence added to a finding to aid agents who may later refer to that finding? Were agents treating summaries from other agents as hints or as facts that led them down a false path? Were stale findings properly superseded by new findings? Did the trace show the key event that caused the second agent to change its work plan?&lt;/p&gt;

&lt;p&gt;Those checks belong next to the regular success metrics. They are the difference between "the system answered correctly" and "the system coordinated in a way I would trust again."&lt;/p&gt;

&lt;p&gt;This is where conversation IDs earn their keep. A single conversation ID across agents and tools lets the trace preserve the user-facing path. Cooperative investigations also require investigation IDs, claim IDs, finding IDs, and queue-event IDs for the trace to be of any use for the work being done (&lt;a href="https://focused.io/lab/ai-agent-observability-runs-on-conversation-ids" rel="noopener noreferrer"&gt;AI agent observability runs on conversation IDs&lt;/a&gt;). The ID model must mirror the collaboration model. Correlating calls is not enough to explain the work done by the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the collaboration plane
&lt;/h2&gt;

&lt;p&gt;Multi-agent architecture should start with the shared record.&lt;/p&gt;

&lt;p&gt;First, determine the durable unit: a case, incident, investigation, branch, or task. Then decide which collaboration objects reside within that record: claims, findings, active work, peer summaries, evidence, event queues, approvals, rejected hypotheses, and rollback notes. Agent handoffs, for example, can be implemented as routing, but that would miss the point of runtime state. &lt;a href="https://focused.io/lab/agent-handoffs-turn-routing-into-runtime-state" rel="noopener noreferrer"&gt;Agent handoffs turn routing into runtime state&lt;/a&gt;, and LangChain handoffs persist state across turns by updating a state variable and changing behavior based on that state (&lt;a href="https://docs.langchain.com/oss/python/langchain/multi-agent/handoffs" rel="noopener noreferrer"&gt;LangChain multi-agent handoffs&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;What is the shared surface of truth while agents work together?&lt;/p&gt;

&lt;p&gt;If the durable unit of work is the transcript, then the system is simply a chat app with extra workers. If the durable unit of work is a vector store, then the system can store facts about work, but it cannot do the work. If the durable unit of work is a traceable collaboration plane with explicit objects, owners, mutations, and eval checks, then the system has a shot at real work.&lt;/p&gt;

&lt;p&gt;Buyers will specify multi agent AI, multi agent architecture, and multi-agent collaboration because those phrases sound like capability requirements. I would interpret the ask as a collaboration-plane contract which the AI agents execute.&lt;/p&gt;

&lt;p&gt;Show the objects. Show the trace. Show the eval. Show how two agents chase a single hypothesis for a while. Show how one agent can go down a wrong path and write a finding that is bad for subsequent work. Show how a human can find that finding and correct it. Show how another agent can then change direction as a result of the new finding.&lt;/p&gt;

&lt;p&gt;That is the system.&lt;/p&gt;

&lt;p&gt;The agent count is trivia.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Enterprise AI Agents Are Runtime Products | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Fri, 10 Jul 2026 17:53:03 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/enterprise-ai-agents-are-runtime-products-focused-labs-5dj</link>
      <guid>https://dev.to/focused_dot_io/enterprise-ai-agents-are-runtime-products-focused-labs-5dj</guid>
      <description>&lt;p&gt;Enterprise AI agents are runtime products. Teams get tricked thinking they bought a ‘clever model wrapper’ (a Deep Agents agent), but the real work goes on in code, network egress, credentials, traces, evals, deployment revisions, and audit receipts.&lt;/p&gt;

&lt;p&gt;First, as we’ve already discussed, &lt;a href="https://focused.io/lab/enterprise-ai-agents-have-a-control-plane-now" rel="noopener noreferrer"&gt;enterprise AI agents have a control plane now&lt;/a&gt;. But then there’s the real work of an agent as a product with a runtime boundary, that of a control plane running within a specific product boundary. It has an API. It has a release path. It has a rollback story. It has an owner who can explain what happened after a regulated workflow goes sideways.&lt;/p&gt;

&lt;p&gt;LangChain and NVIDIA’s NemoClaw announcement for the Deep Agents Blueprint actually names the surface area, where Deep Agents Code, Nemotron 3 Ultra, and OpenShell combine into an agent system of models, harness, evals, and runtime work (&lt;a href="https://www.langchain.com/blog/langchain-and-nvidia-launch-the-nemoclaw-deep-agents-blueprint" rel="noopener noreferrer"&gt;LangChain and NVIDIA launch the NemoClaw Deep Agents Blueprint&lt;/a&gt;).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpk7mogm3bcdcgfofb1e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpk7mogm3bcdcgfofb1e.png" alt="Layered architecture of an enterprise AI agent runtime product with an API, harness, sandbox, model route, policy, credentials, traces, evals, audit, deployment revision, and rollback." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An agent becomes a runtime product when the loop, policy, credentials, and receipts sit inside one owned boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sensitive code makes the boundary obvious
&lt;/h2&gt;

&lt;p&gt;Coding agents are useful for testing the permission boundaries of an agent. A coding agent reads files and writes files, runs shell commands, installs packages, runs tests, etc. The repo contains secrets-adjacent assumptions even when no secret string is actually stored there. As such, a coding agent can rapidly grant itself permission to do all sorts of damage.&lt;/p&gt;

&lt;p&gt;This is why we found the &lt;a href="https://www.langchain.com/blog/deep-agents-code-on-nemoclaw-a-governed-blueprint-for-your-most-sensitive-code" rel="noopener noreferrer"&gt;NemoClaw Deep Agents Code post&lt;/a&gt; much more interesting than the open models announcement. Its permission set is exposed. We wrote yesterday that &lt;a href="https://focused.io/lab/ai-agent-security-happens-at-the-tool-call" rel="noopener noreferrer"&gt;AI agent security happens at the tool call&lt;/a&gt;. Running them securely is important. The post spends real detail on the runtime. Coding agents run dcode inside of an OpenShell sandbox by default. Network egress is denied by default and can be approved on a request basis. Credentials never enter the sandbox. Each run of a Coding Agent can be snapshotted into a per-session audit log.&lt;/p&gt;

&lt;p&gt;This gets at the operating question of the runtime-product frame: who owns the product that enforces the security boundary. When a network request is denied, the denial needs a home. When a package install is approved, the approval needs a release record. When a runtime product edits a migration script, the trace, eval, and diff need to prove that the resulting script is safe enough to merge.&lt;/p&gt;

&lt;p&gt;A regulated team does not buy an ‘agent’. They buy a product surface on which an ‘agent’ can operate without breaching policy. Boring (which is the point).&lt;/p&gt;

&lt;h2&gt;
  
  
  The model wrapper is the small part
&lt;/h2&gt;

&lt;p&gt;The enterprise stack is moving toward productized runtime agents because work around the model has become more important than the model itself. LangChain’s &lt;a href="https://www.langchain.com/blog/nvidia-enterprise" rel="noopener noreferrer"&gt;Enterprise Agentic AI Platform Built with NVIDIA&lt;/a&gt; combines LangGraph, Deep Agents, NVIDIA NIM, NeMo Agent Toolkit, OpenShell, LangSmith observability and NeMo Guardrails for live systems.&lt;/p&gt;

&lt;p&gt;Here the crucial point is that an enterprise has a strong incentive to lock in the harness layer because that is where all the dependencies of the model are. Indeed, an enterprise can change the model route (i.e. switch from one LLMOps to another) as cost, latency, data boundary etc. change. But it cannot easily change the operating memory of an agent that is running live.&lt;/p&gt;

&lt;p&gt;That is the same argument behind &lt;a href="https://focused.io/lab/the-agent-harness-is-the-new-lock-in-layer" rel="noopener noreferrer"&gt;the agent harness becoming the lock-in layer&lt;/a&gt;. NemoClaw Deep Agents Code, announced by NVIDIA in partnership with LangChain, is benchmarked against the LangChain eval suite with Nemotron 3 Ultra achieving an aggregate score of 0.86 at a cost of $4.48 per 100,000 tokens to run compared to $43.48 for the next closest model in the suite of evaluations (&lt;a href="https://www.langchain.com/blog/langchain-and-nvidia-launch-the-nemoclaw-deep-agents-blueprint" rel="noopener noreferrer"&gt;LangChain and NVIDIA launch the NemoClaw Deep Agents Blueprint&lt;/a&gt;). The useful work of the agent is above the model, and the product owner can route coding, retrieval, review, and incident work through model routes based on quality and cost recorded by the harness.&lt;/p&gt;

&lt;p&gt;Similarly, once the model determines the best course of action, the runtime determines what moves are possible (i.e., which tools to call and with what permission), what pauses are warranted, what narrower credentials are required to perform a move, and what audit receipts are left behind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schneider shows the operating model
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.langchain.com/blog/how-schneider-electric-built-their-llmops-foundations-at-enterprise-scale-with-langsmith" rel="noopener noreferrer"&gt;Schneider Electric’s LLMOps with LangSmith case study&lt;/a&gt; is one of the cleaner enterprise proofs of how to treat LLMOps as more than just a launch point for open models to be used as a dashboard project. In the case study Schneider details the use of LLMOps with LangSmith to support 160,000 employees across 107 countries with 40 Billion euros in annual revenue. They have an AI Hub of 350 experts that have developed 60-plus agents that cover Energy, Assets and Developer Productivity.&lt;/p&gt;

&lt;p&gt;Schneider Electric’s case study on LLMOps with LangSmith is interesting because observability is treated as product infrastructure. Schneider Electric uses one LangSmith workspace per AI product across development, QA, pre-live, and live environments (&lt;a href="https://www.langchain.com/blog/how-schneider-electric-built-their-llmops-foundations-at-enterprise-scale-with-langsmith" rel="noopener noreferrer"&gt;Schneider Electric LLMOps with LangSmith&lt;/a&gt;). In the live environment, all traces are stored in a workspace that can be revisited by developers for offline evaluation in their development datasets. This is what I call a correct approach to observability. A workspace per environment is what the org chart would want, but that would break the learning loop.&lt;/p&gt;

&lt;p&gt;That same case study goes on to explain that “One Jo” supports 160,000 employees in 107 countries around the world (&lt;a href="https://www.langchain.com/blog/how-schneider-electric-built-their-llmops-foundations-at-enterprise-scale-with-langsmith" rel="noopener noreferrer"&gt;Schneider Electric LLMOps with LangSmith&lt;/a&gt;). Every conversation on that platform is traced. Live traces are reused to feed regression datasets that test new models and prompts for employee automation work.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcu4sfcnkrl7a3hxh2two.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcu4sfcnkrl7a3hxh2two.png" alt="Lifecycle loop where live traces become SME annotations, regression datasets, eval gates, deployment revisions, and a runtime per product." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The enterprise loop is boring on purpose: trace, annotate, test, revise, deploy, repeat.&lt;/p&gt;

&lt;p&gt;This brings us to the deployment. The agents discussed above require streaming, long-term memory, human-in-the-loop, and background processing. So, LangSmith Deployment was the natural choice here (&lt;a href="https://www.langchain.com/blog/how-schneider-electric-built-their-llmops-foundations-at-enterprise-scale-with-langsmith" rel="noopener noreferrer"&gt;Schneider Electric LLMOps with LangSmith&lt;/a&gt;). However, here too, LangSmith takes a different approach to the typical, ‘one runtime per enterprise’ approach that AI tools follow. Instead, LangSmith Deployment allows each AI product to run on its own runtime stack, so the product owner can reason about data residency, latency, eval gates and rollback inside one product boundary.&lt;/p&gt;

&lt;p&gt;That is where &lt;a href="https://focused.io/lab/agentic-ai-implementation-change-control" rel="noopener noreferrer"&gt;agentic AI implementation turns into change control&lt;/a&gt;. Even a prompt update or a new model route can touch sandbox images, a credential broker, tool grants, evaluators, and the other tools used by the product. Each such update is a product change, and the release record has to list it with the same seriousness as any service touching customer data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability is part of the product, not a sidecar
&lt;/h2&gt;

&lt;p&gt;Honeycomb’s work around its hosted MCP server is relevant to the second half of the runtime. Honeycomb has GAed its MCP server with support for BubbleUp, heatmaps, and histograms (&lt;a href="https://www.honeycomb.io/blog/honeycomb-mcp-ga-support-bubbleup-heatmaps-histograms" rel="noopener noreferrer"&gt;Honeycomb MCP GA&lt;/a&gt;). The team there found CSV output, rather than JSON, provided something like 40% token savings for tabular tool output for evals, a tiny but relevant thing because runtime products make the next tool call easier to evaluate in terms of cost.&lt;/p&gt;

&lt;p&gt;Honeycomb support is quite human also. Canvas and Honeycomb MCP running on top of Slack, Linear, code views, docs, and data context allows support to typically complete investigation and reach correct root cause before handing off to others for escalation (&lt;a href="https://www.honeycomb.io/blog/how-our-support-team-uses-honeycomb-debug-honeycomb" rel="noopener noreferrer"&gt;How Support Uses Honeycomb to Debug Honeycomb&lt;/a&gt;). The root cause identified by support is not buried under misinformation, detours, and misdirection. Support remains in control throughout the process, with the chain of evidence preserved.&lt;/p&gt;

&lt;p&gt;As traces are stored as harness changes, this becomes a real problem only if the runtime can use them as eval cases, regression datasets, SME annotations, and release evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime governance is path governance
&lt;/h2&gt;

&lt;p&gt;Path-dependent governance. One read is allowed. One analysis step is allowed. One outbound message is allowed. Put that together with customer data and the runtime has a different problem to solve.&lt;/p&gt;

&lt;p&gt;The runtime-governance paper says that the behavior of AI agents is non-deterministic and path-dependent. In it, the execution path of an agent is defined as the central object for its governance. The paper &lt;a href="https://arxiv.org/html/2603.16586v1" rel="noopener noreferrer"&gt;Runtime Governance for AI Agents: Policies on Paths&lt;/a&gt; describes a policy function that takes into account the identity of an agent, the partial path that the agent has already traversed, the proposed next action, and the organizational state. It then returns a probability for the policy-violation of that next action. Prompt rules restrict the possible behavior of an agent. Static access control restricts the set of possible actions an agent can perform. However, in both cases, no restriction is placed on the sequence of allowed reads, analysis steps, and so on that are performed by an agent before the next action is added to the agent’s behavior. &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7g0w1bt5ppza6lravd1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7g0w1bt5ppza6lravd1.png" alt="Decision flow where allowed read and analysis steps become risky when followed by an external send, so path policy pauses or denies and records an audit receipt." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Runtime governance cares about the path, not the morality of each isolated tool call.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://focused.io/lab/approval-queues-are-the-runtime-for-agentic-ai-workflows" rel="noopener noreferrer"&gt;approval queues as runtime state&lt;/a&gt; matter. There is no value in approvals being made after the fact and written down in Slack as theater. A durable interrupt in the runtime can record the path, the approval reason, the approver, the edited payload, the final decision, and the audit receipts along the way.&lt;/p&gt;

&lt;p&gt;A July 5 Internet-Draft proposes a &lt;a href="https://datatracker.ietf.org/doc/draft-han-bmwg-agent-security-benchmark" rel="noopener noreferrer"&gt;security evaluation benchmark for AI agents&lt;/a&gt;. The Draft is individual and has no formal IETF status. Still, agent security evaluation is becoming its own benchmark category.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the product boundary
&lt;/h2&gt;

&lt;p&gt;The product owner of an AI agent for an enterprise is close to the API contract owner for that product. The owner might sit in platform or product. Fine. The author of prompts is not enough to own the product.&lt;/p&gt;

&lt;p&gt;This is why I like to speak of “runtime products”. There is something concrete to this term. It applies cleanly during architecture review and goes through the operating surfaces that already exist for normal software: ownership, release, data, policy, evidence and operations.&lt;/p&gt;

&lt;p&gt;Using “agent” as a label for this work is too weak. Using “runtime product” is harder to duck and weave around. It frames the key architectural point: the operating surface is already familiar to the organization. Ownership, release, data, policy, evidence and operations.&lt;/p&gt;

&lt;p&gt;This is the correct benchmark for evaluating an AI agent for use as an enterprise AI agent: Does it act?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Agent Traces Rewrite the Harness | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Thu, 09 Jul 2026 17:48:47 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/agent-traces-rewrite-the-harness-focused-labs-24jg</link>
      <guid>https://dev.to/focused_dot_io/agent-traces-rewrite-the-harness-focused-labs-24jg</guid>
      <description>&lt;p&gt;The basic function of traces is to make the agent harness better. Until then, they are simply expensive evidence. Stacks of model calls and tool calls and retries, of rejected actions and user fixes, of the dollar amount spent in tokens. Someone has to look at them.&lt;/p&gt;

&lt;p&gt;We have seen companies spend millions to store traces, name it “observability”, and then the same incident reappear just with prettier pictures (e.g. trace with annotations). The agent still loops, the underlying tool schema is still wrong, the prompt still forces a fixed-size answer that model forgot 3 steps ago, the evaluation still is focused on end answer instead of the long windy path that produced that answer.&lt;/p&gt;

&lt;p&gt;The issue is the missing improvement loop.&lt;/p&gt;

&lt;p&gt;LangChain put the current version of this plainly: &lt;a href="https://www.langchain.com/blog/improving-agents-is-a-data-mining-problem" rel="noopener noreferrer"&gt;traces are becoming the currency of long-horizon agent improvement&lt;/a&gt;. That should make every engineering leader a little uncomfortable. A live agent is already generating the dataset. The question is whether the organization has a way to turn that dataset into labels, eval cases, harness patches, release gates, and new deployments.&lt;/p&gt;

&lt;p&gt;That loop is the new agent harness work.&lt;/p&gt;

&lt;h2&gt;
  
  
  A trace is a work order
&lt;/h2&gt;

&lt;p&gt;Agent observability used to be about tracing and debugging (as we typically think of it) for model-based agents. But this is table stakes for engineering and operations in general. Observability for agents is actually about understanding how an agent works on a day-to-day basis, and how it arrives at a particular decision or answer.&lt;/p&gt;

&lt;p&gt;That is table stakes. &lt;a href="https://docs.langchain.com/langsmith/observability-concepts" rel="noopener noreferrer"&gt;LangSmith's observability model splits the world into projects, traces, runs, and threads&lt;/a&gt;. So, for example, tracing out a failure in a project can be useful for the engineering team working on that project. To debug a long-horizon agent, however, that trace must be opened up to show the run-level activity, i.e. the individual calls that together make up the trace. And then the threads of conversation through traces that were initiated as multi-turn conversations must also be openable.&lt;/p&gt;

&lt;p&gt;A user correction is a label. A rejected tool action is a label. A repeated request is a label. A long reasoning path leading to a trivial step is a label. A tool call that succeeds but produces an answer that is vague is a label. Live traces are an expensive piece of evidence, so traces of live agent work, traces from which we could learn to improve long-horizon agents, become an expensive dataset. A cost signal from such a dataset would be a trace in which heavy spend arrived at a place with no improvement. Such traces are best studied outside of finance meetings with coding agents, because &lt;a href="https://focused.io/lab/coding-agent-spend-belongs-in-the-trace" rel="noopener noreferrer"&gt;coding-agent spend already belongs in the trace&lt;/a&gt;. Such study can produce tool descriptions, information about middleware, information about routing, information about evaluators, and so on.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe71pdbkh6hzqbrd6c4zq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe71pdbkh6hzqbrd6c4zq.png" alt="Feedback loop showing live traces becoming eval cases, harness patches, release gates, and redeployed agents." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trace matters when it changes the next harness release.&lt;/p&gt;

&lt;h2&gt;
  
  
  LangChain is moving the loop into harness engineering
&lt;/h2&gt;

&lt;p&gt;The latest innovations in the field focus on improving the model (because apparently that’s been neglected). In the Nemotron 3 Ultra playbook, LangChain &lt;a href="https://www.langchain.com/blog/tuning-the-harness-not-the-model-a-nemotron-3-ultra-playbook" rel="noopener noreferrer"&gt;kept the model fixed and changed only the harness&lt;/a&gt;: the system prompts, tool descriptions, and even the middleware around individual model calls and tool calls. Generation settings are left at vendor defaults. Yet even with a fixed model, bigger gains are to be had from changing the harness.&lt;/p&gt;

&lt;p&gt;That is the part enterprises own.&lt;/p&gt;

&lt;p&gt;One more important point. The model vendor can fine-tune the model to perform better on a task. And that is great for the vendor. But the live system has a local contract, with local tool semantics, and local policy boundaries. The local approval points, local data access rules, local latency and cost budgets, all of these things get encoded in the agent harness, and that is what live evidence proves about.&lt;/p&gt;

&lt;p&gt;On the one hand, the harness playbook starts with evals, i.e. the same things one would fine-tune in order to improve a model via more prompt editing. But on the other hand, since harness changes against real traffic do not have learning signals, these too must go through the harness eval process, which are nothing but traces of agent behavior running through the agent’s live harness. &lt;a href="https://www.langchain.com/blog/better-harness-a-recipe-for-harness-hill-climbing-with-evals" rel="noopener noreferrer"&gt;Better Harness describes live traces as a high-throughput source of eval material&lt;/a&gt;. The only additional step is to tag, holdout, human review, and sample representative traces as with any other source of eval material.&lt;/p&gt;

&lt;p&gt;And this is a perfectly reasonable thing to do: go through traces of Agent executions, cluster failure cases together, select a representative subset of those traces to test the improved harness functionality (i.e. to run those traces through the harness with the updated logic), holdout traces (if there are enough of them) aside for verification of lack of regression, go through all of those with human review for correctness of interpretation of failure, add tags or other identifying markers to the subset the team tests with to determine whether particular failure cases were resolved for particular changes to the harness, and then, as before, watch the new traces as they are produced by the system after the improved harness has gone live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trace mining produces the missing evaluation material
&lt;/h2&gt;

&lt;p&gt;Opening one trace is trivial. But to get value out of traces, a team needs to mine a large number of them.&lt;/p&gt;

&lt;p&gt;See work around fine-tuning a perceived-error classifier from Fireworks and LangChain on trace-mining for superior traces-for-learning in a Qwen fine-tuned judge, using chat-langchain and Fleet data. Their results found that, for the task of trace judging, a trace-mining based solution was &lt;a href="https://www.langchain.com/blog/building-a-100x-cheaper-trace-judge-with-fireworks" rel="noopener noreferrer"&gt;10 to 100 times cheaper at scale while matching or beating frontier models on the trace-judging task&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That product produces artifacts a reviewer can inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;labels that explain what went wrong&lt;/li&gt;
&lt;li&gt;issue clusters that group repeated failure modes&lt;/li&gt;
&lt;li&gt;representative examples for offline evals&lt;/li&gt;
&lt;li&gt;holdout sets that protect generalization&lt;/li&gt;
&lt;li&gt;monitors that reopen a problem when it returns to the foreground&lt;/li&gt;
&lt;li&gt;evidence for deciding whether a failure opened by an agent belongs to the harness or to the model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The LangSmith Engine also maps traces to a structured development workflow through its product loop. The docs say it works from live traces to &lt;a href="https://docs.langchain.com/langsmith/engine-overview" rel="noopener noreferrer"&gt;surface recurring issues, diagnose root cause, propose fixes, deploy evaluators, create dataset examples, and reopen issues if they resurface&lt;/a&gt;. All of this is also analogous to &lt;a href="https://focused.io/lab/agent-failures-should-open-tickets" rel="noopener noreferrer"&gt;agent failures opening tickets&lt;/a&gt; for a human reviewer to inspect and debug. As such, trace review from such agents also surface named work with owners, with evidence, that can also be used to setup regression checks on the harness as well as the model.&lt;/p&gt;

&lt;p&gt;Later that month, Focused argued that &lt;a href="https://focused.io/lab/ai-agent-evaluation-ends-too-early" rel="noopener noreferrer"&gt;AI agent evaluation ends too early&lt;/a&gt; when it is restricted to pre-release experiments. That &lt;a href="https://focused.io/lab/ai-agent-accuracy-is-an-observability-problem" rel="noopener noreferrer"&gt;AI agent accuracy is an observability problem&lt;/a&gt;, evidence from live systems is required to prove that the system worked, follows naturally from this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent harness changes after the trace
&lt;/h2&gt;

&lt;p&gt;This post looks at how reviews of traces can be “focused” by having them end with a name for the update surface that will fix things. The kind of note that says “Model hallucinated” is essentially useless as it essentially says “we gave up here” and does nothing to actually help improve things.&lt;/p&gt;

&lt;p&gt;The reason for tool misuse is that the tool contract (the documentation) and/or the schema and/or the return format of the tool are not correct. So it might be good to have a closer look at the field that is wrongly included in the schema, and why the returned blob by the tool cannot be used as is in the dashboard.&lt;/p&gt;

&lt;p&gt;Looping points to the area of middleware. A cap. A checklist. State-aware interventions after the second search for the same thing. Do not rely on model to stop looping and then treat that as governance in the system prompt in the 7th paragraph below.&lt;/p&gt;

&lt;p&gt;Bad reasoning budget: This is the issue of how teams route work to models. An inexpensive model can do classifier work. A more expensive model can do multi-step repair work. A model that is reading the same file over and over again deserves a harness intervention before the high bill becomes a personality trait of the model.&lt;/p&gt;

&lt;p&gt;Perceived error (human judgment) that there is an error: These are situations where users may correct the AI agent, reject output, or even rephrase the same request over and over again until they get the desired response. In these scenarios, the traces should be used as training material for the next round of evaluation by the agent.&lt;/p&gt;

&lt;p&gt;Domain gaps in the trace or issues not reproducible require fine-tuning the model after the problem has been understood from the traces generated before. Fine-tuning before resolving the root cause of a failure in a live system creates fossilized mistakes, pleasant to trip over as a well placed concrete boot.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofawxc4oxkqdz5wuev89.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofawxc4oxkqdz5wuev89.png" alt="Decision matrix mapping trace evidence to prompt, tool, middleware, evaluator, routing, or model updates." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The failure type decides which part of the agent system changes.&lt;/p&gt;

&lt;p&gt;Day one can be boring. The trace can create a record that an engineer can trust. Which traces contributed? Which label fired? Which eval case was added? Which holdout protected the change? Which harness patch shipped? Which release gate passed? Which new traces prove the failure stayed fixed.&lt;/p&gt;

&lt;p&gt;Those are receipts, not vibes.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI agent lifecycle management starts here
&lt;/h2&gt;

&lt;p&gt;Similar views on the role of live traces in AI agent lifecycle design come from Honeycomb in its write-up on AWS AgentCore. Canvas on AgentCore is a full fledged application that has session, deployment version, runtime state, online and offline evaluation, tool usage, and so on, all tracked for agent based applications. Honeycomb says to &lt;a href="https://www.honeycomb.io/blog/prototype-production-aws-agentcore" rel="noopener noreferrer"&gt;instrument the agent from day one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But keeping them connected after release is a much harder problem, i.e. AI agent lifecycle management.&lt;/p&gt;

&lt;p&gt;The trace-to-harness loop gives that lifecycle a spine.&lt;/p&gt;

&lt;p&gt;Unless an organization has a real AI agent lifecycle management practice in place, all the work can just become folklore: “I remember we had to fix this bad trace once...”, “Okay, I added this one docstring...”, “Oh yeah, we replaced that model for that edge case...”. A week or two later nobody is able to say whether any of that actually fixed the particular failure being investigated, moved its expression to a slightly different case, or just masked it with a newer and cleaner-sounding incorrect answer.&lt;/p&gt;

&lt;p&gt;The improved system creates a useful organizational structure around the agent, and therefore improvements to it, which is of greater value to the buyer than an agent that works in a workshop (as all AI do by now). This structure is a simple linear path from trace-evidence, via evals and so on through to harness-updates that in turn make their way through release-gates, until traces prove that changes worked or not. &lt;a href="https://focused.io/lab/ai-agent-observability-runs-on-conversation-ids" rel="noopener noreferrer"&gt;Conversation IDs make the trace coherent across the path&lt;/a&gt;, but coherence is only the start. The more valuable structure is one that shortens that path.&lt;/p&gt;

&lt;p&gt;The winning team will have the shortest path from trace evidence to a harness release that safely changes what the agent does next time.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>observability</category>
    </item>
    <item>
      <title>AI Agent Security Happens at the Tool Call | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Wed, 08 Jul 2026 23:45:08 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/ai-agent-security-happens-at-the-tool-call-focused-labs-3o93</link>
      <guid>https://dev.to/focused_dot_io/ai-agent-security-happens-at-the-tool-call-focused-labs-3o93</guid>
      <description>&lt;p&gt;At what point does a team treating AI security as plumbing, meaning nobody wants to investigate, debug, or test it because that would slow the work down, fail? At the tool call.&lt;/p&gt;

&lt;p&gt;A dangerous question that must be answered at every tool call: who is acting, which resource is canonical, what grant applies, which capability is being invoked, where the output can flow next, and what receipt exists if the runtime says no.&lt;/p&gt;

&lt;p&gt;Connectivity to such resources is becoming easier to set up. The recent &lt;a href="https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28" rel="noopener noreferrer"&gt;MCP SDK betas for the 2026-07-28 spec release candidate&lt;/a&gt; make that point plainly. So security needs to move from the setup of connection to a resource to control of execution within that resource.&lt;/p&gt;

&lt;p&gt;The HCP paper, &lt;a href="https://arxiv.org/html/2606.29073v1" rel="noopener noreferrer"&gt;From Tool Connection to Execution Control&lt;/a&gt;, first defines eight runtime invariants that MCP-style systems need to satisfy: metadata non-authority, grant-backed approval, canonical resources, principal binding, scoped capability invocation, source-and-target data-flow authorization, deny-path audit, and explicit protocol state. For a long time these read like abstract requirements. In reality each of these is the minimum viable security invariant for an action that an agent is performing by updating CRM records, creating a customer, creating a sales process, or reporting on data in CRM. The runtime has to resolve the canonical resource, bind the principal to a grant, invoke only the scoped capability, authorize data flow, and make every denial auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The approval prompt fires too early
&lt;/h2&gt;

&lt;p&gt;A consent prompt tells one thing: did a human approve of this action or not. But approval of a proposed action, meaning a model asking to do something with the agent, and approval of an action after resources, policy, and tool state have resolved are two different things.&lt;/p&gt;

&lt;p&gt;In reality, tools are not isolated containers to which an agent may make a single call. Rather, agents discover tools, read the tools’ metadata, copy data from one tool’s output to another’s input, run through loops of previously learned actions, re-run previously successful code with slightly modified parameters, and pipe the output of one tool to the input of another. As such, the place to put governance on an agent is before it makes a tool call, which is where we wrote about &lt;a href="https://focused.io/lab/ai-agent-governance-runs-before-the-tool-call" rel="noopener noreferrer"&gt;governance before the tool call&lt;/a&gt;, and after the tool call has been approved, which is where &lt;a href="https://focused.io/lab/mcp-security-starts-after-tool-approval" rel="noopener noreferrer"&gt;MCP security starts after tool approval&lt;/a&gt;. And that is narrower than it sounds, because after approval has been given to a call, the runtime is now responsible for governing the execution of that call, which is to bind the call to the particular principal, grant, resources, and capabilities that had been approved in the dialog that prompted the approval in the first place.&lt;/p&gt;

&lt;p&gt;Now on to the HCP benchmark. The naive baseline for an MCP-like architecture allows all ten attacks to be modeled, the practice-informed mitigation strategy allows six, and the HCP benchmark blocks all ten attacks while providing complete audit evidence for the controlled benchmark in the paper. The paper itself is not something to run as a product tomorrow, but it gives a practical perspective on what prompts, metadata warnings, and approval dialogs are missing when the runtime does not own the execution objects for the calls that the agent makes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqo7ipx52uorhhsv51gvd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqo7ipx52uorhhsv51gvd.png" alt="Flow diagram showing an agent request passing through a runtime policy broker that checks principal, grant, resource, capability, and audit before a tool call." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The security decision belongs in the runtime path of the tool call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool metadata cannot carry authority
&lt;/h2&gt;

&lt;p&gt;Tool metadata is descriptive metadata. The model uses the tool’s metadata to choose an action. But the tool’s metadata is not authoritative for that action.&lt;/p&gt;

&lt;p&gt;It is boring to think about tool metadata only in terms of setting up the action for the model to execute. But what if the tool’s metadata contained instructions for the model? What if a resource identifier that was provided as friendly names to the user were to map to different provider objects in the runtime? The runtime has to go ask the provider for the canonical resource for that resource identifier, and then compare that against the grants for that principal for that capability that was requested for that action. That is the set of runtime invariants for MCP-type systems as defined in the HCP paper.&lt;/p&gt;

&lt;p&gt;Finally the MCP integration pattern transitions to the security model phase. An &lt;code&gt;updateRecord&lt;/code&gt; CRM tool is not just another tool, even if there is already a tool with that name in the MCP workspace. It is a write tool for customer data, sales processes, reporting, and permissions. Therefore, integration of such a tool into MCP infrastructure is runtime work, which is why &lt;a href="https://focused.io/lab/salesforce-mcp-turns-crm-integration-into-an-agent-runtime-problem" rel="noopener noreferrer"&gt;CRM integration becomes runtime work&lt;/a&gt;. Exactly the same work a user would do by pressing Save in a system of record. The only difference is that instead of a human, it is a model-guided loop, running through an integration layer.&lt;/p&gt;

&lt;p&gt;So the simple way to look at this is that the runtime must reject the call if the following conditions are not met: the principal is missing, the grant is not found, the provider cannot canonicalize the resource, the capability is outside the scope of the grant, or the approval was for a different resolved object. Put this in a policy broker. And write down the reasons for denial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output handles are part of the security model
&lt;/h2&gt;

&lt;p&gt;The scariest tool call is rarely the first one. It is the second one, after the agent has learned something.&lt;/p&gt;

&lt;p&gt;When modeled data is used as input for other tools, the data can be treated as handles with owners, data classes, and checks on downstream pipes. The HCP paper investigates modes in which such data can be used, including search results, document excerpts, transcript snippets, ticket bodies, and rows in databases. Kept inside the runtime, the data can stay scoped to particular actors and capabilities instead of becoming free floating text that the agent can hand to other tools.&lt;/p&gt;

&lt;p&gt;I’d like to provide an example of how Anthropic implemented &lt;a href="https://www.anthropic.com/engineering/code-execution-with-mcp" rel="noopener noreferrer"&gt;code execution with MCP&lt;/a&gt;. In the example, Anthropic created a direct MCP loop between pulling a transcript from a Google Drive account and copying that transcript to update a record in a user’s Salesforce account. This would normally take 150,000 tokens, but by putting the intermediate results in the execution environment, Anthropic was able to reduce the required tokens to 2,000 tokens. Great for them, and it highlights the added security obligations of code execution.&lt;/p&gt;

&lt;p&gt;But, if we keep the transcript in the runtime, we can then check things like: can this principal read this? Can this capability write this to Salesforce? Can this output flow to email, Slack, or external webhooks? Should the next call in the workflow see the raw text, a filtered projection of the text, or nothing at all? These are the kinds of things that belong inside AI agent authorization.&lt;/p&gt;

&lt;p&gt;This is also where audit stops being compliance theater. Audit records for denied pipe operations should include a receipt with source handle, target capability, principal, policy version, and reason code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code execution makes the runtime more important
&lt;/h2&gt;

&lt;p&gt;Code execution is going to win because less context and fewer round trips are worth the workflow tradeoff. The CE-MCP paper, &lt;a href="https://arxiv.org/html/2602.15945v1" rel="noopener noreferrer"&gt;From Tool Orchestration to Code Execution&lt;/a&gt;, formalizes the jump from context-coupled execution in MCP to context-decoupled code execution in MCP. The paper also introduces sixteen different attack classes that can be launched through five different execution phases of code execution.&lt;/p&gt;

&lt;p&gt;Similarly, &lt;a href="https://www.langchain.com/blog/the-two-patterns-by-which-agents-connect-sandboxes" rel="noopener noreferrer"&gt;LangChain defines the sandbox-as-tool pattern&lt;/a&gt; with the agent and its state outside of the sandbox, API keys outside of the sandbox, and the execution state of the sandbox separate from the agent state. This structure is nice as it provides a natural home for the platform to manage the credentials, the policy, the trace context, and other runtime state for the generated code, model, and harness, rather than having it all in a generated code file in a harness.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsi2rnpbukcnrsn6c6dl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsi2rnpbukcnrsn6c6dl.png" alt="Side-by-side architecture comparing traditional MCP through model context with code-execution MCP through a sandbox runtime." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code execution saves context, but it moves the trust boundary into the runtime.&lt;/p&gt;

&lt;p&gt;Another AI tooling fallacy: code execution is simply another loop around the model, with potentially cheaper rounds of computation. This misses the mark fundamentally. Execution has become a privileged substrate within the AI-powered end-to-end workflow, and one that cannot be governed by simple prompt-level rules. It requires a runtime policy broker to adjudicate the required authorizations along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise security teams will ask for receipts
&lt;/h2&gt;

&lt;p&gt;Once agents are running across employee accounts inside a company, there is real security work in running an MCP runtime. A buyer has to confirm that the runtime has implemented the functions listed in Arcade’s &lt;a href="https://www.arcade.dev/blog/mcp-gateways-runtimes-registries-guide" rel="noopener noreferrer"&gt;guide to MCP gateways, runtimes, and registries&lt;/a&gt;: OAuth lifecycle management, credential storage in a vault, multi-user support with respective authentication and authorization, permission intersection, auditing, policy management, enforcement, and observability.&lt;/p&gt;

&lt;p&gt;Zuplo’s &lt;a href="https://zuplo.com/blog/agent-protocol-stack-mcp-a2a-acp-2026" rel="noopener noreferrer"&gt;2026 protocol-stack post&lt;/a&gt; separates the MCP used for agent-to-tool communication from the A2A used for agent-to-agent communication. Such a split makes sense because while MCP allows an agent to communicate with tools, A2A enables one agent to directly communicate with another agent. Gateways for cross-agent communication will enable functions such as token binding, request validation, capability filtering, and full request logging.&lt;/p&gt;

&lt;p&gt;From an auditable decisions standpoint, we would document each decision in a detailed record which includes: &lt;code&gt;principal_id&lt;/code&gt;, &lt;code&gt;agent_id&lt;/code&gt;, &lt;code&gt;grant_id&lt;/code&gt;, &lt;code&gt;resource_id&lt;/code&gt;, &lt;code&gt;capability_id&lt;/code&gt;, &lt;code&gt;input_handle_ids&lt;/code&gt;, &lt;code&gt;output_handle_id&lt;/code&gt;, &lt;code&gt;policy_version&lt;/code&gt;, &lt;code&gt;decision&lt;/code&gt;, &lt;code&gt;reason_code&lt;/code&gt;, and &lt;code&gt;trace_id&lt;/code&gt;. All of the information from the allow path and the deny path for a particular invocation, tied back to the conversation or workflow from which the invocation was invoked. We have made the same argument from the observability side: a &lt;a href="https://focused.io/lab/ai-agent-observability-runs-on-conversation-ids" rel="noopener noreferrer"&gt;conversation-level audit trail&lt;/a&gt; gives incident response a spine instead of a pile of disconnected spans.&lt;/p&gt;

&lt;p&gt;This is where we start to put the AI agent security practices to work. If an agent is sending emails, the receipt should name the user principal, canonical mailbox, send grant, attachment handles, and policy version. If an agent created a Salesforce opportunity, then the receipt should list the same information against the opportunity as the canonical resource in that system. The same would hold for creating a new pull request.&lt;/p&gt;

&lt;p&gt;No magic here. Just a dull and thankless job of documenting model-driven side effects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Own the tool call
&lt;/h2&gt;

&lt;p&gt;Just as we moved from unusual tool access to the normal usage of tools via MCP, now every meaningful tool call must be treated as an event for the following classes: authorization, who is allowed to make this call; data flow, what is the input to the tool and what are the handles to its output; and audit, a record of every such call.&lt;/p&gt;

&lt;p&gt;The first part of the test is not hard: tool calls should require different policy. A read-only weather API is different from a payment API, for example. A chart generated by a model is different from an external email. The API calls should be treated differently by the runtime, and therefore by the agent, which is programmed by a human.&lt;/p&gt;

&lt;p&gt;The test I care about is this: can an operator explain why a particular tool call was permitted or denied by the AI agent or program without relying on the transcript of the conversation as the source of truth?&lt;/p&gt;

&lt;p&gt;If that cannot be determined beyond the model’s transcript, then the agent security program is based on manners, and it matters not whether the system uses MCP, OAuth, a nice organized catalog of approved tools, and a tidy approval prompt dialog. The real boundary is the tool call itself, and either the runtime owns that boundary and all the vagaries of the model, tool metadata, the sandbox in which the generated code runs, and the APIs that the runtime and the model and the generated code in turn call, or the runtime inherits all that.&lt;/p&gt;

&lt;p&gt;Own the tool call. Write the receipt. Make denial a first-class path.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Coding Agent Spend Belongs in the Trace | Focused Labs</title>
      <dc:creator>Austin Vance</dc:creator>
      <pubDate>Sun, 05 Jul 2026 23:26:05 +0000</pubDate>
      <link>https://dev.to/focused_dot_io/coding-agent-spend-belongs-in-the-trace-focused-labs-kao</link>
      <guid>https://dev.to/focused_dot_io/coding-agent-spend-belongs-in-the-trace-focused-labs-kao</guid>
      <description>&lt;p&gt;Coding-agent spend gets weird the second it leaves one developer's laptop.&lt;/p&gt;

&lt;p&gt;Here is a specific example where a single feature goes through Claude Code, Codex, Cursor, Copilot, OpenCode and a Deep Agents custom harness before finally being merged in a pull request. Each of these, as standalone tools, can be “perfectly reasonable to buy” with “local usage screen” in front of the team. But then the invoice arrives and the work actually costs something completely different, a question that the engineering lead has to answer.&lt;/p&gt;

&lt;p&gt;That question cannot be answered from a vendor bill. It has to be answered from the run.&lt;/p&gt;

&lt;p&gt;The problem with “Coding-Agent Bills: Feature Cost in the Workflow of Multiple Coding-Agents” was first discussed on LangChain’s blog in a July post &lt;a href="https://www.langchain.com/blog/fix-your-coding-agent-bill" rel="noopener noreferrer"&gt;outlines the shape of the problem&lt;/a&gt;. As previously mentioned, the feature can interact with several coding agents like Claude Code, Cursor or even Copilot. Each of the mentioned coding agents keep logs of their activities in various formats. As a consequence, it is very difficult to tell the cost of a feature in a workflow. LangChain says, that first a normalized trace of all activities in all root sessions through all turns of interaction of the user with the coding agents in all tool calls, etc. including all the corresponding metadata has to be generated. This trace then can be filtered by session_id, thread_id, by model or provider or even by the names of individual coding tools. The hardest part of solving the problem is the generation of this trace.&lt;/p&gt;

&lt;p&gt;The unit is the trace.&lt;/p&gt;

&lt;h2&gt;
  
  
  The invoice arrives after the damage
&lt;/h2&gt;

&lt;p&gt;Finance sees an invoice after it has gone through the run process. Engineering sees a loop that is still costing money.&lt;/p&gt;

&lt;p&gt;The waste that coding-agents produce is behavioral waste. That is to say, it is the same patterns of suboptimal behavior that other agents produce. Time and again an agent will keep retrying the same failing test. Every time it goes to generate some text for a lint fix it will use the most expensive model available. A monolithic repository summary will be included in every interaction turn. Slow tools will be called to perform tasks only to be given very vague error messages. The same tool will then be called again and again until eventually another agent is called in to help debug the mess. Eventually a bill will be generated for all that was spent, which will tell the finance department how much was spent. The trace of all the calls, etc, generated while that bill was being incurred will reveal the precise sequence of tool calls that resulted in the bill having that amount.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://focused.io/lab/ai-agent-cost-is-a-runtime-signal" rel="noopener noreferrer"&gt;Agent spend is a runtime signal&lt;/a&gt;. Coding agents make that signal less abstract. Spend gets tracked against a repository, branch, commit, pull request, developer, team, model, provider, tool, and session. That abstract finance problem scattered across product dashboards becomes an engineering problem once the fields coalesce into a single session trace.&lt;/p&gt;

&lt;p&gt;Engineering problems can be fixed.&lt;/p&gt;

&lt;p&gt;Many of the classic cloud cost playbook steps are still widely adopted by organizations building out FinOps practices, as laid out by the FinOps Foundation &lt;a href="https://www.finops.org/wg/finops-for-ai-overview" rel="noopener noreferrer"&gt;FinOps Foundation&lt;/a&gt;. Cost per token, highly volatile pricing for cloud compute and memory, particularly for GPU instances, as well as usual quotas on consumption of cloud resources, tagged resources to group costs by application or team, and real-time finance metrics that track to business outcomes. Coding-agent spend is typically treated as spend that runs in loops and programs, as opposed to being treated as spend that can be represented in spreadsheets. Thus a quota is only hit when spend hits a line, and a trace shows what led to that line in the first place (e.g. bad retry logic, too much context in function, missing cache hit, poor model routing).&lt;/p&gt;

&lt;h2&gt;
  
  
  Vendor dashboards answer local questions
&lt;/h2&gt;

&lt;p&gt;Tool dashboards are useful until they become the only record.&lt;/p&gt;

&lt;p&gt;Claude Code has local usage statistics at &lt;code&gt;/usage&lt;/code&gt;, and &lt;a href="https://docs.anthropic.com/en/docs/claude-code/costs" rel="noopener noreferrer"&gt;Anthropic's cost guidance&lt;/a&gt; covers team spend limits, context compaction, model selection, MCP overhead reduction, hooks, skills, and subagent delegation. Fine operator surface for Claude Code. It still does not tell the team how much a PR cost after Claude Code, Codex, Copilot review context, and Cursor all touched it.&lt;/p&gt;

&lt;p&gt;LangSmith Codex tracing feature for Codex tracing logs: agent turns, model metadata, token usage, tool calls, and subagent threads. OpenCode tracing &lt;a href="https://docs.langchain.com/langsmith/trace-with-opencode" rel="noopener noreferrer"&gt;OpenCode tracing&lt;/a&gt; logs: session root runs, assistant turns, nested tool calls, tool errors, time, attachments, subagent activity, token usage, and thread or session ID metadata for root and child sessions. Note that the Chat feature in Copilot exports OpenTelemetry spans where the &lt;code&gt;invoke_agent&lt;/code&gt;, &lt;code&gt;chat&lt;/code&gt;, and &lt;code&gt;execute_tool&lt;/code&gt; spans contain total token usage, model data, and subagent context that gets propagated through tool execution. The plugin for the Codex tracing feature in LangSmith’s Codex &lt;a href="https://docs.langchain.com/langsmith/trace-with-codex" rel="noopener noreferrer"&gt;LangSmith's Codex tracing plugin&lt;/a&gt;. Copilot Chat can also export OpenTelemetry spans &lt;a href="https://docs.langchain.com/langsmith/trace-with-vscode-copilot" rel="noopener noreferrer"&gt;Copilot Chat can export OpenTelemetry spans&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More importantly, the larger ecosystem is starting to generate trace-like evidence while the output of individual tools from session to session can be quite different from one another. Unlike a dashboard, this would be a normalized log of an entire coding session that makes full use of all of the single tools as well as all of the intermediate functionalities in between.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9deaj967y47h9orvgbm2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9deaj967y47h9orvgbm2.png" alt="Coding-agent tools feeding a shared trace spine with session, turn, tool, subagent, metadata, and cost fields." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trace is the cost unit because it joins behavior, identity, and spend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.langchain.com/langsmith/coding-agent-metadata-contract" rel="noopener noreferrer"&gt;LangSmith’s coding-agent metadata contract&lt;/a&gt; lists the shared fields by name instead of relying on observability to discover them. In addition to global identity fields like &lt;code&gt;ls_agent_kind&lt;/code&gt;, &lt;code&gt;ls_integration&lt;/code&gt;, &lt;code&gt;ls_agent_runtime&lt;/code&gt;, &lt;code&gt;thread_id&lt;/code&gt;, and &lt;code&gt;ls_trace_schema_version&lt;/code&gt;, the contract lists run types: &lt;code&gt;root&lt;/code&gt;, &lt;code&gt;llm&lt;/code&gt;, &lt;code&gt;tool&lt;/code&gt;, &lt;code&gt;subagent&lt;/code&gt;, and &lt;code&gt;interrupted&lt;/code&gt;. It also lists repo fields the runtime may expose: &lt;code&gt;repo&lt;/code&gt;, &lt;code&gt;branch&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;working_directory&lt;/code&gt;, &lt;code&gt;provider&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;tool&lt;/code&gt;, and &lt;code&gt;subagent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That contract is boring in exactly the right way. Boring fields make cost queryable. Boring fields let an engineering manager ask which repo burned spend last night, which agent runtime did it, which model got selected, which tool failed, and which team owns the pattern.&lt;/p&gt;

&lt;p&gt;The same thing is true for spend. &lt;a href="https://focused.io/lab/ai-agent-observability-runs-on-conversation-ids" rel="noopener noreferrer"&gt;Agent observability runs on a stable conversation or session ID&lt;/a&gt; because that ID lets traces, tools, queues, APIs, evals, and incidents line up. Cost should line up on that same spine, not show up as line items with no causality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost without behavior is accounting
&lt;/h2&gt;

&lt;p&gt;A cost report that cannot point at behavior is just accounting with better charts.&lt;/p&gt;

&lt;p&gt;One thing I would really like to see reported in a lot of detail, are all of the ways a coding-agent session could go over budget. That report could be a simple list of causes and fixes for each. The number for each cause would be the smoke for that area, and then a trace of the session in the room would show where the extra cost occurred.&lt;/p&gt;

&lt;p&gt;LLM cost management is a behavior problem, not just a finance problem. Cut out the irrelevant stuff. Simple stuff should be done by cheaper models. Cache the constant stuff. Deciding which tool to use for a particular task. Fixing the docs that cause an agent to fail for a particular task. Trimming the subagent path that reads and re-reads same files for a particular task. That’s a finance system approval for a budget for this. Here’s a trace for that approved budget.&lt;/p&gt;

&lt;p&gt;For clients of the agent platform, it matters to tie out spend on agents to engineering outcomes. A spend dashboard is only so useful if no one can connect the spend to outcomes such as did the agent make the team faster, did it create useful PRs, did it take review work off the team’s plate, did incidents go up or down, can we stop those runaway-until-breakfast sessions next time. Building a run record, not just a screenshot, is the only way to get there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gateway policy closes the loop
&lt;/h2&gt;

&lt;p&gt;Visibility without a control boundary turns into monthly regret.&lt;/p&gt;

&lt;p&gt;LangChain’s internal LLM Gateway rollout is an interesting example because the company tied spend to live control. Their &lt;a href="https://www.langchain.com/blog/how-we-made-coding-agent-spend-predictable" rel="noopener noreferrer"&gt;writeup&lt;/a&gt; describes how one heavy coding-agent user could have spent thousands of dollars per week before anybody noticed. By putting coding-agent calls through Gateway, they set monthly, weekly, daily, and hourly budgets, then tied spend to traces, users, keys, agents, model calls, and failure modes. That is the correct sequence: see the run, fix the behavior, cap the boundary.&lt;/p&gt;

&lt;p&gt;Documentation for the Gateway that this sits in front of is here: The LLM Gateway sits between agents / clients and model providers. It holds the secrets for the various providers, authenticates the caller with a LangSmith API key, evaluates spend and redaction policies for that caller, proxies the request to the upstream model provider, and traces the return back to LangSmith. The spend policies here &lt;a href="https://docs.langchain.com/langsmith/llm-gateway-spend-policies" rel="noopener noreferrer"&gt;Spend policies&lt;/a&gt; are organized by organization, workspace, API-key, or user, and can be limited to a monthly, weekly, daily, or hourly period. When a request is blocked (i.e. it would exceed budget), it returns a 402 with the spend-policy violation as trace metadata for the request that was issued. &lt;a href="https://docs.langchain.com/langsmith/llm-gateway" rel="noopener noreferrer"&gt;Gateway docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A critical product decision here was to make policy violations trace events as opposed to just finance events that got blocked. But the block is part of the same evidence stream as the prompt, the model call, the tool results, the repo metadata, and the agent runtime.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbkjdsbioqrurlidi8t3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbkjdsbioqrurlidi8t3.png" alt="Feedback loop connecting expensive coding-agent traces to behavior fixes and gateway spend policies." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cost control works when the trace feeds the policy boundary.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://focused.io/lab/agentic-payments-move-spending-authority-into-the-runtime" rel="noopener noreferrer"&gt;spending authority moves into the runtime&lt;/a&gt;. A coding agent is spending shared budget on behalf of a person, team, repository, and task. Policy has to sit near that action: approvals, budget caps, provider credentials, redaction, trace metadata, and issue creation.&lt;/p&gt;

&lt;p&gt;Just setting a monthly limit is not enough. One also should consider hourly and daily limits for a single command run over night for example. User / API-key limits to catch misuse through integration paths that a team did not think to budget for. Workspace limits to stop experiments in live environments going out of control. And finally organization level caps to put a roof on all of this, where each of these limits describes a different way to define ownership.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first version can be simple
&lt;/h2&gt;

&lt;p&gt;The first version does not require a grand platform migration.&lt;/p&gt;

&lt;p&gt;The trace should contain enough information to correlate the money spent with the work done by the engineers. The trace fields that need to be included in the trace in order to use them in the dashboards are the following trace fields that join spending with work done by engineers: session ID, user, team, repo, branch, commit, PR, agent runtime, integration, model, provider, tool name, token usage, cost, status and error. Subagent IDs can be added to the trace later when delegation starts to surface in traces. Also environment and service tags can be added to the trace later when coding-agent work is tied to runbooks or other work done by the infrastructure coding teams. All of the above fields should be included in the trace before they can be used in the dashboards.&lt;/p&gt;

&lt;p&gt;Then add three questions to the weekly engineering review.&lt;/p&gt;

&lt;p&gt;Which coding-agent sessions were expensive and useful?&lt;/p&gt;

&lt;p&gt;Which sessions were expensive and stupid?&lt;/p&gt;

&lt;p&gt;Which stupid session can be prevented next week?&lt;/p&gt;

&lt;p&gt;Not glamorous but useful to know. This review will find out whether the Context Packs, repo documentation &lt;a href="https://focused.io/lab/documentation-drift-breaks-coding-agents" rel="noopener noreferrer"&gt;missing repo documentation&lt;/a&gt; etc are up to par. It will find out if the agent instructions prevent tool spam, if the model defaults are current. It will also find out whether people are using coding agents for work that should really be scripted instead. And then there are the useful expensive sessions. Deep code archaeology costs money and while a multi-hour migration agent may cost a lot of money for a multi-hour run of work, a clear outcome and a traceable run can still be worth it.&lt;/p&gt;

&lt;p&gt;The control plane conversation continues. As coding agents become shared engineering infrastructure, registry, identity, policy, monitoring, cost, approvals, and retirement start to live together in the same operating estate we covered in &lt;a href="https://focused.io/lab/enterprise-ai-agents-have-a-control-plane-now" rel="noopener noreferrer"&gt;Enterprise AI Agents Have a Control Plane Now&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost is part of the execution record
&lt;/h2&gt;

&lt;p&gt;The cost of coding agents is not a side channel. It is part of the execution record for how software changed.&lt;/p&gt;

&lt;p&gt;The uncomfortable truth here is that agent spend is someone’s engineering responsibility. Not in the performative sense of saying “use fewer tokens”, but in the normal operating sense of owning the fields, the trace shape, the gateway policy, the retry loops, and the review to confirm that very expensive work was worth it.&lt;/p&gt;

&lt;p&gt;This is the operating model I trust: it does not shame developers for using agents, it does not imply that the cheapest model is the best. Spend should be managed the same way that good teams manage latency, errors, deploy risk, and incident noise. The signal should follow the execution path.&lt;/p&gt;

&lt;p&gt;The invoice still matters. It just shows up too late to be the source of truth.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
