Skip to main content

Kako me je uspavani terminal koštao 1.000 dolara preko noći

Post-mortem za Claude Code o pozadinskim demonima, keširanju prompta i beskonačnim petljama agenata — i kako strogo ograničenje potrošnje nije uspelo da spase moj račun.

· 3 мин читања

Zamislite: radite na projektu i koristite Claude Code za refaktorisanje ogromnog monorepozitorijuma. Uveče zatvorite poklopac laptopa, a ujutru se probudite sa API računom od 1.025 dolara — iako su vam u billing dashboardu podešena stroga ograničenja potrošnje.

Upravo to se desilo meni. Posle detaljnog kopanja po logovima, rekonstruisali smo tok događaja i pronašli osnovni uzrok. Spojler: krivci su bili pozadinski demoni, beskonačne petlje agenata i — ironično — sam mehanizam keširanja promptova.

Podešavanje

Radio sam na projektu sa ogromnom bazom koda. Svaki zahtev ka Claude-u povlačio je oko 250.000 tokena konteksta.

Kao wrapper za Claude Code koristio sam AgentDeck — zgodan alat koji radi kao most i kreira sopstveni PTY terminal kojim upravlja pozadinski demon. I upravo od tog demona cela priča počinje.

Zamka keširanja promptova

Mnogi misle da je čitanje tokena iz keša praktično besplatno. Nije.

Sam keš je radio kako treba. Logovi sesije pokazivali su tačno ono što biste očekivali:

  • input_tokens: 1
  • cache_read_input_tokens: 242,304

Ali čitanje iz keša se i dalje naplaćuje po tokenu. Za Claude 3 Opus čitanje 1 miliona keširanih tokena košta 1,50 dolara. To znači da je svaki pojedinačni odgovor u ovoj sesiji koštao oko 0,37 dolara — i to pre bilo kakvih izlaznih tokena.

Popust od 90% na 250.000 tokena i dalje se brzo pretvara u ozbiljan trošak kada nešto u petlji neprestano poziva model.

„Duh“ sesija

Obično, kada zatvorite prozor terminala, time završite i proces. Ali zbog AgentDeck demona, Claude proces je umesto toga nastavio da živi u pozadini.

Kada bi laptop otišao u stanje spavanja, sesija bi se pauzirala. Međutim, macOS povremeno budi računar radi pozadinskih zadataka preko Power Nap-a. Demon je svaki put uredno vraćao sesiju u život — u logovima se to pojavljivalo kao System wake detected.

U nekom trenutku agent je zaglavio u petlji. Pokušavao je da završi zadatak i iznova proveravao status.

Sačuvani fragment loga ispričao je ostatak priče:

  • messageCount: 330
  • durationMs: 929,873 (~15,5 minuta)

Agent je slao otprilike jedan zahtev na svake 3 sekunde. Svaki takav zahtev koštao je oko 0,37 dolara samo za čitanje iz keša.

Ukupna brzina potrošnje: oko 120–140 dolara na sat — za terminal za koji sam mislio da je zatvoren.

Anthropic-ov limit se nije aktivirao

Najneprijatniji deo: imao sam Claude for Work (Team) pretplatu sa strogim hard limitom podešenim u veb konzoli organizacije. Ali limit se nije aktivirao.

Podrška je kasnije potvrdila da je postojao bug zbog kog su API billing limiti ignorisani za Claude Code zahteve.

Pored toga, unutar same claude CLI alatke, flag extraUsage bio je postavljen na true, što je agentu praktično davalo blanko ček na teret moje kartice.

Zaključci

Ako koristite autonomne agente za razvoj, ovo je ček-lista koju sada koristim:

  1. Ne verujte demonima. Ako koristite omotače poput AgentDeck-a ili Warp Agent-a, proverite da li oni zaista završavaju sesije kada se prozor zatvori. Ja sam AgentDeck obrisao.
  2. Eksplicitno završavajte sesije. Ne ostavljajte terminal da visi. Ukucajte /exit ili pritisnite Ctrl+D.
  3. Postavljajte stroge limite tamo gde se zaista primenjuju. Trenutno je to veb konzola, a ne Claude Code konfiguracija. Ako otkrijete da se limit ne aktivira, pretpostavite da se neće aktivirati ni ubuduće i ponašajte se u skladu s tim.
  4. Proveravajte subagente. Komanda /subagents pokazuje da li ste ostavili tihog agenta da radi u pozadini.
  5. Pažljivo sa --auto. Beskonačna autonomija u velikom monorepozitorijumu može da spali mesečni budžet za sat vremena ako se agent zaglavi u petlji ispravljanja grešaka.

Na kraju je ovu potrošnju od 1.000 dolara zaustavio samo izlazak iz CLI-ja. To je pretanka linija odbrane za alat koji ume da troši novac ovako brzo.