Przejdź do treści

Limity w Claude Code kończą się za szybko? Status line agentów zjada do 20% tokenów

Aktualizacja: 30 października 2026

Karta analizy kosztów Claude Code: trzy białe karty z liczbami 16,4% udziału w wydatku, 1 na 5 zapytań API i brak oficjalnego wyłączenia; pieczątka DO 20% LIMITU; nagłówek STATUS LINE ZJADA LIMITY; dane Flamerix AI i Hacker News z 29.10.2026

Claude Code ma w panelu agentów status line, gdzie każda praca w tle jest opisana trzema do pięciu słowami. Brzmi jak detal, a pod spodem siedzi pętla, która co 30 sekund bierze pełny transkrypt danego agenta, wysyła go do modelu i prosi o nowy opis. Firma Flamerix AI zmierzyła w tygodniu testowym, że te podsumowania zjadły 16,4% całego wydatku na tokeny, nieco więcej niż sama główna rozmowa (15,7%). Wątek o tym wylądował na Hacker News 29 października nad ranem i rośnie dalej, na 378 punktów, gdy pisałem ten tekst.

Najdziwniejsze jest to, że odpowiedź modelu nigdzie nie trafia poza panel. Nie wraca do rozmowy, nie wpływa na kod, nie pomaga agentowi. Istnieje wyłącznie po to, żeby w interfejsie świeżył się napis. I od wersji 2.1.232 z sierpnia 2026 działa domyślnie, bez ustawienia, które pozwala to wyłączyć.

Najważniejsze informacje

CoSzczegóły
ProblemCo ok. 30 sekund pełny transkrypt agenta w tle idzie do modelu, tylko po to, by odświeżyć opis 3-5 słów w panelu
Odkąd domyślnieWersja 2.1.232 Claude Code, 13 sierpnia 2026
Pomiar Flamerix16,4% tygodniowego wydatku (główna rozmowa: 15,7%), 19,7% wszystkich zapytań API, 96% z tego na Opusie
Niezależne pomiaryCztery zgłoszenia 18-26% w issue #86879 na GitHubie
Stosunek tokenówOkoło 9 000 tokenów wejścia na 1 token wyjścia
Gdzie to widaćTylko w eksporcie OpenTelemetry; logi sesji na dysku tych zapytań nie notują
Oficjalne wyłączenieNie istnieje; obejście to hook BUN_OPTIONS=--preload od Flamerix (MIT)
Wyłączanie kosztem funkcjiCLAUDE_CODE_FORK_SUBAGENT=0 albo CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 zabijają też same agentów w tle

Co dokładnie dzieje się co 30 sekund

Mechanizm jest opisany w badaniu Flamerix i potwierdzony w kodzie. Gdy uruchamiasz agenta w tle, Claude Code nastawia timer. Timer wybucha, bierze dotychczasowy transkrypt agenta i pyta model (zwykle Opusa) o zdanie w stylu „edytuje plik konfiguracji”. Ta odpowiedź lądowałaby w panelu Agent View, po czym pętla rusza od nowa. Interwał nie należy do klienta: przychodzi z flagi serwerowej per rodzina modeli i jest zaciśnięty do zakresu 30-240 sekund, a domyślna wartość to już minimum.

Flamerix zastrzega w badaniu, że koszt liczyli po własnym szacunku Claude Code (cost_usd w eksporcie OpenTelemetry), a nie po fakturze. Na abonamencie Pro albo Max nie płacisz per token, więc realnie tracisz coś innego: limit. Każde takie podsumowanie wchodzi w ten sam licznik zużycia, przez który tygodniowe okna Claude Code kończą się wcześniej, niż powinny. Stąd pytania w rodzaju „dlaczego limity w Claude Code kończą się tak szybko”, które ludzie realnie wpisują w wyszukiwarkę.

Jest też argument „przecież cache zrobi swoje”. Zrobił: około 98% tych zapytań czyta transkrypt z pamięci podręcznej. Ale 2%, które trafiają na zimny cache, ponosi ponad jedną trzecią jego kosztu, a nawet cache hit nie jest darmowy, tylko tańszy. Na HN jeden z komentujących policzył to tak: „Nawet przy trafieniu w cache palisz prawie input razy 0,10 za kontekst, wielokrotnie. Dziesięć razy i masz koszt całego świeżego prefillu sesji” („even at cache hit you are burning almost input * 0.10 * context amount of tokens multiple times”). Inny ujął to spokojniej: „Kosztuje tyle, co jedno dodatkowe wywołanie narzędzia w rozmowie. Dziwne jest robienie tego timera, co trochę nadwyręża »tylko wywołanie«” („It costs as much as one additional tool call in the conversation. It’s a bit weird to do it on a timer, which inflates a bit over »just a tool call«”).

Skąd wiadomo, ile to kosztuje

Anomalię wyłapał system DRIM od Flamerix na własnych danych telemetrycznych: po zgrupowaniu zapytań claude_code.api_request według źródła okazało się, że źródło agent_summary kosztuje więcej niż cała główna rozmowa. Po wdrożeniu poprawki udział spadł do zera, co działa jak kontrola, że pomiar nie złapał czegoś innego. W issue #86879 na GitHubie zebrały się cztery niezależne pomiary od innych użytkowników, wszędzie 18-26% wydatku.

Warto znać skalę czasu, bo problem rósł po cichu. Sam kod podsumowań pojawił się w wersji 2.1.32 z 5 lutego, martwy w publicznych buildach. W marcu stał się osiągalny przez opcję SDK, w kwietniu dotarł do interaktywnego CLI, a 13 sierpnia (2.1.232) włączył się domyślnie dla agentów w tle. 14 października (2.1.300) interwał przejął serwer, 23 października (2.1.310) dołączył tańszy tryb short, około 2 tysięcy tokenów notatek zamiast pełnego transkryptu. Domyślnie pozostaje wyłączony i tylko flagi serwera mogą go włączyć.

Sama dokumentacja tego nie ujawnia. Agent View jest opisany jako panel odświeżany przez model klasy Haiku co kilka minut, a w praktyce badanie pokazuje pełny transkrypt i zwykle Opusa. Tych zapytań nie ma też w logach sesji na dysku, więc narzędzia do liczenia kosztów czytające transkrypty nic nie zobaczą; jedynym oknem jest eksport OpenTelemetry. To zostawia użytkownika z limitami, które kończą się bez widocznego powodu. To zostawia użytkownika z limitami, które kończą się bez widocznego powodu.

Dlaczego nie wyłączysz tego ustawieniem

Szukałem w badaniu odpowiedzi na pytanie, które pada w każdym takim wątku: przecież jest przełącznik? Nie ma. Opcja SDK agentProgressSummaries ma domyślnie wartość false, ale w kodzie jest tylko jednym członem alternatywy, a każda ścieżka, która ją zapisuje, ustawia true. Zmienna środowiskowa CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES też może tylko włączać podsumowania. Z kolei DISABLE_NON_ESSENTIAL_MODEL_CALLS, które niektórzy pakiety distributorów ustawiają, w binarnym pliku nie występuje wcale.

Dwie zmienne jednak działają: CLAUDE_CODE_FORK_SUBAGENT=0 i CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1. Tyle że wyłączają przy okazji fork subagentów albo całe agenty w tle, czyli to, po co wielu ludziom Claude Code. Przypomina to sytuację z innych narzędzi agentowych, którą opisywałem przy tekście o bezpieczeństwie agentów AI: domyślne zachowanie działa, a przełącznik istnieje tylko w jedną stronę. Jeśli chcesz zobaczyć, jak praca z agentami AI wygląda od strony praktyki, pisaliśmy o tym osobno w jak stworzyć agenta AI.

Jak to wyłączyć dziś

Flamerix opublikowało hook, około 80 linii JavaScript, który podłącza się przez mechanizm preload środowiska Bun i neutralizuje dokładnie ten jeden timer. Binarka Claude Code pozostaje nietknięta; hook czyta źródło każdej funkcji przekazywanej do setTimeout i setInterval, rozpoznaje po znaku charakterystycznym callback podsumowania i zwraca nieruchomy timer zamiast uzbrojonego. W teście wersji 2.1.257 do 2.1.312 działało to na każdej z nich: 5 forków podsumowania bez hooka, 0 z włączonym.

Instalacja w wersji minimalnej wygląda tak:

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
BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload $HOME/.local/share/no-agent-summary.js" claude

Na stałe dodajesz BUN_OPTIONS z --preload do profilu powłoki albo używasz wrappera na PATH, a potem restartujesz demona (claude daemon stop --any), bo procesy w tle dziedziczą środowisko z tego, kto demona uruchomił. Test autorski hooka: claude --version z logiem pokazuje linię preload active mode=off, a po minucie pracy agenta w tle log notuje summary timer #1 suppressed (setTimeout, delay=30000). Flamerix przestrzega uczciwie o dwóch rzeczach. Po pierwsze, rozpoznanie idzie po tekście źródłowym funkcji, więc aktualizacja Claude Code może po cichu przenieść ten znak i podsumowania wrócą; weryfikację trzeba powtarzać po każdej aktualizacji. Po drugie, zmiana zachowania klienta może kolidować z warunkami usługi, co każdemu zostawili do sprawdzenia we własnym zakresie. Przetestowane na Linuksie; macOS i Windows bez testów, na Windows bramka /$bunfs/ najpewniej w ogóle nie zainstaluje hooka.

Co z tego wynika dla kogoś, kto płaci w złotówkach

Trzy grupy czytelników, trzy różne skutki. Jeśli siedzisz na abonamencie, twoim kosztem jest limit: status line po cichu podjada go nawet wtedy, gdy nie dotykasz klawiatury, a agent pracuje w tle. Jeśli płacisz za API, koszt jest wprost w rachunku i przy intensywnym użyciu agentów może dochodzić do jednej piątej zapytań. Jeśli korzystasz z Claude Code okazjonalnie w pojedynczej sesji bez agentów w tle, ten problem praktycznie cię nie dotyka, bo timer chodzi per agent w tle.

Ustawienie jest też dobrym testem zaufania do narzędzi agentowych w ogóle. Nie chodzi o to, że trzy słowa w panelu są warte 16% rachunku, choć są. Chodzi o to, że zapytań nie widać w logach sesji, dokumentacja opisuje je jako tańszy model klasy Haiku, a wyłącznik nie istnieje. Bez zewnętrznego eksportu telemetrycznego nikt by tego nie zmierzył, i to jest lekcja, która wychodzi z tego wątku mocniejsza niż sama poprawka.

FAQ

Jakie limity ma Claude Code?

Zależą od planu (Pro, Max albo API) i modelu, a dokumentacja nie podaje ich jako twardych liczb w jednym miejscu, więc nie podam ich bez świeżego odczytu. Sedno tego wpisu jest inne: część twojego limitu zużywa coś, czego nie zobaczysz w logach sesji, bo zapytania podsumowań agent_summary lądują tylko w eksporcie OpenTelemetry.

Ile tokenów zużywa status line agentów?

W pomiarze Flamerix AI tydzień pracy dał 16,4% całego wydatku na tokeny i 19,7% zapytań API, przy około 9 000 tokenów wejścia na 1 token wyjścia. Cztery niezależne pomiary w issue #86879 na GitHubie wskazują zakres 18-26%. Po włączeniu hooka udział spadł do zera.

Czy da się to wyłączyć oficjalnym ustawieniem?

Nie. Opcja agentProgressSummaries w SDK jest zapisywana jako włączona przez każdą ścieżkę kodu, zmienna CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES też tylko włącza podsumowania, a tańszy tryb short z wersji 2.1.310 domyślnie śpi i włącza go tylko flaga serwera. Jedyna droga na dziś to hook przez BUN_OPTIONS=--preload opisany wyżej albo wyłączenie agentów w tle razem z podsumowaniami.

Źródła

Aktualizacja, 30 października: rozszerzenie Claude Code miało dziś swój incydent bezpieczeństwa. Zainfekowana wersja 2.1.313 w Marketplace Cursora instalowała ofiarom backdoor SSH; sprawdzenie maszyny jedną komendą opisujemy w tekście o backdoorze w Claude Code.

Powiązane artykuły