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.
| Channel | What goes in it | When you see it | Who decides first |
|---|---|---|---|
| Blocker | A named list of actions that can't be taken back: spending money, deleting or merging records, emailing anyone outside the company, touching production | Immediately, even inside a focus block | You. The agent stops and waits |
| Batch | Every other question, each with the default already taken and what changes if you say no | Once per window, at fixed times (for example 11:30 and 16:00) | The agent, reversibly. You confirm or overturn |
| Summary | Five lines or fewer when the work is done | At the next batch time, not the moment it finishes | Nobody. It is a report |
| Ambient | Status labels, progress bars, agent panels, "still working" updates | Only when you choose to look, never pushed | Nobody. 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
- Claude Code burns ~15-20% of your tokens on a 3-word status line: a Bun preload that turns agent_summary off, Flamerix AI, GitHub gist, October 2026
- Claude Code Sends a Background Agent's Whole Transcript Every 30s for a 3-5 Word Status, Gabriel Anhaia, DEV Community, November 2, 2026 (includes the Claude Code engineer's Hacker News figures and the 2.1.311 cache fix)
- Hooks reference, Claude Code documentation, Anthropic
- New context engineering challenges in late 2026, Harrison Chase, LangChain blog, late 2026
- Regain Control of Your Focus and Attention with Researcher Gloria Mark, Microsoft WorkLab podcast
- Breaking down the infinite workday, Microsoft Work Trend Index special report, June 17, 2025
- Why is it so hard to do my work? The challenge of attention residue when switching between work tasks, Sophie Leroy, Organizational Behavior and Human Decision Processes 109(2), 2009 (abstract, RePEc)
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.
