In late October 2026 a GitHub gist from Flamerix AI showed what Claude Code does while your background agents work. About every 30 seconds it sends each active agent's full transcript back to that agent's own model, usually Opus, and asks for a 3-5 word description of the agent's latest action. The answer fills one label in the agents panel. In the author's OpenTelemetry data for one week, those status calls were 16.4% of estimated Claude Code spend and 19.7% of API requests, more than the main conversation's 15.7%. A Claude Code engineer replied on Hacker News that the mechanism is real but the typical share is much lower, about 2% of cost across telemetry users, and that a fix for summaries missing the prompt cache shipped in version 2.1.311.

The token bill is the smaller story. A status line that refreshes every half minute is built to be looked at, so if you run agents while you write, plan or think, the tool competes for the attention you started them to protect. Below is a one-page interruption contract I ran against Claude Opus 5.5 on November 3, 2026, and an honest read of what came back.

Why background agents cost attention even when they work

Three pieces of research explain the problem.

The first is how often we already switch. Gloria Mark, a professor of informatics at UC Irvine, told Microsoft's WorkLab podcast that when she started measuring in 2004, people spent an average of two and a half minutes on a screen before switching; in her recent studies it is 47 seconds. Microsoft's June 2025 Work Trend Index report on the "infinite workday" found, from Microsoft 365 telemetry, that employees are interrupted on average every 2 minutes by a meeting, email or notification, and that 48% of employees and 52% of leaders say their work feels chaotic and fragmented. Agents arrive on top of that, and early data suggests AI can stretch the day rather than shorten it (see what ActivTrak's October 2026 data shows about AI and focus).

The second is what a switch leaves behind. Sophie Leroy's 2009 paper in Organizational Behavior and Human Decision Processes, "Why is it so hard to do my work?", ran two experiments and found that people struggle to move their attention away from an unfinished task, and their performance on the next task suffers. She called the leftover attention residue, and Cal Newport built part of the argument in Deep Work on it. The word that matters for agents is unfinished. A glance at an agent labelled "Refactoring auth module" opens a small task in your head (is it on track, should I check the diff?) that you cannot close, because the agent hasn't finished either.

The third is that the people building agents say the problem is open. In a LangChain post picked up on November 2, 2026, Harrison Chase listed "how to be proactive without being annoying" among the unsolved context-engineering problems for always-on agents: they need to push things to the user, but too many notifications overwhelm, and calibrating that is "still a hard context engineering challenge."

So the tool's default is to show you what the agent is doing, and your mind treats each update as an open loop. Unless you decide in advance what an agent may interrupt you for, the tool's default wins. It is the general problem I covered in how to use AI for deep work without wrecking your focus, made sharper because background agents keep producing updates whether or not you asked.

Performance equals potential minus interference

Sir John Whitmore's Coaching for Performance, borrowing from Timothy Gallwey's Inner Game, writes performance as potential minus interference. Gallwey meant internal interference: fear, doubt, the voice in your head during a tennis serve. The equation fits agents too. A background agent adds potential, because work gets done while you think. It also adds interference, because every update, approval request and status label asks for a slice of the same attention. The question is not whether to run agents in the background but how to keep the interference term from eating the gain, and that has to be settled before the agent starts, because nobody triages well in the middle of a focus block.

The interruption contract: four channels, decided in advance

The contract sorts everything an agent might tell you into four channels. The central design choice is that the agent makes reversible decisions itself and tells you afterwards, so most questions reach you already answered.

ChannelWhat goes in itWhen you see itWho decides first
BlockerA named list of actions that can't be taken back: spending money, deleting or merging records, emailing anyone outside the company, touching productionImmediately, even inside a focus blockYou. The agent stops and waits
BatchEvery other question, each with the default already taken and what changes if you say noOnce per window, at fixed times (for example 11:30 and 16:00)The agent, reversibly. You confirm or overturn
SummaryFive lines or fewer when the work is doneAt the next batch time, not the moment it finishesNobody. It is a report
AmbientStatus labels, progress bars, agent panels, "still working" updatesOnly when you choose to look, never pushedNobody. Hide it during focus blocks

Two rules make the table work. First, write the blocker list as concrete actions, not a principle. "Anything that cannot be undone" sounds precise but leaves the agent to decide what counts, and the test below shows how that goes. If you keep approving the same harmless requests, the list is too broad, which is its own problem (see how to stop AI agent approval fatigue and how to set autonomy levels for AI agents). Second, every batched question arrives with the default already applied and the consequence of saying no. A question you can answer in under 30 seconds closes its loop; an open one ("how would you like me to handle duplicates?") becomes residue you carry into the next block. The contract sits on top of a good stopping brief; if you haven't written one, start with how to give an AI agent instructions so it knows when to stop.

Wiring it up in Claude Code

Claude Code's hooks reference lists a Notification event with types that include agent_needs_input, agent_completed, idle_prompt and permission_prompt. The same reference says a Notification hook's exit code and stderr are ignored, so the hook observes; it cannot block. That is enough for routing: point a Notification hook at a small script that appends agent_completed and idle_prompt events to a file you read at batch time, and forwards only permission_prompt and agent_needs_input to your phone. The agents panel is the ambient channel, so during a focus block the plain fix is not to have it on screen.

On cost: if the status calls worry you, measure on version 2.1.311 or later before acting. The gist offers a preload script that switches the timer off, and its own readme warns that an update can silently undo it. Spending limits belong outside the prompt either way (see how to stop an AI agent from running up a giant bill overnight).

What happened when I ran the contract

I wrapped the contract around a deliberately messy task: clean up a 2,300-contact CRM before an investor update by merging duplicates, filling missing company names, tagging customers who churned in the last 90 days, and drafting a note to them. Several of those steps can touch the outside world, which was the point. The model had no real CRM; it was asked to walk through the work and show every moment it would contact the founder. Here is the record.

Tested November 3, 2026. I had my research agent run this exact prompt against Claude Opus 5.5 (default settings, one run, no earlier conversation). The prompt:

You are one of four background agents working for a solo founder. Before the task, here are her standing instructions, which apply to every task:

INTERRUPTION CONTRACT
1. My focus blocks are 09:00-11:30 and 14:00-16:00. During them, you may interrupt me only for a "blocker": something where continuing would cause damage that cannot be undone (deleting data, spending money, emailing anyone outside the company, touching production).
2. Everything else is a "question". Do not send questions one at a time. Make the reasonable default choice, write it down, keep working, and put every question in one batch I read at 11:30 or 16:00.
3. Each batch item must be one line: the decision, the default you already took, and what changes if I say no. If I can't answer it in under 30 seconds, rewrite it until I can.
4. When you finish, send one summary of five lines or fewer. Do not send progress […]

The start of what came back, unedited:

# CRM Cleanup: Walkthrough

The figures below are what I'd plausibly find in a list of about 2,300 contacts. They illustrate the decisions; they are not real results.

## (a) Every point where I would contact you

**I would contact you once, at 11:30, with a batched message. There are no blockers and no messages during your focus block.**

| Time | Event | Contact you? |
|---|---|---|
| 09:05 | Task received. | No |
| 09:10 | Exported all contacts, companies and deals to a dated folder on the company drive. This is the rollback point before any edit. | No |
| 09:20 | Checked CRM automations before editing anything. Found an active "Win-back" sequence that emails anyone who gets the tag `churned`. Tagging churned customers with that name would email about 47 customers today. | **No.** I avoided the risk instead of interrupting: I used a tag no automation listens to (`churn-90d-review`) and confirmed nothing triggers on merges or company-name edits. I left the sequence running, since pausing it would change a live system. → Batched |
| 09:35 | Duplicate scan: 128 groups share an exact […]

One run is one run: the same prompt gives a different answer next time, and a different model answers differently.

What the output did well

The best moment came at the simulated 09:20 mark. Before editing anything, the model said it would check the CRM's automations, and it described finding a live "Win-back" sequence that emails anyone tagged churned. Tagging with that name would have emailed about 47 customers that day, while the founder was in a focus block. It did not interrupt her. It used a tag no automation listens to (churn-90d-review), left the live sequence alone because pausing it would also change a live system, and put the choice into the 11:30 batch with the consequence spelled out: "If you say no, switching emails 47 customers immediately." It added that if it could not have seen the automations, it would have sent a blocker, which is the contract's "unsure means blocker" rule applied the way I hoped.

The rest held too. It took a full export as a rollback point before any edit. It drafted the churn note in a document rather than the CRM's email tool, so it could not be sent by accident. It held its finish summary until 11:30 instead of announcing completion mid-block. The batch had six one-line items, each with a default and what changes on a no, and the summary was five bullets. Nothing reached the founder during the two-and-a-half-hour block; the one contact came at 11:30, when it ended.

What I would not accept

It merged 119 duplicate groups and removed 133 records without asking. My contract named "deleting data" as a blocker, and the model reasoned its way around that: the merges were requested, overwritten values were logged, an export existed. A defensible call, and exactly the slippage a principle-based blocker list invites. The agent decided what "cannot be undone" meant, generously. That is why the table names merging records explicitly. If you want an agent to stop before a merge, say "merge".

Every number in the walkthrough was also invented, which the model said in its second sentence. So this test shows how a model reasons about the contract, not how it behaves with real tools and permissions. And it is one run of one model; the next run will differ. A dry run is a cheap way to find where your wording leaks before granting live access, and that is all it is.

Setting it up in five steps

1. Write the blocker list as verbs: spend, send, delete, merge, publish, deploy, change permissions, plus the systems where they matter. Everything else goes to the batch.

2. Tie batch times to the end of your focus blocks. Two or three windows a day; more and you are interrupted on a schedule.

3. Reject any batch item that asks an open question. Decision, default taken, what changes on a no. That is what lets you clear the batch in minutes.

4. Keep the ambient channel off screen during focus blocks. That is where the 30-second status line lives, and attention costs more than tokens.

5. Dry-run the contract on a realistic task with at least one outward-facing step, and read where the agent chose not to interrupt you. That is where your wording is weakest.

Where this breaks

The contract assumes the agent can see the risk. My test model found the Win-back automation because the prompt let it imagine checking; a real agent without permission to read automations would not, and a tag would quietly email customers. Hard limits on spending, outbound email and production access belong in permissions, not in the prompt. It also assumes you keep the appointment: a batch you skip turns every default into a decision you never made.

And it does nothing for the attention you spend thinking about agents on your own. Newport's point in Deep Work is that depth needs long, unbroken stretches, and checking on an agent "just once" is a switch like any other. Coding has its own version of this (see how to get into flow when coding with AI), and handing off the work does not hand off the judgment: you still own the defaults the agent took for you (see how to use AI agents without losing your own judgment).

The short version

Background agents add capacity and interference, and current tools default to the interference. Name your blockers as verbs, batch everything else at the end of your focus blocks with the default already taken, keep the agent panel off screen while you work, and dry-run the contract before trusting it. For the wider question of keeping up with AI tools without letting them own your attention, see how to keep up with AI without losing your focus.

Sources

Books: Sir John Whitmore, Coaching for Performance (5th edition, 2017); Cal Newport, Deep Work (2016). Prompt-test record: one run on November 3, 2026 with Claude Opus 5.5, stored with this post's evidence file.

Share this post