Blogg

7 Claude Code-regler för att begränsa autonoma agenters kostnader 2026

Markdown

7 regler för att sätta gränser i Claude Code så att en autonom agent inte gör dig bankrutt: leverantörstak, Task Budgets, hooks, tillåtelselistor, nödbrytare, sandlådenycklar och iterationsgränser.

Läs hela artikeln

Det viktigaste

En autonom agent med obegränsad åtkomst till molnet kan dra på dig en stor räkning på en enda natt. Jag går igenom 7 Claude Code-regler som du kan införa på en kväll för att förebygga den här typen av fel.

Lär dig arbeta med tjänsten i Ailoot-dokumentationen.

Vart pengarna tar vägen: 3 utgiftskategorier för en autonom agent

Det viktigaste

Var gör en autonom agent av med dina pengar? Via tre separata kanaler: token hos Anthropic/OpenAI, molnresurser (AWS/GCP/Yandex Cloud) och betalda åtgärder i tredjeparts-API:er (Stripe-avgifter, SMS-gateways, Twilio, Telegram-botar med prenumerationer). Varje kanal har sin egen fakturering och sitt eget sätt att stoppa spenderandet.

Blanda inte ihop de här tre kanalerna—de fungerar oberoende av varandra och kräver olika inställningar:

  1. LLM-token. Claude, OpenAI eller Gemini tar betalt för in- och utdata i varje begärans kontext. Anthropic Task Budgets (se regel 2) och en prenumeration i stället för API-betalning per användning kan hjälpa här.
  2. Molninfrastruktur. Via MCP eller ett Bash-verktyg skapar agenten EC2-, RDS- och S3-resurser eller distribuerar lambdas. AWS Budgets, GCP eller Yandex Cloud med en nödbrytare kan hjälpa här (regel 5).
  3. Tredjeparts-API:er. Agenten gör en Stripe-betalning, skickar 100 SMS via en gateway eller sätter upp tusen Telegram-prenumerationer. Sandbox-nycklar med snäva behörigheter och ett fast tak i leverantörens kontrollpanel kan hjälpa här (regel 6).

Härnäst följer 7 regler. Var och en täcker en eller två kanaler.

Så sätter du ett fast tak för API-utgifter (regel 1)

Det viktigaste

Hur sätter du ett fast tak för API-utgifter? Anthropic och OpenAI har en inbyggd gräns för organisationens utgifter som automatiskt begränsar kontot när det når det angivna beloppet. Förväxla den inte med varningar, som bara skickar ett mejl. Ett fast tak är en barriär; varningar är en glödlampa. Ställ in båda, med barriären först.

Så aktiverar du det (räkna med minst 2 minuter per leverantör):

Anthropic Console. console.anthropic.com → Settings → Limits → Monthly spend limit. Ange ett belopp som du är beredd att göra av med under den värsta månaden. När gränsen nås returnerar API:et 429 och loggar händelsen. Inget ”jag försöker igen om en minut”—det är spärrat till månadens slut.

OpenAI Platform. platform.openai.com → Billing → Usage limits. Här finns också en mjuk gräns (e-postvarning) och en hård gräns (API-avstängning). Ställ in båda; sätt den hårda gränsen till 1.5x den mjuka gränsen för att ge utrymme att reagera.

AWS Bedrock / Google Vertex. Om du använder Claude/Anthropic via en molntjänst som mellanhand måste det hårda taket finnas i molnet, inte hos Anthropic. Det är regel 5.

Det här räknas inte som ett fast tak: e-postvarningar (”du har gjort av med 80% av din budget”). De kommer med fördröjning, och ingen läser mejl på natten. Bara en synkron spärr hos leverantören.

Så fungerar Anthropic Task Budgets och var du ställer in dem (regel 2)

Det viktigaste

Vad är Anthropic Task Budgets och vad skyddar de dig mot? Det är en betafunktion i Opus 4.7/4.8- och Fable/Mythos-serien: du anger en budget för ett autonomt arbetsflöde, och Claude minskar djupet i sitt resonemang när budgeten börjar ta slut. Uppgiften avslutas med en sammanfattning i stället för att Claude mitt i arbetet säger ”det var allt, budgeten är slut”. Det är ingen universallösning för molnutgifter, men den förebygger 80% av fallen där agenten ”fastnade i en loop utan att märka det”.

Läs Anthropic:s officiella dokumentation för mer information. Huvudpoängen: detta är en mjuk gräns, inte en hård. Om agenten redan har skapat en EC2-instans ångrar Task Budget inte det.

Så fungerar det i praktiken: du skickar fältet task_budget i begärans payload (till exempel 100,000 inmatningstoken för hela uppgiften). Claude får information om budgeten och skalar själv ned sina planer, förenklar steg eller hoppar över deluppgifter. När budgeten närmar sig noll varvar den ned och returnerar en tillfällig sammanfattning i stället för ett ”tack för att du lyssnade”.

Begränsningar:

  • Endast Anthropic API. Det fungerar inte på Bedrock/Vertex, som har sin egen fakturering
  • Endast betamodeller (Opus 4.7, 4.8, Fable 5, Mythos 5). Inte på Sonnet 4.6 eller Haiku
  • Täcker inte molnutgifter eller tredjeparts-API:er. Om Claude startar en EC2-instans förblir Task Budget tyst

Använd det tillsammans med regel 1 (fast tak), inte i stället för den.

Kostnadsspärrar är en del av kontextteknik: du bestämmer vad agenten får och inte får göra och var dess nödstopp sitter.

Vad du ska blockera med PreToolUse-hooks i Claude Code (regel 3)

Det viktigaste

Vad är PreToolUse-hooks i Claude Code och varför behöver du dem? Det är skript som körs innan Claude utför ett verktygsanrop. Du kan blockera en begäran (exit 2), kräva användarens bekräftelse eller låta den passera utan att fråga. Huvudpoängen: hooks körs före --dangerously-skip-permissions. Det betyder att du kan blockera farliga åtgärder även i bypass-läge.

Behörigheter i Claude Code (från och med den 1 juni 2026) utvärderas i ordningen deny → ask → allow. Det betyder:

  • kontrollera valt behörighetsläge separat; dra inte slutsatsen att bypass-läge skyddas utifrån ett deny-regeltest i normalt läge
  • om en hook returnerar exit 2 blockeras verktygsanropet
  • allowedTools används bara när deny-regler och hooks inte ger något utslag

En minimal PreToolUse-hook som kontrollerar några skrivsätt för farliga kommandon. Det är ett textfilter, inte en fullständig skaltolk eller åtkomstgräns: likvärdiga kommandon, skript, andra verktyg och befintliga molnresurser behöver separata kontroller.

#!/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

# Checks the listed text patterns; does not cover every equivalent operation
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

Spara skriptet på angiven sökväg, kontrollera att jq finns och gör det körbart med chmod +x ~/.claude/hooks/block-dangerous-bash.sh. Bind det i ~/.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
      }
    ]
  }
}

Se den officiella dokumentationen.

Kontrollera registreringen i /hooks och mata sedan skriptet med ofarliga JSON-exempel utan att köra deras kommandofält. Ett listat destruktivt skrivsätt ska ge returvärdet 2; ett ofarligt kommando ska ge 0. Testa även felaktig indata. Regexen kontrollerar bara matchade Bash-anrop; använd snäva autentiseringsuppgifter och miljöisolering för den faktiska behörighetsgränsen. Se det officiella exemplet på hook-indata och utdata.

Varför använda en allowedTools-vitlista och varför --dangerously-skip-permissions inte hör hemma på värddatorn (regel 4)

Det viktigaste

Var anger du listan över tillåtna verktyg, och varför är värddatorn fel plats för bypass-läge? allowedTools i settings.json är en lista med specifika kommandon som agenten kan köra utan bekräftelse; allt annat kräver att du svarar på en fråga. --dangerously-skip-permissions stänger av alla sådana frågor, så kör det inte på värddatorn—använd bara en container eller VM.

En vitlista är principen om minsta privilegium. I stället för att ”tillåta allt” (--dangerously-skip-permissions) lägger du bara till det som uppgiften behöver:

{
  "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/**)"
    ]
  }
}

Det här behöver du veta om bypass-läget:

  • Linux/macOS vägrar starta Claude Code i bypass-läge som root eller med sudo—inbyggt skydd
  • På din egen dator stänger bypass av alla bekräftelsefrågor, och agenten kan köra rm -rf vad den vill, öppna SSH-nycklar och ladda upp data till molnet
  • Kör aldrig --dangerously-skip-permissions på värddatorn, bara i:
    • en Docker-container med en begränsad volymmontering (endast den nödvändiga mappen)
    • en isolerad VM (Multipass, Lima, Orbstack)
    • GitHub Codespaces / Replit / en annan sandlåda

Ett minimalt docker run för bypass-läge:

docker run --rm -it \
  -v "$PWD:/workspace" \
  -w /workspace \
  --network host \
  ghcr.io/anthropics/claude-code:latest \
  claude --dangerously-skip-permissions

Om agenten behöver molninloggningsuppgifter använder du separata nycklar med snäva behörigheter, inte dina huvudsakliga nycklar (regel 6).

Så ställer du in budgetvarningar för molnet med en nödbrytare i AWS, GCP och Yandex Cloud (regel 5)

Det viktigaste

En budgetvarning rapporterar observerade eller prognostiserade utgifter och kan komma sent. En svarsfunktion kan blockera nya agentåtgärder eller stoppa specifika resurser; det är olika handlingar. Att inaktivera en IAM-nyckel stoppar inte kostnaderna för resurser som redan körs. Definiera och testa resursavstängning separat.

Så ställer du in det i respektive molntjänst:

AWS Budgets (dokumentation). Skapa en månadsbudget med trösklar (50%, 80%, 100%). Vid tröskeln 100% kan ett SNS-ämne anropa en svarsfunktion i Lambda. Exemplet nedan inaktiverar bara den namngivna användarens IAM-åtkomstnycklar; det stoppar inga resurser och skapar inget hårt utgiftstak:

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'}

Avgränsad rutin för resursstopp: För en särskild sandlåda med godkända EBS-baserade EC2-instanser dokumenterar du konto, regioner och exakta instans-ID:n före körningen. Välj bara dessa instanser i EC2-konsolen → Instance state → Stop instance → bekräfta och kontrollera sedan att var och en når stopped. Bevara först eventuell nödvändig instance-store-data; den raderas vid stopp. Kontrollera att en godkänd schemaläggare eller skalningsfunktion inte kan ersätta instanserna. Detta stoppar den beräkningsanvändningen, inte alla kontoavgifter: granska kvarvarande lagring och andra tjänster separat. Följ den officiella EC2-stopprutinen.

AWS Budgets-dokumentationen varnar för att aviseringar ligger efter resursanvändningen och att fler kostnader kan uppstå före och efter en varning. En utlösning vid 100% kan därför inte upprätthålla ett exakt monetärt tak.

GCP Budget Alerts. Skapa en Budget → Pub/Sub-ämne → Cloud Function som inaktiverar Service Account. Ett viktigt tips från dokumentationen: varningar meddelar bara, de stänger inte ned, så Cloud Function behövs.

Yandex Cloud (dokumentation). Ställ in budgetar under Billing → Budgets, samt resurskvoter som ett hårt tak. Du kan koppla aviseringar till en Telegram-bot via Cloud Functions.

OpenAI API. Mjuka och hårda utgiftsgränser finns direkt i kontrollpanelen—den hårda gränsen stoppar automatiskt API:et; ingen Lambda behövs.

Använd ett verifierat hårt leverantörstak där det finns, fördröjda budgetvarningar, snäva autentiseringsuppgifter och en testad åtgärdsrutin för just de resurser agenten får skapa. Återkallade autentiseringsuppgifter blockerar vissa nya operationer; avstängningen måste verifieras för att stoppa pågående resursanvändning. Varken en varning eller ett framgångsmeddelande från Lambda-funktionen som återkallar nycklar bevisar att all debitering har upphört.

Varför en agent behöver en separat sandbox-API-nyckel med snäva behörigheter (regel 6)

Det viktigaste

Varför behöver en agent en separat API-nyckel? För att hålla ett fel begränsat. Skapa en IAM-användare eller ett Service Account enbart för en agent, ge den minsta möjliga behörighet (EC2, inte *), och koppla den till ett separat faktureringsprojekt med ett fast tak. Om agenten gör slut på den budgeten gör den av med sina egna 50 dollar på en timme, inte hela företagets kassa.

En minimal AWS-konfiguration:

  1. Skapa IAM-användaren claude-agent-scan
  2. Policy: endast nödvändiga åtgärder (till exempel ec2:RunInstances i en region med storleken t3.micro, utan elastisk IP för en VPC)
  3. Koppla den till ett separat AWS-konto (via Organizations) med en månadsbudget på 100 dollar
  4. Skapa åtkomstnycklar och ge dem bara till agenten; lägg dem inte i dina egna ~/.aws/credentials
  5. Efter sessionen byter du nycklarna eller tar bort användaren

Motsvarande för andra leverantörer:

  • OpenAI / Anthropic: en separat API-nyckel för varje agent, ett hårt tak för varje nyckel i kontrollpanelen och agent_id-taggar i metadata för begäran
  • Stripe / YooKassa: en begränsad API-nyckel för en åtgärd (till exempel endast charges:read) och en separat handlare om möjligt
  • Telegram Bot API: en separat bot-token, inte den huvudsakliga

Den gamla säkerhetsprincipen gäller här: minsta privilegium—agenten får exakt det uppgiften behöver, inte en byte mer. Om uppgiften är ”skanna nätverket”, ge den inte ec2:* och s3:*; ge den bara ec2:DescribeInstances.

När du ska använda en torrkörning före start och en iterationsgräns (regel 7)

Det viktigaste

Varför låta agenten visa sin plan före start, och hur många iterationer bör du tillåta som mest? Plan Mode är en inbyggd Claude Code-funktion: agenten beskriver först vad den tänker göra, och du godkänner planen. Det är en kostnadsfri kontroll före start. Och --max-turns N begränsar antalet steg i en session, så agenten kan inte snurra på i all oändlighet. För autonomt läge anger du 10–30 turer, inte fler.

Plan Mode (/plan) aktiveras när en session börjar. Agenten förbereder en plan, visar den i chatten, väntar på godkännande och börjar först därefter arbeta. Det är kostnadsfritt och förebygger 70% av fallen där man tänker ”hoppsan, jag trodde att den skulle fråga först”.

--max-turns är en startflagga. Varje tur är en cykel av ”agenten tänker + verktygsanrop + resultat”. För autonoma uppgifter:

  • liten ändring: 5–10 turer
  • medelstor uppgift: 15–30 turer
  • stor autonom uppgift: 50–80 turer

Ytterligare metoder:

  • Tidsgräns enligt väggklockan med Linux-kommandot timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 seconds = 30 minutes. Stop the process gracefully.
  • Logga varje verktygsanrop till en fil med en PostToolUse-hook så att du kan se vad som hände efteråt
  • Cron-övervakning—var 5:e minut kontrollerar du att du inte har 10 Claude-processer igång samtidigt (ett vanligt tecken på att något har gått fel)

En checklista på 5 minuter innan du startar Claude Code autonomt

Det viktigaste

Vad måste vara på plats innan du trycker på Enter för en autonom uppgift? Sju kryssrutor, ungefär en minut vardera. Om bara en ruta är tom ska du inte starta.

Checklista innan claude --dangerously-skip-permissions:

[ ] 1. Fast tak hos API-leverantören (Anthropic Console → Limits → Monthly spend limit)
[ ] 2. Task Budget i begärans payload (om du använder Opus 4.7+/Fable/Mythos)
[ ] 3. PreToolUse-hook som blockerar rm -rf, aws s3 rb, terraform destroy
[ ] 4. allowedTools-vitlista i settings.json eller arbete i en Docker-container
[ ] 5. Fördröjda molnbudgetvarningar + testad nyckelåterkallning och godkänd resursavstängning
[ ] 6. Sandbox-API-nycklar (en separat nyckel för agenten, inte den huvudsakliga)
[ ] 7. --max-turns N + timeout NNN sekunder + cron-övervakning av processer

Om alla sju är på plats kan du starta. Om ens en saknas ska du stanna och ställa in den. Trettio minuter nu kan spara 6 000–500 000 senare.

Ett exempel som bakgrund: en vibe-kodare lanserade en webbutiksapp med databasens standardlösenord för postgres. Inom ett par dagar hittade någon den, installerade miners och lade in egna bakdörrar. Servern behövde stängas av, och månadens räkning steg på grund av någon annans kryptomining.

Den här berättelsen handlar om kategori 3 från avsnitt 1 (tredje parter som kör saker på din infrastruktur), men logiken är densamma: utgiftskontroller ska inte bero på vem som startade utgiften—din agent, din anställda eller en miner i Nigeria.

Läs vidare:

Lär känna Ailoot.

Fler detaljer

Frågor om den här guiden: 7 Claude Code-regler för att begränsa autonoma agenters kostnader 2026

Stoppar återkallade IAM-nycklar agentens molnräkning?

Nej. Det blockerar användning av de nycklarna för nya autentiserade förfrågningar, medan befintliga resurser kan fortsätta kosta pengar. Ha en lista över ägda, godkända resurser, stoppa de godkända instanserna, kontrollera deras tillstånd och granska kvarvarande lagring och andra tjänster separat.

Kan exemplets kommandoregex upprätthålla en fullständig säkerhetsgräns?

Nej. Den granskar bara matchande Bash-verktygsanrop och utvald kommandotext. Testa JSON-tolkning och returkoder, men använd snäva molnbehörigheter och miljöisolering för den verkliga åtkomstgränsen. Likvärdiga operationer och andra verktyg kan passera ett textfilter.

Alla artiklar