<?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: Dimitrii Khristoforidi</title>
    <description>The latest articles on DEV Community by Dimitrii Khristoforidi (@pr_team_1292bb35fa9011924).</description>
    <link>https://dev.to/pr_team_1292bb35fa9011924</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%2F4077603%2F5418ffe2-471a-40fa-827e-eb880b1fb234.png</url>
      <title>DEV Community: Dimitrii Khristoforidi</title>
      <link>https://dev.to/pr_team_1292bb35fa9011924</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pr_team_1292bb35fa9011924"/>
    <language>en</language>
    <item>
      <title>How We Decide What NOT to Automate</title>
      <dc:creator>Dimitrii Khristoforidi</dc:creator>
      <pubDate>Fri, 28 Aug 2026 14:50:43 +0000</pubDate>
      <link>https://dev.to/pr_team_1292bb35fa9011924/how-we-decide-what-not-to-automate-1j4e</link>
      <guid>https://dev.to/pr_team_1292bb35fa9011924/how-we-decide-what-not-to-automate-1j4e</guid>
      <description>&lt;p&gt;&lt;strong&gt;A follow-up on building an AI copilot for freight dispatch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; We don't decide whether to automate a task based on how repetitive it looks. We look at four things: how much the right decision varies between real-world cases, the cost of being wrong, whether the task’s value comes from speed or judgment, and how quickly a wrong output would be detected.&lt;/p&gt;

&lt;p&gt;Together, those determine whether our AI dispatch copilot should suggest, ask for confirmation, act autonomously, or stay out of the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation is not the default win condition
&lt;/h2&gt;

&lt;p&gt;There's an assumption baked into a lot of AI product thinking right now: if a task can be automated, it should be. Manual is friction, automation is progress, ship it.&lt;/p&gt;

&lt;p&gt;We don't work from that assumption anymore. Not because automation is bad - obviously most of what we build is automation - but because treating "can we automate this" as the only question skips the one that actually matters: &lt;strong&gt;should this specific task be automated, given what happens when it's done wrong, and how often "wrong" looks different each time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That second part - how often "wrong" looks different - turned out to be the real hinge. A task can be low-stakes and still be a bad automation candidate if every instance of it is weird in its own way. And a task can look scary and still automate well if the failure mode is boring and consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four questions we actually ask
&lt;/h2&gt;

&lt;p&gt;We stopped trying to have one big "automation philosophy" and instead run four concrete questions per feature. None of them require ML expertise. They require someone who understands the actual operational process and is willing to ask honest questions about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. How much does the right decision vary from one instance to the next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Extracting predefined fields from a rate confirmation can be relatively consistent once the prompt and extraction logic have been properly refined. In practice, reaching that level of consistency may require several rounds of prompt improvement and validation. Even then, the task is not entirely straightforward: the total may combine linehaul, fuel surcharge, accessorials, different currencies, or handwritten adjustments.&lt;/p&gt;

&lt;p&gt;High-variance tasks are different. Negotiating detention time with a broker who's annoyed about a missed appointment involves interpreting tone, the history with that broker, and how much leverage the carrier actually has that week. Two instances of what appears to be “the same task” can therefore require completely different judgment calls.&lt;/p&gt;

&lt;p&gt;Low decision variance → a potentially good automation candidate, provided the inputs are reliable, the output can be validated, and failures are detectable.&lt;/p&gt;

&lt;p&gt;High decision variance often means the task cannot be made reliably automatable through prompt engineering alone. It may require richer context, structured rules, specialized tools, historical data, or human review to handle different scenarios consistently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What does a wrong output cost, and does the cost scale with volume?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This sounds like the reversibility question from our earlier post, &lt;a href="https://dev.to/pr_team_1292bb35fa9011924/where-should-an-ai-agents-autonomy-end-5eg"&gt;“Where Should an AI Agent’s Autonomy End?”&lt;/a&gt;, but it's slightly different — it's about whether errors compound. Auto-flagging a possible detention clause mismatch that turns out to be a false positive costs a dispatcher thirty seconds of annoyance. Auto-sending a rate counter-offer that's off by a meaningful margin, at volume, across dozens of loads a week, doesn't just cost thirty seconds each time - it can quietly damage a broker relationship you didn't even know was at risk until the relationship is already gone.&lt;/p&gt;

&lt;p&gt;Even small errors create operational costs, and those costs accumulate as volume grows. Some errors scale roughly in proportion to the number of occurrences, while others create disproportionate or delayed damage by eroding trust, reputation, or a counterparty’s willingness to work with you again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Is the value of doing it mostly about speed, or mostly about judgment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some manual tasks are slow because nobody's built the tooling yet - that's a straightforward automation opportunity. Others are slow because they require judgment, and the slowness isn't the bug; it's the mechanism by which a human catches something a faster process would have missed.&lt;/p&gt;

&lt;p&gt;Confusing these two is probably the single most common mistake in early-stage automation decisions: “this takes a dispatcher ten minutes” gets read as “this is inefficient” instead of “this is where the actual thinking happens.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. How quickly and reliably will we detect a wrong output?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A reversible error is only safe if someone notices it in time. Some failures become obvious immediately — through a validation check, a dispatcher catching the issue, or a product metric moving in the wrong direction. Others may surface only days or weeks later, through a damaged broker relationship, a lost customer, or a pattern of operational friction that is difficult to trace back to a specific automated decision.&lt;/p&gt;

&lt;p&gt;This matters beyond the product itself. An incorrect output can affect how a dispatcher communicates with a broker and, if it goes unnoticed, influence the relationship between them.&lt;/p&gt;

&lt;p&gt;The longer and less reliable the feedback loop, the less autonomy we should give the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is also how we think about agent autonomy: it's not a property we give an agent once. It's something we earn task by task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autonomy should be earned per task, not granted to the agent as a whole.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why we don't think about an AI copilot as simply being “autonomous” or “not autonomous.” Different tasks can - and should - have different levels of autonomy.&lt;/p&gt;

&lt;p&gt;We start with decision variance and failure cost, then adjust the level of autonomy based on how much judgment the task requires and how quickly and reliably failures can be detected.&lt;/p&gt;

&lt;p&gt;That's the approach we're taking with &lt;a href="https://loadconnect.io/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=devto" rel="noopener noreferrer"&gt;LoadConnect&lt;/a&gt;, our AI dispatch copilot for freight teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  A framework, roughly
&lt;/h2&gt;

&lt;p&gt;We use decision variance and cost-if-wrong as the first pass — effectively a 2×2 for determining the initial level of autonomy: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low variance + Low cost if wrong → Automate freely&lt;br&gt;
Low variance + High cost if wrong → Automate + confirmation&lt;br&gt;
High variance + Low cost if wrong → Draft / suggestion + human finalizes&lt;br&gt;
High variance + High cost if wrong → Keep manual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The matrix is only the first pass. Whether the task’s value comes primarily from speed or judgment acts as a separate filter: if judgment is central to the task, we lower the level of autonomy by one step.&lt;/p&gt;

&lt;p&gt;Detection speed is another. Even a low-cost, reversible failure deserves less autonomy if we are unlikely to notice it quickly and reliably.&lt;/p&gt;

&lt;p&gt;In practice, these autonomy levels map to different system designs. “Automate freely” still means validation and logging. “Automate + confirmation” means generating a structured action but requiring explicit dispatcher approval. “Draft / suggestion” means the model can prepare the response but cannot execute it. “Keep manual” means AI may retrieve context or summarize information, but the actual decision remains outside the agent.&lt;/p&gt;

&lt;p&gt;The more autonomy we give a task, the more explicit its validation, logging, and failure signals need to become.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't maximum automation. It's the right level of automation for the task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The high-variance, high-cost category is smaller than people expect. But it is also where the “automate everything” instinct can do the most damage. These tasks often look repetitive and well-defined from a distance, but become much less predictable once you examine real-world cases and the consequences of getting them wrong. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An example that goes the "wrong" way on purpose&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of what I write about tends to be examples where we correctly chose not to automate something. It's worth including one where we got it wrong first.&lt;/p&gt;

&lt;p&gt;Early on, we built a feature that automatically sent a standard response when a load’s pickup window changed slightly — a templated “here’s the updated appointment, please confirm” type of message. On paper, it looked like a low-variance task: a time changed, so send an update.&lt;/p&gt;

&lt;p&gt;In practice, the reasons behind those pickup window changes turned out to be far more varied than the template assumed. Sometimes the change was routine. Other times, it signaled a larger issue with the shipper that the dispatcher needed to address directly rather than paper over with an automated message.&lt;/p&gt;

&lt;p&gt;We had measured variance at the surface of the task — a timestamp changed — instead of at the level of the decision underneath it, where the real variation was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Surface-level variance ≠ decision-level variance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We walked the automation back to a suggestion the dispatcher reviews before sending, rather than an auto-send.&lt;/p&gt;

&lt;p&gt;The lesson wasn't "don't automate messaging." It was: **measure variance at the level that actually matters, not the level that's easiest to measure. **A timestamp is easy to check for variance. The judgment call underneath it isn't, and that's usually the one that counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this costs us
&lt;/h2&gt;

&lt;p&gt;Being disciplined about this has a real cost, and it's worth naming instead of glossing over: it means shipping fewer flashy "the AI just does it for you" features than we technically could. Some AI demos look more impressive because they auto-execute actions that we deliberately keep behind a confirmation step. &lt;/p&gt;

&lt;p&gt;We've made peace with that trade. A demo that auto-books a load looks great in a thirty-second clip. It looks a lot worse the first time it books the wrong one, and in freight, that first time is a phone call and a canceled contract, not a bug report.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist, if you want to steal it
&lt;/h2&gt;

&lt;p&gt;Before we automate a task fully - not just assist with it, actually remove the human step - we want honest answers to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If we sampled a representative set of real instances — including rare and high-impact edge cases — would they require essentially the same decision, or are meaningfully different situations hiding under the same label? Are we measuring variance at the level of the actual decision, rather than just the surface of the task?&lt;/li&gt;
&lt;li&gt;Does a wrong output stay a small, contained mistake, or can its financial, operational, or reputational cost compound as volume grows?&lt;/li&gt;
&lt;li&gt;Is the current “slowness” of this task mostly wasted motion, or is it where a human is actually doing the hard part?&lt;/li&gt;
&lt;li&gt;If the system gets this wrong, how quickly and reliably will we know — and who is likely to notice first, us 
or the customer?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one matters more than it sounds. Some bad automation decisions surface immediately, in your own metrics. Others surface three weeks later, in a broker's inbox, and by then it's not really a product decision anymore - it's damage control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;"What should we automate" gets asked constantly in AI products right now. "What should we deliberately not automate, and why" gets asked a lot less, and it's usually the more useful question - because it's the one that forces you to actually understand the task instead of just measuring how often it repeats.&lt;/p&gt;

&lt;p&gt;What's one task your team has deliberately kept human-in-the-loop - and what made you decide not to automate it? &lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>product</category>
    </item>
    <item>
      <title>Where Should an AI Agent's Autonomy End?</title>
      <dc:creator>Dimitrii Khristoforidi</dc:creator>
      <pubDate>Fri, 14 Aug 2026 12:13:38 +0000</pubDate>
      <link>https://dev.to/pr_team_1292bb35fa9011924/where-should-an-ai-agents-autonomy-end-5eg</link>
      <guid>https://dev.to/pr_team_1292bb35fa9011924/where-should-an-ai-agents-autonomy-end-5eg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Notes from building an AI copilot for freight dispatch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Every few weeks, another "AI agent" launches that can act on someone's behalf — booking things, sending things, updating things. The interesting engineering question isn't "what can it do?" It's "where should we draw the line, and why?" This post is about how we thought through that line while building the AI assistant inside &lt;a href="https://loadconnect.io/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=devto" rel="noopener noreferrer"&gt;LoadConnect&lt;/a&gt;, a dispatch tool that helps truck carriers and dispatchers analyze loads, rate confirmations, and carrier information.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wrong question
&lt;/h2&gt;

&lt;p&gt;When people talk about AI agents, the conversation usually starts with capability.&lt;/p&gt;

&lt;p&gt;Can it read a document? Fill out a form? Call an API and take an action without a human in the loop?&lt;/p&gt;

&lt;p&gt;That's a fun question to build for. It's also, in my experience, the wrong first question.&lt;/p&gt;

&lt;p&gt;A more useful question is: &lt;strong&gt;what does the agent have access to, what can it do with that access, and what happens when it gets something wrong?&lt;/strong&gt;&lt;br&gt;
These are related, but they're not the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability&lt;/strong&gt; - what the model can understand, generate, or reason about. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access&lt;/strong&gt; - what data, sessions, and systems the agent can technically reach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomy&lt;/strong&gt; - what the agent is allowed to do with that access without human confirmation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can have a highly capable model with almost no autonomy - it analyzes and recommends, but never acts. You can also have a relatively simple system with dangerously high autonomy because it can make changes on its own.&lt;/p&gt;

&lt;p&gt;So the risk profile isn't determined by model capability alone. It depends on the combination of access, autonomy, likelihood of failure, and potential impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two axes, not one
&lt;/h2&gt;

&lt;p&gt;Capability still matters, but it's not the main architectural lever we can control. For the system we were building, the most useful way to reason about risk was to map access and autonomy separately:&lt;/p&gt;

&lt;p&gt;Low Access + Low Autonomy → Low Risk&lt;br&gt;
Low Access + High Autonomy → Moderate Risk&lt;br&gt;
High Access + Low Autonomy → Moderate Risk&lt;br&gt;
High Access + High Autonomy → High Risk&lt;/p&gt;

&lt;p&gt;The dangerous quadrant isn't necessarily "highly intelligent AI." It's a system that combines broad access with broad autonomy.&lt;/p&gt;

&lt;p&gt;Capability affects how well an agent can perform a task - and how sophisticated its mistakes might be. But access and autonomy determine how far those mistakes can propagate.&lt;/p&gt;

&lt;p&gt;A highly capable model with access limited to a single document and no ability to take external actions has a relatively small blast radius. A much simpler system can become significantly riskier if it can access sensitive data and make irreversible changes without confirmation.&lt;/p&gt;

&lt;p&gt;That distinction became one of the most useful mental models for us when deciding what our assistant should - and shouldn't - be allowed to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this isn't abstract in freight
&lt;/h2&gt;

&lt;p&gt;Dispatch is a good stress test for this idea because the cost of a wrong autonomous action is immediate and expensive. If an agent misreads a rate confirmation and books the wrong appointment window, that's not a UX bug - it's a missed delivery, a detention fee, or even a damaged relationship with a broker. &lt;/p&gt;

&lt;p&gt;So when we were designing the AI assistant, "what should it be allowed to decide on its own" wasn't a philosophical question - it was a product requirement with real financial consequences.&lt;/p&gt;

&lt;p&gt;Consider a rate confirmation. Before signing or otherwise accepting the final terms, the dispatcher reviews it to verify that it matches the negotiated load. The assistant helps with the understanding part - extracting the rate and mileage, calculating RPM, flagging detention terms, catching inconsistencies between the document and the load details, summarizing what deserves attention. It does not touch the commitment part - it doesn't accept the load, message the broker, change the appointment, or modify the booking on the carrier's behalf.&lt;/p&gt;

&lt;p&gt;The distinction isn't about whether the model could technically perform those actions. It's about whether the system should give the model the permissions required to perform them. We want the assistant to reduce the work required to make a decision - without quietly becoming the decision-maker.&lt;/p&gt;

&lt;p&gt;That split turned into two separate design decisions we now make independently for every feature:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What information does this feature actually need to see&lt;/strong&gt; to do its job - not what would be convenient, but the minimum required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is the agent allowed to do with what it finds&lt;/strong&gt; - surface it, or act on it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Treating these as one decision ("give it access and let it be smart about the rest") is, in my opinion, where most agent projects get into trouble.&lt;/p&gt;

&lt;h2&gt;
  
  
  Access: a deliberately narrow scope
&lt;/h2&gt;

&lt;p&gt;The basic architecture is intentionally boring:&lt;/p&gt;

&lt;p&gt;User selects a document or load&lt;br&gt;
            ↓&lt;br&gt;
Relevant content is extracted&lt;br&gt;
            ↓&lt;br&gt;
Scoped AI task is created&lt;br&gt;
            ↓&lt;br&gt;
AI analyzes the available information&lt;br&gt;
            ↓&lt;br&gt;
Recommendation / result is returned&lt;br&gt;
            ↓&lt;br&gt;
Human decides what happens next&lt;/p&gt;

&lt;p&gt;The important part is what isn't in this flow. The agent doesn't get access to the user's authenticated browser session, cookies, or credentials. It doesn't continuously observe other tabs or websites. It doesn't have a general-purpose action layer that can execute arbitrary changes.&lt;/p&gt;

&lt;p&gt;A simplified permission model looks more like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Assistant&lt;/strong&gt;&lt;br&gt;
  ├── Read selected document&lt;br&gt;
  ├── Analyze extracted data&lt;br&gt;
  ├── Calculate relevant metrics&lt;br&gt;
  └── Recommend an action&lt;/p&gt;

&lt;p&gt;✕ Access credentials&lt;br&gt;
  ✕ Read unrelated browser sessions&lt;br&gt;
  ✕ Monitor activity in the background&lt;br&gt;
  ✕ Send external messages&lt;br&gt;
  ✕ Book or modify loads&lt;br&gt;
  ✕ Change external systems&lt;/p&gt;

&lt;p&gt;This creates a useful property: even if the model produces an unexpected output, the set of things that output can affect is already constrained by the architecture - not by a rule the model is trusted to follow.&lt;/p&gt;

&lt;p&gt;The instinct when building an assistant is to wire it into everything, because more context makes the model perform better in demos. The problem is that "better in demos" and "safe in production" can pull in opposite directions. The rule we settled on is simple to state and annoying to actually follow: an agent should only touch what its current task needs, for as long as the task requires it. No background processes, no session or credential access, no cross-site visibility, no accumulating data "because it might be useful later."&lt;/p&gt;

&lt;p&gt;None of this is exotic security engineering - it's mostly saying no to permissions during the design phase instead of restricting them with policy afterward. Saying no early is a lot cheaper than walking back scope creep once a feature ships and people depend on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autonomy: think in terms of blast radius, not just error rate
&lt;/h2&gt;

&lt;p&gt;The second axis is where it gets more interesting, because autonomy is about trust as much as it is about architecture. &lt;/p&gt;

&lt;p&gt;There's a meaningful difference between an agent that says "this rate confirmation has a mismatched detention clause, you should look at it," and one that silently updates the record itself. Both use the same model. Both might even be equally reliable most of the time. But only one of them leaves a human in a position to catch the cases where the model is wrong before that mistake becomes a real-world consequence. &lt;/p&gt;

&lt;p&gt;Not every model error has the same consequence, so it's worth separating capability from what happens when that capability fails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extract information&lt;/strong&gt; → Misreads a rate → Incorrect recommendation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculate RPM&lt;/strong&gt; → Uses the wrong mileage → Poor dispatch decision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flag a contract issue&lt;/strong&gt; → Misses a clause → Risk goes unnoticed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send a broker message&lt;/strong&gt; → Sends incorrect information → External commitment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change an appointment&lt;/strong&gt; → Picks the wrong time → Operational disruption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Book a load&lt;/strong&gt; → Selects the wrong load → Financial and reputational impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A wrong recommendation can be reviewed and may be caught before it produces an external consequence. A wrong external action may already have created a commitment before anyone notices. That's why we think about autonomy partly in terms of reversibility: the more consequential or irreversible an action is, the stronger the case for keeping a human confirmation step - regardless of how confident the model is.&lt;/p&gt;

&lt;p&gt;A useful rule of thumb that came out of this: &lt;strong&gt;analyze → recommend → confirm → execute.&lt;/strong&gt; The first two steps are where an AI assistant provides real leverage. The last two are where human responsibility stays, on purpose.&lt;/p&gt;

&lt;p&gt;That doesn't mean every AI action needs a confirmation dialog - low-risk, reversible operations can often run on their own. But when an action creates an external commitment or is hard to reverse, the default should be human confirmation. The question isn't "can the model do this?" It's "what happens if the model is wrong and nobody stops it?" That question changes the design discussion considerably.&lt;/p&gt;

&lt;p&gt;In our case, it led to a deliberately conservative boundary: the agent analyzes, flags, and recommends. It does not approve, execute, or take ownership of an outcome, because accountability must remain assigned to identifiable people and organizations; it cannot be delegated to the model. If something goes wrong, "the agent decided" isn't an answer anyone in freight - or honestly, anywhere - is going to accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A framing that's helped more than any specific rule&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The framing we kept coming back to, especially when a new feature request tempted us to expand scope, was this: don't build a system that's secure because of policy - build one where the risky thing simply isn't possible by design.&lt;/p&gt;

&lt;p&gt;A policy says "the agent shouldn't do X." Architecture should make prohibited high-impact actions unreachable by the model, while policy, authorization, monitoring, and data-handling controls address the remaining risks. It's a more boring way to build software. It's also a lot more resilient, because it doesn't depend on every future engineer remembering the rule, or every prompt update preserving the guardrail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions worth asking before you widen an agent's scope
&lt;/h2&gt;

&lt;p&gt;If you're building an AI agent right now, here's roughly the checklist we run through before adding a new capability:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What does the agent actually need to see?&lt;/strong&gt; Does this feature require a new data source, or would access simply be more convenient?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's the blast radius if it gets this wrong?&lt;/strong&gt; A bad recommendation, or an external commitment?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is this analysis or action?&lt;/strong&gt; Are we asking the agent to understand something, or to change something?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If it's an action - is it reversible?&lt;/strong&gt; The harder it is to undo, the stronger the case for human confirmation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's the minimum permission required?&lt;/strong&gt; If the feature works without credentials or persistent sessions, don't add them "just in case."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do we need this access now, or are we adding it for a possible future use case?&lt;/strong&gt; If it's the latter, don't add it yet.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal isn't to make an agent incapable of doing useful work. It's to make the boundary between what the agent can understand and what it can change explicit - as a product decision, a security decision, and an architectural decision, not something left to a prompt.&lt;/p&gt;

&lt;p&gt;None of these questions require exotic tooling to answer. They mostly require being willing to say no to your own feature ideas, which is the actual hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;The capabilities will keep expanding. The boundary shouldn't have to move at the same speed.&lt;/p&gt;

&lt;p&gt;What an agent can do will keep getting more impressive every quarter. What it should be allowed to do on its own is a much slower-moving, much more durable question - and it's the one that ultimately determines whether people trust the system enough to let it near their real work.&lt;/p&gt;

&lt;p&gt;I'm curious how other teams building AI agents are drawing this line internally — especially in domains where a wrong autonomous action has a real, immediate cost. Happy to compare notes in the comments. &lt;/p&gt;

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