TL;DR The line that says what each background agent is doing ("Reading docs/wmedia.md") is rewritten every 30 seconds, and on the old path each rewrite re-sends the agent's whole conversation. Anthropic announced on November 4 that Haiku 5.5 now writes it from short notes, about 99% less per update, but it's switching it on account by account. Check which path you're on with
--debug-file; if you're still on the old one,CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1turns it off.
While a background agent works, Claude Code gives it a short label in the agent's row and refreshes it every 30 seconds. The agent doesn't write that label: it's a separate call to the model, and it counts against your usage limit like any other. Five agents running in parallel for twenty minutes means up to two hundred calls you never asked for.
The @ClaudeDevs announcement sums it up: each update used to re-read the agent's whole conversation, and now Haiku 5.5 writes it from short notes, about 99% less per update. The announcement is about that label only, not the agent's own work.
What you see in the agent's row
In an interactive Claude Code v2.1.318 session, with a background agent reading the files in a folder one by one, the row changes on its own after 30 seconds:
◯ general-purpose Reading docs/wmedia.md 32s · ↓ 41.3k tokens
Reading docs/wmedia.md is the label. Before the first update, the row shows the description the agent was launched with (Summarize docs files).
What that label cost
Claude Code logs every update in its debug log, prefixed with [AgentSummary]. That session took the old path, a fork of the agent with its whole context:
[AgentSummary] Timer fired for agent a1e2959a182852a9e
[AgentSummary] Forking for summary, 46 messages in context
Forked agent [agent_summary] finished: 1 messages, types=[assistant], totalUsage: input=9713 output=14 cacheRead=40319 cacheCreate=435
[AgentSummary] Summary result for a1e2959a182852a9e: Reading docs/wmedia.md
About 50,000 input tokens to write 14 output tokens. 40,319 came from the agent's prompt cache, which costs far less, but 9,713 didn't. And that's one update for an agent 30 seconds in: the context grows while it works, so the next one reads more.
The new path leaves a different line in the same place, Asking <model> for summary from <N> characters of notes. According to the binary, the notes stay under about 1,500 tokens.
Not every tick ends in a call: it's skipped when the agent has fewer than three messages or nothing has changed since the last label, and it stops when the agent finishes. On the old path, if the agent's cache is cold, it waits instead of paying for the whole context uncached; the log says so with its prompt cache is likely cold.
Who has the new path yet
In v2.1.318, the new path sits behind a feature flag Anthropic controls, and if the flag doesn't arrive, the default is the old one. The binary has room to turn it on by default for some models in a later version, but in this one that list is empty.
| Your session | Path |
|---|---|
Anthropic API, flag already on for you, Haiku model not overridden (ANTHROPIC_DEFAULT_HAIKU_MODEL, ANTHROPIC_SMALL_FAST_MODEL) |
Short notes |
| Anthropic API, flag not on yet | Fork with the whole context |
Bedrock, Vertex, Foundry, a gateway, or no feature flag download (DISABLE_TELEMETRY, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) |
Fork with the whole context |
The v2.1.318 changelog names that last group in a line of its own: on Bedrock, Vertex, Foundry or with telemetry off, an update on a cold prompt cache can now wait up to 5 minutes for the agent's pending response. The example session was a claude.ai cloud session on November 5, and it said Forking: Anthropic announcing it doesn't mean you have it yet.
Check yours and decide
1. Start with a debug log
claude --debug-file /tmp/cc-debug.txt
2. Launch a background agent that runs for more than 30 seconds
Launch a background agent that reads the files in docs/ one by one and summarizes each.
3. Look for the line
grep "AgentSummary" /tmp/cc-debug.txt
characters of notes is the new path, and there's nothing to do. Forking for summary is the old one, and the Forked agent [agent_summary] finished line tells you what each tick cost.
4. If you're on the old path and run lots of agents, turn it off
export CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1
With the variable set, the log says so when the agent launches and no timer starts:
[AgentSummary] No progress summaries for ae1d85f08a38dde8a: CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES is set
The agent's row keeps its fixed description (Summarize docs files). All you lose is seeing which file it's on. The variable isn't in the docs, it comes from the binary: test it again after you update.
Two more details
- On the new path, the label comes in your language. If you set
languagein settings, the instruction asks for the label in that language, with file and function names left as they are. The old path sends no such instruction. - In
claude -pand the Agent SDK labels are only generated when the integration turns on theagentProgressSummariesoption. A script that launches agents doesn't pay for this unless it asks.
To make the agent's own work cheaper, what matters is its model and its effort: Haiku 5.5 for subagents and low effort for the quick ones. And where to watch everything running at once is in the tasks panel tip.
Official docs: Changelog, v2.1.318 · Subagents (doesn't cover the labels)
Tested with Claude Code v2.1.318 in a cloud session, on November 5, 2026.