# Agentic Decision Rights: Removing the Human Bottleneck

> Agentic decision rights are what you delegate an agent to decide alone, and when it must hand it back. One invoice, built three ways, removes the bottleneck.

- Canonical: https://hcd.ai/agentic-ai/agentic-decision-rights/
- Published: 2026-09-08
- Updated: 2026-09-08
- Author: Sasha Merzliakov (https://hcd.ai/about/)
- Pillar: Agentic AI

---


<p class="direct-answer" data-direct-answer="true">Agentic decision rights are simply the rules provided to an agent to make decisions that a human would otherwise make, for example, <em>is this correct? if so, proceed to the next step.</em> The key value they provide is the ability to minimise humans in agentic workflows, where humans are often the bottleneck and an unscalable component of the system. In loop engineering they are the layer that decides what an agent settles autonomously versus what it hands back to a person to make a decision.</p>

<nav aria-label="Article sections" style="margin: 1.5em 0; padding: 1em 1.5em;">
<p style="margin: 0 0 0.5em; font-weight: 500;">In this article</p>
<ul style="margin: 0; padding-left: 1.2em; line-height: 1.8;">
<li><a href="#the-bottleneck">The bottleneck is a human decision</a></li>
<li><a href="#breaks-down">Where loops break down</a></li>
<li><a href="#decision-types">The decisions landscape</a></li>
<li><a href="#simple-example">A simple example</a></li>
<li><a href="#five-families">Five ways a decision gets settled</a></li>
<li><a href="#framework">The agentic decision rights framework</a></li>
<li><a href="#where-next">Where to next</a></li>
<li><a href="#faqs">Frequently Asked Questions</a></li>
</ul>
</nav>

<h2 id="the-bottleneck" style="scroll-margin-top: 6rem;">The bottleneck is a human decision</h2>

<p>Humans are often referred to as <a href="/ai-in-practice/100x-my-journey-on-the-exponential/">the bottleneck</a> in agentic workflows. This bottleneck boils down to human decisions, so the question is, can we codify these to be as good as or better than humans?</p>

<p>An agentic workflow looks something like this:</p>

<figure class="not-prose my-6">
<div class="plate plate-b">
<div class="ptitle"><b>The decision sits with a person</b><span>&#169; hcd.ai</span></div>
<div class="pscroll" role="region" tabindex="0" aria-label="The decision sits with a person. Scroll horizontally to view the full diagram.">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 686 200" role="img" aria-labelledby="adrHumanTitle adrHumanDesc">
<title id="adrHumanTitle">The decision sits with a person</title>
<desc id="adrHumanDesc">The same run, check, fix cycle. INPUT feeds RUN, RUN feeds CHECK, a failed check returns through FIX to RUN, and a passed check goes to OUTPUT. CHECK is where the decision is made, and it is owned by a person, so the cycle waits at human pace.</desc>
<defs><marker id="adrHumanAh" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--stroke)"/></marker></defs>
<rect class="d-node" shape-rendering="crispEdges" x="52" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="102" y="135" text-anchor="middle">INPUT</text>
<rect class="d-node" shape-rendering="crispEdges" x="212" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="262" y="135" text-anchor="middle">RUN</text>
<rect class="d-node is-claim" shape-rendering="crispEdges" x="374" y="116" width="100" height="30"/>
<text class="t-label d-claim" x="424" y="135" text-anchor="middle">CHECK</text>
<text class="t-key d-claim" x="424" y="170" text-anchor="middle">DECIDED BY A HUMAN</text>
<rect class="d-node" shape-rendering="crispEdges" x="534" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="584" y="135" text-anchor="middle">OUTPUT</text>
<rect class="d-node" shape-rendering="crispEdges" x="293" y="36" width="100" height="30"/>
<text class="t-label d-ink3" x="343" y="55" text-anchor="middle">FIX</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrHumanAh)" d="M152,131.5 H212"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrHumanAh)" d="M312,131.5 H374"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrHumanAh)" d="M424.5,116 V51.5 H393"/>
<text class="t-key d-ink3" x="434" y="86">FAIL</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrHumanAh)" d="M293,51.5 H262.5 V116"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrHumanAh)" d="M474,131.5 H534"/>
<text class="t-key d-ink3" x="504" y="108" text-anchor="middle">PASS</text>
</svg>
</div>
<p class="phint">Scroll to see the full diagram</p>
</div>
</figure>

<p>In loop engineering that check is completed by an agent:</p>

<figure class="not-prose my-6">
<div class="plate plate-b">
<div class="ptitle"><b>The decision sits with the agent</b><span>&#169; hcd.ai</span></div>
<div class="pscroll" role="region" tabindex="0" aria-label="The decision sits with the agent. Scroll horizontally to view the full diagram.">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 686 200" role="img" aria-labelledby="adrAgentTitle adrAgentDesc">
<title id="adrAgentTitle">The decision sits with the agent</title>
<desc id="adrAgentDesc">The identical run, check, fix cycle with one element changed. CHECK is still where the decision is made, and it is now owned by the agent, so the cycle runs without waiting for a person.</desc>
<defs><marker id="adrAgentAh" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--stroke)"/></marker></defs>
<rect class="d-node" shape-rendering="crispEdges" x="52" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="102" y="135" text-anchor="middle">INPUT</text>
<rect class="d-node" shape-rendering="crispEdges" x="212" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="262" y="135" text-anchor="middle">RUN</text>
<rect class="d-node is-claim" shape-rendering="crispEdges" x="374" y="116" width="100" height="30"/>
<text class="t-label d-claim" x="424" y="135" text-anchor="middle">CHECK</text>
<text class="t-key d-claim" x="424" y="170" text-anchor="middle">DECIDED BY THE AGENT</text>
<rect class="d-node" shape-rendering="crispEdges" x="534" y="116" width="100" height="30"/>
<text class="t-label d-ink3" x="584" y="135" text-anchor="middle">OUTPUT</text>
<rect class="d-node" shape-rendering="crispEdges" x="293" y="36" width="100" height="30"/>
<text class="t-label d-ink3" x="343" y="55" text-anchor="middle">FIX</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAgentAh)" d="M152,131.5 H212"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAgentAh)" d="M312,131.5 H374"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAgentAh)" d="M424.5,116 V51.5 H393"/>
<text class="t-key d-ink3" x="434" y="86">FAIL</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAgentAh)" d="M293,51.5 H262.5 V116"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAgentAh)" d="M474,131.5 H534"/>
<text class="t-key d-ink3" x="504" y="108" text-anchor="middle">PASS</text>
</svg>
</div>
<p class="phint">Scroll to see the full diagram</p>
</div>
</figure>


<p>This is a simplified and idealistic view, and assumes the agent check is evaluating the required standard correctly, and the agents doing the work can meet that standard.</p>

<h2 id="breaks-down" style="scroll-margin-top: 6rem;">Where loops break down</h2>

<p>Here's where governance, verification and checks break down in a loop:</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:18%;">Stage</th><th style="width:24%; text-align:left; padding-inline-start:0.5714em;">Where it breaks</th><th style="width:40%;">Ask of your loop</th><th style="width:18%;">Evidence</th></tr>
</thead>
<tbody>
<tr><td rowspan="2"><strong>Before the loop</strong></td><td style="text-align:left; padding-inline-start:0.5714em;">Nobody defined done</td><td>Is <em>done</em> written down precisely, before the loop runs?</td><td><a href="https://arxiv.org/abs/2605.09698" target="_blank" rel="noopener noreferrer">Ambig-DS</a></td></tr>
<tr><td style="text-align:left; padding-inline-start:0.5714em;">Not every answer has a reference</td><td>Is this checked against a reference, or only scored?</td><td><a href="https://arxiv.org/abs/2503.23829" target="_blank" rel="noopener noreferrer">Su et al.</a></td></tr>
<tr><td rowspan="2"><strong>Designing the check</strong></td><td style="text-align:left; padding-inline-start:0.5714em;">Nobody owns the threshold</td><td>Who owns the number, and when was it last reviewed?</td><td></td></tr>
<tr><td style="text-align:left; padding-inline-start:0.5714em;">The checker is not independent</td><td>Does the check run in the same context as the work?</td><td><a href="https://aclanthology.org/2025.emnlp-main.86/" target="_blank" rel="noopener noreferrer">Chen et al.</a>, <a href="https://arxiv.org/abs/2603.12123" target="_blank" rel="noopener noreferrer">Song</a></td></tr>
<tr><td rowspan="2"><strong>Running the loop</strong></td><td style="text-align:left; padding-inline-start:0.5714em;">One pass is not proof</td><td>Has this run more than once on the same input?</td><td><a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" target="_blank" rel="noopener noreferrer">Anthropic</a></td></tr>
<tr><td style="text-align:left; padding-inline-start:0.5714em;">Budgets are not decisions</td><td>What is the ceiling, and what happens when it is hit?</td><td><a href="https://arxiv.org/abs/2606.00198" target="_blank" rel="noopener noreferrer">BAGEN</a></td></tr>
<tr><td rowspan="2"><strong>Governing the grant</strong></td><td style="text-align:left; padding-inline-start:0.5714em;">Checkers disagree</td><td>What breaks a tie between two checkers?</td><td><a href="https://arxiv.org/abs/2604.16790" target="_blank" rel="noopener noreferrer">Zhao et al.</a></td></tr>
<tr><td style="text-align:left; padding-inline-start:0.5714em;">Grants leak</td><td>Can another agent pick up this grant, and would you know?</td><td><a href="https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing" target="_blank" rel="noopener noreferrer">UK AISI</a></td></tr>
</tbody>
</table>

<p>Understanding where loops break down is the first step in formulating agentic decision rights. Before jumping into solutions though, it's worth looking at the decision landscape.</p>


<h2 id="decision-types" style="scroll-margin-top: 6rem;">The decisions landscape</h2>

<p>A decision can be looked at from five angles, and each one asks something different about what you can hand to an agent.</p>

<h3 id="demand" style="scroll-margin-top: 6rem;">Levels of demand</h3>

<p><a href="https://doi.org/10.1109/TSMC.1983.6313160" target="_blank" rel="noopener noreferrer">Rasmussen (1983)</a> split human performance into three levels. Skill needs no thought. A Rule matches something familiar. Knowledge means reasoning it out when nothing familiar fits.</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:30%; text-align:left;">What it demands</th><th style="width:34%;">The decision is</th><th style="width:36%;">What may settle it</th></tr>
</thead>
<tbody>
<tr><td style="text-align:left;"><strong>Skill-based</strong></td><td>Determined by input. Nobody deliberates</td><td>A <strong>Reference</strong> decides, a person as fallback</td></tr>
<tr><td style="text-align:left;"><strong>Rule-based</strong></td><td>A familiar case, with no written reference yet</td><td><strong>Estimate</strong> and <strong>Challenge</strong>, a person as the fallback</td></tr>
<tr><td style="text-align:left;"><strong>Knowledge-based</strong></td><td>Novel. No rule fits, it's reasoned out</td><td><strong>Authority</strong>, with <strong>Challenge</strong> only alongside it</td></tr>
</tbody>
</table>

<h3 id="conditions" style="scroll-margin-top: 6rem;">Conditions of the grant</h3>

<p>Three questions decide whether an agent settles something alone. Two of them close rather than weigh, the way <a href="https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN47032-ADP_6-0-000-WEB-1.pdf" target="_blank" rel="noopener noreferrer">Mission Command</a> bounds delegated authority and stops there.</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:30%; text-align:left;">What to ask</th><th style="width:34%;">The decision is</th><th style="width:36%;">What it decides</th></tr>
</thead>
<tbody>
<tr><td style="text-align:left;"><strong>What does settling it demand?</strong></td><td>Skill-based, rule-based or knowledge-based</td><td>Which settlement methods are available</td></tr>
<tr><td style="text-align:left;"><strong>Can it be undone?</strong></td><td>Reversible now, or a <a href="https://s2.q4cdn.com/299287126/files/doc_financials/annual/2015-Letter-to-Shareholders.PDF" target="_blank" rel="noopener noreferrer">one-way door</a></td><td>A one-way door always goes to a person</td></tr>
<tr><td style="text-align:left;"><strong>Does it recur?</strong></td><td>Common enough to <a href="https://pubmed.ncbi.nlm.nih.gov/19739881/" target="_blank" rel="noopener noreferrer">validate a rule</a>, or rare</td><td>Rare cases always go to a person</td></tr>
</tbody>
</table>

<h3 id="knowledge" style="scroll-margin-top: 6rem;">States of knowledge</h3>

<p>What you know sets what a score is worth. <a href="https://www.econlib.org/library/Knight/knRUP.html" target="_blank" rel="noopener noreferrer">Knight</a> split risk from uncertainty in 1921 by whether the odds are known. <a href="https://doi.org/10.2307/1884324" target="_blank" rel="noopener noreferrer">Ellsberg</a> showed in 1961 that people treat unknown odds differently from known ones, and the third row, where the outcomes themselves aren't known, is my own extension.</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:30%; text-align:left;">What you know</th><th style="width:34%;">The decision is</th><th style="width:36%;">What a score is worth</th></tr>
</thead>
<tbody>
<tr><td style="text-align:left;"><strong>Risk</strong></td><td>Both the outcomes and their odds are known</td><td>A threshold means something real</td></tr>
<tr><td style="text-align:left;"><strong>Uncertainty</strong></td><td>The outcomes are known, their odds aren't</td><td>A threshold means a decimal-pointed guess</td></tr>
<tr><td style="text-align:left;"><strong>Ambiguity</strong></td><td>The full set of outcomes isn't known</td><td>A score is theatre, however precise</td></tr>
</tbody>
</table>

<h3 id="automation" style="scroll-margin-top: 6rem;">Stages of automation</h3>

<p>A decision isn't one thing to grant or withhold. <a href="https://doi.org/10.1109/3468.844354" target="_blank" rel="noopener noreferrer">Parasuraman, Sheridan and Wickens</a> split it into four stages in 2000. Hand over the early ones, keep the last: that's the usual way a loop gets built.</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:30%; text-align:left;">Which stage</th><th style="width:34%;">The agent handles</th><th style="width:36%;">What it means for the grant</th></tr>
</thead>
<tbody>
<tr><td style="text-align:left;"><strong>Acquiring information</strong></td><td>Gathering what the decision needs</td><td>Safe to hand over, rarely worth keeping</td></tr>
<tr><td style="text-align:left;"><strong>Analysing it</strong></td><td>Working out what that information means</td><td>Safe wherever it can be checked after</td></tr>
<tr><td style="text-align:left;"><strong>Selecting the action</strong></td><td>Picking the action the analysis suggests</td><td>The usual, and hardest, line to draw</td></tr>
<tr><td style="text-align:left;"><strong>Carrying it out</strong></td><td>Carrying out the action that was selected</td><td>Depends on whether it can be undone</td></tr>
</tbody>
</table>

<h3 id="information" style="scroll-margin-top: 6rem;">Holders of information</h3>

<p>Authority belongs with whoever holds the better information, the logic <a href="https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN47032-ADP_6-0-000-WEB-1.pdf" target="_blank" rel="noopener noreferrer">Mission Command</a> runs on and the idea the phrase decision rights comes from: a decision right should sit with whoever holds the specific knowledge, as <a href="https://doi.org/10.1111/j.1745-6622.1995.tb00283.x" target="_blank" rel="noopener noreferrer">Jensen and Meckling (1995)</a> put it. The doctrine is just as clear that whoever delegates keeps the responsibility, and that holds here too. Inside a loop the better-informed party is often the agent, since it holds the run history that a person only skimmed.</p>

<table style="table-layout:fixed; width:100%;">
<thead>
<tr><th style="width:30%; text-align:left;">Who knows more</th><th style="width:34%;">The decision is</th><th style="width:36%;">Where it should sit</th></tr>
</thead>
<tbody>
<tr><td style="text-align:left;"><strong>The agent</strong></td><td>It holds the full output and run history</td><td>With the agent, on a grant a person owns</td></tr>
<tr><td style="text-align:left;"><strong>The person</strong></td><td>They hold the intent and the stakes</td><td>With the person, however slow that is</td></tr>
<tr><td style="text-align:left;"><strong>Neither</strong></td><td>The information doesn't exist yet</td><td>Escalate to gather it, not to decide it</td></tr>
</tbody>
</table>

<p>Each table narrows down which way of settling a decision fits. Pick a method from the wrong row and the loop fails. A worked example comes next, then the five ways a decision gets settled.</p>
<h2 id="simple-example" style="scroll-margin-top: 6rem;">A simple example</h2>

<p>Take an invoice arriving for payment. Two agents run the loop from the opening section, one doing the work and a separate one checking it, the same split boards make when they separate managing a decision from controlling it, what <a href="https://doi.org/10.1086/467037" target="_blank" rel="noopener noreferrer">Fama and Jensen (1983)</a> call decision management and decision control.</p>

<h3 id="loop-shape" style="scroll-margin-top: 6rem;">One working agent and a separate checker</h3>
<figure class="not-prose my-6">
<div class="plate plate-b">
<div class="ptitle"><b>One working agent and a separate checker</b><span>&#169; hcd.ai</span></div>
<div class="pscroll" role="region" tabindex="0" aria-label="One working agent and a separate checker. Scroll horizontally to view the full diagram.">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 686 262" role="img" aria-labelledby="adrATitle adrADesc">
<title id="adrATitle">One working agent and a separate checker</title>
<desc id="adrADesc">An invoice enters a working agent holding RUN and FIX. RUN passes to a separate CHECK. A failed check returns into FIX and back to RUN. A passed check goes to PAYMENT. Brackets below label the two agents.</desc>
<defs><marker id="adrAAh" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--stroke)"/></marker><marker id="adrAAhc" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--claim)"/></marker></defs>
<g transform="translate(0,-34)">
<rect class="d-node" shape-rendering="crispEdges" style="fill:none" x="193" y="72" width="162" height="132"/>
<rect class="d-node" shape-rendering="crispEdges" x="55" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="112" y="169.3" text-anchor="middle">INVOICE&#8201;(1)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="96" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="115.3" text-anchor="middle">FIX&#8201;(4)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="169.3" text-anchor="middle">RUN&#8201;(2)</text>
<rect class="d-node is-claim" shape-rendering="crispEdges" x="379" y="150" width="114" height="30"/>
<text class="t-label d-claim" x="436" y="169.3" text-anchor="middle">CHECK&#8201;(3)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="169.3" text-anchor="middle">PAYMENT&#8201;(5)</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAAh)" d="M169,165.5 H217"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAAh)" d="M331,165.5 H379"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAAh)" d="M436,150 V111 H331"/>
<text class="t-key d-ink3" x="383" y="104" text-anchor="middle">FAIL</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAAh)" d="M274,126 V150"/>
<path class="d-axis is-claim" shape-rendering="crispEdges" fill="none" marker-end="url(#adrAAhc)" d="M493,165.5 H517"/>
<text class="t-key d-claim" x="505" y="132" text-anchor="middle">PASS</text>
<path class="d-bracket" d="M192.5,216 V226.5 H355.5 V216"/>
<path class="d-bracket" d="M274,226.5 V240"/>
<text class="t-label d-ink3" x="274" y="254" text-anchor="middle">WORKING AGENT</text>
<path class="d-bracket" d="M378.5,216 V226.5 H493.5 V216"/>
<path class="d-bracket" d="M436,226.5 V240"/>
<text class="t-label d-ink3" x="436" y="254" text-anchor="middle">CHECKING AGENT</text>
</g>
</svg>
</div>
<p class="phint">Scroll to see the full diagram</p>
</div>
</figure>

<ol>
<li>An invoice arrives</li>
<li>The working agent matches it to the PO and delivery receipt</li>
<li>A separate checking agent validates that match</li>
<li>A failure goes back to the same agent to correct</li>
<li>A pass sends it for payment</li>
</ol>

<h3 id="loop-ceiling" style="scroll-margin-top: 6rem;">The same loop with a ceiling on the retry</h3>
<figure class="not-prose my-6">
<div class="plate plate-b">
<div class="ptitle"><b>The same loop with a ceiling on the retry</b><span>&#169; hcd.ai</span></div>
<div class="pscroll" role="region" tabindex="0" aria-label="The same loop with a ceiling on the retry. Scroll horizontally to view the full diagram.">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 686 262" role="img" aria-labelledby="adrBTitle adrBDesc">
<title id="adrBTitle">The same loop with a ceiling on the retry</title>
<desc id="adrBDesc">A failed check rises from CHECK and splits. Three failures or fewer return left into FIX. More than three pass right to a PERSON, whose decision drops down into PAYMENT. Brackets below label the two agents.</desc>
<defs><marker id="adrBAh" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--stroke)"/></marker><marker id="adrBAhc" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--claim)"/></marker></defs>
<g transform="translate(0,-34)">
<rect class="d-node" shape-rendering="crispEdges" style="fill:none" x="193" y="72" width="162" height="132"/>
<rect class="d-node" shape-rendering="crispEdges" x="55" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="112" y="169.3" text-anchor="middle">INVOICE&#8201;(1)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="96" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="115.3" text-anchor="middle">FIX&#8201;(4)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="169.3" text-anchor="middle">RUN&#8201;(2)</text>
<rect class="d-node is-claim" shape-rendering="crispEdges" x="379" y="150" width="114" height="30"/>
<text class="t-label d-claim" x="436" y="169.3" text-anchor="middle">CHECK&#8201;(3)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="169.3" text-anchor="middle">PAYMENT&#8201;(5)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="96" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="115.3" text-anchor="middle">PERSON&#8201;(6)</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M169,165.5 H217"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M331,165.5 H379"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M436,150 V111 H331"/>
<text class="t-key d-ink3" x="380" y="104" text-anchor="middle">&#8804;3</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M436,150 V111 H517"/>
<text class="t-key d-ink3" x="476" y="104" text-anchor="middle">&#62;3</text>
<text class="t-key d-ink3" x="395" y="130" text-anchor="middle">FAIL</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M274,126 V150"/>
<path class="d-axis is-claim" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAhc)" d="M493,165.5 H517"/>
<text class="t-key d-claim" x="505" y="199" text-anchor="middle">PASS</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrBAh)" d="M574,126 V150"/>
<path class="d-bracket" d="M192.5,216 V226.5 H355.5 V216"/>
<path class="d-bracket" d="M274,226.5 V240"/>
<text class="t-label d-ink3" x="274" y="254" text-anchor="middle">WORKING AGENT</text>
<path class="d-bracket" d="M378.5,216 V226.5 H493.5 V216"/>
<path class="d-bracket" d="M436,226.5 V240"/>
<text class="t-label d-ink3" x="436" y="254" text-anchor="middle">CHECKING AGENT</text>
</g>
</svg>
</div>
<p class="phint">Scroll to see the full diagram</p>
</div>
</figure>

<ul>
<li>A fourth failure stops the loop and hands it to a person (6)</li>
<li>The person's decision then goes on to payment</li>
</ul>

<h3 id="loop-precedent" style="scroll-margin-top: 6rem;">Precedent proposes what the retry could not</h3>
<figure class="not-prose my-6">
<div class="plate plate-b">
<div class="ptitle"><b>Precedent proposes what the retry could not</b><span>&#169; hcd.ai</span></div>
<div class="pscroll" role="region" tabindex="0" aria-label="Precedent proposes what the retry could not. Scroll horizontally to view the full diagram.">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 686 240" role="img" aria-labelledby="adrCTitle adrCDesc">
<title id="adrCTitle">Precedent proposes what the retry could not</title>
<desc id="adrCDesc">A failed check rises from CHECK and splits. Three or fewer return left into FIX. More than three pass right to RESOLVE, which proposes a match from previously settled cases. A match returns left, then down to CHECK for validation. No match rises to a PERSON, whose decision returns to PAYMENT.</desc>
<defs><marker id="adrCAh" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--stroke)"/></marker><marker id="adrCAhc" markerWidth="8" markerHeight="8" refX="7.5" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0,0 L8,4 L0,8 z" fill="var(--claim)"/></marker></defs>
<g transform="translate(0,-2)">
<rect class="d-node" shape-rendering="crispEdges" style="fill:none" x="193" y="72" width="162" height="132"/>
<rect class="d-node" shape-rendering="crispEdges" x="55" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="112" y="169.3" text-anchor="middle">INVOICE&#8201;(1)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="96" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="115.3" text-anchor="middle">FIX&#8201;(4)</text>
<rect class="d-node" shape-rendering="crispEdges" x="217" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="274" y="169.3" text-anchor="middle">RUN&#8201;(2)</text>
<rect class="d-node is-claim" shape-rendering="crispEdges" x="379" y="150" width="114" height="30"/>
<text class="t-label d-claim" x="436" y="169.3" text-anchor="middle">CHECK&#8201;(3)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="150" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="169.3" text-anchor="middle">PAYMENT&#8201;(5)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="96" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="115.3" text-anchor="middle">RESOLVE&#8201;(6)</text>
<rect class="d-node" shape-rendering="crispEdges" x="517" y="40" width="114" height="30"/>
<text class="t-label d-ink3" x="574" y="59.3" text-anchor="middle">PERSON&#8201;(7)</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M169,165.5 H217"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M331,165.5 H379"/>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M436,150 V111 H331"/>
<text class="t-key d-ink3" x="380" y="104" text-anchor="middle">&#8804;3</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M436,150 V111 H517"/>
<text class="t-key d-ink3" x="476" y="104" text-anchor="middle">&#62;3</text>
<text class="t-key d-ink3" x="395" y="130" text-anchor="middle">FAIL</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M274,126 V150"/>
<path class="d-axis is-claim" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAhc)" d="M493,165.5 H517"/>
<text class="t-key d-claim" x="505" y="199" text-anchor="middle">PASS</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M574,96 V70"/>
<text class="t-key d-ink3" x="615" y="87.7" text-anchor="middle">NO MATCH</text>
<path class="d-axis is-claim" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAhc)" d="M517,118.5 H460 V150"/>
<text class="t-key d-claim" x="505" y="142.7" text-anchor="middle">MATCH</text>
<path class="d-axis" shape-rendering="crispEdges" fill="none" marker-end="url(#adrCAh)" d="M631,55.5 H656 V165.5 H631"/>
</g>
</svg>
</div>
<p class="phint">Scroll to see the full diagram</p>
</div>
</figure>

<ul>
<li>Failures over three now go to a third agent, resolve (6)</li>
<li>Resolve proposes a match from cases already settled</li>
<li>A proposed match goes back to check (3) to confirm</li>
<li>Only an unmatched case reaches a person (7)</li>
</ul>

<p>This is where the loop stops being static. Every mismatch a person resolves becomes another entry in the store, so the case that needed a person last quarter is the case the loop settles alone this quarter. The human does not disappear, they move further from the work each time it runs.</p>

<p>That's the cost, not just the payoff. <a href="https://doi.org/10.1016/0005-1098(83)90046-8" target="_blank" rel="noopener noreferrer">Bainbridge (1983)</a> called this the irony of automation: automate the routine cases and what's left for the person is only the hard ones, right when they've had the least practice, judged from a summary instead of from doing the work. In this loop the person only ever sees the mismatches the store couldn't explain, so the loop has to keep them in practice, a sample of settled cases to review now and then, or the reasoning shown with each escalation, otherwise the hardest case lands on whoever is least ready for it.</p>

<h2 id="five-families" style="scroll-margin-top: 6rem;">Five ways a decision gets settled</h2>

<p>These are the five families, the key ways a decision gets settled, ordered from the one that settles most on its own down to the one that hands the call to a person. Reaching a goal is a state the loop ends in rather than a way of settling anything, and the five below are how you work out that you reached it.</p>

<h3 id="reference" style="scroll-margin-top: 6rem;">1. Reference</h3>

<p><strong>What.</strong> A predetermined reference decides, and the agent has no say in the answer. Software testing calls this an oracle.</p>

<p><strong>So what.</strong> It is the only settlement that does not rest on the agent's judgement, which makes it the strongest and the most tightly bounded by whatever it was told to check.</p>

<p style="margin-bottom:0"><strong>Examples:</strong></p>
<ul style="margin-top:0; margin-bottom:0">
<li style="margin:0">A test suite passes, or names the line that failed</li>
<li style="margin:0">A schema validates the output, or rejects it</li>
<li style="margin:0">Claims checked one by one against retrieved evidence</li>
<li style="margin:0">A sandbox run that observes the end state, not the exit code</li>
<li style="margin:0">A signature or checksum matching what the source published</li>
</ul>

<h3 id="estimate" style="scroll-margin-top: 6rem;">2. Estimate</h3>

<p><strong>What.</strong> A score stands in for the truth, so the decision is only as good as that score's calibration.</p>

<p><strong>So what.</strong> It scales where a fixed reference cannot reach, and it fails quietly, because a badly calibrated number looks exactly like a well calibrated one.</p>

<p style="margin-bottom:0"><strong>Examples:</strong></p>
<ul style="margin-top:0; margin-bottom:0">
<li style="margin:0"><a href="https://www.nature.com/articles/s41586-024-07421-0" target="_blank" rel="noopener noreferrer">Semantic entropy</a>, clustering sampled answers by meaning</li>
<li style="margin:0">Conformal prediction, holding the truth at a set rate</li>
<li style="margin:0">Agreement across independent runs with no shared blind spot</li>
<li style="margin:0">A preference model scoring on what it was trained to favour</li>
<li style="margin:0">A token probability, only meaningful on a constrained answer</li>
</ul>

<h3 id="challenge" style="scroll-margin-top: 6rem;">3. Challenge</h3>

<p><strong>What.</strong> A reviewer that had no hand in producing the work looks at it.</p>

<p><strong>So what.</strong> What it buys is independence rather than hostility, which is the answer to <a href="https://arxiv.org/abs/2404.13076" target="_blank" rel="noopener noreferrer">a model recognising and favouring its own output</a>.</p>

<p style="margin-bottom:0"><strong>Examples:</strong></p>
<ul style="margin-top:0; margin-bottom:0">
<li style="margin:0">A fresh session reviewing what the first session produced</li>
<li style="margin:0">A different vendor's model reviewing the first one's work</li>
<li style="margin:0">Independent reviewers concurring, none of whom did the work</li>
<li style="margin:0">A reviewer given the output but not the brief behind it</li>
<li style="margin:0">A reviewer that runs the work rather than reads it</li>
</ul>

<h3 id="exhaustion" style="scroll-margin-top: 6rem;">4. Exhaustion</h3>

<p><strong>What.</strong> The loop stops because carrying on stopped being worth the cost.</p>

<p><strong>So what.</strong> It bounds every other family, and on its own it settles nothing about whether the work is right.</p>

<p style="margin-bottom:0"><strong>Examples:</strong></p>
<ul style="margin-top:0; margin-bottom:0">
<li style="margin:0">A retry cap reached, or a deadline passed</li>
<li style="margin:0">Output that stopped changing between rounds</li>
<li style="margin:0">Work dropped because finishing it was never important enough</li>
<li style="margin:0">The next round costing more than the improvement it buys</li>
<li style="margin:0">A queue that emptied, with nothing left to work on</li>
</ul>

<h3 id="authority" style="scroll-margin-top: 6rem;">5. Authority</h3>

<p><strong>What.</strong> A person takes the call and keeps it.</p>

<p><strong>So what.</strong> Its claim is accountability rather than knowledge, which is why it sits last and is not the weakest.</p>

<p style="margin-bottom:0"><strong>Examples:</strong></p>
<ul style="margin-top:0; margin-bottom:0">
<li style="margin:0">An irreversible action nobody will be able to undo</li>
<li style="margin:0">A contested claim someone will answer for in public</li>
<li style="margin:0">A tie where the checkers turned out to share a blind spot</li>
<li style="margin:0">A call that law or contract reserves to a named person</li>
<li style="margin:0">A matter of taste that no rule has ever managed to capture</li>
</ul>

<h2 id="framework" style="scroll-margin-top: 6rem;">The agentic decision rights framework</h2>

<p>I built this into a Claude Code skill. Point it at a decision and you get a written record, not an opinion someone will forget. Writing a decision down with who authorised it is not new, the <a href="https://www.omg.org/spec/DMN/1.5/" target="_blank" rel="noopener noreferrer">DMN standard</a> has done it for business rules since 2015. What it leaves out is the loop, the cap and the escalation. Two rules come before anything else, whatever the table below says: an action nobody can undo goes to a person, and so does a decision too rare to have any history.</p>

<p>A dot means that family can settle a decision of that kind on its own, while a ring means it can only contribute, with another family making the final call. A dash means there's nothing on offer there. Authority is a dot everywhere because a person can always take the call, and Exhaustion is a ring everywhere because a budget can end any loop without saying whether the work was right, which is why neither row tells you which family to build.</p>

<table style="table-layout:fixed; width:100%; border-collapse:collapse; border:1px solid #d4d4d4;">
<thead>
<tr>
  <th rowspan="2" scope="col" style="width:40%; text-align:left; vertical-align:bottom; padding:0 0 1em 10px; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto;">Settlement</th>
  <th colspan="3" scope="colgroup" style="width:30%; text-align:center; vertical-align:middle; font-weight:500; padding:0.5em 0.4em; border:1px solid #d4d4d4;">What it demands</th>
  <th colspan="3" scope="colgroup" style="width:30%; text-align:center; vertical-align:middle; font-weight:500; padding:0.5em 0.4em; border:1px solid #d4d4d4;">What you can know</th>
</tr>
<tr>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px solid #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Skill</span></th>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px dashed #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Rule</span></th>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px dashed #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Knowledge</span></th>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px solid #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Risk</span></th>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px dashed #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Uncertainty</span></th>
  <th scope="col" style="width:10%; text-align:center; vertical-align:bottom; font-size:0.85em; height:7rem; padding:0 0 1em 0; border-left:1px dashed #d4d4d4;"><span style="display:inline-block; writing-mode:vertical-rl; text-orientation:mixed; transform:rotate(180deg); white-space:nowrap; line-height:1;">Ambiguity</span></th>
</tr>
</thead>
<tbody>

<tr>
  <th scope="row" style="text-align:left; font-weight:400; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto; padding-left:10px;">Reference</th>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
</tr>

<tr>
  <th scope="row" style="text-align:left; font-weight:400; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto; padding-left:10px;">Estimate</th>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><rect x="3" y="6.4" width="8" height="1.2" fill="#d4d4d4"/></svg></span><span class="sr-only">Not available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><rect x="3" y="6.4" width="8" height="1.2" fill="#d4d4d4"/></svg></span><span class="sr-only">Not available</span></td>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><rect x="3" y="6.4" width="8" height="1.2" fill="#d4d4d4"/></svg></span><span class="sr-only">Not available</span></td>
</tr>

<tr>
  <th scope="row" style="text-align:left; font-weight:400; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto; padding-left:10px;">Challenge</th>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
</tr>

<tr>
  <th scope="row" style="text-align:left; font-weight:400; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto; padding-left:10px;">Exhaustion</th>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg></span><span class="sr-only">Available, but not on its own</span></td>
</tr>

<tr>
  <th scope="row" style="text-align:left; font-weight:400; white-space:normal; overflow-wrap:break-word; -webkit-hyphens:auto; hyphens:auto; padding-left:10px;">Authority</th>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px solid #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
  <td style="border-left:1px dashed #d4d4d4; text-align:center; padding:1em 0;"><span aria-hidden="true" style="display:block;"><svg width="14" height="14" viewBox="0 0 14 14" style="display:block; margin:0 auto;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg></span><span class="sr-only">Available</span></td>
</tr>

</tbody>
</table>

<p style="margin-top: 0.75em; display:flex; flex-wrap:wrap; gap:1.5em; font-size:13px; color:#6b6b6b;">
  <span style="display:inline-flex; align-items:center; gap:0.5em;"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" style="flex-shrink:0;"><circle cx="7" cy="7" r="6" fill="#0a0a0a"/></svg>Available</span>
  <span style="display:inline-flex; align-items:center; gap:0.5em;"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" style="flex-shrink:0;"><circle cx="7" cy="7" r="6" fill="none" stroke="#3a3a3a" stroke-width="1.5"/><circle cx="7" cy="7" r="2.25" fill="#3a3a3a"/></svg>Available, but not on its own</span>
  <span style="display:inline-flex; align-items:center; gap:0.5em;"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" style="flex-shrink:0;"><rect x="3" y="6.4" width="8" height="1.2" fill="#d4d4d4"/></svg>Not available</span>
</p>

<h3 id="reading-the-matrix" style="scroll-margin-top: 6rem;">Example usage</h3>

<p>Take the invoice check from the loop above. It's asking whether the bill matches what was ordered and what arrived. Two questions decide where it lands.</p>
<ol>
<li><em>What does settling it demand?</em> The order already decided what's correct, so the check just reads the answer instead of working it out. That's Skill.</li>
<li><em>What can you know when you decide?</em> The numbers match or they don't, and a trusted purchase order tells you which, so nothing is left to chance. That's Risk.</li>
</ol>
<p>Look down the Skill and Risk columns for a family with a dot in both. Reference and Authority both qualify, and the matrix lands where the check already was. Reference is the stronger of the two, so it decides. Authority is the person the loop hands to once the ceiling is hit, the way the second and third builds of the loop showed it, and Exhaustion's ring is the budget that sets that ceiling. The two rules above the table still hold regardless. Build three adds a second decision, Resolve proposing a match from precedent. Matching a known situation is Rule-based, and a similarity score has no known odds behind it, so that is Uncertainty. Read down those two columns and Challenge qualifies outright, a second checker the third build does not add, while Estimate only holds a ring under Uncertainty, so it can propose but not settle, which is why the proposal goes back to the check, where the original Skill by Risk decision runs again on the proposed match.</p>

<h3 id="skill-file" style="scroll-margin-top: 6rem;">SKILL.md</h3>

<p>The following skill turns those two rules and the five families into a written record, whether you're checking a piece of shipped work or a running loop.</p>

<div class="not-prose my-10">
<a href="https://github.com/sashamerzliakov/agentic-decision-rights" target="_blank" rel="noopener noreferrer" aria-label="View the agentic-decision-rights skill file on GitHub" class="no-underline hover:bg-[#2a2a3c] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-accent" style="display:inline-flex; align-items:center; gap:0.65rem; background:#1e1e2e; color:#cdd6f4; font-family:'JetBrains Mono',monospace; font-size:0.875rem; line-height:1; padding:0.85rem 1.4rem; border-radius:9999px; transition:background-color .2s ease, color .2s ease; max-width:100%; overflow-wrap:anywhere;">
<svg aria-hidden="true" width="17" height="17" viewBox="0 0 16 16" fill="currentColor" style="flex-shrink:0;"><path d="M8 0C3.58 0 0 3.58 0 8a8 8 0 0 0 5.47 7.59c.4.07.55-.17.55-.38v-1.33C3.81 14.36 3.35 12.8 3.35 12.8c-.36-.92-.88-1.16-.88-1.16-.72-.49.05-.48.05-.48.8.06 1.22.82 1.22.82.71 1.21 1.86.86 2.31.66.07-.52.28-.86.5-1.06-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.6 7.6 0 0 1 4 0c1.53-1.03 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.28.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48v2.19c0 .21.15.46.55.38A8 8 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>
<span>github.com/sashamerzliakov/agentic-decision-rights</span></a>
</div>

<h2 id="where-next" style="scroll-margin-top: 6rem;">Where to next</h2>

<p>Agentic Decision Rights provide a starting framework to work from to remove the human bottleneck. Mapping the decision space provides a means to systematically evaluate and iterate ever more complex decisions. It also helps define where a human is still needed.</p>

<p>We can then start to look at closing the gap when it comes to Knowledge and Ambiguity to ultimately grant those decisions too.</p>

{% faqs faqs %}

<aside class="not-prose mt-16 pt-8 border-t border-brand-border" id="references">
  <p class="section-label mb-4">References</p>
  <div class="text-sm text-brand-text-muted space-y-2">
    <p>Anthropic. 2026a. <em>Choose a permission mode</em> [Online]. Available: <a href="https://code.claude.com/docs/en/permission-modes" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">code.claude.com</a> [Accessed 8 September 2026].</p>
    <p>Anthropic. 2026b. <em>Demystifying evals for AI agents</em> [Online]. Available: <a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">anthropic.com</a> [Accessed 8 September 2026].</p>
    <p>Bainbridge, L. 1983. Ironies of automation. <em>Automatica</em>, 19(6), pp.775-779. doi:10.1016/0005-1098(83)90046-8. Available: <a href="https://doi.org/10.1016/0005-1098(83)90046-8" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Bezos, J. 2015. <em>Letter to shareholders</em>. Amazon.com, Inc. Available: <a href="https://s2.q4cdn.com/299287126/files/doc_financials/annual/2015-Letter-to-Shareholders.PDF" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">s2.q4cdn.com</a> [Accessed 8 September 2026].</p>
    <p>Chen, Z.-Y., Wang, H., Zhang, X., Hu, E. and Lin, Y. 2025. Beyond the surface: measuring self-preference in LLM judgments. In: <em>Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing</em>, pp.1653-1672. Available: <a href="https://aclanthology.org/2025.emnlp-main.86/" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">aclanthology.org</a> [Accessed 8 September 2026].</p>
    <p>CrewAI. 2026. <em>Agents</em> [Online]. Available: <a href="https://docs.crewai.com/en/concepts/agents" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">docs.crewai.com</a> [Accessed 8 September 2026].</p>
    <p>Ellsberg, D. 1961. Risk, ambiguity, and the Savage axioms. <em>The Quarterly Journal of Economics</em>, 75(4), pp.643-669. doi:10.2307/1884324. Available: <a href="https://doi.org/10.2307/1884324" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Fama, E.F. and Jensen, M.C. 1983. Separation of ownership and control. <em>The Journal of Law and Economics</em>, 26(2), pp.301-325. doi:10.1086/467037. Available: <a href="https://doi.org/10.1086/467037" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Farquhar, S., Kossen, J., Kuhn, L. and Gal, Y. 2024. Detecting hallucinations in large language models using semantic entropy. <em>Nature</em>, 630(8017), pp.625-630. doi:10.1038/s41586-024-07421-0. Available: <a href="https://www.nature.com/articles/s41586-024-07421-0" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">nature.com</a> [Accessed 8 September 2026].</p>
    <p>Huang, J., Chen, X., Mishra, S., Zheng, H.S., Yu, A.W., Song, X. and Zhou, D. 2023. <em>Large language models cannot self-correct reasoning yet</em>. arXiv:2310.01798. Available: <a href="https://arxiv.org/abs/2310.01798" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Inngest. 2026. <em>Retries</em> [Online]. Available: <a href="https://www.inngest.com/docs/features/inngest-functions/error-retries/retries" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">inngest.com</a> [Accessed 8 September 2026].</p>
    <p>Jensen, M.C. and Meckling, W.H. 1995. Specific and general knowledge, and organizational structure. <em>Journal of Applied Corporate Finance</em>, 8(2), pp.4-18. doi:10.1111/j.1745-6622.1995.tb00283.x. Available: <a href="https://doi.org/10.1111/j.1745-6622.1995.tb00283.x" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Kahneman, D. and Klein, G. 2009. Conditions for intuitive expertise: a failure to disagree. <em>American Psychologist</em>, 64(6), pp.515-526. Available: <a href="https://pubmed.ncbi.nlm.nih.gov/19739881/" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">pubmed.ncbi.nlm.nih.gov</a> [Accessed 8 September 2026].</p>
    <p>Knight, F.H. 1921. <em>Risk, uncertainty and profit</em>. Boston: Houghton Mifflin. Available: <a href="https://www.econlib.org/library/Knight/knRUP.html" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">econlib.org</a> [Accessed 8 September 2026].</p>
    <p>LangChain. 2026. <em>LangGraph graph API: recursion limit</em> [Online]. Available: <a href="https://docs.langchain.com/oss/python/langgraph/graph-api" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">docs.langchain.com</a> [Accessed 8 September 2026].</p>
    <p>Lin, Y., Wang, Z., Liu, M., Shan, Y., Bai, L., Zhang, J., Jin, X., Chen, B., Su, J., Wang, X., Pei, J. and Li, M. 2026. <em>BAGEN: are LLM agents budget-aware?</em> arXiv:2606.00198. Available: <a href="https://arxiv.org/abs/2606.00198" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Mozannar, H. and Sontag, D. 2020. <em>Consistent estimators for learning to defer to an expert</em>. arXiv:2006.01862. Available: <a href="https://arxiv.org/abs/2006.01862" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Object Management Group. 2024. <em>Decision Model and Notation (DMN), version 1.5</em> [Online]. Available: <a href="https://www.omg.org/spec/DMN/1.5/" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">omg.org</a> [Accessed 8 September 2026].</p>
    <p>Panickssery, A., Bowman, S.R. and Feng, S. 2024. <em>LLM evaluators recognize and favor their own generations</em>. arXiv:2404.13076. Available: <a href="https://arxiv.org/abs/2404.13076" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Parasuraman, R., Sheridan, T.B. and Wickens, C.D. 2000. A model for types and levels of human interaction with automation. <em>IEEE Transactions on Systems, Man, and Cybernetics - Part A: Systems and Humans</em>, 30(3), pp.286-297. doi:10.1109/3468.844354. Available: <a href="https://doi.org/10.1109/3468.844354" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Rasmussen, J. 1983. Skills, rules, and knowledge; signals, signs, and symbols, and other distinctions in human performance models. <em>IEEE Transactions on Systems, Man, and Cybernetics</em>, 13(3), pp.257-266. doi:10.1109/TSMC.1983.6313160. Available: <a href="https://doi.org/10.1109/TSMC.1983.6313160" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">doi.org</a> [Accessed 8 September 2026].</p>
    <p>Song, T.-E. 2026. <em>Cross-context review: improving LLM output quality by separating production and review sessions</em>. arXiv:2603.12123, submitted 12 March. Available: <a href="https://arxiv.org/abs/2603.12123" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Stoisser, J.L., Boubnovski Martell, M., Boldsen, S., M&auml;rtens, K. and Kitchen, R. 2026. <em>Ambig-DS: a benchmark for task-framing ambiguity in data-science agents</em>. arXiv:2605.09698. Available: <a href="https://arxiv.org/abs/2605.09698" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>Su, Y., Yu, D., Song, L., Li, J., Mi, H., Tu, Z., Zhang, M. and Yu, D. 2025. <em>Crossing the reward bridge: expanding RL with verifiable rewards across diverse domains</em>. arXiv:2503.23829. Available: <a href="https://arxiv.org/abs/2503.23829" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
    <p>UK AI Security Institute. 2026. <em>Incident report: unsanctioned agent behaviour during cyber testing</em> [Online]. Available: <a href="https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">aisi.gov.uk</a> [Accessed 8 September 2026].</p>
    <p>US Army. 2026. <em>ADP 6-0, Command and control</em>. Washington, DC: Headquarters, Department of the Army. Available: <a href="https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN47032-ADP_6-0-000-WEB-1.pdf" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">armypubs.army.mil</a> [Accessed 8 September 2026].</p>
    <p>Zhao, Z., Esmaeili, A. and Fard, F. 2026. <em>Bias in the loop: auditing LLM-as-a-judge for software engineering</em>. arXiv:2604.16790. Available: <a href="https://arxiv.org/abs/2604.16790" target="_blank" rel="noreferrer noopener" class="text-brand-accent hover:text-brand-accent-hover transition-colors">arxiv.org</a> [Accessed 8 September 2026].</p>
  </div>
</aside>

