Optymalizacja kosztówPrzewodnik
Zużycie tokenów w Claude Code: trzymaj wyniki narzędzi poza kontekstem
Jak hook PreToolUse i wtyczka context-mode trzymają logi testów poza kontekstem Claude Code, plus szacunek kosztów sesji z filtrowaniem i bez.

Na tej stronie
Twój agent uruchomił zestaw testów trzy razy, a rachunek jest większy niż zadanie. Powód rzadko tkwi w kodzie, który napisał. To logi testów: gdy wynik narzędzia trafi do kontekstu Claude Code, każde późniejsze żądanie niesie go ponownie. Rozwiązaniem jest zmniejszenie danych wyjściowych narzędzia, zanim model je zobaczy. Oficjalny sposób to hook PreToolUse na Bash; sposób zewnętrzny to wtyczka context-mode. Oba opisano poniżej, wraz z szacunkiem kosztów dla długiej sesji na modelu CheapTokens.
Dlaczego za jeden log płaci się wielokrotnie#
Zgodnie ze stroną kosztów Claude Code (https://code.claude.com/docs/en/costs, sprawdzoną 23 października 2026), Claude Code wysyła pełną rozmowę przy każdym żądaniu, a każde użycie narzędzia wywołuje kolejne żądanie, które niesie wyniki narzędzia. Buforowanie podpowiedzi odczytuje historię ponownie po tańszej stawce, ale tokeny wciąż tam są.
Załóżmy, że agent uruchamia npm test i otrzymuje log o 10 000 linii. Dokumentacja mówi, że taki log może mieć dziesiątki tysięcy tokenów. Przyjmijmy 30 000 tokenów. Cokolwiek zrobisz dalej, te 30 000 tokenów jest częścią danych wejściowych kroku 11, kroku 12, kroku 13 i tak dalej, aż wykonasz /clear lub kompaktowanie. I na tym polega haczyk: log jest przydatny przez jeden krok, a płacisz za niego przez trzydzieści.
Poprawka 1: hook PreToolUse, który filtruje dane wyjściowe testów#
Ta sama strona dokumentacji sugeruje hooki jako przetwarzanie wstępne: hook PreToolUse na Bash przepisuje polecenia testowe (npm test, pytest, go test) tak, aby przechodziły przez grep -. Agent widzi wtedy tylko błędy plus kilka linii kontekstu, a nie 10 000 linii zielonych kropek. Dokumentacja mówi, że może to zamienić dziesiątki tysięcy tokenów w setki.

To skrypt z tej strony dokumentacji (sprawdzony 23 października 2026). Wymaga jq. Utwórz folder za pomocą mkdir -, zapisz skrypt jako ~/ i uruchom na nim chmod +x:
#!/bin/bash
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'
if [[ "$cmd" =~ $pattern ]]; then
filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
echo "$input" | jq --arg filtered "$filtered_cmd" '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'
else
echo "{}"
fiNastępnie zarejestruj go w ~/:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }]
}
]
}
}Aby sprawdzić, czy działa, otwórz /hooks w Claude Code i poszukaj wpisu PreToolUse, albo zacznij od claude - i poproś agenta o uruchomienie npm test. Gdy hook przepisze polecenie, plik ma linię modified tool input keys z polem command. Jeśli testy przechodzą, wyjście jest puste, więc agent dostaje ciche powodzenie; dostosuj wzorzec, jeśli twój runner wypisuje błędy inaczej.
Poprawka 2: context-mode dla dużych wyników narzędzi#
Hook obejmuje tylko polecenia, które możesz przekierować potokiem. Zrzuty stron z Playwright lub lista dwudziestu zgłoszeń GitHub pochodzą z narzędzi MCP. Na to celuje context-mode. Zgodnie z jego README (https://github.com/mksglu/context-mode, sprawdzonym 23 października 2026; nie pokazuje wersji ani daty), jest to serwer MCP i wtyczka, która trzyma surowe dane wyjściowe narzędzi poza oknem kontekstu, przechowuje stan sesji w SQLite i kieruje wywołania narzędzi przez hooki. Wymaga Claude Code v1.0.33 lub nowszego, a jego licencja to Elastic License 2.0, która nie jest licencją open source OSI.
Instalacja w Claude Code:
/plugin marketplace add mksglu/context-mode
/plugin install context-mode@context-modeZrestartuj lub uruchom /reload-plugins, a następnie zweryfikuj za pomocą /. Wariant tylko MCP, claude mcp add context-, dodaje narzędzia, ale nie ma automatycznego kierowania.
Projekt raportuje duże redukcje: 315 KB staje się 5,4 KB (98%), zrzut strony 56 KB staje się 299 bajtów, 986 KB staje się 62 KB. To liczby samego autora: traktuj je jako górny limit i zmierz we własnej sesji za pomocą /context przed i po.
Ile kosztuje długa sesja, z filtrowaniem i bez#
Oto arytmetyka dla jednej założonej sesji. To 40-krokowa sesja kodowania przy średnim kontekście bazowym 20 000 tokenów, 500 tokenach wyjściowych na krok i trzech uruchomieniach testów, w krokach 10, 20 i 30. Każdy surowy log ma 30 000 tokenów; wersja filtrowana ma 500.
- Log z kroku 10 jest wysyłany ponownie w 30 żądaniach po nim: 30 × 30 000 = 900 000 tokenów. Krok 20: 20 × 30 000 = 600 000. Krok 30: 10 × 30 000 = 300 000. Dodatkowe wejście: 900 000 + 600 000 + 300 000 = 1 800 000.
- Filtrowane: (30 + 20 + 10) × 500 = 30 000 dodatkowego wejścia.
- Wejście bazowe: 40 × 20 000 = 800 000. Wyjście: 40 × 500 = 20 000.
- Zatem sesja to 800 000 + 1 800 000 = 2 600 000 tokenów wejściowych bez filtrowania i 800 000 + 30 000 = 830 000 z filtrowaniem, przy 20 000 tokenów wyjściowych w obu przypadkach.
Obliczenie liczy każdy token wejściowy po pełnej stawce. Buforowanie obniża rzeczywistą liczbę, ale obniża oba przypadki według tej samej logiki. Aktualne ceny dla MiniMax-M2.7 (MiniMaxAI/, kontekst 180K, do 8 192 tokenów wyjściowych), czyli modelu, który pasuje do takich pętli agenta obciążonych wejściem, znajdują się na poniższym wykresie.
Założenia: 40 kroków, kontekst bazowy 20 000 tokenów, 500 tokenów wyjściowych na krok, trzy uruchomienia testów po 30 000 tokenów (filtrowane: 500).
Na MiniMax-M2.7 sesja kosztuje $0.133 bez filtrowania i $0.0445 z filtrowaniem, a łącznie, licząc wejście i wyjście razem, jest tańsza niż cena referencyjna OpenRouter. Około dwóch trzecich wejścia w przypadku bez filtra to logi, które agent przeczytał raz.
Nie chodzi o dokładne dolary. Chodzi o to, że filtr usuwa około 1 770 000 z 2 600 000 tokenów wejściowych (2 600 000 − 830 000 = 1 770 000) na dowolnym modelu, a tańszy model obniża cenę każdego pozostałego tokenu.
Uruchom Claude Code na modelu CheapTokens#
Claude Code mówi protokołem Anthropic Messages, a CheapTokens go obsługuje. Bazowy URL dla Claude Code nie ma /v1. Pełna konfiguracja jest w jak podłączyć Claude Code do CheapTokens. W skrócie, z kluczem zastępczym:
export ANTHROPIC_BASE_URL=https://api.cheaptokens.dev
export ANTHROPIC_AUTH_TOKEN=YOUR_CHEAPTOKENS_KEY
export ANTHROPIC_MODEL=MiniMaxAI/MiniMax-M2.7
claudeUżyj pełnego identyfikatora z dokumentacji; krótkie nazwy z tabel cen nie są akceptowane przez API. Ceny wszystkich modeli są na stronie cen. Inne nawyki, które obniżają rachunek za Claude Code (/clear, /compact, /mcp, podagenci), opisano w Jak uczynić Claude Code tańszym. Aby zobaczyć, jak liczone są wejście i wyjście w rzeczywistym żądaniu, przeczytaj Ile tokenów zużywa żądanie API.
Szybka lista kontrolna#
- Uruchom
/contextw długiej sesji i zobacz, co zajmuje miejsce. - Dodaj hook Bash dla poleceń testowych; potwierdź przepisanie w
/hookslub w logu debugowania. - Jeśli narzędzia MCP zwracają duże zrzuty, wypróbuj context-mode i porównaj
/contextprzed i po. /clearmiędzy niepowiązanymi zadaniami, aby stare logi przestały jechać razem.



