If you are using background agents in Claude Code, the status line text that appears next to the agent panel, such as “Editing files…”, may consume a significant number of tokens in the background. Since version 2.1.232, deployed in August 2026, interactive background agents have agent_summary enabled by default, which sends the agent’s entire conversation transcript to the model every 30 seconds to generate a 3–5 word status text.

According to data published by the Flamerix AI team after analyzing OpenTelemetry data from their own systems, costs attributed to these agent_summary requests accounted for 16.4% of total costs and 19.7% of total API requests 1. In GitHub issue #86879, multiple users reported substantial proportions based on varying metrics in environments that heavily utilize subagents. rflcrz measured that agent_summary accounted for 22.7% of requests and 18.0% of weighted tokens (based on Opus 5 pricing) during a 4-hour session involving 27 subagents. sylvain-artois confirmed it accounted for 26% of cache-read tokens during a 1-hour 45-minute session, and kcarriedo observed 15–22% of weighted tokens in sessions with 20 or more subagents 2. In contrast, Anthropic’s Edwin Arbus explained that the cost share averages around 2% when measured across all users who send telemetry. 3 In other words, whether you perceive this cost in your workload depends significantly on how frequently you run subagents and how long their contexts are.

In this article, we will examine the costly structure of agent_summary calls, and outline how to identify them, as well as the advantages and limitations of current blocking methods.

The inefficiency of reading the entire transcript every 30 seconds

The inefficiency of reading the entire transcript every 30 seconds

Before/after measurements reported by Flamerix AI for its own workload. ↗

agent_summary incurs high costs due to the asymmetry between input and output. The feature resends the entire conversation history of the active background agent to the model every 30 seconds, and the model is only instructed to read it and output a “3–5 word summary of the last action.”

According to the Flamerix team's measurements, the ratio of input tokens to output tokens was approximately 9,000:1. Additionally, 96% of the related costs were incurred on the more expensive Opus models 1. GitHub user sylvain-artois also reported that an agent with a 380k context consumes approximately 45 million cache-read tokens per hour 2. This is a structure that reads hundreds of thousands of tokens just to display a 3–5 word status.

This consumption is separate from the agent’s actual work. Each call is configured to operate independently of the agent's work context, with settings such as skipTranscript:true (transcript not recorded), complete tool disabling, and a one-turn limit 2. Consequently, blocking these requests does not affect the agent's operations of editing files or executing commands. The Flamerix team confirmed that after blocking, agent_summary requests recorded 0 instances in their OpenTelemetry data, and were not replaced by other query sources 1.

Currently available blocking methods

Currently available blocking methods

The Bun preload invocation published in the original source. ↗

There is currently no official dedicated setting to turn off agent_summary. However, the Flamerix team and GitHub users have proposed the following workarounds.

1. Bypass the timer with a Bun preload script

The Flamerix team released an approximately 70-line script that uses Bun’s --preload option to disable the timer without modifying the Claude Code binary. It wraps the global setTimeout, and operates by returning an empty handle without executing the actual timer when it finds specific anchor strings in the source code of the summary timer callback 1.

bash
curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js
claude daemon stop --any

export BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS} --preload=$HOME/.local/share/no-agent-summary.js"
claude

The main caveat of this method is its reliance on anchors. The script operates in a “fail-open” manner, meaning that if the internal code or string structure changes in a Claude Code update, the script will silently stop functioning. Therefore, you must re-check for request occurrences in your OpenTelemetry data after a version update 1.

2. Setting the CLAUDE_CODE_FORK_SUBAGENT environment variable

Participants in GitHub issue #86879, particularly uwuclxdy, reported that setting the CLAUDE_CODE_FORK_SUBAGENT=0 environment variable stops the summaries 2.

json
{
  "env": {
    "CLAUDE_CODE_FORK_SUBAGENT": "0"
  }
}

However, this variable disables fork mode itself. As sylvain-artois confirmed through code analysis, the condition for enabling summaries is linked to the fork gate, meaning the summary is only disabled when the fork feature is turned off 2. Thus, while this may be an intuitive solution for users who do not need fork mode (where subagents copy the conversation history), it cannot be used if you require the fork feature. For reference, a bundle analysis of version 2.1.276 confirmed that there is no official path to disable this feature in the interactive CLI 2.

Changes in user experience when blocking

Changes in user experience when blocking

Agent-list UI example published by Anthropic, not a before/after blocking comparison. ↗

Blocking agent_summary prevents the status line text of background agents from updating. This removes the visual cues indicating what the current agent is doing.

Anthropic is aware of this issue. Edwin Arbus acknowledged on Hacker News that the current approach is "excessive for a status line," and noted that cache-miss issues have been fixed in versions 2.1.311 and later. He also stated that a “short mode” is under development, which sends brief notes to a smaller model instead of the entire transcript 3. While related logic is found in the code for version 2.1.310, it remains disabled by default 3.

Measuring the proportion in your workload

Measuring the proportion in your workload

Measurements from a four-hour session with 27 subagents, reported in the GitHub issue. ↗

If you do not use background agents, this feature accounts for close to 0%. If you run many subagents for long periods, it may account for roughly 16% of cost evaluations and 26% of cache-read tokens 1, 2. Because the figures vary depending on the metric, it is recommended to determine the proportion in your environment before deciding whether to block it.

Because status-line summary requests are not recorded in the transcript, they cannot be verified through standard cost-tracking tools based on JSONL logs. Accurate proportion verification requires enabling OpenTelemetry export using CLAUDE_CODE_ENABLE_TELEMETRY=1 and aggregating the request count and cost for the query_source = agent_summary metric 1, 3.

After applying the Bun preload script, verifying whether the query_source = agent_summary metric has disappeared from the OpenTelemetry data is a reliable method of checking its effectiveness 1. Since the environment variable CLAUDE_CODE_FORK_SUBAGENT=0 disables the entire fork mode, users who do not use fork features can achieve the same effect without the Bun script provided by the Flamerix team 2.

References

  1. ↩
  2. ↩
  3. ↩