7 Claude Code-regels om de uitgaven van autonome agents te beperken in 2026
Markdown7 regels voor het instellen van limieten in Claude Code, zodat een autonome agent je niet met lege handen achterlaat: providerlimieten, Task Budgets, hooks, allowlists, noodschakelaars, sandboxsleutels en iteratielimieten.
Lees het volledige artikel
Belangrijkste punten
Een autonome agent met onbeperkte toegang tot de cloud kan in één nacht een hoge rekening veroorzaken. Ik bespreek 7 Claude Code-regels die je in één avond kunt instellen om dit soort fouten te voorkomen.
Lees in de Ailoot-documentatie hoe je met de dienst werkt.
Waar het geld naartoe gaat: 3 uitgavencategorieën voor een autonome agent
Belangrijkste punten
Waaraan geeft een autonome agent je geld uit? Via drie afzonderlijke kanalen: tokens bij Anthropic/OpenAI, cloudresources (AWS/GCP/Yandex Cloud) en betaalde acties in API's van derden (Stripe-afschrijvingen, sms-gateways, Twilio, Telegram-bots met abonnementen). Elk kanaal heeft zijn eigen facturering en eigen manier om de geldverspilling te stoppen.
Verwar deze drie kanalen niet met elkaar — ze werken onafhankelijk en vereisen verschillende instellingen:
- LLM-tokens. Claude, OpenAI of Gemini brengt kosten in rekening voor de invoer- en uitvoercontext van elk verzoek. Anthropic Task Budgets (zie regel 2) en een abonnement in plaats van betalen per API-gebruik kunnen hierbij helpen.
- Cloudinfrastructuur. Via MCP of een Bash-tool maakt de agent EC2-, RDS- en S3-resources aan of implementeert hij lambda's. AWS Budgets, GCP of Yandex Cloud met een noodschakelaar kunnen hierbij helpen (regel 5).
- API's van derden. De agent voert een Stripe-afschrijving uit, verstuurt 100 sms-berichten via een gateway of stelt duizend Telegram-abonnementen in. Sandbox-sleutels met beperkte rechten en een harde limiet in het dashboard van de aanbieder kunnen hierbij helpen (regel 6).
Hierna volgen 7 regels. Elke regel gaat over één of twee kanalen.
Zo stel je een harde limiet op API-uitgaven in (regel 1)
Belangrijkste punten
Hoe stel je een harde limiet op API-uitgaven in? Anthropic en OpenAI hebben een ingebouwde limiet voor de uitgaven van een organisatie, die het account automatisch afknijpt wanneer het ingestelde bedrag is bereikt. Verwar die niet met waarschuwingen, die alleen een e-mail sturen. Een harde limiet is een barrière; een waarschuwing is een lampje. Stel ze allebei in en begin met de barrière.
Waar je de limiet inschakelt (reken per aanbieder op minstens 2 minuten):
Anthropic Console. console.anthropic.com → Settings → Limits → Monthly spend limit. Stel een bedrag in dat je in de slechtste maand bereid bent te verbruiken. Zodra dat is bereikt, geeft de API een 429 terug en registreert het de gebeurtenis. “Ik probeer het over een minuut opnieuw” helpt niet — de toegang blijft geblokkeerd tot het einde van de maand.
OpenAI Platform. platform.openai.com → Billing → Usage limits. Ook hier is er een zachte limiet (e-mailwaarschuwing) en een harde limiet (API wordt uitgeschakeld). Stel beide in; zet de harde limiet op 1.5x de zachte limiet, zodat je tijd hebt om te reageren.
AWS Bedrock / Google Vertex. Als je via een cloudtussenpartij toegang hebt tot Claude/Anthropic, moet de harde limiet aan de cloudkant staan, niet bij Anthropic. Dat is regel 5.
Wat niet als harde limiet telt: e-mailwaarschuwingen (“u hebt 80% van uw budget verbruikt”). Ze komen vertraagd binnen en 's nachts leest niemand zijn e-mail. Alleen een synchrone blokkade aan de kant van de aanbieder biedt uitkomst.
Hoe Anthropic Task Budgets werken en waar je ze instelt (regel 2)
Belangrijkste punten
Wat zijn Anthropic Task Budgets en waartegen beschermen ze je? Het is een bètafunctie in de Opus 4.7/4.8- en Fable/Mythos-reeks: je stelt een budget in voor één autonome workflow en Claude vermindert zijn redeneerdiepte wanneer het budget bijna op is. Zo rondt het af met een samenvatting in plaats van halverwege de taak te zeggen: “Dat was het, mijn budget is op.” Het lost clouduitgaven niet volledig op, maar voorkomt 80% van de gevallen waarin de agent “vastzat in een lus en het niet doorhad.”
Bekijk de officiële documentatie van Anthropic voor meer informatie. Het belangrijkste punt: dit is een zachte grens, geen harde. Als de agent al een EC2-instantie heeft aangemaakt, maakt Task Budget dat niet ongedaan.
Zo werkt het in de praktijk: je geeft het veld task_budget mee in de aanvraagpayload (bijvoorbeeld 100,000 invoertokens voor de volledige taak). Claude krijgt informatie over het budget en schaalt zijn plannen zelf terug door stappen te vereenvoudigen of subtaken over te slaan. Wanneer het budget bijna nul is, bouwt het af en geeft het een tussentijdse samenvatting terug in plaats van “bedankt voor het luisteren”.
Beperkingen:
- Alleen de Anthropic API. Werkt niet op Bedrock/Vertex, die hun eigen facturering hebben
- Alleen bètamodellen (Opus 4.7, 4.8, Fable 5, Mythos 5). Niet beschikbaar op Sonnet 4.6 of Haiku
- Dekt clouduitgaven of API's van derden niet. Als Claude een EC2-instantie start, blijft Task Budget stil
Gebruik het samen met regel 1 (harde limiet), niet in plaats daarvan.
Kostenbeperkingen maken deel uit van context engineering: je bepaalt wat de agent wel en niet kan doen en waar de noodstop zit.
Wat je blokkeert met PreToolUse-hooks in Claude Code (regel 3)
Belangrijkste punten
Wat zijn PreToolUse-hooks in Claude Code en waarom heb je ze nodig? Het zijn scripts die worden uitgevoerd voordat Claude een toolaanroep uitvoert. Je kunt een verzoek blokkeren (exit 2), bevestiging van de gebruiker vereisen of het zonder vragen doorlaten. Het belangrijkste: hooks worden uitgevoerd voordat --dangerously-skip-permissions wordt toegepast. Je kunt dus gevaarlijke acties blokkeren, zelfs in de modus waarin toestemmingsvragen worden overgeslagen.
De machtigingen in Claude Code worden (per 1 juni 2026) geëvalueerd in de volgorde deny → ask → allow. Dat betekent:
- controleer de gekozen machtigingsmodus afzonderlijk; leid bescherming in de bypassmodus niet af uit een deny-regeltest in de normale modus
- als een hook
exit 2teruggeeft, wordt de toolaanroep geblokkeerd allowedToolsgeldt alleen wanneer deny-regels en hooks niets doen
Een minimale PreToolUse-hook die enkele schrijfwijzen van gevaarlijke opdrachten controleert. Dit is een tekstfilter, geen volledige shellparser of toegangsgrens: equivalente opdrachten, scripts, andere tools en bestaande cloudresources vereisen afzonderlijke maatregelen.
#!/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
# Controleert de genoemde tekstpatronen; dekt niet elke equivalente bewerking
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
Sla het script op het aangegeven pad op, zorg dat jq beschikbaar is en maak het uitvoerbaar met chmod +x ~/.claude/hooks/block-dangerous-bash.sh. Koppel het in ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
}
]
}
}
Bekijk de officiële documentatie.
Controleer in /hooks of de hook geregistreerd is. Geef het script daarna onschadelijke voorbeeld-JSON zonder het opdrachtveld uit te voeren. Een genoemde destructieve schrijfwijze moet 2 teruggeven; een onschuldige opdracht 0. Test ook ongeldige invoer. De regex controleert alleen passende Bash-aanroepen; gebruik beperkte inloggegevens en omgevingsisolatie voor de werkelijke bevoegdheidsgrens. Zie het officiële voorbeeld van hookinvoer en -uitvoer.
Waarom je een allowedTools-lijst met toegestane tools gebruikt en --dangerously-skip-permissions niet op de host (regel 4)
Belangrijkste punten
Waar stel je de lijst met toegestane tools in en waarom is de host een slechte plek voor de modus waarin machtigingen worden overgeslagen? allowedTools in settings.json bevat specifieke opdrachten die de agent zonder bevestiging kan uitvoeren; voor al het andere vraagt hij je om toestemming. --dangerously-skip-permissions schakelt die vraag volledig uit. Gebruik dit daarom niet op de hostmachine — alleen in een container of VM.
Een toelatingslijst volgt het principe van minimale bevoegdheden. Voeg alleen toe wat de taak nodig heeft, in plaats van “alles toestaan” (--dangerously-skip-permissions):
{
"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/**)"
]
}
}
Wat je moet weten over de modus waarin machtigingen worden overgeslagen:
- Linux/macOS weigeren Claude Code als root of met sudo te starten in deze modus — ingebouwde bescherming
- Op je eigen computer schakelt deze modus alle bevestigingsvragen uit. De agent kan naar eigen inzicht
rm -rfuitvoeren, SSH-sleutels openen en gegevens naar de cloud uploaden - Gebruik
--dangerously-skip-permissionsnooit op de host, alleen in:- een Docker-container met een beperkte volumekoppeling (alleen de benodigde map)
- een geïsoleerde VM (Multipass, Lima, Orbstack)
- GitHub Codespaces / Replit / een andere sandbox
Een minimaal docker run-commando voor de modus waarin machtigingen worden overgeslagen:
docker run --rm -it \
-v "$PWD:/workspace" \
-w /workspace \
--network host \
ghcr.io/anthropics/claude-code:latest \
claude --dangerously-skip-permissions
Als de agent cloudgegevens nodig heeft, gebruik dan afzonderlijke sleutels met beperkte rechten, niet je hoofdsleutels (regel 6).
Zo stel je waarschuwingen voor cloudbudgetten met een noodschakelaar in AWS, GCP en Yandex Cloud in (regel 5)
Belangrijkste punten
Een budgetwaarschuwing meldt waargenomen of voorspelde uitgaven en kan vertraagd aankomen. Een reactiefunctie kan nieuwe agentacties blokkeren of specifieke resources stoppen; dat zijn verschillende acties. Het uitschakelen van een IAM-sleutel stopt de kosten van al draaiende resources niet. Definieer en test het stoppen van resources afzonderlijk.
Zo stel je dit in bij elke cloudprovider:
AWS Budgets (documentatie). Maak een maandbudget met drempels aan (50%, 80%, 100%). Bij de drempel van 100% kan een SNS-topic een reactie-Lambda aanroepen. Het onderstaande voorbeeld deactiveert alleen de IAM-toegangssleutels van de genoemde gebruiker; het stopt geen resources en stelt geen harde uitgavenlimiet in:
import boto3
def lambda_handler(event, context):
iam = boto3.client('iam')
# Deactiveert alle sleutels voor de gebruiker 'claude-agent'
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'}
Afgebakende procedure om resources te stoppen: Leg voor een eigen sandbox met goedgekeurde EBS-backed EC2-instances vooraf het account, de regio’s en exacte instance-ID’s vast. Selecteer in de EC2-console uitsluitend die instances → Instance state → Stop instance → bevestig en controleer daarna dat elke instance stopped bereikt. Bewaar benodigde instance-storegegevens vooraf; stoppen wist ze. Controleer dat een goedgekeurde planner of schaalsysteem ze niet opnieuw kan aanmaken. Dit stopt dat rekengebruik, niet alle accountkosten: controleer achtergebleven opslag en andere diensten afzonderlijk. Volg de officiële EC2-stopprocedure.
De AWS Budgets-documentatie waarschuwt dat meldingen achterlopen op resourcegebruik en dat vóór en na een waarschuwing verdere kosten kunnen ontstaan. Activeren bij 100% kan dus geen exact geldplafond afdwingen.
GCP Budget Alerts. Maak een Budget → Pub/Sub-topic → Cloud Function die het Service Account uitschakelt. Een belangrijke tip uit de documentatie: waarschuwingen melden alleen iets; ze zetten niets uit, dus de Cloud Function is essentieel.
Yandex Cloud (documentatie). Stel budgetten in onder Billing → Budgets en gebruik resourcequota als harde limiet. Je kunt meldingen via Cloud Functions aan een Telegram-bot koppelen.
OpenAI API. De zachte en harde uitgavenlimieten staan gewoon in het dashboard — de harde limiet stopt de API automatisch; een Lambda is niet nodig.
Gebruik waar beschikbaar een gecontroleerde harde limiet bij de provider, vertraagde budgetwaarschuwingen, beperkte inloggegevens en een geteste reactie voor de specifieke resources die de agent kan aanmaken. Het intrekken van inloggegevens blokkeert sommige nieuwe acties; controle van de uitschakeling is nodig voor lopend resourcegebruik. Een waarschuwing of succesmelding van de Lambda voor sleutelintrekking bewijst niet dat alle facturering is gestopt.
Waarom een agent een afzonderlijke sandbox-API-sleutel met beperkte rechten nodig heeft (regel 6)
Belangrijkste punten
Waarom heeft een agent een afzonderlijke API-sleutel nodig? Zodat de gevolgen van een fout beperkt blijven. Maak een IAM-gebruiker of Service Account aan voor één agent, geef die minimale rechten (EC2, niet *), en koppel hem aan een afzonderlijk factureringsproject met een harde limiet. Als de agent die limiet verbruikt, verbruikt hij in een uur zijn eigen $50, niet de hele bedrijfsportemonnee.
Een minimale AWS-configuratie:
- Maak de IAM-gebruiker
claude-agent-scanaan - Beleid: alleen de benodigde acties (bijvoorbeeld
ec2:RunInstancesin één regio met groottet3.micro, zonder VPC-elastic IP) - Koppel de gebruiker aan een afzonderlijk AWS-account (via Organizations) met een maandbudget van $100
- Genereer toegangssleutels en geef ze alleen aan de agent; zet ze niet in je eigen
~/.aws/credentials - Vervang de sleutels of verwijder de gebruiker na de sessie
Hetzelfde geldt voor andere aanbieders:
- OpenAI / Anthropic: een afzonderlijke API-sleutel per agent, een harde limiet per sleutel in het dashboard en
agent_id-tags in de verzoekmetadata - Stripe / YooKassa: een beperkte API-sleutel voor één actie (bijvoorbeeld alleen
charges:read) en indien mogelijk een afzonderlijke merchant - Telegram Bot API: een afzonderlijk bottoken, niet het hoofdbottoken
Het oude beveiligingsprincipe geldt hier ook: minimale bevoegdheden — de agent krijgt precies wat de taak nodig heeft, geen byte meer. Is de taak “het netwerk scannen”, geef dan geen ec2:* en s3:*; geef alleen ec2:DescribeInstances, meer niet.
Wanneer je een pre-flight dry run en een iteratielimiet gebruikt (regel 7)
Belangrijkste punten
Waarom laat je de agent vóór de start zijn plan tonen, en hoeveel iteraties moet je maximaal toestaan? Plan Mode is een ingebouwde Claude Code-functie: de agent beschrijft eerst wat hij van plan is en jij keurt dat goed. Het is een gratis controle vooraf. En --max-turns N beperkt het aantal stappen in één sessie, zodat de agent niet eindeloos kan blijven draaien. Stel voor de autonome modus maximaal 10–30 beurten in.
Plan Mode (/plan) wordt aan het begin van een sessie ingeschakeld. De agent stelt een plan op, toont het in de chat, wacht op goedkeuring en gaat pas daarna aan het werk. Het is gratis en voorkomt 70% van de gevallen waarin iemand denkt: “Ik dacht dat hij het eerst zou vragen.”
--max-turns is een startoptie. Elke beurt bestaat uit één cyclus van “agent denkt + toolaanroep + resultaat.” Voor autonome taken:
- kleine wijziging: 5–10 beurten
- middelgrote taak: 15–30 beurten
- grote autonome taak: 50–80 beurten
Aanvullende technieken:
- Time-out op basis van de klok met de Linux-opdracht
timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scantaak"
# 1800 seconden = 30 minuten. Stop het proces op een nette manier.
- Registreer elke toolaanroep met een PostToolUse-hook in een bestand, zodat je achteraf kunt zien wat er is gebeurd
- Cron-monitoring — controleer elke 5 minuten of er niet tegelijk 10 Claude-processen draaien (een gebruikelijk teken dat er iets mis is gegaan)
Een kant-en-klare checklist van 5 minuten voordat je Claude Code autonoom start
Belangrijkste punten
Wat moet geregeld zijn voordat je bij een autonome taak op Enter drukt? Zeven vinkjes, die elk ongeveer een minuut kosten. Staat er ook maar één vakje leeg, start dan niet.
Checklist voordat je claude --dangerously-skip-permissions uitvoert:
[ ] 1. Harde limiet bij de API-aanbieder (Anthropic Console → Limits → Monthly spend limit)
[ ] 2. Task Budget in de verzoekpayload (bij gebruik van Opus 4.7+/Fable/Mythos)
[ ] 3. PreToolUse-hook die rm -rf, aws s3 rb en terraform destroy blokkeert
[ ] 4. allowedTools-toelatingslijst in settings.json of werken in een Docker-container
[ ] 5. Vertraagde cloudbudgetwaarschuwingen + geteste sleutelintrekking en goedgekeurde uitschakeling van resources
[ ] 6. Sandbox-API-sleutels (een afzonderlijke sleutel voor de agent, niet de hoofdsleutel)
[ ] 7. --max-turns N + timeout van NNN seconden + monitoring van processen via cron
Zijn alle zeven punten geregeld, start dan. Ontbreekt er ook maar één, stop dan en stel die eerst in. Dertig minuten nu kunnen later $6.000–500.000 besparen.
Een voorbeeld ter illustratie: een vibe-coder zette een webwinkelapp online met het standaardwachtwoord voor de postgres-database. Binnen een paar dagen ontdekte iemand de app, installeerde miners en plaatste eigen backdoors. De server moest worden uitgeschakeld en de rekening voor die maand liep op door de cryptomining van iemand anders.
Dit verhaal valt onder categorie 3 uit sectie 1 (derden die dingen op jouw infrastructuur draaien), maar de logica is hetzelfde: uitgavenbeheer mag niet afhangen van wie de uitgaven initieert — je agent, je medewerker of een miner in Nigeria.
Verder lezen:
- Zo bescherm je Claude Code tegen schade— over
--dangerously-skip-permissionsen machtigingen vanuit een andere invalshoek - Beveiliging bij vibe-coding— de beveiligingspijler
- Zo verbruik je Claude Code-limieten niet in één dag— over tokens van abonnementen (verwar dit niet met deze gids over cloudrekeningen)
Bronnen
Maak kennis met Ailoot.
Meer details
Vragen en antwoorden
Stopt het intrekken van de IAM-sleutels van de agent de cloudrekening?
Nee. Het blokkeert nieuwe geauthenticeerde verzoeken met die sleutels, terwijl bestaande resources kosten kunnen blijven veroorzaken. Houd een toelatingslijst van eigen resources bij, stop de goedgekeurde instances, controleer hun status en beoordeel achtergebleven opslag en andere diensten afzonderlijk.
Kan de voorbeeldregex voor opdrachten een volledige veiligheidsgrens afdwingen?
Nee. Die bekijkt alleen passende Bash-toolaanroepen en geselecteerde opdrachttekst. Test de JSON-verwerking en exitcodes, maar gebruik beperkte cloudmachtigingen en omgevingsisolatie voor de echte toegangsgrens. Equivalente bewerkingen en andere tools kunnen buiten een tekstfilter vallen.