Blogg

7 Claude Code-regler for å begrense forbruket til autonome agenter i 2026

Markdown

7 regler for å sette grenser i Claude Code, slik at en autonom agent ikke gjør deg blakk: leverandørgrenser, Task Budgets, hooks, tillatelseslister, nødstopp, sandkassenøkler og iterasjonsgrenser.

Les hele artikkelen

Viktige punkter

En autonom agent med ubegrenset tilgang til skyen kan påføre deg en stor regning i løpet av én natt. Jeg går gjennom 7 Claude Code-regler du kan innføre på én kveld for å forhindre denne typen feil.

Lær hvordan du bruker tjenesten i Ailoot-dokumentasjonen.

Hvor pengene går: 3 utgiftskategorier for en autonom agent

Viktige punkter

Hvor bruker en autonom agent pengene dine? Gjennom tre separate kanaler: tokens hos Anthropic/OpenAI, skyressurser (AWS/GCP/Yandex Cloud) og betalte handlinger i tredjeparts-API-er (Stripe-belastninger, SMS-gatewayer, Twilio, Telegram-roboter med abonnementer). Hver kanal har sin egen fakturering og sin egen måte å stoppe pengebruken på.

Ikke bland sammen disse tre kanalene – de fungerer uavhengig av hverandre og krever ulike innstillinger:

  1. LLM-tokens. Claude, OpenAI eller Gemini tar betalt for inn- og utgangskonteksten til hver forespørsel. Anthropic Task Budgets (se regel 2) og et abonnement i stedet for betaling per API-bruk kan hjelpe her.
  2. Skyinfrastruktur. Gjennom MCP eller et Bash-verktøy oppretter agenten EC2-, RDS- og S3-ressurser eller distribuerer lambdaer. AWS Budgets, GCP eller Yandex Cloud med en nødstopp kan hjelpe her (regel 5).
  3. Tredjeparts-API-er. Agenten utfører en Stripe-belastning, sender 100 SMS-meldinger via en gateway eller setter opp tusen Telegram-abonnementer. Sandkassenøkler med begrensede tillatelser og en fast grense i leverandørens kontrollpanel kan hjelpe her (regel 6).

Her følger 7 regler. Hver dekker én eller to kanaler.

Slik setter du en fast grense for API-utgifter (regel 1)

Viktige punkter

Hvordan setter du en fast grense for API-utgifter? Anthropic og OpenAI har en innebygd utgiftsgrense for organisasjoner som automatisk strup­er kontoen når det angitte beløpet er nådd. Ikke forveksle den med varsler, som bare sender en e-post. En fast grense er en barriere; et varsel er en lyspære. Sett opp begge, og start med barrieren.

Slik slår du den på (sett av minst 2 minutter per leverandør):

Anthropic Console. console.anthropic.com → Settings → Limits → Monthly spend limit. Angi et beløp du er villig til å bruke i den verste måneden. Når det nås, returnerer API-et 429 og logger hendelsen. «Jeg prøver igjen om et minutt» hjelper ikke – tilgangen er blokkert til slutten av måneden.

OpenAI Platform. platform.openai.com → Billing → Usage limits. Her finnes det også en myk grense (e-postvarsel) og en hard grense (API-et stenges). Sett begge; sett den harde grensen til 1.5x den myke grensen, slik at du får tid til å reagere.

AWS Bedrock / Google Vertex. Hvis du bruker Claude/Anthropic gjennom en skymellommann, må den harde grensen ligge på skysiden, ikke hos Anthropic. Det er regel 5.

Dette regnes ikke som en fast grense: e-postvarsler («du har brukt opp 80 % av budsjettet»). De kommer forsinket, og ingen leser e-post om natten. Bare en synkron sperre hos leverandøren er tilstrekkelig.

Slik fungerer Anthropic Task Budgets, og hvor du setter dem (regel 2)

Viktige punkter

Hva er Anthropic Task Budgets, og hva beskytter de deg mot? Det er en betafunksjon i Opus 4.7/4.8- og Fable/Mythos-serien: Du setter et budsjett for én autonom arbeidsflyt, og Claude reduserer dybden på resonneringen etter hvert som budsjettet minker. Til slutt avslutter det med en oppsummering i stedet for å si «det var alt, budsjettet mitt er brukt opp» midt i oppgaven. Det løser ikke alle problemer med skyutgifter, men forhindrer 80 % av tilfellene der agenten «satt fast i en løkke uten å merke det».

Se Anthropics offisielle dokumentasjon for detaljer. Hovedpoenget er at dette er en myk grense, ikke en hard grense. Hvis agenten allerede har opprettet en EC2-instans, kan Task Budget ikke angre det.

Slik fungerer det i praksis: Du sender feltet task_budget i forespørselsnyttelasten (for eksempel 100,000 inndatatokens for hele oppgaven). Claude får informasjon om budsjettet og skalerer ned planene sine på egen hånd ved å forenkle trinn eller hoppe over deloppgaver. Når budsjettet nærmer seg null, trapper det ned og returnerer en foreløpig oppsummering i stedet for «takk for at du lyttet».

Begrensninger:

  • Bare Anthropic API. Det fungerer ikke på Bedrock/Vertex, som har sin egen fakturering
  • Bare betamodeller (Opus 4.7, 4.8, Fable 5, Mythos 5). Ikke på Sonnet 4.6 eller Haiku
  • Dekker ikke skyutgifter eller tredjeparts-API-er. Hvis Claude starter en EC2-instans, reagerer ikke Task Budget

Bruk den sammen med regel 1 (fast grense), ikke i stedet for den.

Kostnadsgrenser er en del av kontekstteknikk: Du avgjør hva agenten kan og ikke kan gjøre, og hvor nødstoppknappen er.

Hva du bør blokkere med PreToolUse-hooks i Claude Code (regel 3)

Viktige punkter

Hva er PreToolUse-hooks i Claude Code, og hvorfor trenger du dem? Det er skript som kjøres før Claude utfører et verktøykall. Du kan blokkere en forespørsel (exit 2), kreve brukerbekreftelse eller la den gå gjennom uten å spørre. Hovedpoenget: Hooks kjøres før --dangerously-skip-permissions. Det betyr at du kan blokkere farlige handlinger selv når tillatelsesforespørsler omgås.

Tillatelser i Claude Code (per 1. juni 2026) evalueres i rekkefølgen deny → ask → allow. Det betyr:

  • Kontroller valgt tillatelsesmodus separat; en deny-test i normal modus beviser ikke beskyttelse i bypass-modus
  • Hvis en hook returnerer exit 2, blokkeres verktøykallet
  • allowedTools gjelder bare når deny-regler og hooks ikke griper inn

En minimal PreToolUse-hook som kontrollerer noen farlige skrivemåter for kommandoer. Den er et tekstfilter, ikke en fullstendig shell-parser eller tilgangsgrense. Tilsvarende kommandoer, skript, andre verktøy og eksisterende skyressurser krever egne 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

# Kontrollerer de oppførte tekstmønstrene; dekker ikke alle tilsvarende operasjoner
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

Lagre skriptet på den angitte banen, kontroller at jq er tilgjengelig, og gjør det kjørbart med chmod +x ~/.claude/hooks/block-dangerous-bash.sh. Knytt det til ~/.claude/settings.json:

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

Se den offisielle dokumentasjonen.

Kontroller registreringen med /hooks. Send deretter ufarlig eksempel-JSON til skriptet uten å kjøre innholdet i command-feltet. En oppført destruktiv skrivemåte skal gi 2; en ufarlig kommando skal gi 0. Test ugyldig inndata også. Regexen sjekker bare matchende Bash-kall. Bruk snevre tilganger og miljøisolasjon for den faktiske fullmaktsgrensen. Se det offisielle eksemplet på hook-inndata og -utdata.

Hvorfor bruke en allowedTools-liste, og hvorfor --dangerously-skip-permissions ikke hører hjemme på vertsmaskinen (regel 4)

Viktige punkter

Hvor setter du listen over tillatte verktøy, og hvorfor er vertsmaskinen et dårlig sted for omgåelsesmodus? allowedTools i settings.json er en liste over bestemte kommandoer agenten kan kjøre uten bekreftelse; alt annet ber den deg om å godkjenne. --dangerously-skip-permissions slår av bekreftelsen helt, så ikke kjør dette på vertsmaskinen – bruk bare en container eller VM.

En tillatelsesliste følger prinsippet om minste privilegium. Legg bare til det oppgaven krever, i stedet for å «tillate alt» (--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/**)"
    ]
  }
}

Dette bør du vite om omgåelsesmodus:

  • Linux/macOS nekter å starte Claude Code i omgåelsesmodus som root eller med sudo – en innebygd beskyttelse
  • På din egen maskin slår omgåelsesmodus av alle bekreftelser, og agenten kan kjøre rm -rf på hva som helst, åpne SSH-nøkler og laste opp data til skyen
  • Kjør aldri --dangerously-skip-permissions på vertsmaskinen, bare i:
    • en Docker-container med en begrenset volumkobling (bare den nødvendige mappen)
    • en isolert VM (Multipass, Lima, Orbstack)
    • GitHub Codespaces / Replit / en annen sandkasse

En minimal docker run-kommando for omgåelsesmodus:

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

Hvis agenten trenger skylegitimasjon, bruk separate nøkler med begrensede tillatelser, ikke hovednøklene dine (regel 6).

Slik setter du opp skybudsjettvarsler med en nødstopp i AWS, GCP og Yandex Cloud (regel 5)

Viktige punkter

Et budsjettvarsel rapporterer observert eller forventet forbruk og kan komme sent. En responsfunksjon kan blokkere nye agentoperasjoner eller stoppe bestemte ressurser. Dette er forskjellige handlinger. Deaktivering av en IAM-nøkkel stanser ikke kostnadene for ressurser som allerede kjører. Definer og test ressursstans separat.

Slik setter du det opp i hver skytjeneste:

AWS Budgets (dokumentasjon). Opprett et månedsbudsjett med terskler (50 %, 80 %, 100 %). Ved 100 %-terskelen kan et SNS-emne utløse en respons-Lambda. Eksemplet nedenfor deaktiverer bare IAM-tilgangsnøklene til den navngitte brukeren. Det stopper ikke ressurser og etablerer ingen hard forbruksgrense:

import boto3

def lambda_handler(event, context):
    iam = boto3.client('iam')
    # Deaktiver alle nøkler for brukeren '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'}

Avgrenset prosedyre for ressursstans: For en egen sandkasse med godkjente EBS-baserte EC2-instanser registrerer du konto, regioner og eksakte instans-ID-er før kjøring. Velg bare disse instansene i EC2-konsollen → Instance state → Stop instance → bekreft, og kontroller at hver blir stopped. Bevar nødvendige data fra instance store først; de slettes ved stopp. Kontroller at en godkjent planlegger eller skaleringsmekanisme ikke erstatter dem. Dette stopper denne databehandlingen, ikke alle kontokostnader. Gjennomgå beholdt lagring og andre tjenester separat. Følg den offisielle EC2-stopp-prosedyren.

AWS Budgets-dokumentasjonen advarer om at varsler ligger etter ressursbruken, og at flere kostnader kan påløpe både før og etter varselet. Utløsing ved 100 % håndhever derfor ikke et eksakt pengetak.

GCP Budget Alerts. Opprett et Budget → Pub/Sub-emne → Cloud Function som deaktiverer Service Account. Et viktig tips fra dokumentasjonen: varsler bare informerer, de slår ikke av noe, så Cloud Function er helt nødvendig.

Yandex Cloud (dokumentasjon). Sett opp budsjetter under Billing → Budgets og ressurskvoter som en hard grense. Du kan koble varsler til en Telegram-robot via Cloud Functions.

OpenAI API. Myke og harde utgiftsgrenser finnes rett i kontrollpanelet – den harde grensen stopper API-et automatisk; du trenger ingen Lambda.

Bruk en verifisert hard leverandørgrense der den finnes, forsinkede budsjettvarsler, snevre tilganger og en testet respons for de konkrete ressursene agenten kan opprette. Tilbakekalling av nøkler blokkerer noen nye operasjoner; kontrollert ressursstans er nødvendig for pågående ressursbruk. Verken et varsel eller en suksessmelding fra Lambdaen som deaktiverer nøkler, beviser at all fakturering har stoppet.

Hvorfor en agent trenger en separat API-sandkassenøkkel med begrensede tillatelser (regel 6)

Viktige punkter

Hvorfor trenger en agent en egen API-nøkkel? For at en feil skal få begrensede konsekvenser. Opprett en IAM-bruker eller Service Account bare for én agent, gi den minimumstillatelsene (EC2, ikke *), og knytt den til et separat faktureringsprosjekt med en hard grense. Hvis agenten bruker opp grensen, bruker den opp sine egne 50 dollar på en time, ikke hele selskapets pengekasse.

Et minimalt AWS-oppsett:

  1. Opprett IAM-brukeren claude-agent-scan
  2. Policy: bare nødvendige handlinger (for eksempel ec2:RunInstances i én region med størrelsen t3.micro, uten en elastisk IP i et VPC)
  3. Knytt brukeren til en separat AWS-konto (via Organizations) med et månedsbudsjett på 100 dollar
  4. Generer tilgangsnøkler og gi dem bare til agenten; ikke legg dem i din egen ~/.aws/credentials
  5. Roter nøklene eller slett brukeren etter økten

Tilsvarende for andre leverandører:

  • OpenAI / Anthropic: en separat API-nøkkel for hver agent, en hard grense for hver nøkkel i kontrollpanelet og agent_id-tagger i forespørselsmetadata
  • Stripe / YooKassa: en begrenset API-nøkkel for én handling (for eksempel bare charges:read) og en separat forhandler hvis mulig
  • Telegram Bot API: et separat robottoken, ikke hovedtokenet

Det gamle sikkerhetsprinsippet gjelder også her: minste privilegium – agenten får akkurat det oppgaven trenger, ikke én byte mer. Hvis oppgaven er «skann nettverket», ikke gi den ec2:* og s3:*; gi den bare ec2:DescribeInstances, og det er alt.

Når du bør bruke en pre-flight dry run og en iterasjonsgrense (regel 7)

Viktige punkter

Hvorfor bør agenten vise deg planen sin før oppstart, og hvor mange iterasjoner bør du maksimalt tillate? Plan Mode er en innebygd Claude Code-funksjon: Agenten beskriver først hva den har tenkt å gjøre, og du godkjenner det. Det er en gratis forhåndskontroll. Og --max-turns N begrenser antall trinn i én økt, slik at agenten ikke kan gå i ring i det uendelige. For autonom modus bør du sette grensen til 10–30 turer, ikke mer.

Plan Mode (/plan) slås på i starten av en økt. Agenten lager en plan, viser den i chatten, venter på godkjenning og begynner først deretter å jobbe. Det er gratis og forhindrer 70 % av tilfellene der noen tenker «jeg trodde den skulle spørre først».

--max-turns er et startflagg. Hver tur er én syklus med «agenten tenker + verktøykall + resultat». For autonome oppgaver:

  • liten endring: 5–10 turer
  • middels stor oppgave: 15–30 turer
  • stor autonom oppgave: 50–80 turer

Flere teknikker:

  • Tidsavbrudd med veggklokke ved hjelp av Linux-kommandoen timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "skanneoppgave"
# 1800 sekunder = 30 minutter. Stopp prosessen på en kontrollert måte.
  • Loggfør hvert verktøykall i en fil med en PostToolUse-hook, så du kan se hva som skjedde etterpå
  • Cron-overvåking – sjekk hvert 5. minutt at du ikke har 10 Claude-prosesser gående samtidig (et vanlig tegn på at noe har gått galt)

En ferdig sjekkliste på 5 minutter før du starter Claude Code autonomt

Viktige punkter

Hva må være på plass før du trykker Enter for en autonom oppgave? Sju avkrysningspunkter som tar omtrent ett minutt hver. Hvis bare ett punkt mangler, ikke start.

Sjekkliste før claude --dangerously-skip-permissions:

[ ] 1. Hard grense hos API-leverandøren (Anthropic Console → Limits → Monthly spend limit)
[ ] 2. Task Budget i forespørselsnyttelasten (hvis du bruker Opus 4.7+/Fable/Mythos)
[ ] 3. PreToolUse-hook som blokkerer rm -rf, aws s3 rb og terraform destroy
[ ] 4. allowedTools-tillatelsesliste i settings.json eller arbeid i en Docker-container
[ ] 5. Forsinkede skybudsjettvarsler + testet nøkkeltilbakekalling og godkjent ressursstans
[ ] 6. Sandkasse-API-nøkler (egen nøkkel til agenten, ikke hovednøkkelen)
[ ] 7. --max-turns N + timeout på NNN sekunder + cron-overvåking av prosesser

Hvis alle sju punktene er på plass, starter du. Hvis ett eneste mangler, stopp og sett det opp. Tretti minutter nå kan spare deg for 6 000–500 000 dollar senere.

Et eksempel som kontekst: En vibe-coder lanserte en nettbutikkapp med standardpassordet for postgres-databasen. I løpet av et par dager fant noen den, installerte minere og satte opp egne bakdører. Serveren måtte slås av, og regningen for måneden økte på grunn av noen andres kryptoutvinning.

Denne historien gjelder kategori 3 fra del 1 (tredjeparter som kjører ting på infrastrukturen din), men logikken er den samme: Utgiftskontroller bør ikke avhenge av hvem som startet pengebruken – agenten din, en ansatt eller en miner i Nigeria.

Videre lesning:

Bli kjent med Ailoot.

Flere detaljer

Spørsmål om denne veiledningen: 7 Claude Code-regler for å begrense forbruket til autonome agenter i 2026

Stopper skyregningen når agentens IAM-nøkler tilbakekalles?

Nei. Det blokkerer nye autentiserte forespørsler med nøklene, mens eksisterende ressurser fortsatt kan koste penger. Hold en tillatelsesliste over eide ressurser, stopp de godkjente instansene, kontroller tilstanden og gjennomgå beholdt lagring og andre tjenester separat.

Kan regexen i eksemplet håndheve en fullstendig sikkerhetsgrense?

Nei. Den undersøker bare matchende Bash-verktøykall og utvalgt kommandotekst. Test JSON-tolking og avslutningskoder, men bruk snevre skytillatelser og miljøisolasjon for den reelle tilgangsgrensen. Tilsvarende operasjoner og andre verktøy kan gå utenom et tekstfilter.

Alle artikler