<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Eric MacDougall: field essays</title>
    <link>https://ericmacdougall.com/journal/</link>
    <description>Long-form essays about running AI agents in production.</description>
    <language>en</language>
    <lastBuildDate>Sat, 07 Nov 2026 15:00:00 +0000</lastBuildDate>
    <atom:link href="https://ericmacdougall.com/journal/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Delivery you can recover</title>
      <link>https://ericmacdougall.com/journal/delivery-you-can-recover/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/delivery-you-can-recover/</guid>
      <pubDate>Sat, 07 Nov 2026 15:00:00 +0000</pubDate>
      <description>Journal before the risky step, lock the scope, refuse blind retries and leave one checked way out; then never delete agent logs you have not verified saved.</description>
    </item>
    <item>
      <title>Guards that say which way they lean</title>
      <link>https://ericmacdougall.com/journal/guards-that-say-which-way-they-lean/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/guards-that-say-which-way-they-lean/</guid>
      <pubDate>Sat, 07 Nov 2026 15:00:00 +0000</pubDate>
      <description>How guards for commands, process stops and production deletes decide when they cannot tell, what each one leans toward, and why they are best-effort controls and not a complete boundary.</description>
    </item>
    <item>
      <title>Escalation rules and the bill</title>
      <link>https://ericmacdougall.com/journal/escalation-rules-and-the-bill/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/escalation-rules-and-the-bill/</guid>
      <pubDate>Sat, 07 Nov 2026 15:00:00 +0000</pubDate>
      <description>Write the escalation rule as a table, count failures only from receipts the tools wrote, and put a budget wrapper with a memory around each expensive command.</description>
    </item>
    <item>
      <title>The spec, the reviewers and the evidence ledger</title>
      <link>https://ericmacdougall.com/journal/the-spec-the-reviewers-and-the-evidence-ledger/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-spec-the-reviewers-and-the-evidence-ledger/</guid>
      <pubDate>Sat, 07 Nov 2026 15:00:00 +0000</pubDate>
      <description>Write down what done means before the work, bind two different reviewers to that exact text, and let a merge gate read every result on the exact commit.</description>
    </item>
    <item>
      <title>Why agents cannot grade their own work</title>
      <link>https://ericmacdougall.com/journal/why-agents-cannot-grade-their-own-work/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/why-agents-cannot-grade-their-own-work/</guid>
      <pubDate>Sat, 07 Nov 2026 15:00:00 +0000</pubDate>
      <description>An author calling work done is a claim, not evidence; a small harness turns it into rules and checks a reviewer approval against the stage, commit and packet it actually read.</description>
    </item>
    <item>
      <title>Late replies must match the current identity before they write</title>
      <link>https://ericmacdougall.com/journal/late-replies-must-match-the-current-identity-before-they-write/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/late-replies-must-match-the-current-identity-before-they-write/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Four products, one bug: a late reply, cleanup step or expired lease changed current state. Carry identity into every write and test the orderings with a controlled clock.</description>
    </item>
    <item>
      <title>A path contract has more readers than the review names</title>
      <link>https://ericmacdougall.com/journal/a-path-contract-has-more-readers-than-the-review-names/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-path-contract-has-more-readers-than-the-review-names/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>When a fix changes a shared path, review finds one broken reader per round. Make the reader inventory a failing test with an empty allowlist before the first fix.</description>
    </item>
    <item>
      <title>A request ledger has to survive its own extractor</title>
      <link>https://ericmacdougall.com/journal/a-request-ledger-has-to-survive-its-own-extractor/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-request-ledger-has-to-survive-its-own-extractor/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>An audit of 236 requests found 52 stalled, and the capture fix could be silenced by one long message. How to build request capture that cannot switch itself off.</description>
    </item>
    <item>
      <title>Parallel branches need one owner for the migration index</title>
      <link>https://ericmacdougall.com/journal/parallel-branches-need-one-owner-for-the-migration-index/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/parallel-branches-need-one-owner-for-the-migration-index/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Agent branches that pick their own migration numbers collide. A landing order with one owner, reserve-first indexes and a merge-based re-chain recipe keep the chain intact.</description>
    </item>
    <item>
      <title>Nothing that runs should live where cleanup can reach it</title>
      <link>https://ericmacdougall.com/journal/nothing-that-runs-should-live-where-cleanup-can-reach-it/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/nothing-that-runs-should-live-where-cleanup-can-reach-it/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>An agent harness that grew in a scratch folder lost most of its runnable code in about 80 seconds. How to spot the pattern, recover, and keep code and gates out of cleanup&#x27;s reach.</description>
    </item>
    <item>
      <title>When two hooks disagree, write the precedence order down</title>
      <link>https://ericmacdougall.com/journal/when-two-hooks-disagree-write-the-precedence-order-down/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/when-two-hooks-disagree-write-the-precedence-order-down/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A Stop hook said push before stopping and the runner said never push. Two agents resolved it correctly, and a written precedence order keeps that from resting on judgment.</description>
    </item>
    <item>
      <title>The agents used 8% of the host. The polling around them used more</title>
      <link>https://ericmacdougall.com/journal/the-agents-used-8-percent-of-the-host-the-polling-used-more/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-agents-used-8-percent-of-the-host-the-polling-used-more/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Agent engines took 3.6 of 44 cores while supervisors forked 5,751 processes a second, and the idle host was disk-bound on shared storage. Measure the control plane first.</description>
    </item>
    <item>
      <title>Check that each git worktree resolves to itself</title>
      <link>https://ericmacdougall.com/journal/check-that-each-git-worktree-resolves-to-itself/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/check-that-each-git-worktree-resolves-to-itself/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>One shared git setting made 17 linked worktrees write into a live tree. How to detect it with one command, prove the fix with a negative control and keep worktree isolation real.</description>
    </item>
    <item>
      <title>A fail-closed allow-list can silently disable your failover</title>
      <link>https://ericmacdougall.com/journal/a-fail-closed-allow-list-can-silently-disable-your-failover/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-fail-closed-allow-list-can-silently-disable-your-failover/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A strict model allow-list refused every request on a relay&#x27;s backup path for two weeks. How to spot it, probe fallbacks with real payloads and alert on zero successes.</description>
    </item>
    <item>
      <title>Fourteen control files became one release command</title>
      <link>https://ericmacdougall.com/journal/fourteen-control-files-became-one-release-command/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/fourteen-control-files-became-one-release-command/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A site release had 14 control files and a 923 MB archive, and still could not ship. What one refusing, reading-back release script kept, and the gap it still has.</description>
    </item>
    <item>
      <title>Measure the split before you redesign the agent loop</title>
      <link>https://ericmacdougall.com/journal/measure-the-split-before-you-redesign-the-agent-loop/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/measure-the-split-before-you-redesign-the-agent-loop/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A five-second computer-use click had about 0.3 seconds of server time. Timing each verb two ways killed a push-channel redesign and found the real overhead in the helper path.</description>
    </item>
    <item>
      <title>Tests that spawn processes need a group, a cap and a stop order</title>
      <link>https://ericmacdougall.com/journal/tests-that-spawn-processes-need-a-group-a-cap-and-a-stop-order/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/tests-that-spawn-processes-need-a-group-a-cap-and-a-stop-order/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A loop test without its own cap left about 49,000 orphaned processes. How to contain spawning tests with process groups, an independent cap, and a cleanup order that ends the growth first.</description>
    </item>
    <item>
      <title>Landed is not done: define done before agents report it</title>
      <link>https://ericmacdougall.com/journal/landed-is-not-done-define-done-before-agents-report-it/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/landed-is-not-done-define-done-before-agents-report-it/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A status audit found seven false completion claims, including &quot;proven live&quot; beside 217 failed runs of 246. How to define done so only a live check can satisfy it.</description>
    </item>
    <item>
      <title>A Rate Is a Belief With a Width: Updating From Counts to Live Traffic</title>
      <link>https://ericmacdougall.com/journal/a-rate-is-a-belief-with-a-width/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-rate-is-a-belief-with-a-width/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Pseudo counts make a rate&#x27;s uncertainty explicit, pooling steadies thin slices, and probability matching routes traffic while you learn. Worked in counts.</description>
    </item>
    <item>
      <title>Counting Honestly: Ranges, Zero Failures and Paired Changes</title>
      <link>https://ericmacdougall.com/journal/counting-honestly-ranges-zero-failures-paired-changes/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/counting-honestly-ranges-zero-failures-paired-changes/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Report every AI success rate as a range, gate automation on its lower bound, size clean test sets from the bar, and judge a change by what it flipped.</description>
    </item>
    <item>
      <title>Your answer key is the product: building a gold set you can trust</title>
      <link>https://ericmacdougall.com/journal/your-answer-key-is-the-product/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/your-answer-key-is-the-product/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A model is only as measurable as its gold set: blind, double labelled, stratified, versioned, split by time, and checked with kappa before you trust it.</description>
    </item>
    <item>
      <title>Pick the metric by what a mistake does next</title>
      <link>https://ericmacdougall.com/journal/pick-the-metric-by-what-a-mistake-does-next/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/pick-the-metric-by-what-a-mistake-does-next/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>Precision, recall and miss rate are not a matter of taste. The harm of each wrong action picks the metric, and walking the threshold sets its value.</description>
    </item>
    <item>
      <title>Counts out of a thousand: what a flag really means</title>
      <link>https://ericmacdougall.com/journal/counts-out-of-a-thousand-what-a-flag-really-means/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/counts-out-of-a-thousand-what-a-flag-really-means/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A 90% detector can be wrong about most of what it flags. Count out of 1,000 at the real base rate before you let a flag block, note or route.</description>
    </item>
    <item>
      <title>A 99% approval rate is not an accuracy number</title>
      <link>https://ericmacdougall.com/journal/a-99-percent-approval-rate-is-not-an-accuracy-number/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-99-percent-approval-rate-is-not-an-accuracy-number/</guid>
      <pubDate>Thu, 05 Nov 2026 15:00:00 +0000</pubDate>
      <description>A reviewer approved 99% of drafts while 1 in 12 was wrong. How to measure correctness with a blind audit, outcome truth and seeded items.</description>
    </item>
    <item>
      <title>Let a business operator request a site change without handing AI a deploy token</title>
      <link>https://ericmacdougall.com/journal/let-a-business-operator-request-a-site-change-without-handing-ai-a/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/let-a-business-operator-request-a-site-change-without-handing-ai-a/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A non-engineer can request a bounded change without becoming a proxy for unchecked code. Run generation without network or deployment credentials, enforce an exact file boundary, build and review a pinned artifact, and promote through a separate trusted deploy authority.</description>
    </item>
    <item>
      <title>The offline test that spent the production quota</title>
      <link>https://ericmacdougall.com/journal/the-offline-test-that-spent-the-production-quota/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-offline-test-that-spent-the-production-quota/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A fake transport is not a network boundary, and an empty negative control is not evidence. Deny egress at the test runner, keep production credentials out, prove the block with a harmless control, and preserve an unknown outcome when readback is unavailable.</description>
    </item>
    <item>
      <title>The 192-core server was still waiting on one kernel worker</title>
      <link>https://ericmacdougall.com/journal/the-192-core-server-was-still-waiting-on-one-kernel-worker/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-192-core-server-was-still-waiting-on-one-kernel-worker/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>High CPU capacity does not guarantee progress when a serialized cleanup path stalls. Reduce sandbox churn, terminate whole process groups, add mechanism-specific early signals, and replay alarms against observed samples before retuning. Keep a local diagnosis distinct from an unverified upstream cause.</description>
    </item>
    <item>
      <title>Let an agent ask for a credential without ever seeing it</title>
      <link>https://ericmacdougall.com/journal/let-an-agent-ask-for-a-credential-without-ever-seeing-it/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/let-an-agent-ask-for-a-credential-without-ever-seeing-it/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>Separate the agent’s request from the secret value. Bind operator input to the live run, requesting step, target and logical credential; resume the waiting work without returning the value to the transcript.</description>
    </item>
    <item>
      <title>Shared Git state is the fleet coordination bug</title>
      <link>https://ericmacdougall.com/journal/shared-git-state-is-the-fleet-coordination-bug/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/shared-git-state-is-the-fleet-coordination-bug/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>Git worktrees isolate checked-out files but leave shared repository metadata and remote publication requiring coordination. Several observed failures had distinct causes and required different controls.</description>
    </item>
    <item>
      <title>Restart is where a deletion tool can lose the only backup</title>
      <link>https://ericmacdougall.com/journal/restart-is-where-a-deletion-tool-can-lose-the-only-backup/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/restart-is-where-a-deletion-tool-can-lose-the-only-backup/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A deterministic archive key and a completion receipt written after source deletion can make a retry overwrite the only backup. Model each external write, verification and destructive local effect as durable states.</description>
    </item>
    <item>
      <title>When an agent writes a one-off script, it skips your safety rails</title>
      <link>https://ericmacdougall.com/journal/when-an-agent-writes-a-one-off-script-it-skips-your-safety-rails/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/when-an-agent-writes-a-one-off-script-it-skips-your-safety-rails/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A one-off operations script can bypass approval capture and host refusal even when the underlying operation works. Make the shared CLI the policy boundary and improve it when agents reveal missing options.</description>
    </item>
    <item>
      <title>What the subscription meter actually charged for tokens</title>
      <link>https://ericmacdougall.com/journal/what-the-subscription-meter-actually-charged-for-tokens/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/what-the-subscription-meter-actually-charged-for-tokens/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>API list prices were a poor proxy for subscription quota. Isolated token-class experiments measured reads, writes and output separately and changed the optimization ranking.</description>
    </item>
    <item>
      <title>The five-minute cache cliff that made waiting subagents expensive</title>
      <link>https://ericmacdougall.com/journal/the-five-minute-cache-cliff-that-made-waiting-subagents-expensive/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-five-minute-cache-cliff-that-made-waiting-subagents-expensive/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A short cache lifetime mismatched to subagents waiting behind long commands caused large prompt-prefix rewrites. Configure lifetime by worker role and verify positive and negative paths; meter savings remain unmeasured.</description>
    </item>
    <item>
      <title>One per-session line broke the shared prompt cache</title>
      <link>https://ericmacdougall.com/journal/one-per-session-line-broke-the-shared-prompt-cache/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/one-per-session-line-broke-the-shared-prompt-cache/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A per-session value in an early tool description made otherwise stable headless prompts diverge; route dynamic values only to the client that consumes them and keep remaining entropy separate.</description>
    </item>
    <item>
      <title>A merge gate must prove the tests ran</title>
      <link>https://ericmacdougall.com/journal/a-merge-gate-must-prove-the-tests-ran/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-merge-gate-must-prove-the-tests-ran/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A successful process exit does not prove tests executed; gates must distinguish command success, test execution, baseline comparison and unknown evidence.</description>
    </item>
    <item>
      <title>A merge needs proof of no change</title>
      <link>https://ericmacdougall.com/journal/a-merge-needs-proof-of-no-change/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-merge-needs-proof-of-no-change/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A similarity heuristic cannot prove reviewed work is already merged; simulate the exact merge against current main and compare the resulting tree, including reverts relative to the task fork point.</description>
    </item>
    <item>
      <title>Key rotation has two readers and one writing authority</title>
      <link>https://ericmacdougall.com/journal/key-rotation-has-two-readers-and-one-writing-authority/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/key-rotation-has-two-readers-and-one-writing-authority/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>During key migration, prepare and try one decryption candidate at a time so malformed fallback configuration cannot break a valid current-key read; new writes still use one current authority.</description>
    </item>
    <item>
      <title>Retire worktrees by consumer lifetime, not terminal task status</title>
      <link>https://ericmacdougall.com/journal/retire-worktrees-by-consumer-lifetime-not-terminal-task-status/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/retire-worktrees-by-consumer-lifetime-not-terminal-task-status/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A terminal task state is only a candidate; safe worktree retirement requires the last consumer to release a shared lease, a fresh owner snapshot and verified private recovery outside the target.</description>
    </item>
    <item>
      <title>Design the evidence-review screen before automating the decision</title>
      <link>https://ericmacdougall.com/journal/design-the-evidence-review-screen-before-automating-the-decision/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/design-the-evidence-review-screen-before-automating-the-decision/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>An evidence-review product must separate read-only inspection, bounded extraction proposals, conflict review and explicit human acceptance; the model does not inherit the decision right.</description>
    </item>
    <item>
      <title>A read-only observer still needs backpressure</title>
      <link>https://ericmacdougall.com/journal/a-read-only-observer-still-needs-backpressure/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-read-only-observer-still-needs-backpressure/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>Read-only describes data mutation, not resource cost. A safe observer checks pressure during long reads, stops only its owned child, preserves last-good data and makes incomplete evidence explicit.</description>
    </item>
    <item>
      <title>A fleet pause must reach the process tree</title>
      <link>https://ericmacdougall.com/journal/a-fleet-pause-must-reach-the-process-tree/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-fleet-pause-must-reach-the-process-tree/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A task is not cancelled until its lifetime reaches admission waits, Git, install descendants and filesystem recovery; cancellation must leave a state the next attempt can trust.</description>
    </item>
    <item>
      <title>The dependency cache belongs before the credential boundary</title>
      <link>https://ericmacdougall.com/journal/the-dependency-cache-belongs-before-the-credential-boundary/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/the-dependency-cache-belongs-before-the-credential-boundary/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>A dependency cache is shared mutable state. Bind identity to exact inputs, publish complete trees atomically, limit install credentials and choose deliberately between shared reuse and per-step copy.</description>
    </item>
    <item>
      <title>Measure context costs before building an agent steward</title>
      <link>https://ericmacdougall.com/journal/measure-context-costs-before-building-an-agent-steward/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/measure-context-costs-before-building-an-agent-steward/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>Model the fleet-wide share a context change reaches before funding a Steward. Injected-text share, cached-token cost and total usage are different denominators.</description>
    </item>
    <item>
      <title>A safe AI widget is a small capability system</title>
      <link>https://ericmacdougall.com/journal/a-safe-ai-widget-is-a-small-capability-system/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-safe-ai-widget-is-a-small-capability-system/</guid>
      <pubDate>Thu, 22 Oct 2026 15:00:00 +0000</pubDate>
      <description>Treat model-authored JavaScript as executable content: constrain its language, isolate browser capabilities, pin the trusted bridge and bind the serving route to the reviewed version.</description>
    </item>
    <item>
      <title>Make model failover preserve the agent contract</title>
      <link>https://ericmacdougall.com/journal/make-model-failover-preserve-the-agent-contract/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/make-model-failover-preserve-the-agent-contract/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>A fallback route changes more than a model name: tool representation, role separation, budgets, privacy and refusal behavior can all differ.</description>
    </item>
    <item>
      <title>Design recovery semantics into the safety state machine</title>
      <link>https://ericmacdougall.com/journal/design-recovery-semantics-into-the-safety-state-machine/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/design-recovery-semantics-into-the-safety-state-machine/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>A safety gate needs to preserve evidence and conservative uncertainty while distinguishing historical observations from current authority to hold execution.</description>
    </item>
    <item>
      <title>Decompose work around contracts and integration costs</title>
      <link>https://ericmacdougall.com/journal/decompose-work-around-contracts-and-integration-costs/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/decompose-work-around-contracts-and-integration-costs/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Use the whole-versus-pieces experiment to explain when decomposition creates useful independent boundaries and when repeated setup fragments an interdependent implementation.</description>
    </item>
    <item>
      <title>Personal agents need private authority, recoverable work and measured operating budgets</title>
      <link>https://ericmacdougall.com/journal/personal-agents-need-private-authority-recoverable-work-and-measured/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/personal-agents-need-private-authority-recoverable-work-and-measured/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Long-running personal agents need user-specific compute, storage, credentials and network authority. Multiplexed conversations alone do not create isolation.</description>
    </item>
    <item>
      <title>Trace agent decisions without turning telemetry into a private-content store</title>
      <link>https://ericmacdougall.com/journal/trace-agent-decisions-without-turning-telemetry-into-a-private-content/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/trace-agent-decisions-without-turning-telemetry-into-a-private-content/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Keep the links needed to reconstruct decisions and reconcile effects while minimizing stored prompts, credentials and sensitive low-entropy data.</description>
    </item>
    <item>
      <title>Port agent controls across runtimes without assuming hook parity</title>
      <link>https://ericmacdougall.com/journal/port-agent-controls-across-runtimes-without-assuming-hook-parity/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/port-agent-controls-across-runtimes-without-assuming-hook-parity/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Different CLIs, IDEs and operating systems expose different observation and denial points. Port the contract, then prove each runtime route.</description>
    </item>
    <item>
      <title>Build the test harness around cross-system invariants</title>
      <link>https://ericmacdougall.com/journal/build-the-test-harness-around-cross-system-invariants/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/build-the-test-harness-around-cross-system-invariants/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>A test should encode the business or security promise across components, with an oracle independent of the actor and an outer containment boundary.</description>
    </item>
    <item>
      <title>Separate probabilistic development from deterministic shipping</title>
      <link>https://ericmacdougall.com/journal/separate-probabilistic-development-from-deterministic-shipping/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/separate-probabilistic-development-from-deterministic-shipping/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Models can propose changes and repairs. A narrow release controller can decide whether exact reviewed and tested artifacts meet a fixed contract, without reasoning its way around it.</description>
    </item>
    <item>
      <title>Regional cells need one home for mutable authority</title>
      <link>https://ericmacdougall.com/journal/regional-cells-need-one-home-for-mutable-authority/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/regional-cells-need-one-home-for-mutable-authority/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Portable containers do not make state ownership, residency and failover portable. Define one authoritative home for mutable state before adding regions.</description>
    </item>
    <item>
      <title>Agent fleets need explicit ownership transfers before more workers</title>
      <link>https://ericmacdougall.com/journal/agent-fleets-need-explicit-ownership-transfers-before-more-workers/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/agent-fleets-need-explicit-ownership-transfers-before-more-workers/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>More workers help only when task ownership, resource admission and shared-state authority remain coherent.</description>
    </item>
    <item>
      <title>Parallel AI checks need a release contract before they need more workers</title>
      <link>https://ericmacdougall.com/journal/parallel-ai-checks-need-a-release-contract-before-they-need-more-workers/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/parallel-ai-checks-need-a-release-contract-before-they-need-more-workers/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Parallel checks help only when the release condition, ownership of output fields and behavior of late branches are defined in advance.</description>
    </item>
    <item>
      <title>Memory success has to confirm the requester, address and receipt</title>
      <link>https://ericmacdougall.com/journal/memory-success-has-to-confirm-the-requester-address-and-receipt/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/memory-success-has-to-confirm-the-requester-address-and-receipt/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Memory changes future behavior across turns. Tenant scope, namespace, origin, current permissions and deletion semantics matter as much as retrieval relevance.</description>
    </item>
    <item>
      <title>A retrieval system needs to know who will read the answer</title>
      <link>https://ericmacdougall.com/journal/a-retrieval-system-needs-to-know-who-will-read-the-answer/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-retrieval-system-needs-to-know-who-will-read-the-answer/</guid>
      <pubDate>Tue, 20 Oct 2026 15:00:00 +0000</pubDate>
      <description>Requester authorization and answer-audience authorization are separate questions. A user may be allowed to read something that cannot be disclosed into the destination conversation.</description>
    </item>
    <item>
      <title>Design agent supervision around delivery, intervention and bounded learning</title>
      <link>https://ericmacdougall.com/journal/design-agent-supervision-around-delivery-intervention-and-bounded/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/design-agent-supervision-around-delivery-intervention-and-bounded/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Use deterministic event observation, bounded independent model judgment and a constrained intervention controller; spend review effort where it changes accepted outcomes.</description>
    </item>
    <item>
      <title>Budget agent work before dispatch, then reconcile what actually happened</title>
      <link>https://ericmacdougall.com/journal/budget-agent-work-before-dispatch-then-reconcile-what-actually-happened/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/budget-agent-work-before-dispatch-then-reconcile-what-actually-happened/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A token counter after completion cannot enforce a hard pre-dispatch exposure bound across parallel work and ambiguous provider outcomes.</description>
    </item>
    <item>
      <title>Route AI work by the cost of accepted outcomes</title>
      <link>https://ericmacdougall.com/journal/route-ai-work-by-the-cost-of-accepted-outcomes/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/route-ai-work-by-the-cost-of-accepted-outcomes/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Choose among routes that preserve privacy, authorization, tool semantics and required quality, then optimize expected accepted-work cost under quota and latency constraints.</description>
    </item>
    <item>
      <title>Turn engineering standards into agent execution contracts</title>
      <link>https://ericmacdougall.com/journal/turn-engineering-standards-into-agent-execution-contracts/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/turn-engineering-standards-into-agent-execution-contracts/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Agents need explicit constraints at admission, implementation, review and release, connected to the product decision that justified them.</description>
    </item>
    <item>
      <title>Recheck current policy authority before protected bytes leave</title>
      <link>https://ericmacdougall.com/journal/recheck-current-policy-authority-before-protected-bytes-leave/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/recheck-current-policy-authority-before-protected-bytes-leave/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>An immutable signed policy revision is an evidence artifact. Current authorization can change while model inference or transformations are running.</description>
    </item>
    <item>
      <title>Unknown is an outcome: designing agent systems around lost replies</title>
      <link>https://ericmacdougall.com/journal/unknown-is-an-outcome-designing-agent-systems-around-lost-replies/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/unknown-is-an-outcome-designing-agent-systems-around-lost-replies/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A timeout does not determine whether an external action happened. Retrying safely requires a durable operation identity and a reconciliation path.</description>
    </item>
    <item>
      <title>Durable agents need agreement between delivery, ownership and effects</title>
      <link>https://ericmacdougall.com/journal/durable-agents-need-agreement-between-delivery-ownership-and-effects/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/durable-agents-need-agreement-between-delivery-ownership-and-effects/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A workflow is more than a queue. State changes, durable delivery, worker ownership and publication authority must agree across retries and crashes.</description>
    </item>
    <item>
      <title>Where JEV earned a decision—and where we replaced it</title>
      <link>https://ericmacdougall.com/journal/where-jev-earned-a-decision-and-where-we-replaced-it/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/where-jev-earned-a-decision-and-where-we-replaced-it/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Evaluate decision systems per class and effect: dynamically constrain candidates, use JEV where measured, and replace or escalate it when deterministic scenarios or stronger models own the uncertainty better.</description>
    </item>
    <item>
      <title>Authorized recall: the retrieval budget has to belong to the caller</title>
      <link>https://ericmacdougall.com/journal/authorized-recall-the-retrieval-budget-has-to-belong-to-the-caller/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/authorized-recall-the-retrieval-budget-has-to-belong-to-the-caller/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A retrieval system must preserve authorized recall, freshness and evidence coverage while keeping token and latency costs bounded.</description>
    </item>
    <item>
      <title>A browser is an outbound capability: how I separate destination, data and authority</title>
      <link>https://ericmacdougall.com/journal/a-browser-is-an-outbound-capability-how-i-separate-destination-data-and/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-browser-is-an-outbound-capability-how-i-separate-destination-data-and/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Read-looking operations can send information outward through URLs, redirects, images, unfurls and fetched resources.</description>
    </item>
    <item>
      <title>Fourteen cuts through a streaming security boundary</title>
      <link>https://ericmacdougall.com/journal/fourteen-cuts-through-a-streaming-security-boundary/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/fourteen-cuts-through-a-streaming-security-boundary/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A whole-response security decision cannot protect bytes already delivered. Define the protected unit and release boundary before choosing streaming UX.</description>
    </item>
    <item>
      <title>We measured local safety models. The hard part was deciding what “works” means.</title>
      <link>https://ericmacdougall.com/journal/we-measured-local-safety-models-the-hard-part-was-deciding-what-works/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/we-measured-local-safety-models-the-hard-part-was-deciding-what-works/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Secret detection, exact redaction and content classification are different jobs. A cheap classifier that finds everything can still be unsuitable because it blocks ordinary traffic or cannot identify spans.</description>
    </item>
    <item>
      <title>A semantic firewall needs an enforcement architecture</title>
      <link>https://ericmacdougall.com/journal/a-semantic-firewall-needs-an-enforcement-architecture/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/a-semantic-firewall-needs-an-enforcement-architecture/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Semantic detection supplies a risk signal. The durable protection comes from the places that control reads, actions, disclosure and rendering even when the detector misses an attack.</description>
    </item>
    <item>
      <title>Build the tool broker around the authority that survives alternate paths</title>
      <link>https://ericmacdougall.com/journal/build-the-tool-broker-around-the-authority-that-survives-alternate-paths/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/build-the-tool-broker-around-the-authority-that-survives-alternate-paths/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A model proposes a typed action; an independently authorized executor controls credentials, object access and effectful routes.</description>
    </item>
    <item>
      <title>Make human approval survive changes in payload and context</title>
      <link>https://ericmacdougall.com/journal/make-human-approval-survive-changes-in-payload-and-context/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/make-human-approval-survive-changes-in-payload-and-context/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>A human approval becomes useful execution authority only when it commits to the action’s identity, payload and current effect context.</description>
    </item>
    <item>
      <title>Give each agent turn its own authority</title>
      <link>https://ericmacdougall.com/journal/give-each-agent-turn-its-own-authority/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/give-each-agent-turn-its-own-authority/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Keep the stable bot/service identity separate from the human authority delegated for one turn. Recompute authorization as the conversation and its audience change.</description>
    </item>
    <item>
      <title>Design the authority boundary between a chatbot, an assistant and an agent</title>
      <link>https://ericmacdougall.com/journal/design-the-authority-boundary-between-a-chatbot-an-assistant-and-an/</link>
      <guid isPermaLink="true">https://ericmacdougall.com/journal/design-the-authority-boundary-between-a-chatbot-an-assistant-and-an/</guid>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0000</pubDate>
      <description>Capability growth changes the system’s trust model. Public explanation, authenticated account help and autonomous action deserve distinct data paths, identities and acceptance criteria.</description>
    </item>
  </channel>
</rss>
