Limity kosztów w Claude Code: 7 zasad dla agentów
MarkdownSiedem zasad kontroli kosztów Claude Code: limity dostawcy, budżet zadania, hooki, dozwolone narzędzia, wyłącznik awaryjny, sandbox i iteracje.
Przeczytaj cały artykuł
Najważniejsze informacje
Autonomiczny agent z nieograniczonym dostępem do chmury może w ciągu jednej nocy nabić wysoki rachunek. Omawiam 7 zasad Claude Code, które możesz wdrożyć w jeden wieczór, aby zapobiec takim awariom.
Dowiedz się, jak korzystać z usługi, w dokumentacji Ailoot.
Na co idą pieniądze: 3 kategorie wydatków autonomicznego agenta
Najważniejsze informacje
Na co autonomiczny agent wydaje twoje pieniądze? W trzech niezależnych kanałach: na tokeny w Anthropic/OpenAI, zasoby chmurowe (AWS/GCP/Yandex Cloud) oraz płatne działania w interfejsach API firm trzecich (obciążenia Stripe, bramki SMS, Twilio, boty Telegrama z subskrypcjami). Każdy kanał ma własny system rozliczeń i własny sposób na zatrzymanie szału wydatków.
Nie myl tych trzech kanałów — działają niezależnie i wymagają różnych ustawień:
- Tokeny LLM. Claude, OpenAI lub Gemini pobierają opłaty za kontekst wejściowy i wyjściowy każdego żądania. Pomagają tu Anthropic Task Budgets (zob. reguła 2) oraz subskrypcja zamiast rozliczania API za zużycie.
- Infrastruktura chmurowa. Za pośrednictwem MCP lub narzędzia Bash agent tworzy zasoby EC2, RDS, S3 albo wdraża funkcje Lambda. Pomogą tu AWS Budgets, GCP lub Yandex Cloud z wyłącznikiem awaryjnym (reguła 5).
- Interfejsy API firm trzecich. Agent wywołuje obciążenie Stripe, wysyła 100 wiadomości SMS przez bramkę albo konfiguruje tysiąc subskrypcji Telegrama. Pomogą klucze sandbox z wąskim zakresem uprawnień oraz twardy limit w panelu dostawcy (reguła 6).
Poniżej 7 reguł. Każda obejmuje jeden lub dwa kanały.
Jak ustawić twardy limit wydatków na API (reguła 1)
Najważniejsze informacje
Jak ustawić twardy limit wydatków na API? Anthropic i OpenAI mają wbudowany limit wydatków organizacji, który automatycznie ogranicza konto po osiągnięciu określonej kwoty. Nie myl go z alertami, które tylko wysyłają e-mail. Twardy limit to bariera; alert to żarówka. Ustaw oba, zaczynając od bariery.
Gdzie go włączyć (przeznacz co najmniej 2 minuty na każdego dostawcę):
Anthropic Console. console.anthropic.com → Settings → Limits → Monthly spend limit. Ustaw kwotę, którą jesteś gotów wydać w najgorszym miesiącu. Po jej osiągnięciu API zwraca 429 i rejestruje zdarzenie. Nie ma „spróbuję ponownie za minutę” — blokada potrwa do końca miesiąca.
OpenAI Platform. platform.openai.com → Billing → Usage limits. Podobnie dostępny jest limit miękki (alert e-mail) i twardy (wyłączenie API). Ustaw oba; twardy limit ustaw na 1.5x limitu miękkiego, aby pozostawić czas na reakcję.
AWS Bedrock / Google Vertex. Jeśli korzystasz z Claude/Anthropic przez pośrednika chmurowego, twardy limit musi być ustawiony po stronie chmury, a nie Anthropic. To reguła 5.
Co nie jest twardym limitem: alerty e-mail („wykorzystano 80% budżetu”). Przychodzą z opóźnieniem, a nikt nie czyta e-maili w nocy. Tylko synchroniczna bariera po stronie dostawcy.
Jak działają Anthropic Task Budgets i gdzie je ustawić (reguła 2)
Najważniejsze informacje
Czym są Anthropic Task Budgets i przed czym chronią? To funkcja beta w modelach Opus 4.7/4.8 oraz serii Fable/Mythos: ustawiasz budżet dla jednego autonomicznego procesu, a gdy budżet maleje, Claude ogranicza głębokość rozumowania i kończy zadanie podsumowaniem, zamiast w jego trakcie powiedzieć „to już wszystko, skończył mi się budżet”. To nie rozwiązuje wszystkich problemów i nie obejmuje wydatków na chmurę, ale zapobiega 80% przypadków, w których agent „utknął w pętli i tego nie zauważył”.
Szczegóły znajdziesz w oficjalnej dokumentacji Anthropic. Najważniejsze: to miękka granica, a nie twarda. Jeśli agent zdążył już utworzyć instancję EC2, Task Budget jej nie usunie.
W praktyce przekazujesz pole task_budget w ładunku żądania (na przykład 100 000 tokenów wejściowych na całe zadanie). Claude otrzymuje informację o budżecie i samodzielnie ogranicza swoje plany, upraszczając kroki lub pomijając podzadania. Gdy budżet zbliża się do zera, agent kończy pracę i zwraca tymczasowe podsumowanie zamiast powiedzieć „dziękuję za uwagę”.
Ograniczenia:
- Tylko Anthropic API. Nie działa w Bedrock/Vertex, które mają własne rozliczenia
- Tylko modele beta (Opus 4.7, 4.8, Fable 5, Mythos 5). Nie działa w Sonnet 4.6 ani Haiku
- Nie obejmuje wydatków na chmurę ani interfejsów API firm trzecich. Jeśli Claude uruchomi instancję EC2, Task Budget nie zareaguje
Korzystaj z tej funkcji razem z regułą 1 (twardym limitem), a nie zamiast niej.
Zabezpieczenia kosztów są częścią inżynierii kontekstu: decydujesz, co agent może, a czego nie może robić, oraz gdzie znajduje się awaryjny wyłącznik.
Co blokować za pomocą hooków PreToolUse w Claude Code (reguła 3)
Najważniejsze informacje
Czym są hooki PreToolUse w Claude Code i dlaczego ich potrzebujesz? To skrypty uruchamiane przed wykonaniem przez Claude wywołania narzędzia. Mogą zablokować żądanie (exit 2), wymagać potwierdzenia użytkownika albo pozwolić na wykonanie bez pytania. Najważniejsze: hooki uruchamiają się przed --dangerously-skip-permissions. Dzięki temu możesz blokować niebezpieczne działania nawet w trybie pomijania uprawnień.
Uprawnienia w Claude Code (stan na 1 czerwca 2026 r.) są oceniane w kolejności deny → ask → allow. Oznacza to, że:
- sprawdź osobno wybrany tryb uprawnień; test reguły deny w zwykłym trybie nie potwierdza ochrony przy pomijaniu uprawnień
- jeśli hook zwraca
exit 2, wywołanie narzędzia zostaje zablokowane allowedToolsma zastosowanie tylko wtedy, gdy reguły deny i hooki nie blokują działania
Minimalny hook PreToolUse sprawdzający kilka zapisów niebezpiecznych poleceń. To filtr tekstowy, a nie kompletny parser powłoki ani granica dostępu: równoważne polecenia, skrypty, inne narzędzia i istniejące zasoby chmurowe wymagają osobnych zabezpieczeń.
#!/usr/bin/env bash
# ~/.claude/hooks/block-dangerous-bash.sh
INPUT=$(cat)
if ! COMMAND=$(printf '%s\n' "$INPUT" | jq -er '.tool_input.command | select(type == "string")'); then
echo "Blocked: invalid Bash hook input" >&2
exit 2
fi
# Sprawdza wymienione wzorce tekstowe; nie obejmuje każdej równoważnej operacji
if echo "$COMMAND" | grep -qiE '(rm -rf|aws s3 rb|terraform destroy|kubectl delete|drop database)'; then
echo "Blocked: destructive command" >&2
exit 2
fi
exit 0
Zapisz skrypt pod wskazaną ścieżką, upewnij się, że jq jest dostępny, i nadaj uprawnienie wykonywania: chmod +x ~/.claude/hooks/block-dangerous-bash.sh. Powiąż go z konfiguracją w ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
}
]
}
}
Zobacz oficjalną dokumentację.
Sprawdź rejestrację w /hooks, a następnie przekaż skryptowi nieszkodliwe przykładowe dane JSON bez wykonywania pola polecenia. Wymieniony destrukcyjny zapis powinien zwrócić 2, a niewinne polecenie 0. Przetestuj też błędne dane wejściowe. Wyrażenie regularne sprawdza tylko dopasowane wywołania Bash; rzeczywistą granicę uprawnień wyznaczają wąskie poświadczenia i izolacja środowiska. Zobacz oficjalny przykład wejścia i wyjścia hooka.
Dlaczego używać listy dozwolonych narzędzi allowedTools i dlaczego nie uruchamiać --dangerously-skip-permissions na hoście (reguła 4)
Najważniejsze informacje
Gdzie umieścić listę dozwolonych narzędzi i dlaczego host to złe miejsce na tryb pomijania uprawnień? allowedTools w settings.json to lista konkretnych poleceń, które agent może uruchomić bez potwierdzenia; w przypadku pozostałych pojawia się prośba o zgodę. --dangerously-skip-permissions całkowicie wyłącza te prośby, dlatego nie uruchamiaj tego na komputerze hosta — używaj tylko kontenera lub maszyny wirtualnej.
Lista dozwolonych narzędzi realizuje zasadę najmniejszych uprawnień. Zamiast „zezwól na wszystko” (--dangerously-skip-permissions) dodaj tylko to, czego wymaga zadanie:
{
"permissions": {
"allow": [
"Bash(npm install:*)",
"Bash(npm run build)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Read(./src/**)",
"Write(./src/**)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(curl * | sh)",
"Write(/etc/**)",
"Write(~/.ssh/**)"
]
}
}
Co warto wiedzieć o trybie pomijania uprawnień:
- Linux/macOS odmawiają uruchomienia Claude Code w tym trybie jako root lub z sudo — to wbudowana ochrona
- Na własnym komputerze tryb pomijania wyłącza wszystkie prośby o potwierdzenie, a agent może wykonywać
rm -rfna dowolnych danych, otwierać klucze SSH i przesyłać dane do chmury - Nigdy nie uruchamiaj
--dangerously-skip-permissionsna hoście; korzystaj z niego tylko w:- kontenerze Docker z ograniczonym montowaniem woluminów (tylko wymagany folder)
- odizolowanej maszynie wirtualnej (Multipass, Lima, Orbstack)
- GitHub Codespaces / Replit / innym sandboxie
Minimalne polecenie docker run dla trybu pomijania uprawnień:
docker run --rm -it \
-v "$PWD:/workspace" \
-w /workspace \
--network host \
ghcr.io/anthropics/claude-code:latest \
claude --dangerously-skip-permissions
Jeśli agent potrzebuje poświadczeń chmurowych, użyj osobnych kluczy o wąskim zakresie uprawnień, a nie kluczy głównych (reguła 6).
Jak skonfigurować alerty budżetowe z wyłącznikiem awaryjnym w AWS, GCP i Yandex Cloud (reguła 5)
Najważniejsze informacje
Alert budżetowy zgłasza zaobserwowane lub przewidywane wydatki i może nadejść z opóźnieniem. Funkcja reagująca może zablokować nowe działania agenta albo zatrzymać konkretne zasoby; to różne czynności. Wyłączenie klucza IAM nie zatrzymuje opłat za już działające zasoby. Osobno określ i przetestuj ich zatrzymywanie.
Jak skonfigurować to w każdej chmurze:
AWS Budgets (dokumentacja). Utwórz budżet miesięczny i progi (50%, 80%, 100%). Przy progu 100% temat SNS może wywołać Lambdę reagującą. Poniższy przykład wyłącza wyłącznie klucze dostępu IAM wskazanego użytkownika; nie zatrzymuje zasobów ani nie ustanawia twardego limitu wydatków:
import boto3
def lambda_handler(event, context):
iam = boto3.client('iam')
# Deactivate all keys for the 'claude-agent' user
keys = iam.list_access_keys(UserName='claude-agent')['AccessKeyMetadata']
for key in keys:
iam.update_access_key(
UserName='claude-agent',
AccessKeyId=key['AccessKeyId'],
Status='Inactive'
)
return {'statusCode': 200, 'body': 'IAM keys deactivated; existing resources unchanged'}
Ograniczona procedura zatrzymywania zasobów: Dla wydzielonej piaskownicy z zatwierdzonymi instancjami EC2 opartymi na EBS zapisz przed uruchomieniem konto, regiony i dokładne identyfikatory instancji. W konsoli EC2 zaznacz wyłącznie te instancje → Instance state → Stop instance → potwierdź, a następnie sprawdź stan stopped każdej z nich. Najpierw zachowaj potrzebne dane instance store; zatrzymanie je usuwa. Sprawdź, czy zatwierdzony harmonogram lub system skalowania nie może ich zastąpić. Zatrzymuje to dane obliczenia, a nie wszystkie opłaty konta: osobno sprawdź zachowany magazyn danych i inne usługi. Postępuj zgodnie z oficjalną procedurą zatrzymania EC2.
Dokumentacja AWS Budgets ostrzega, że powiadomienia są opóźnione względem użycia zasobów, a dalsze koszty mogą powstawać przed alertem i po nim. Wyzwolenie reakcji przy 100% nie może więc egzekwować dokładnego pułapu kwotowego.
GCP Budget Alerts. Utwórz Budget → temat Pub/Sub → Cloud Function, która wyłącza Service Account. Ważna wskazówka z dokumentacji: alerty tylko powiadamiają, nie wyłączają usług, dlatego Cloud Function jest niezbędna.
Yandex Cloud (dokumentacja). Ustaw budżety w Billing → Budgets i dodaj limity zasobów jako twarde ograniczenie. Możesz połączyć powiadomienia z botem Telegrama za pośrednictwem Cloud Functions.
OpenAI API. Miękkie i twarde limity wydatków są dostępne bezpośrednio w panelu — twardy limit automatycznie wyłącza API, więc Lambda nie jest potrzebna.
Korzystaj ze sprawdzonego twardego limitu dostawcy, gdy jest dostępny, opóźnionych alertów budżetowych, wąskich poświadczeń i przetestowanej reakcji dla konkretnych zasobów tworzonych przez agenta. Odebranie poświadczeń blokuje część nowych operacji; bieżące zużycie zasobów wymaga sprawdzenia ich zatrzymania. Ani alert, ani komunikat powodzenia Lambdy wyłączającej klucze nie dowodzą ustania wszystkich opłat.
Dlaczego agent potrzebuje osobnego klucza API do sandboxa o wąskim zakresie uprawnień (reguła 6)
Najważniejsze informacje
Dlaczego agent potrzebuje osobnego klucza API? Aby ograniczyć skutki awarii. Utwórz użytkownika IAM lub Service Account przeznaczonego dla jednego agenta, nadaj mu minimalne uprawnienia (EC2, a nie *) i przypisz go do osobnego projektu rozliczeniowego z twardym limitem. Jeśli agent wyczerpie limit, w godzinę wyda własne 50 dolarów, a nie pieniądze całej firmy.
Podstawowa konfiguracja AWS:
- Utwórz użytkownika IAM
claude-agent-scan - Ustaw zasady obejmujące tylko wymagane działania (na przykład
ec2:RunInstancesw jednym regionie, z rozmiaremt3.micro, bez elastycznego adresu IP VPC) - Przypisz go do osobnego konta AWS (przez Organizations) z miesięcznym budżetem 100 dolarów
- Wygeneruj klucze dostępu i przekaż je wyłącznie agentowi; nie umieszczaj ich w swoim
~/.aws/credentials - Po sesji zmień klucze lub usuń użytkownika
Tak samo postępuj w przypadku innych dostawców:
- OpenAI / Anthropic: osobny klucz API dla każdego agenta, twardy limit dla każdego klucza w panelu oraz tagi
agent_idw metadanych żądań - Stripe / YooKassa: ograniczony klucz API przeznaczony do jednej czynności (na przykład wyłącznie
charges:read) oraz osobne konto sprzedawcy, jeśli to możliwe - Telegram Bot API: osobny token bota, nie token główny
Obowiązuje tu stara zasada bezpieczeństwa: najmniejsze uprawnienia — agent dostaje dokładnie to, czego wymaga zadanie, ani jednego uprawnienia więcej. Jeśli zadanie polega na „skanowaniu sieci”, nie dawaj mu ec2:* i s3:*; wystarczy ec2:DescribeInstances.
Kiedy używać próbnego uruchomienia przed startem i limitu iteracji (reguła 7)
Najważniejsze informacje
Dlaczego pozwolić agentowi przed uruchomieniem pokazać plan i ile iteracji można mu maksymalnie przyznać? Plan Mode to wbudowana funkcja Claude Code: agent najpierw opisuje, co zamierza zrobić, a ty zatwierdzasz plan. To bezpłatna kontrola przed startem. Z kolei --max-turns N ogranicza liczbę kroków w jednej sesji, aby agent nie mógł zapętlić się na zawsze. W trybie autonomicznym ustaw maksymalnie 10–30 tur.
Plan Mode (/plan) włącza się na początku sesji. Agent przygotowuje plan, pokazuje go na czacie, czeka na zatwierdzenie i dopiero wtedy zaczyna pracę. Funkcja jest bezpłatna i zapobiega 70% przypadków „oj, myślałem, że najpierw zapyta”.
--max-turns to flaga uruchomieniowa. Jedna tura to cykl „agent myśli + wywołanie narzędzia + wynik”. W przypadku zadań autonomicznych:
- mała zmiana: 5–10 tur
- średnie zadanie: 15–30 tur
- duże zadanie autonomiczne: 50–80 tur
Dodatkowe techniki:
- Limit czasu przy użyciu polecenia Linux
timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 seconds = 30 minutes. Stop the process gracefully.
- Rejestruj każde wywołanie narzędzia w pliku za pomocą hooka PostToolUse, aby później sprawdzić, co się wydarzyło
- Monitorowanie przez Cron — co 5 minut sprawdzaj, czy nie działa jednocześnie 10 procesów Claude (to typowy sygnał, że coś poszło nie tak)
Gotowa 5-minutowa lista kontrolna przed uruchomieniem autonomicznego Claude Code
Najważniejsze informacje
Co musi być gotowe, zanim naciśniesz Enter przy zadaniu autonomicznym? Siedem pól wyboru, z których każde zajmuje około minuty. Jeśli choć jedno jest puste, nie uruchamiaj agenta.
Lista kontrolna przed uruchomieniem claude --dangerously-skip-permissions:
[ ] 1. Twardy limit u dostawcy API (Anthropic Console → Limits → Monthly spend limit)
[ ] 2. Task Budget w ładunku żądania (jeśli używasz Opus 4.7+/Fable/Mythos)
[ ] 3. Hook PreToolUse blokujący rm -rf, aws s3 rb, terraform destroy
[ ] 4. Lista dozwolonych narzędzi allowedTools w settings.json lub praca w kontenerze Docker
[ ] 5. Opóźnione alerty budżetowe chmury + przetestowane odebranie kluczy i zatrzymanie zatwierdzonych zasobów
[ ] 6. Klucze API sandbox (osobny klucz dla agenta, nie główny)
[ ] 7. --max-turns N + timeout NNN sekund + monitorowanie procesów przez Cron
Jeśli wszystkie 7 pozycji jest spełnionych, uruchom agenta. Jeśli brakuje choć jednej, zatrzymaj się i ją skonfiguruj. Trzydzieści minut teraz może oszczędzić 6 000–500 000 dolarów później.
Dla kontekstu przykład: programista tworzący metodą vibe coding uruchomił aplikację sklepu internetowego z domyślnym hasłem do bazy danych postgres. W ciągu kilku dni ktoś ją znalazł, zainstalował koparki i wdrożył własne backdoory. Serwer trzeba było wyłączyć, a rachunek za ten miesiąc wzrósł z powodu kopania kryptowalut przez kogoś innego.
Ta historia dotyczy kategorii 3 z sekcji 1 (działań firm trzecich wykonywanych w twojej infrastrukturze), ale zasada jest taka sama: kontrola wydatków nie powinna zależeć od tego, kto je zainicjował — twój agent, pracownik czy koparka w Nigerii.
Dalsza lektura:
- Jak chronić Claude Code przed awariami — o
--dangerously-skip-permissionsi uprawnieniach z innej perspektywy - Bezpieczeństwo vibe codingu — filar bezpieczeństwa
- Jak nie wyczerpać limitów Claude Code w jeden dzień — o tokenach w subskrypcji (nie myl tego z tym poradnikiem o rachunkach za chmurę)
Źródła
Poznaj Ailoot.
Więcej szczegółów
Pytania i odpowiedzi
Czy odebranie kluczy IAM agenta zatrzymuje rachunek za chmurę?
Nie. Blokuje użycie tych kluczy do nowych uwierzytelnionych żądań, ale istniejące zasoby mogą nadal generować opłaty. Utrzymuj listę dozwolonych własnych zasobów, zatrzymaj zatwierdzone instancje, sprawdź ich stan i osobno przejrzyj zachowany magazyn danych oraz inne usługi.
Czy przykładowe wyrażenie regularne poleceń zapewnia pełną granicę bezpieczeństwa?
Nie. Sprawdza tylko dopasowane wywołania narzędzia Bash i wybrane wzorce tekstu. Testuj parsowanie JSON i kody wyjścia, ale rzeczywisty dostęp ograniczaj wąskimi uprawnieniami w chmurze i izolacją środowiska. Równoważne operacje i inne narzędzia mogą ominąć filtr tekstowy.