<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ese Idukpaye</title>
    <description>The latest articles on DEV Community by Ese Idukpaye (@idnk2203).</description>
    <link>https://dev.to/idnk2203</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F411297%2F1110ab88-fd71-4b69-b05a-e270c769905a.png</url>
      <title>DEV Community: Ese Idukpaye</title>
      <link>https://dev.to/idnk2203</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idnk2203"/>
    <language>en</language>
    <item>
      <title>The Human Harness: Your Loop Runs First</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Wed, 02 Sep 2026 18:29:23 +0000</pubDate>
      <link>https://dev.to/idnk2203/the-human-harness-your-loop-runs-first-31h1</link>
      <guid>https://dev.to/idnk2203/the-human-harness-your-loop-runs-first-31h1</guid>
      <description>&lt;p&gt;Every serious agentic coding setup is running a harness right now. Not the model itself, but the machinery around it. The loop it runs in, the tools it can access, the context it receives, and the state it records so the next session doesn't start cold. The tech industry has settled on an equation for this: &lt;a href="https://www.langchain.com/blog/the-anatomy-of-an-agent-harness" rel="noopener noreferrer"&gt;Agent = Model + Harness&lt;/a&gt;, and calls the practice of building the machinery: &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;harness engineering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This post is about the half of the system that equation doesn't cover. Every agentic setup has two workers, and only one of them is a model. The other one is you, the person deciding, across many tasks and many sessions, what all of those agents should build. So the equation has a missing twin. &lt;strong&gt;Operator = Human + Harness.&lt;/strong&gt; On this side, you are the raw capability; on the other, the model. The human harness is the machinery around you.&lt;/p&gt;

&lt;p&gt;Before we dive in, here are the key takeaways and steps you'll find in this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What a human harness is, and how it complements the agentic harness&lt;/li&gt;
&lt;li&gt;Why orienting your work is essential before automating execution&lt;/li&gt;
&lt;li&gt;The core components that make up a human harness&lt;/li&gt;
&lt;li&gt;How to build a minimal, effective human harness in practice, complete with a concrete example you can implement in your own workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What a harness actually is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fntc2k1o73zcmw5w787oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fntc2k1o73zcmw5w787oy.png" alt="One harness, two functions. The transmission turns power into work. The gate secures the work to conditions." width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To understand what a harness is in an agentic system, we have to understand it from a physical standpoint. Picture a horse harness. Its purpose is to provide the mechanism needed for a horse to do work by transmitting power that already exists and turning it into useful work. Without it, you have a strong animal and a cart that goes nowhere. Call this the transmission function.&lt;/p&gt;

&lt;p&gt;Now picture a rock climber harness. This one transmits nothing. Its purpose is to secure the climber to a safe working condition (climbing without falling to the ground). It does this by catching a failed state (losing your grip) and taking a securing/remediating action. Without it, you have an unsafe working condition, one where a fail state is not caught and unremediated. Call this the securing function.&lt;/p&gt;

&lt;p&gt;Therefore, we can say a harness is something with these two functions, and in software the two live together in one environment. Look inside the agent harness you already use. &lt;a href="https://addyosmani.com/blog/agent-harness-engineering/" rel="noopener noreferrer"&gt;Claude Code transmits for a language model&lt;/a&gt;. The raw model can reason but can't act, and the loop, tools, and context management around it are what turn reasoning into shipped work. The same harness also secures. Hooks block a dangerous command before it runs. Sandboxes limit what can be touched. LangChain's own &lt;a href="https://www.langchain.com/blog/the-anatomy-of-an-agent-harness" rel="noopener noreferrer"&gt;anatomy of a harness&lt;/a&gt; lists both kinds of parts in one breath: tools and state to enable the work, "enforceable constraints" to secure it. The pattern is older than agents, too. Your IDE transmits for you, because nobody ships production software from Notepad. And every pre-commit hook, every CI wall, every branch protection rule is the securing function pointed at your code.&lt;/p&gt;

&lt;p&gt;So here is the definition this whole series stands on. A harness is a system that enables safe execution. It does that in two ways at once. As the environment that turns a worker's power into work, and as the gates that secure the work to safe conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a loop actually is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy3vv7qalvbvpnh7z8u5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy3vv7qalvbvpnh7z8u5d.png" alt="Same repetition, two different things. With shared state the runs compound. Without it, every run starts from zero." width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a harness is a system that enables safe execution, then a loop is a component of that system that defines or manages repetitive execution/work cycles inside a harness. In agentic systems, this is quite apparent. For example, Boris Cherny, who created Claude Code, &lt;a href="https://www.productmarketfit.tech/p/stop-prompting-ai-and-start-building" rel="noopener noreferrer"&gt;describes his job as writing loops now, not prompts&lt;/a&gt;, highlighting the importance of loops in agentic systems.&lt;/p&gt;

&lt;p&gt;We can think of a loop as an execution tool. It is created or takes place when one run of a cycle of work shares its state with the next cycle. A for loop is one body of work run many times, sharing a counter. Your Tuesday is a run of you that inherits Monday's state, meaning what shipped, what broke, what you decided. An agent session is a run that inherits whatever the previous session wrote down. Same tool at every scale.&lt;/p&gt;

&lt;p&gt;Loops consist of four main components. Something that starts a work cycle. Call that the trigger. It might be a user prompt, a morning, a bug report landing. Then there is the work cycle itself where work gets done. An agent session calls one of these a turn. Something decides whether to go again or stop. That's the exit condition. The tests pass, the day ends, the goal is met. And something survives into the next work cycle. That's the shared state. The first three give you repetition. Only the fourth makes repetition into a loop.&lt;/p&gt;

&lt;p&gt;What this adds up to is that a loop can also be defined as a repetition with shared state. Without it, you have no aggregated result, no compounding effect; each work cycle begins at zero, re-derives everything, deposits nothing. Hold that distinction, a loop versus starting over, because it's the entire agent-tooling industry in one sentence. A model's sessions are starting-over by nature, and the first job of the agent's harness is to carry state across the reset so those sessions become a loop.&lt;/p&gt;

&lt;p&gt;Now, if we take a step back to see how it all fits, we see that the harness enables safe execution. The loop is the execution tool that needs exactly what a harness provides. The transmission function gives the loop somewhere durable for its state to live between runs. The securing function checks conditions at the boundaries between runs. A harnessed loop compounds. An unharnessed one decays into starting over.&lt;/p&gt;

&lt;h2&gt;
  
  
  The human harness and the agentic one
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1va4c9vu5w7n7dbsq4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1va4c9vu5w7n7dbsq4t.png" alt="Two workers, in order. Your orientation loop runs first and hands the work down. The agent's execution loops run second, already harnessed." width="799" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anthropic wrote the clearest picture of the agentic harness in &lt;a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents" rel="noopener noreferrer"&gt;Effective harnesses for long-running agents&lt;/a&gt;. A coding agent works in discrete sessions, and each new session begins with no memory of what came before, like a project staffed by engineers working in shifts where every engineer arrives with no memory of the previous one. Their harness does three concrete things about that. It writes the agent's state to disk, compacts the context so nothing important falls off the end, and leaves a handoff note for the next shift. In our vocabulary, it carries shared state across the reset. It turns the agent's starting-over into a loop.&lt;/p&gt;

&lt;p&gt;Read the scene once more, though, and count the workers. There are two. The agent is the executor. It takes one task and runs it, inside its harness. You are the operator. You decide what's worth doing at all, you hold every work thread at once (what's captured, what's in flight, what's half-finished, what's next), and you hand tasks down. That isn't supervision from somewhere outside the system. It's a second worker inside it, running its own loop on its own clock. The agent's runs are sessions, and they reset in minutes. Your runs are mornings, days, weeks.&lt;/p&gt;

&lt;p&gt;Which gives the human harness a precise definition. It is the same machinery, pointed at the upstream worker. An environment that carries your state across your resets, and gates that secure your work to safe conditions. That's the twin equation to Agent = Model + Harness. &lt;strong&gt;Operator = Human + Harness.&lt;/strong&gt; And the two harnesses aren't strangers. Yours lives exactly where the agent's lives, in the same repo, on the same filesystem, built from the same hook primitives. It's less a second system than one more layer of the system you already run, the layer where the decisions come from.&lt;/p&gt;

&lt;p&gt;The relationship between the two can best be described as the human harness essentially being the frontrunner to getting work done; it runs whatever loop (orientation loop) that lives inside it first and passes that down to the agentic harness, which triggers execution loops for N threads of work or tasks it gets until the work reaches a done state.&lt;/p&gt;

&lt;p&gt;So both harnesses provide the system for safe execution of work; the only difference is one runs first and is used by the operator, and the other runs second and is used by the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a human harness serves
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F899nfn70zje8gqi1y76z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F899nfn70zje8gqi1y76z.png" alt="The upstream worker holds every thread at once and hands down one picture. That layer is the one with no state and no gate." width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what is the work of the upstream worker? If a harness enables execution, what execution does the human harness enable?&lt;/p&gt;

&lt;p&gt;The constant management of every task being executed (Execution management aka Orientation). In an agentic setup, this job is irreducibly yours. Knowing where everything stands, which tasks exist, which are moving, which are stuck, which matter today. And maintaining a picture true enough to hand down for execution. The interesting thing is that the relationship between orientation and execution is domain-agnostic; it's the same for a software engineer working with agents as for a content creator or a product manager. Whatever your role requires you to execute, you must first orient that task.&lt;/p&gt;

&lt;p&gt;I've written about what it costs to run that job from memory, in &lt;a href="https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;the orientation tax&lt;/a&gt;. The short version: once several threads of agent-driven work are in flight, just staying oriented gets expensive, and the faster you ship, the steeper it gets. Kief Morris places the human &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;"on the loop"&lt;/a&gt;, shaping the harness rather than inspecting every artifact, and that's the right position. But position isn't the point here. Work is. Orienting is a real workload; it's yours alone, and today it runs bare.&lt;/p&gt;

&lt;h2&gt;
  
  
  The human harness and the orientation loop
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffoprxjc8tc7y3725v5iv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffoprxjc8tc7y3725v5iv.png" alt="Four steps, one list. The work happens off the loop. The steps are what connect your runs together." width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The human harness exists to keep the operator oriented across work. Orientation is the loop that runs before execution: you keep a current picture of the work, use it to decide what matters next, and carry the updated picture into the next run.&lt;/p&gt;

&lt;p&gt;For a builder running parallel threads, that loop has four steps. Capture what is on your plate. Check where each piece actually stands. Prioritize what needs attention next. Review what changed after the work runs. Then the cycle starts again. The work itself happens between the steps. The steps are what carry the state from one stretch of work to the next.&lt;/p&gt;

&lt;p&gt;That gives us the anatomy of the orientation loop. The trigger is usually a morning, a context switch, or some other moment when you need to re-establish the picture. The run is the four-step orientation process. The shared state is the current picture of the work: what exists, what is moving, what is stuck, and what comes next. The loop persists because each run leaves that picture for the next one.&lt;/p&gt;

&lt;p&gt;Without shared state, orientation is not a loop. It is starting over. Every morning, every context switch, you reconstruct the picture from memory, scattered notes, and whatever you can still remember from the last run. That is the orientation tax in structural form. The problem is not that you failed to pay attention. The problem is that nothing carried the state forward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9snmpgz35wwct1r84axj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9snmpgz35wwct1r84axj.png" alt="Two clocks, one list. You own the calls on a clock of days and weeks. The agent resets every session. The durable list is the only thing that survives both." width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difficulty is that there are two reset cycles in the system. Your orientation runs across days and weeks. An agent's execution resets every session. Both workers need the same picture of the work, but neither worker can carry that picture across the other worker's reset. The state therefore has to live outside both of them.&lt;/p&gt;

&lt;p&gt;That is where the human harness comes in. Its transmission function gives the orientation loop a durable place to keep its state, one that the human can update and the agent can read. Its securing function controls the handoff from orientation into execution, so the agent does not start from a picture that has already gone stale.&lt;/p&gt;

&lt;p&gt;The point is not to make the human do more processing. It is to give the loop somewhere to persist and a boundary that keeps execution attached to the current state. The human runs the orientation loop first. The agent runs its execution loops from the picture that the loop produces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build one in twenty lines
&lt;/h2&gt;

&lt;p&gt;Grounding this in practice, these harness concepts can be directly implemented in code using current agentic frameworks. For example, in LangChain or Claude Code, you can write hooks or callbacks that save the agent's state to disk at the end of each session, load the relevant context at the beginning of the next, and log explicit handoff notes as structured data or markdown files inside your project directory. &lt;/p&gt;

&lt;p&gt;This not only keeps the agent oriented, but also lets other agents or humans resume work seamlessly. Most frameworks provide APIs or configuration points to plug in these actions as part of the execution loop, so you can use their built-in storage, event hooks, and context management features to realize your own harness, both for models and humans.&lt;/p&gt;

&lt;p&gt;To paint the picture more clearly, here is a complete human harness at prototype size, running a one-step orientation loop. It uses &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt;, the same primitive a pre-commit hook gives you (a script that fires before an action and can refuse it), pointed at your orientation instead of your code.&lt;/p&gt;

&lt;p&gt;The rule it enforces is one line long: before your agent touches a file today, you write down what you did yesterday and what you're doing today.&lt;/p&gt;

&lt;p&gt;Two pieces. First, tell Claude Code to check before it edits anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;.claude/settings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"PreToolUse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Edit|Write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$CLAUDE_PROJECT_DIR/.claude/hooks/orient-gate.sh"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the gate. Has today's orientation been written? If not, refuse, and tell the human exactly how to clear it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# .claude/hooks/orient-gate.sh  (chmod +x)&lt;/span&gt;
&lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class="s2"&gt;/.orient/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.md"&lt;/span&gt;

&lt;span class="c"&gt;# Oriented today? Say nothing, get out of the way.&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0

&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "deny",
    "permissionDecisionReason": "You haven't oriented today. In your terminal, run: ./orient  — it asks what you did yesterday and what you'll do today, writes it down, and clears you to work. Then retry."
  }
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="nb"&gt;exit &lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hook can't prompt you itself, because Claude Code hooks don't get a terminal. So it hands you a one-liner to run. That's orient, the piece that actually asks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# orient  (chmod +x) — say what you did + what you'll do; get cleared to work.&lt;/span&gt;
&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.orient"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DIR&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.md"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Already oriented today → &lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-rp&lt;/span&gt; &lt;span class="s2"&gt;"Yesterday I… "&lt;/span&gt; DID
&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-rp&lt;/span&gt; &lt;span class="s2"&gt;"Today I will… "&lt;/span&gt;  WILL
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'# %s\n\n**Did:** %s\n\n**Will:** %s\n'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$WILL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Oriented → &lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;. You're clear to work."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The whole loop, from the agent's side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;you: "edit the config"
  → DENIED: you haven't oriented today. run ./orient, then retry.
you: ./orient
     Yesterday I… shipped the loop-map post
     Today I will… revise the flagship
     Oriented. You're clear to work.
you: "edit the config"
  → allowed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's see how this prototype ties back to the orientation loop and human harness. There's a trigger: the first time your agent tries to touch a file today. There's an exit condition: today's note exists. There's shared state, because the note lands in .orient/, dated, so tomorrow's run starts with yesterday's answer sitting right there. Which means there's a loop. Each day reads the last one and feeds the next, and your days compound instead of starting over. And both functions of a harness are present. The orient script is the transmission, the environment that makes the act take thirty seconds. The hook is the gate, the securing function that makes it non-skippable. Environment plus gate, wrapped around a loop, pointed at a human. A complete human harness, at prototype size.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a complete human harness looks like
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgycmm40t3ivt9t41ls95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgycmm40t3ivt9t41ls95.png" alt="Durable state, a routine that keeps it current, and one gate at the handoff. Updating is free. Only building on a picture you have not checked is gated." width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The prototype gives you mostly the gate, but a complete human harness is a system. It provides one current picture of the work tasks, kept where you and your agents can both read it. I keep mine as a board: a simple view of work moving from backlog to done. You then run the orientation loop against that picture, once a day and again at a wider lens when needed. And the gate sits at the boundary between orienting and executing, refusing to let work continue when the picture is stale.&lt;/p&gt;

&lt;p&gt;That is the whole shape. Durable state gives the orientation loop somewhere to persist. The orientation routine keeps that state current. The gate makes the handoff into execution explicit. Updating the picture stays free; only building on a picture you have not checked is gated.&lt;/p&gt;

&lt;p&gt;At this point you might be asking yourself: I have seen the prototype, but what does the actual thing look like in a live environment? My answer to that is &lt;a href="https://github.com/idnk2203/4loops" rel="noopener noreferrer"&gt;4loops&lt;/a&gt;, a tool I've been building for quite some time. It exists because I found myself paying the orientation tax. My orientation used to live outside the environment where the work happened, in tools like &lt;a href="https://asana.com" rel="noopener noreferrer"&gt;Asana&lt;/a&gt; and &lt;a href="https://www.notion.so" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;, in a browser tab far from the repo. Good tools, wrong place. My agents couldn't read them natively; hence, it was difficult to build an orientation loop around them, enabled by the transmission and securing function of the agent's harness.&lt;/p&gt;

&lt;p&gt;What it changed was simple. The state I hand down is current, so agents start from the same picture I am working from instead of reconstructing it. Execution became faster, but more importantly, it became easier to keep moving in the right direction. The most direct proof came while writing these posts. I let the board drift behind the real work, and the gate stopped me mid-edit: you're about to build on a picture you haven't checked. Orient first.&lt;/p&gt;

&lt;p&gt;That is the point of the harness. It turns orientation from something you have to remember to something the system carries and enforces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your loop runs first
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg44hbgi6zx1w8gthgnwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg44hbgi6zx1w8gthgnwn.png" alt="Two workers, two equations. Agent equals Model plus Harness, proven. Operator equals Human plus Harness, still missing. The agent got its harness. The operator is still waiting." width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent's harness solved one problem: it gave the executor an environment that carries state forward and gates unsafe execution. The human harness applies the same idea one level upstream, to the worker that decides what gets executed in the first place.&lt;/p&gt;

&lt;p&gt;That ordering matters. Your orientation loop runs across days and weeks. It produces the picture from which the agent's execution loops begin. If that picture is wrong or stale, the agent's harness can preserve it, enforce it, and execute against it perfectly. It cannot correct the decision that produced it.&lt;/p&gt;

&lt;p&gt;So the problem is not that agents need more supervision. The operator needs the same machinery we already built for the agent: a durable state that turns repeated work into a loop, and a gate that keeps execution attached to that state.&lt;/p&gt;

&lt;p&gt;Okay guys, that's it for this one. If there's one thing I want you to remember from this long post is your loop runs first, so you have to find a way to harness it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part 3 of 3. The cost: &lt;a href="https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;the orientation tax&lt;/a&gt;. The map: &lt;a href="https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3"&gt;everyone harnesses the agent's loop, here's the human's&lt;/a&gt;. This one: the foundations and the answer.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent = Model + Harness:&lt;/strong&gt; LangChain, &lt;a href="https://www.langchain.com/blog/the-anatomy-of-an-agent-harness" rel="noopener noreferrer"&gt;&lt;em&gt;The Anatomy of an Agent Harness&lt;/em&gt;&lt;/a&gt; ("a harness is every piece of code, configuration, and execution logic that isn't the model"). Its component list carries both functions in one harness: tools and state to enable the work, "enforceable constraints" to secure it. The practice is named by Birgitta Böckeler (Thoughtworks), &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;&lt;em&gt;Harness engineering for coding agent users&lt;/em&gt;&lt;/a&gt;. Addy Osmani's &lt;a href="https://addyosmani.com/blog/agent-harness-engineering/" rel="noopener noreferrer"&gt;&lt;em&gt;Agent Harness Engineering&lt;/em&gt;&lt;/a&gt; is the practitioner synthesis the Claude Code description draws on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The shift-change picture and the agent harness's three jobs&lt;/strong&gt; (state to disk, context compaction, handoff notes): Anthropic, &lt;a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents" rel="noopener noreferrer"&gt;&lt;em&gt;Effective harnesses for long-running agents&lt;/em&gt;&lt;/a&gt; (Nov 2025).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"My job is to write loops":&lt;/strong&gt; Boris Cherny, &lt;a href="https://www.productmarketfit.tech/p/stop-prompting-ai-and-start-building" rel="noopener noreferrer"&gt;via productmarketfit.tech&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The human "on the loop":&lt;/strong&gt; Kief Morris, &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;&lt;em&gt;Humans and Agents in Software Engineering Loops&lt;/em&gt;&lt;/a&gt; (hosted on martinfowler.com, not written by Fowler).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orientation as the pivot of a decision cycle:&lt;/strong&gt; John Boyd's &lt;a href="https://en.wikipedia.org/wiki/OODA_loop" rel="noopener noreferrer"&gt;OODA loop&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The gate primitive:&lt;/strong&gt; &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt;, specifically &lt;code&gt;PreToolUse&lt;/code&gt;, which fires before a tool call and can deny it. The twenty-line example was tested before publishing (deny, then orient, then allow, plus idempotency). Build-side gates referenced: &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt; · &lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; · &lt;a href="https://trunk.io" rel="noopener noreferrer"&gt;Trunk&lt;/a&gt; · &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;branch protection&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>claude</category>
      <category>agents</category>
    </item>
    <item>
      <title>AI coding agents: everyone harnesses the agent's loop. Here's the human's.</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 18 Jul 2026 06:32:47 +0000</pubDate>
      <link>https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3</link>
      <guid>https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3</guid>
      <description>&lt;p&gt;If you work with a coding agent, count the things watching it right now. Linters. Git hooks. CI. Specs. A memory store. A rules file it's supposed to obey. Half a dozen systems, all making sure the agent builds the right thing the right way.&lt;/p&gt;

&lt;p&gt;Now count what keeps &lt;em&gt;you&lt;/em&gt; oriented across the eleven things you have in flight. For most of us it's a markdown file we hope we remembered to update.&lt;/p&gt;

&lt;p&gt;We spent two years building harnesses for the agent and left our own work on the honor system. Map the tooling on two axes and that gap turns into a specific, hard-to-unsee hole. This post is the map.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(This is part two of three. Part one, &lt;a href="https://dev.to/idnk_2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;The AI orientation tax: it's missing context, not discipline&lt;/a&gt;, argued that the cost you're paying is a context bug rather than a character flaw. If you haven't read it, you don't need to. This one stands alone.)&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;The thing people lump together as "agent workflow" is really two loops at different altitudes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The execution loop:&lt;/strong&gt; &lt;em&gt;"is the agent building **this one task&lt;/em&gt;* right?"* Scope it, design it, write it, test it. One unit of work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The orientation loop:&lt;/strong&gt; &lt;em&gt;"do you and the agent share an honest picture of **what you're working on&lt;/em&gt;* across all the units?"* Capture, check state, prioritize, review, run over the whole board, daily and weekly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Almost every tool you've heard of lives in the first loop. That's not a criticism. It's just where the money and the visible pain were. But it means when people say "we solved agent memory" or "we solved context," they solved it &lt;em&gt;for the execution loop.&lt;/em&gt; The orientation loop got left to you and a markdown file.&lt;/p&gt;

&lt;p&gt;You feel the difference the moment each one breaks. When the execution loop breaks, something yells: a failing test, a red build, a review comment. When the orientation loop breaks, nothing yells. The agent confidently re-suggests the thing you rejected yesterday. You rebuild a mental map you already had this morning. The only signal is a vague sense that you're moving slower than the tools promised. One failure is loud and tooled. The other is silent, so it got moralized instead.&lt;/p&gt;

&lt;p&gt;Kief Morris, writing on martinfowler.com, maps this carefully in &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;&lt;em&gt;Humans and Agents in Software Engineering Loops&lt;/em&gt;&lt;/a&gt;. His subject is where the &lt;em&gt;human sits inside the agent's loop&lt;/em&gt;: in the loop (inspecting every artifact) or on it (shaping the harness that produces them). As he puts it, "the 'on the loop' way is to change the harness that produced the artefact." Birgitta Böckeler gives that practice a name in the companion piece, &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;&lt;em&gt;Harness engineering for coding agent users&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This post is the next square over. Not where you sit in the agent's loop, but &lt;strong&gt;the loop that's yours&lt;/strong&gt;, and whether anything harnesses it the way we've now learned to harness the agent's. Harness engineering, pointed back at the operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The map
&lt;/h2&gt;

&lt;p&gt;Two axes do the work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Horizontal, what layer the tool serves:&lt;/strong&gt; &lt;em&gt;Execution&lt;/em&gt; (one task) to &lt;em&gt;Orientation&lt;/em&gt; (across tasks).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical, how it holds:&lt;/strong&gt; &lt;em&gt;Advisory&lt;/em&gt; (you hope it gets read and kept current) to &lt;em&gt;Harnessed&lt;/em&gt; (it's hooked on, so it can't quietly drift or go stale).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That vertical axis is the one that matters, and researchers at ETH Zurich put a number on it. Testing four coding agents across 138 tasks, they found that &lt;a href="https://www.infoq.com/news/2026/03/agents-context-file-value-review/" rel="noopener noreferrer"&gt;AGENTS.md files barely help&lt;/a&gt;: a developer-written one buys a marginal gain, an AI-written one slightly hurts, and either way the context costs over 20% more to run. The reason is the axis. A file is just advice. Nothing forces the agent to follow it, and nothing checks whether it did, so it follows sometimes and skips other times. A harness doesn't ask. That difference is why every enforced tool below exists, and it's exactly what the empty corner is missing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a5s1azamt4w5wk0ot79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a5s1azamt4w5wk0ot79.png" alt="The loop-tooling landscape: Execution to Orientation across the bottom, Advisory to Harnessed up the side. Enforcement fills three corners; the orientation-harnessed corner sits empty" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Walk it corner by corner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution and advisory, the crowd.&lt;/strong&gt; CLAUDE.md and &lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt;, spec-driven dev (&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt;), external memory stores, Claude Code's native Tasks, agent-orchestration boards like &lt;a href="https://github.com/BloopAI/vibe-kanban" rel="noopener noreferrer"&gt;Vibe Kanban&lt;/a&gt;. Enormously useful, and &lt;em&gt;advisory&lt;/em&gt; by design: a file you hope the agent reads, a spec you hope stays current. This is where almost everyone is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution and harnessed, productized enforcement for builds.&lt;/strong&gt; This corner is real and mature: &lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt;, &lt;a href="https://github.com/evilmartians/lefthook" rel="noopener noreferrer"&gt;Lefthook&lt;/a&gt;, &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt;, &lt;a href="https://trunk.io" rel="noopener noreferrer"&gt;Trunk&lt;/a&gt;, &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;GitHub branch protection&lt;/a&gt;, on top of the underlying primitives (git, &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt;, CI). These don't &lt;em&gt;hope&lt;/em&gt; your code is clean. They &lt;strong&gt;refuse the commit, fail the build, block the merge&lt;/strong&gt; until it is. Enforcement isn't exotic. It's a solved, shipping product category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orientation and advisory, hand-rolled and honest by discipline.&lt;/strong&gt; Here's where your &lt;em&gt;own&lt;/em&gt; loop lives today: a &lt;code&gt;STATUS.md&lt;/code&gt; or &lt;code&gt;CURRENT-FOCUS&lt;/code&gt; you re-read each session, &lt;a href="https://github.com/todotxt/todo.txt" rel="noopener noreferrer"&gt;todo.txt&lt;/a&gt;, &lt;a href="https://taskwarrior.org/" rel="noopener noreferrer"&gt;Taskwarrior&lt;/a&gt;, a Linear board you run solo. All operator-facing, all real, and all kept honest &lt;em&gt;by you remembering to update them.&lt;/em&gt; No enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orientation and harnessed, empty.&lt;/strong&gt; A harness for the loop you run: one honest, shared picture of what you're working on that &lt;strong&gt;you can't quietly let rot and keep building on&lt;/strong&gt;, that you and the agent both read. Map every tool you can think of and this corner stays blank.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on tools you actually use
&lt;/h2&gt;

&lt;p&gt;The lens is only worth anything if you can run it yourself, so place a few real tools.&lt;/p&gt;

&lt;p&gt;Take a &lt;strong&gt;memory MCP&lt;/strong&gt;, an agent that stores and recalls context across sessions. Genuinely useful, and tempting to file under "solved orientation." But put it on the axes. It serves the &lt;em&gt;agent's&lt;/em&gt; recall inside a task, so it sits execution-side. And it's advisory: it surfaces what it guesses is relevant, and nothing forces you or the agent to reconcile the whole board before acting. Bottom-left. It makes execution smoother; it doesn't hold your orientation loop honest.&lt;/p&gt;

&lt;p&gt;Take &lt;strong&gt;Claude Code's native Tasks&lt;/strong&gt;, or a board like &lt;strong&gt;Vibe Kanban&lt;/strong&gt; (whose hosted product is now winding down, though the project continues as open source). Closer to orientation, because they track units of work across a session. Still advisory, though: the board reflects reality only as well as whoever last updated it, and nothing blocks the next action when it's stale. Left of center, low.&lt;/p&gt;

&lt;p&gt;Take a &lt;strong&gt;Linear board you run solo&lt;/strong&gt;. Now you're genuinely orientation-layer: operator-facing, across tasks. It lands bottom-right. But it's still advisory. Linear will never refuse to let you start work because your statuses are three days old. The honesty rides entirely on you.&lt;/p&gt;

&lt;p&gt;Do this with any tool you like and the pull is the same. Things drift left toward execution and down toward advisory. The top-right stays empty. And you start to see what would move a tool into it: the thing would have to &lt;em&gt;gate&lt;/em&gt; (refuse the next build until the board is reconciled, the way pre-commit refuses a dirty commit), and it would have to serve &lt;em&gt;both&lt;/em&gt; readers off one surface (the list you prioritize is the one the agent reads to re-orient). Bolt a gate onto Linear-for-one and you're most of the way there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why three corners filled and one didn't
&lt;/h2&gt;

&lt;p&gt;It's not an accident, and it's not that the orientation problem is small. Two forces left this corner empty.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Effort pooled where the pain was visible and monetizable.&lt;/strong&gt; "The agent wrote bad code" is loud, demoable, and sellable, so the execution loop got tools. "I lost track of what I was working on" reads as a personal failing, so it got &lt;em&gt;advice&lt;/em&gt;: be disciplined, start fewer things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement never got pointed at orientation.&lt;/strong&gt; Look again at the harnessed column. Every occupant enforces &lt;em&gt;build correctness&lt;/em&gt;: lint, tests, secrets, merge rules. The enforcement primitive, a hook that blocks until a condition holds, is sitting right there, productized, in wide use. &lt;strong&gt;Nobody aimed it one layer up,&lt;/strong&gt; at the question of whether your board is telling the truth.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the empty corner isn't "enforcement is rare." It's "enforcement is &lt;em&gt;everywhere, for builds,&lt;/em&gt; and absent for orientation." That's a much more specific, and more fixable, gap. And the split is worth naming plainly: the agent's job is execution, and ours is orientation. We decided execution was too important to leave to advice, so we made it enforceable. Orientation, the part that decides what the agent works on at all, we left to memory.&lt;/p&gt;

&lt;p&gt;It's worth being concrete about how close the missing piece actually is. A pre-commit hook is just a script that runs before an action and can block it. Claude Code ships the same primitive: a hook that fires before a tool runs and can deny it. The entire enforced column is built on that one idea, pointed at code. Pointing it at orientation isn't a research problem. It's the same hook with a different condition: has the board been reconciled today, before you build on it. Nobody shipped it not because it's hard, but because nobody framed staying oriented as a thing you enforce rather than a thing you should just have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The empty corner is the interesting one
&lt;/h2&gt;

&lt;p&gt;Put the two findings together and the shape of what belongs there is obvious.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's &lt;strong&gt;orientation-layer:&lt;/strong&gt; story-grained, across the whole board, not inside one task.&lt;/li&gt;
&lt;li&gt;It's &lt;strong&gt;harnessed:&lt;/strong&gt; a deterministic gate, the way a pre-commit hook gates the commit. It blocks the &lt;em&gt;next build&lt;/em&gt; until you've reconciled. You don't &lt;em&gt;hope&lt;/em&gt; the board is current; you reconcile it before you build on it. The gate doesn't keep it honest &lt;em&gt;for&lt;/em&gt; you. It makes you.&lt;/li&gt;
&lt;li&gt;It serves &lt;strong&gt;both readers off one surface:&lt;/strong&gt; you set priority and capture; the agent reads the same list to re-orient each session and marks state as work lands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those properties is new on its own. Files are a solved substrate. Agent-readable state exists (CC Tasks, AGENTS.md). Boards exist. Enforcement exists (hooks). What's missing is the &lt;em&gt;combination&lt;/em&gt;, aimed at the orientation loop. The rarest ingredients are the two this map makes visible: &lt;strong&gt;harnessed&lt;/strong&gt; and &lt;strong&gt;serves-both-off-one-surface.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the map, not just the conclusion
&lt;/h2&gt;

&lt;p&gt;The useful thing to keep here isn't "4loops goes in the empty corner." It's &lt;strong&gt;the map.&lt;/strong&gt; Next time you evaluate an agent tool, a memory MCP, a kanban, a rules-file convention, place it on these two axes. Which loop does it serve: the agent's task, or your orientation across tasks? And does it &lt;em&gt;hold&lt;/em&gt; (gate, enforce, can't-drift), or merely &lt;em&gt;advise&lt;/em&gt; (hope it's read)? Almost everything clusters in the same three corners, and you'll feel the fourth one's emptiness yourself.&lt;/p&gt;

&lt;p&gt;What goes in that corner, a harness for your orientation loop with honesty enforced the way builds already enforce correctness, is the next post. This one only had to draw the map clearly enough that the hole is impossible to miss.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The framing this post branches off&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kief Morris, &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;&lt;em&gt;Humans and Agents in Software Engineering Loops&lt;/em&gt;&lt;/a&gt; (martinfowler.com, 4 March 2026) — in the loop vs. on the loop.&lt;/li&gt;
&lt;li&gt;Birgitta Böckeler, &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;&lt;em&gt;Harness engineering for coding agent users&lt;/em&gt;&lt;/a&gt; (martinfowler.com, 2 April 2026) — where the term "harness engineering" comes from.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The measurement of the advisory corner&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gloaguen, Mündler et al. (ETH Zurich), &lt;em&gt;Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?&lt;/em&gt; (Feb 2026) — &lt;a href="https://arxiv.org/pdf/2602.11988" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt; · &lt;a href="https://www.infoq.com/news/2026/03/agents-context-file-value-review/" rel="noopener noreferrer"&gt;InfoQ summary&lt;/a&gt;. Four agents, 138 tasks: developer-written context files give a marginal gain, AI-written ones slightly hurt, and both add 20%+ to cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The advisory corner (execution-layer, hope-it-gets-read)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt; — the open convention for agent instruction files, now stewarded by the Agentic AI Foundation.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt; — GitHub's spec-driven development toolkit.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/BloopAI/vibe-kanban" rel="noopener noreferrer"&gt;Vibe Kanban&lt;/a&gt; — agent-orchestration board (hosted product winding down; continues as open source).&lt;/li&gt;
&lt;li&gt;Claude Code's native Tasks — cross-session agent state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The harnessed corner (enforcement, productized, for builds)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; · &lt;a href="https://github.com/evilmartians/lefthook" rel="noopener noreferrer"&gt;Lefthook&lt;/a&gt; · &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt; · &lt;a href="https://trunk.io" rel="noopener noreferrer"&gt;Trunk&lt;/a&gt; · &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;GitHub branch protection&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The underlying primitive: &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt; — a script that runs before a tool call and can deny it. The whole enforced column is this one idea, pointed at code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The hand-rolled orientation corner&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/todotxt/todo.txt" rel="noopener noreferrer"&gt;todo.txt&lt;/a&gt; · &lt;a href="https://taskwarrior.org/" rel="noopener noreferrer"&gt;Taskwarrior&lt;/a&gt; · hand-rolled &lt;code&gt;STATUS.md&lt;/code&gt; / &lt;code&gt;CURRENT-FOCUS&lt;/code&gt; conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part one of this series&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/idnk_2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;The AI orientation tax: it's missing context, not discipline&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>agentskills</category>
      <category>claude</category>
    </item>
    <item>
      <title>The AI orientation tax: it's missing context, not discipline</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 11 Jul 2026 15:17:37 +0000</pubDate>
      <link>https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9</link>
      <guid>https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9</guid>
      <description>&lt;p&gt;You have eleven things in flight. Three of them are "almost done." You can't remember which three. Every morning you spend the first ten minutes rebuilding the picture (what was I on, where did I leave it, what's actually next) before you do any real work. And the coding agent you brought in to go faster starts every session asking you the same questions you just answered yesterday.&lt;/p&gt;

&lt;p&gt;The usual diagnosis is &lt;strong&gt;discipline&lt;/strong&gt;: you start too much, you don't finish, you're scattered, get a system and stick to it. I think that diagnosis is wrong, or at least aimed one layer too high. The people who actually dug into this landed somewhere else: it's &lt;strong&gt;missing context, not discipline.&lt;/strong&gt; And the interesting part is that your agent now pays the exact same tax, for the exact same reason.&lt;/p&gt;

&lt;p&gt;This is a post about that tax: what it is, what it costs (there are numbers), why the AI era makes it &lt;em&gt;worse&lt;/em&gt; instead of better, and the small loop where it actually breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tax you're already paying
&lt;/h2&gt;

&lt;p&gt;Picture a normal day with three projects going at once. Underneath the actual work, you're running a second, smaller loop all day long:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;capture:&lt;/strong&gt; get what's on your plate into view&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;check state:&lt;/strong&gt; figure out where each piece actually is&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;prioritize:&lt;/strong&gt; pick what's next&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;review:&lt;/strong&gt; at the end, see what got done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbx9zx4aelsye811nsr05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbx9zx4aelsye811nsr05.png" alt="The 4-act orientation loop: capture, check state, prioritize, review, run daily and weekly" width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That loop is cheap when you're running one thing. It gets expensive fast when you're running several phased threads at once, because now you're holding all of it in your head, and your head has a ceiling. Past that ceiling, you start paying what I'll call the &lt;strong&gt;orientation tax&lt;/strong&gt;: the time and attention you burn just &lt;em&gt;staying oriented&lt;/em&gt; (re-contextualizing, re-deciding, re-finding your place) instead of moving the work forward.&lt;/p&gt;

&lt;p&gt;The tax is small per hit and easy to dismiss. That's exactly why it's expensive: you pay it dozens of times a day and never see the bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The misdiagnosis: "just have more discipline"
&lt;/h2&gt;

&lt;p&gt;The dominant framing for this is moral. &lt;em&gt;You have too many half-finished projects. Finish what you start. Stop being a magpie.&lt;/em&gt; It shows up everywhere in dev culture, and it feels true, so nobody questions it.&lt;/p&gt;

&lt;p&gt;But look at what the people who took the problem seriously actually concluded. The developer behind &lt;a href="https://dev.to/__be2942592/i-have-47-unfinished-side-projects-heres-why-i-dont-feel-bad-about-it-3g4o"&gt;&lt;em&gt;I Have 47 Unfinished Side Projects&lt;/em&gt;&lt;/a&gt; expected the lesson to be discipline, then landed on &lt;strong&gt;context&lt;/strong&gt; instead: of the 47, the one project that actually shipped was the one that started from a real problem he had &lt;em&gt;right now&lt;/em&gt; ("I literally need this tomorrow"), not from forcing himself to finish the rest. &lt;a href="https://www.linkedin.com/pulse/developers-dilemma-managing-too-many-projects-once-bonaventure-ogeto-pingf" rel="noopener noreferrer"&gt;Bonaventure Ogeto&lt;/a&gt; keeps what he calls a "projects parking lot": &lt;em&gt;a single place to log every project and its current status, so you always know where everything lives and nothing feels lost.&lt;/em&gt; That's not a discipline fix. It's an &lt;strong&gt;orientation fix&lt;/strong&gt;: one honest place where the state of in-flight work lives.&lt;/p&gt;

&lt;p&gt;Here's the distinction that matters, because it's easy to blur. &lt;strong&gt;Deciding what to start&lt;/strong&gt; is a selection problem: upstream, real, but not this one. The tax I'm describing starts &lt;em&gt;after&lt;/em&gt; you've committed. You've got work you've decided to do, broken into pieces, and the cost is just &lt;strong&gt;staying oriented across it&lt;/strong&gt;. The grassroots fixes all quietly agree the lever is context (a single status home), not willpower. The discipline frame keeps people optimizing the wrong variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers (it's expensive, and some of it is measured)
&lt;/h2&gt;

&lt;p&gt;"Staying oriented" sounds soft. The cost isn't.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Figure&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Re-teaching the agent at the start of every session&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~12 min/session ≈ one workday/month&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ma (self-tracked)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refocusing after a single interruption (complex work)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;up to 23 min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gloria Mark / APA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A 10-dev team losing 20% to switching&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$240,000/year&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;onehorizon&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three angles on one cost: per session (the agent), per interruption (you), per year (the team). Two honest caveats, because the credibility is the point. The &lt;strong&gt;23-minute&lt;/strong&gt; refocus comes from Gloria Mark's interruption research, usually reported second-hand, so treat it as directional, not gospel. The &lt;strong&gt;12-minute/session&lt;/strong&gt; figure is newer and thinner: one developer's week of self-tracking. Strong as illustration, not yet replicated. I'm citing both as what they are.&lt;/p&gt;

&lt;p&gt;But the direction is unambiguous, and the two tiers point at the same thing: &lt;strong&gt;the cost of losing the thread, multiplied by how often you lose it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI era makes it worse, not better
&lt;/h2&gt;

&lt;p&gt;You'd expect a coding agent to &lt;em&gt;reduce&lt;/em&gt; this. It does the opposite, in two ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, it raises the thread count.&lt;/strong&gt; Agents let you start more and ship faster than you can stay oriented. Every capability jump (faster models, parallel agents, longer task horizons) increases how many pieces a solo operator can have in flight at once. That's the exact input that drives the tax. More throughput, more to keep straight.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;focus / context-switching research (decades, pre-AI)
        |  attention is serial; switching is costly
        v
indie-maker "too many threads" culture (2010s -&amp;gt;)
        |  more starts than you can hold
        v
agent era (2024-2026)   &amp;lt;-- the amplifier
        agents let you START more and SHIP faster than you can orient,
        AND the agent itself loses the thread between sessions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Second, and this is the new part: the agent pays the tax too.&lt;/strong&gt; It starts every session cold. As one tooling write-up puts it, model weights are frozen, the context window rebuilds from scratch, and &lt;em&gt;"most tools do not write cross-session memory by default. Manual files like AGENTS.md help, but they drift."&lt;/em&gt; That drift is the same staleness that rots your own notes, now happening to the agent.&lt;/p&gt;

&lt;p&gt;And it's not a one-way street where your mess flows downhill into the agent. The sharper read: &lt;strong&gt;you and the agent are running the same loop on the same work, on two different clocks.&lt;/strong&gt; Your clock spans days and weeks. The agent's clock is the &lt;em&gt;session&lt;/em&gt;, and it resets every time. When you ship fast, you spin up many sessions, often parallel, across days. Nothing &lt;em&gt;inside&lt;/em&gt; a single session can carry the picture across all those resets. The agent reaching for &lt;code&gt;AGENTS.md&lt;/code&gt;, the threads asking &lt;em&gt;"how do you handle context loss between Claude Code sessions?"&lt;/em&gt;: that's the agent &lt;strong&gt;trying to run check-state and review&lt;/strong&gt; and failing for lack of a durable, shared list. Same break as yours, different clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's one loop, and it breaks in the same place every time
&lt;/h2&gt;

&lt;p&gt;Step back and the whole thing collapses into a single mechanism. The tax isn't five unrelated annoyances. It's &lt;strong&gt;one loop breaking for one reason: there's no single honest list to run it on.&lt;/strong&gt; Take the list away and watch each act fail in order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No list → capture fails.&lt;/strong&gt; Committed work never lands in one place, so you orient on a partial view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ check-state fails.&lt;/strong&gt; State isn't updated, so the list (such as it is) lies: it says "in progress" for things that are done or dead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ prioritize fails.&lt;/strong&gt; What matters shifted; nothing flagged it; you keep working yesterday's order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ review fails.&lt;/strong&gt; Closure was never recorded, so "what did I actually ship this week" is unanswerable, and it stays invisible until the shame shows up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ it cascades.&lt;/strong&gt; Every break above is inherited by the agent, which is reading the same broken picture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the give-away here, the part worth keeping even if you never touch any tool: &lt;strong&gt;when your multi-threaded work feels like it's slipping, don't reach for more discipline. Find the act of the loop that's breaking, and notice it's breaking because nothing holds one honest list.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why nobody's built the fix
&lt;/h2&gt;

&lt;p&gt;If the problem is this legible, why is the slot empty? Because the field inherited the &lt;strong&gt;discipline&lt;/strong&gt; frame. Orientation got filed as a pre-existing human-character problem (&lt;em&gt;be more focused, start fewer things&lt;/em&gt;), so when agents arrived, nobody built the AI-native answer for it. The tooling that did get built lives one layer down, on &lt;strong&gt;execution&lt;/strong&gt;: making the agent build a single task correctly (spec files, rules files, memory stores). All useful. None of it keeps &lt;em&gt;you and the agent oriented across the whole board of in-flight work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So the pain is mainstream and well-documented, but the &lt;em&gt;solo-operator-plus-agent&lt;/em&gt; framing is young and mostly open. The vocabulary is even splitting in real time: "context switching" on the productivity side, "agent memory" and "persistent context" forming on the tooling side, both circling the same hole from opposite directions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reframe, in one line
&lt;/h2&gt;

&lt;p&gt;Your scattered board and your forgetful agent are not two problems, and neither is a discipline problem. They're &lt;strong&gt;one orientation problem&lt;/strong&gt;: nothing holds a single honest picture of what's in flight, so you keep rebuilding it from memory and the agent keeps inheriting a broken copy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyof0dt0dbqap8zgsqnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyof0dt0dbqap8zgsqnb.png" alt="Before and after the orientation tax: paid vs dropped. Same acts, same speed. The difference is one honest list both of you read" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fix isn't to want it more. It's to give the loop one surface to run on: honest, shared, and gated, so the honesty doesn't ride on memory. A board you reconcile before you build on it, instead of one you hope you updated. That's a design problem, not a character flaw. I've been building toward an answer to it, and that's the next post: &lt;a href="https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3"&gt;everyone harnesses the agent's loop, here's the map of the human's&lt;/a&gt;. This one only had one job: to get you to stop blaming your discipline for a context bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent context loss:&lt;/strong&gt; Augment Code, "Why AI Agents Keep Asking the Same Questions"; Marvin Ma, "Why Your AI Coding Agent Keeps Forgetting Everything" (the ~12-min/session figure).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interruption and team cost:&lt;/strong&gt; Gloria Mark / APA interruption research (via secondary reporting); onehorizon (the ~$240k/yr figure).&lt;/li&gt;
&lt;li&gt;Maker self-diagnoses (the 47-projects and parking-lot pieces) are linked inline. Full source ledger lives in the problem-convention dossier.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>claude</category>
      <category>agents</category>
    </item>
    <item>
      <title>Javascript (JS) Pass by Reference and Pass by Value</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 28 Jan 2023 20:28:35 +0000</pubDate>
      <link>https://dev.to/idnk2203/javascript-js-pass-by-reference-and-pass-by-value-b7f</link>
      <guid>https://dev.to/idnk2203/javascript-js-pass-by-reference-and-pass-by-value-b7f</guid>
      <description>&lt;h2&gt;
  
  
  Terms
&lt;/h2&gt;

&lt;p&gt;Passing: To assign a value to a variable or, pass it to function as a parameter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pass by Value
&lt;/h2&gt;

&lt;p&gt;Anytime a variable containing another value which is not an object or an array is passed along to let's say a function as a parameter, the variable being passed becomes a copy of the value it holds. As a result, the variable passed to the function will have its value unchanged despite whatever the function does with it, for example, reassign’s it or updates it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 60&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;boo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt; 
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 70&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 60 : unchanged value of the x variable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pass by Reference
&lt;/h2&gt;

&lt;p&gt;Anytime a variable containing another value which is an object or array is passed along to let say a function as a parameter, the variable is passed to the parameter as a ref to its object/array value. As a result, the variable passed to the function will have its value changed if for example it is updated with a new element of the key/value pair.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22} &lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;boo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22, status:true} &lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22, status:true} &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>aws</category>
      <category>security</category>
      <category>discuss</category>
      <category>workplace</category>
    </item>
    <item>
      <title>5 Debugging Tips that can Save you 5hrs of Debugging Time</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Fri, 21 Oct 2022 23:14:17 +0000</pubDate>
      <link>https://dev.to/idnk2203/5-debugging-tips-that-can-save-you-5hrs-of-debugging-time-3c1d</link>
      <guid>https://dev.to/idnk2203/5-debugging-tips-that-can-save-you-5hrs-of-debugging-time-3c1d</guid>
      <description>&lt;h2&gt;
  
  
  1. Document Everything
&lt;/h2&gt;

&lt;p&gt;You should always document everything from instructions on how to replicate the bug, to defined strategies on how to resolve the bug, to any side effect that results from a solution implementation. This is probably the most important one and I learnt this from working at Loxe Inc.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Error Logging
&lt;/h2&gt;

&lt;p&gt;Always log your errors through a properly implemented error handler middleware and when an error occurs be sure to check your logs. I don't also forget the remove log statements from your debugged code. I learnt this from working at Loxe Inc.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Only refactor working code
&lt;/h2&gt;

&lt;p&gt;When debugging it is best to work with the most simplistic-looking code piece of code to speed up the refactoring process and refactor after the code has been debugged.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Fix one problem at a time
&lt;/h2&gt;

&lt;p&gt;This is also one major mistake most people make including myself of trying to resolve all the bugs at the same time before testing or grouping a lot of small bugs into one big bug, never do this. Always fix one bug at a time&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Take Breaks
&lt;/h2&gt;

&lt;p&gt;This can be linked to the spacing effect which refers to the finding that long-term memory is enhanced when learning events are spaced apart in time, rather than massed in immediate succession.&lt;br&gt;
What this translates is that when trying to resolve bugs don't feel that you have to do it all in one go. it's okay to take breaks while resolving a bug.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jwt</category>
      <category>auth</category>
      <category>node</category>
    </item>
  </channel>
</rss>
