· 1 мин

Claude Code лимиты: куда фоновые агенты тратят токены и как отключить

agent_summary - это таймер Claude Code, который раз в ~30 секунд отправляет весь транскрипт каждого работающего фонового агента в его модель (обычно Opus) ради статуса из 3-5 слов. В сессиях с 20-40 агентами это 15-26% токенов. С версии 2.1.318 его, по сообщениям, выключает CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1; в режиме -p сводки по умолчанию выключены.

Claude Code раз в 30 секунд шлёт транскрипт каждого фонового агента в Opus ради статуса из 3-5 слов. Сколько лимита это съедает, как отключить и проверить.

Claude Code лимиты: куда фоновые агенты тратят токены и как отключить
В статье · 8 разделовразвернуть

agent_summary - это фоновый вызов модели в Claude Code: примерно раз в 30 секунд клиент отправляет весь транскрипт каждого работающего фонового агента в модель этого агента (обычно Opus) и получает подпись из 3-5 слов для строки статуса. По замерам пользователей это от 10% до 26% расхода в сессиях с десятками агентов. Начиная с версии 2.1.318 его, по сообщениям, выключает переменная CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1.

Пример на всю статью такой. Сидишь в интерактивном Claude Code, запустил пять фоновых агентов: один гоняет тесты, второй правит парсер, третий пишет миграцию. В списке агентов у каждого живая подпись вроде "Running the test suite". Красиво. Только за каждую такую подпись платит твой лимит, и платит полным транскриптом агента.

Что такое agent_summary в Claude Code?

agent_summary - это внутренний таймер Claude Code, который генерирует короткий статус фонового агента. Раз в ~30 секунд он берёт весь транскрипт агента и отправляет в модель самого агента, обычно Opus. На вход уходят тысячи токенов, на выход - три-пять слов. Интервал задаёт серверный флаг в пределах 30-240 секунд, по умолчанию стоит минимум.

Всё это раскопал автор гиста Flamerix AI (gist, MIT). По его данным, по умолчанию сводки включены с версии 2.1.232 (13 августа 2026). Соотношение входных и выходных токенов у таких запросов - примерно 9000 к 1. Те самые три слова, ради которых в Opus уходит портянка на десятки тысяч токенов.

В нашем примере с пятью агентами это пять форков каждые 30 секунд, пока агенты работают. За час - до 600 запросов только на подписи.

Сколько токенов уходит на статус фоновых агентов?

Доля agent_summary зависит от того, сколько фоновых агентов ты держишь. В сессиях с 20-40 агентами пользователи намеряли 15-26% токенов. По одному месяцу смешанной работы вышло около 10% расхода. По телеметрии самой Anthropic в среднем по пользователям это около 2% стоимости, а в терминальном клиенте около 6%.

Замеры собраны из гиста и issue #86879 в репозитории claude-code (открыт 15 августа 2026, проверено 05.11.2026):

Кто мерилВерсияУсловияДоля agent_summary
Flamerix AI (гист)-неделя до установки хука, OpenTelemetry16,4% расхода, 19,7% запросов
@rflcrz2.1.2334 часа, 27 субагентов22,7% запросов, ~18% взвешенных токенов
@sylvain-artois2.1.276одна сессия26% токенов чтения кэша
@kcarriedo-сессии от 20 субагентов15-22% взвешенных токенов
@chrisvaillancourt2.1.31230 дней~14% запросов, ~10% расхода; до 24% в сессии на 40 агентов
@oroboros083-jpg2.1.314одна тестовая сессия~14% взвешенных токенов
инженер Claude Code (по пересказу треда HN)-телеметрия всех пользователей за неделю~2% стоимости, ~6% в терминале

Мой вывод из таблицы: сводки дорогие ровно там, где фоновых агентов много и они живут долго. Если у тебя один-два агента на пять минут, это копейки. Если у тебя фабрика из 30 агентов на полдня, это пятая часть лимита.

Со стороны Anthropic, по пересказу того же треда, признали: "we agree that's a lot for a status line". Ещё они сказали, что 16,4% "похоже на команду, которая гоняет в основном фоновых агентов". При этом в самом issue #86879 на 30 октября, по словам @dblumenau, ответа мейнтейнеров не было два с половиной месяца.

Почему фоновые агенты тратят лимит, даже когда простаивают?

Простаивающий фоновый агент, по словам инженера Claude Code, сводки не генерирует: таймер срабатывает, пока агент работает. Лимит утекает из-за длины транскрипта. Каждый запрос везёт историю агента целиком, и чем дольше агент живёт, тем дороже каждая следующая подпись. Плюс до версии 2.1.311 часть таких запросов промахивалась мимо кэша промпта.

Ощущение "агент ничего не делает, а лимит тает" обычно возникает, когда агент формально занят: ждёт долгий билд, тесты или ответ другого агента. Для таймера это рабочее состояние. Про то, почему в команде агентов дороже всех обходится тот, кто ждёт, я уже разбирал отдельно на своём event loop - тут та же механика, только платишь не за ожидание, а за описание ожидания.

Ещё одна деталь из треда, после которой сводки уже не выглядят чистой косметикой. Комментатор wtfsayo пишет, что после компакции текст сводок может попасть в контекст модели. То есть подпись "для глаз" иногда становится частью того, что модель читает дальше.

Как отключить agent_summary в Claude Code?

Самый простой способ на ноябрь 2026 - переменная окружения CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1. По словам автора гиста и комментатора zachthedev, она работает с версии 2.1.318 и отсутствует в 2.1.317 и раньше. В changelog её нет, поэтому после включения проверь результат. На старых версиях работает только неофициальный Bun-хук.

  1. Узнай версию

    claude --version: от 2.1.318 пробуй переменную, ниже - только хук
  2. Включи переменную

    в shell или в блоке env файла settings.json, значение строго 1
  3. Перезапусти фон

    claude daemon stop --any, чтобы фоновые процессы подхватили окружение
  4. Проверь лог

    в debug-логе не должно быть строк AgentSummary Forking
Порядок отключения сводок фоновых агентов, ноябрь 2026

Пошагово:

  1. Проверь версию: claude --version. Нужна 2.1.318 или новее.
  2. Пропиши переменную в settings.json, чтобы она жила во всех сессиях:
{
  "env": {
    "CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES": "1"
  }
}
  1. Останови фоновые процессы: claude daemon stop --any.
  2. Запусти сессию с отладочным логом и пару фоновых агентов, потом посчитай форки (как - в следующем разделе).

Чего НЕ делать. "awaySummaryEnabled": false в настройках выключает другую вещь - сводку "с возвращением" (welcome-back recap), а не таймер агентов. CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES=0 тоже не поможет: по наблюдению @chrisvaillancourt, эта переменная умеет только включать, а 0 - непустая строка, и клиент считает её за "включено". CLAUDE_CODE_FORK_SUBAGENT=0 в issue даёт противоречивые отчёты и заодно выключает fork-режим.

Если версия ниже 2.1.318: Bun-хук

Для старых версий Flamerix AI выложил no-agent-summary.js - Bun-прелоад, который перехватывает глобальный setTimeout и глушит таймер сводки, не трогая бинарник. Ищет он таймер по строкам [AgentSummary] Timer fired и agent_summary и подменяет задержку на 2³¹-1 мс, чтобы таймер так и не сработал.

curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js \
  -o ~/.local/share/no-agent-summary.js
export BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload=$HOME/.local/share/no-agent-summary.js"
claude daemon stop --any

Грабли, которые собрал yoDEV в своём тесте: писать --preload= со знаком равенства (через пробел ломаются все подкоманды bun), класть скрипт в путь без пробелов и перепроверять после каждого обновления Claude Code - хук может молча перестать срабатывать. До v4 (прогон тестов от 3 ноября 2026) хук на Windows загружался, но таймер не находил. Режим CC_AGENT_SUMMARY_MODE=pass оставляет таймеры включёнными - удобно для A/B-сравнения.

Это неофициальное вмешательство в работу клиента. В README автор сам предупреждает, что это может конфликтовать с условиями сервиса. Так что если доступна 2.1.318, бери переменную, а хук оставь тем, кто сидит на старой версии.

Как проверить, сколько лимита Claude Code съедают сводки?

Быстрая проверка без сборщика телеметрии: запусти claude --debug-file <путь> и посчитай в логе строки [AgentSummary] Forking. Примерно одна строка каждые 30 секунд на каждого активного фонового агента означает, что сводки идут и ты за них платишь. Точная доля - через экспорт OpenTelemetry и поле query_source.

Для точного замера yoDEV включал экспорт логов:

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
claude

Дальше события claude_code.api_request группируются по query_source, нужное значение - agent_summary. Метрики claude_code.cost.usage и claude_code.token.usage тут не помогут: они делят расход только на крупные корзины main, subagent, auxiliary, и сводки там растворяются. Учти, что cost_usd в событиях - оценка самого клиента, а не счёт.

Контрольный прогон yoDEV на Claude Code 2.1.312 (macOS, Apple Silicon): без хука 5 форков сводки за задачу, в режиме pass тоже 5, в режиме off - 0. Если в нашем примере с пятью агентами после отключения в логе пусто - всё сработало.

Когда цифру увидишь, сравни её с тем, что тратят сами агенты. Иногда оказывается, что дороже сводок тот самый фан-аут: одна фраза у меня как-то сожгла 20% недельного лимита, потому что субагенты плодили субагентов.

Читайте такжеОдна фраза сожгла 20% недельного лимита Claude Code: как ограничить субагентов, которые плодят субагентовОдна фраза "проресёрчь тему" в Claude Code запускает сотню субагентов и жжёт недельный лимит за минуты. Разбираем, почему агент игнорирует правила из CLAUDE.md, и как ограничить фан-аут настройками.

Как я проверил свой конвейер на agent_summary

Мой конвейер статей живёт на VPS и зовёт Claude Code только в неинтерактивном режиме -p. Генерация черновика вызывается одной строкой из cron-обёртки, модель зафиксирована в общем конфиге обёрток: claude-opus-5-5. По словам участников issue #86879, в режиме -p сводки по умолчанию выключены. Но там же @canneyi оговаривается: fork-субагенты и скиллы с context: fork стартуют со сводками в любом режиме, а CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES=1 включает их и в -p. Я полез во frontmatter своих blog-draft и blog-check: там только name и description, никакого context: fork. Так что ночные прогоны этот налог не платят.

Строка из обёртки генерации, ровно как в репозитории:

claude --model "$BP_CLAUDE_MODEL" -p "/blog-draft $TOPIC_ID" --permission-mode acceptEdits >"$OUT" 2>&1

А модель задана в общем lib.sh, чтобы не менялась молча вместе с дефолтом CLI:

export BP_CLAUDE_MODEL="${BP_CLAUDE_MODEL:-claude-opus-5-5}"

По тому же шаблону, через claude ... -p, на сервере ходят все кроны с моделью: сбор тем, генерация, проверка и правка черновиков, посты для Threads и их правка. grep -n 'claude .*-p "/' cron/*.sh находит девять строк, и в каждой --model "$BP_CLAUDE_MODEL" -p. Последней добавилась run-threads-edits.sh: когда собирался факт-лист этой статьи, обёрток было восемь, к проверке стало девять. Отсюда граница, которую я для себя провёл: сводки - налог на интерактивную работу с фоновыми агентами, а не на автоматику. Если твои агенты крутятся по крону через -p, ничего отключать не нужно, а лучше поищи, где Opus делает работу, которую потянули бы Haiku и Sonnet. Если ты днём сидишь в терминале с десятком фоновых агентов - переменную ставь сразу.

Когда отключать agent_summary не нужно?

Отключать сводки бессмысленно, если ты работаешь в режиме -p, держишь одного-двух фоновых агентов или агенты живут несколько минут. Экономия будет в пределах погрешности, а живые подписи в списке агентов реально помогают понять, кто чем занят. Отключение окупается от пяти и больше параллельных агентов на часы работы.

Ещё одно соображение. Без сводки в строке агента остаётся описание задачи, и при 10+ агентах следить за ними глазами становится сложнее. Если ты всё равно смотришь не на подписи, а на результат (дифф, тесты, лог), потеря нулевая. Если ты дирижируешь агентами вручную и переключаешься между ними по статусу - сначала посчитай долю через --debug-file и реши по цифре.

И последнее: по словам инженера Claude Code, Anthropic готовит дешёвый режим сводок с короткими заметками в модель поменьше. В гисте упомянут режим "short", где сводку пишет Haiku, но он спрятан за серверным флагом. Когда его раскатят, вопрос может закрыться сам. Пока его нет, считать реальную стоимость прогона агента приходится вместе со сводками.

Частые вопросы

Влияет ли agent_summary на Claude Code в режиме claude -p?

По сообщениям участников issue #86879 в репозитории claude-code, в неинтерактивном режиме -p сводки фоновых агентов по умолчанию выключены. Исключения: fork-субагенты и скиллы с context: fork, а также явно выставленная CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES=1. Cron-скрипты и CI на обычном -p этот расход не платят.

awaySummaryEnabled выключает сводки фоновых агентов?

Нет. Настройка awaySummaryEnabled управляет сводкой при возвращении в сессию (welcome-back recap). Таймер agent_summary она не трогает. Для него с версии 2.1.318 есть переменная CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES=1, для старых версий - неофициальный Bun-хук.

Безопасно ли ставить Bun-хук no-agent-summary.js?

Хук не меняет бинарник, а только перехватывает setTimeout через BUN_OPTIONS=--preload. Но он неофициальный: может молча сломаться после обновления Claude Code, а автор гиста сам предупреждает о возможном конфликте с условиями сервиса. На 2.1.318 и новее лучше использовать переменную окружения.

Как готовился материал: черновик собран моим AI-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.

Влад Новиков
Пишу про AI-разработку без глянца. Новые разборы — сначала в канале.
Подписаться