Płacę Anthropic za Claude Code kilkaset dolarów miesięcznie. Mogłem płacić 3× tyle. Tnę różnicę trzema dźwigniami: prompt caching, model routing, context pruning. Pokazuję co działa — z liczbami z mojego setupu i kodem z projektu który mnie zainspirował.
Inspiracja: github.com/JuliusBrussee/caveman — token-optimization wrapper dla Claude Code. Krótki kod, parę bardzo dobrych pomysłów. Plus pokazuję mój własny stack: .claude/settings.json, smart-router skill, hooki, fewer-permission-prompts.
Skąd biorą się koszty Claude Code?
Claude Code to LLM-driven coding assistant z dużym kontekstem. Sesja 2-godzinna typowo zużywa:
- Input tokens: 2-5 milionów (system prompt + tools + cały conversation history + każdy plik który wczytałeś)
- Output tokens: 100-300 tysięcy (kod, wyjaśnienia, narracja)
- Cache reads: 60-90% input (dobrze skonfigurowane sesje)
Cennik Claude Sonnet 4.6 (kwiecień 2026):
- Input bez cache: $3 / 1M tokenów
- Cache write: $3.75 / 1M (1.25× input)
- Cache read: $0.30 / 1M (0.1× input — 10× taniej)
- Output: $15 / 1M tokenów
Bez cache = 3M input × $3/M = $9 sama sesja, plus output. Z dobrym cache hit ratio (80%) = 2.4M cache read × $0.30/M + 0.6M write × $3.75/M = $0.72 + $2.25 = $2.97. Trzykrotnie taniej za tę samą pracę. Skala miesiąca: zamiast $300 → $100.
Dźwignia 1: prompt caching — twój największy wpływ
Prompt caching to mechanizm Anthropic API: za małą opłatę cache write przy pierwszym requeście, dostajesz 5-minutowy TTL na powtórne odczyty z 10× niższą ceną.
Co cache'ować:
- System prompt (zawsze ten sam dla projektu)
- Definicje toolu (Read, Edit, Bash itd. — schema zmienia się rzadko)
- CLAUDE.md (instrukcje projektu, statyczne)
- Pliki dokumentacji projektu które są referenced wiele razy
Claude Code domyślnie cache'uje system + tools. Ale w długich sesjach (3+ godziny) trzeba pilnować TTL — co 5 min cache wygasa, kolejny request to write zamiast read.
Mój trik: jeśli sesja przekracza 30 minut bezczynności, restartuj klauzulę. Nie kontynuuj — wygasł cache, każdy kolejny prompt to write. Lepiej zacząć fresh sesję ze świeżym cache niż dopalać starej która już płaci pełną cenę.
Dźwignia 2: model routing — Haiku/Sonnet/Opus
Trzy modele Claude 4.X:
| Model | Input $/1M | Output $/1M | Use case |
|---|---|---|---|
| Haiku 4.5 | $1 | $5 | routine: lint fixes, format, simple search-replace, status summaries |
| Sonnet 4.6 | $3 | $15 | typical coding: feature dev, bug fix, refactor, code review |
| Opus 4.7 | $15 | $75 | złożone: architectural decisions, multi-file refactors, security audit |
Heurystyka która mi się sprawdza: 80% tasków idzie do Haiku albo Sonneta. 20% do Opusa. Klasyfikacja:
- „popraw literówkę w README" → Haiku
- „dodaj endpoint POST /webhook do server.js" → Sonnet
- „refaktor systemu autoryzacji żeby wspierał multi-tenant" → Opus
W moim setupie używam ~/.claude/skills/smart-router skill. Klasyfikuje task na podstawie keywords w prompt (np. „prosty/typowy/złożony", „1 plik/wiele plików") i wybiera model. Routing logic w SKILL.md + delegacja do subagenta z konkretnym modelem.
Dźwignia 3: context pruning
Trzecia dźwignia — najtrudniejsza ale najbardziej efektywna w długich sesjach. Claude Code domyślnie trzyma cały conversation history w kontekście. Po 2 godzinach masz 1.5M tokenów input z których 80% to pliki które już nie są relevant.
Co robić:
- Subagent dla każdej dużej eksploracji. Zamiast czytać 30 plików w głównym kontekście — odpalasz subagenta przez Agent tool, on robi research, wraca z 200-słowowym podsumowaniem. Główny kontekst nie spuchnie.
- /compact co godzinę-dwie. Wbudowana komenda Claude Code. Robi summary całej dotychczasowej rozmowy, kontynuuje z 30K tokenów zamiast 1.5M.
- Świadome pliki Read. Jeśli plik ma 2000 linii a potrzebujesz tylko
getUser()na linii 450 — użyjoffset+limit. Nie wczytuj całości. - Hook na koniec rozmowy.
~/.claude/settings.json→ hookStopktóry przypomina „session zużyła X tokenów, kontynuować czy nowa?".
Co robi caveman
caveman to ~90-line wrapper Python który automatyzuje 3 trick:
- Skraca system prompt — domyślny system prompt Claude Code ma ~2K tokenów. caveman trzyma essential 800 tokenów (bez pełnych descriptions toolów które LLM zna).
- Rotuje cache co 4 minuty — żeby nie wpaść w 5-min TTL expiry. Cache jest ZAWSZE świeży, każdy kolejny request to read (nie write).
- Detektuje „nadmiarowe" toole w prompt — jeśli zadanie to pure code editing, nie ładuje schemas dla WebFetch/Bash itd. Mniejszy system = mniej tokenów input.
Czy używam caveman 1:1? Nie — moje use-case'y są różnorodne i niektóre wymagają full toolset. Ale 3 pomysły zaadaptowałem:
- Skrócony system prompt dla skill subagentów (każdy skill ma własny system, krótszy niż globalny)
- Cache TTL monitoring (nie rotacja co 4 min — ale alert „cache wygasa za 30s, kontynuuj prompt teraz albo restart")
- Dynamic tool loading przez
ToolSearch— toole nie ładują się od razu, dopiero gdy potrzebne
Mój setup — co konkretnie robię
Konfiguracja: ~/.claude/settings.json
{
"permissions": {
"allow": [
"Bash(git status:*)",
"Bash(npm test:*)",
"Read(./)"
]
},
"hooks": {
"Stop": [{ "command": "echo 'Session ended. Tokens used: $CLAUDE_TOKENS_USED'" }]
},
"env": {
"CLAUDE_DEFAULT_MODEL": "sonnet"
}
}
Skille:
smart-router— klasyfikuje task complexity, routuje do Haiku/Sonnet/Opusfewer-permission-prompts— analizuje moje typowe Bash commands i auto-allowlistuje read-only (mniej przerwań = mniej tokenów na re-explanation)update-config— modifikuje settings.json bez ręcznego edytowania
Hooki:
PreToolUse— loguje każdy tool call do~/output/claude-tool-log.jsonl(mam metryki ile czego)UserPromptSubmit— jeśli prompt ma <5 słów, dorzuca standardowy template „bądź zwięzły, odpowiadaj 1-2 zdaniami"Stop— przypomina o /compact jeśli sesja >1h
Liczby z mojego setupu
Marzec 2026: $387 na Anthropic API + Pro subscription.
Kwiecień 2026 (po 3 tygodniach): $142 na ten sam workload.
Co zrobiłem:
- Włączyłem cache rotation alert — eliminuje cache writes w 4-godzinnych sesjach
- Smart-router skill — 60% tasków idzie teraz do Haiku zamiast Sonneta
- Hooki Stop — częściej robię /compact, mniej kontekstu się gromadzi
To 63% redukcji przy zachowaniu tej samej produktywności. Możliwe że jest niżej (kwiecień jeszcze nie skończony), ale nawet dotychczasowy stan to 3-4× ROI względem czasu który zainwestowałem w setup.
FAQ
Kiedy Sonnet vs Opus — jak decydować?
Domyślnie zaczynam Sonnet. Eskaluję do Opus tylko gdy: (1) zadanie wymaga rozumienia >5 plików równocześnie, (2) bezpieczeństwo / decyzje architektoniczne, (3) Sonnet pierwszą próbą daje gorsze wyniki niż oczekiwane. Nie odwrotnie.
Cache działa zawsze, czy są wyjątki?
Cache hit wymaga że pierwsze N tokenów requesta są identyczne z poprzednim. Każda zmiana system prompt, tool definitions, CLAUDE.md = cache miss, write zamiast read. Dlatego CLAUDE.md powinno być stabilne (nie modyfikuj go w środku sesji).
Czy 1M context window się opłaca?
Rzadko. Sonnet 4.6 z 1M context (mój CLI) płaci 2× za input powyżej 200K tokenów. Jeśli twoja sesja ma realnie 1M tokenów input — zwykle lepiej skomplikować strategię (subagenci, /compact) niż płacić premium za long context.
SDK vs CLI — różnica w kosztach?
SDK (Claude Agent SDK) daje ci pełną kontrolę nad cache control headers, model selection per-request, batch API. Drogi rocznie różnice mogą być >30% (taniej w SDK przy świadomej implementacji). CLI jest „dobre defaults" bez fine-tuning.
Ile realnie kosztuje moja sesja?
Anthropic Console pokazuje „Usage" per request. Plus mój hook PreToolUse loguje per-tool-call do JSONL — mogę zsumować po dniu/tygodniu. Bez tego latasz na ślepo. Pierwszy ruch w optymalizacji = włączyć metryki.
Chcesz zoptymalizować swoje koszty Claude Code?
Buduję narzędzia automatyzacji w Claude Code od początku 2025 — masa praktyki w optymalizacji kosztów. Jeśli twój zespół wydaje >$300/mc na Anthropic API i nie wiesz co z tym zrobić, umów Fit Call — w 30 minut zlokalizuję 2-3 konkretne dźwignie.
Plus zobacz moją bazę wiedzy i stronę Claude Code — uzupełniam je co tydzień o nowe trick. DM TOKEN na LinkedIn — wyślę ci snippety .claude/settings.json które redukują koszt sesji o 40-60%.