Blog

Claude Code: 30-minutowy limit poleceń działających w tle

Markdown

Claude Code zatrzymuje polecenie działające w tle po 30 minutach podczas uruchomień bez nadzoru: -p, Agent SDK, CI, chmura. Jak zwiększyć limit i co zrobić po zatrzymaniu polecenia.

Przeczytaj cały artykuł

Claude Code zatrzymuje polecenie działające w tle po 30 minutach, gdy jest ono uruchomione bez nadzoru: na przykład po uruchomieniu z flagą -p, w aplikacji Agent SDK, w zadaniu CI lub w sesji chmurowej. Jeśli Claude określi czas działania samego polecenia, będzie ono działać maksymalnie 2 godziny. Zwykły terminal, aplikacja desktopowa i VS Code nie mają limitu od wersji 2.1.288.

Kiedyś cały dzień siedziałem przed ekranem: zlecałem agentowi kolejny krok, sprawdzałem go, wprowadzałem poprawkę i prosiłem o kontynuację. Faza za fazą. Kod mógł pisać komputer, ale to ja nim kierowałem. Teraz piszę plan, dzielę go na fazy, zlecam implementację subagentom na noc i wychodzę. Przez 8 godzin bez mojego udziału Claude realizuje plan: analizuje, buduje i dopracowuje. Rano więcej czasu poświęcam na przyjęcie wykonanej pracy niż na jej poprawianie.

Jeśli jednak nocne uruchomienie korzysta z -p, działa według harmonogramu na serwerze, w CI albo w chmurze, to działający w tle serwer deweloperski i proces budowania będą działać przez 30 minut. Potem Claude Code je zatrzyma, a nocna praca utknie w połowie. Wyjaśnię, kogo dotyczy limit, jak go zwiększyć i co zrobić, jeśli polecenie już się zatrzymało. Zaczynajmy.

Informacje o korzystaniu z usługi znajdziesz w dokumentacji Ailoot.

Najważniejsze informacje

Od wersji 2.1.285 Claude Code sam zatrzymuje polecenia działające w tle po upływie limitu czasu i informuje Claude o przyczynie. Od wersji 2.1.288 limit dotyczy tylko uruchomień bez nadzoru: -p, Agent SDK, CI i sesji chmurowych. Polecenie uruchomione bezpośrednio w tle działa przez 30 minut albo przez określony dla niego czas, ale maksymalnie 2 godziny. Polecenie przeniesione do tła po przekroczeniu czasu oczekiwania działa przez 30 minut od chwili przeniesienia. Limit możesz zwiększyć za pomocą 2 zmiennych w pliku ustawień ~/.claude/settings.json.

Kogo dotyczy limit

Polecenie działające w tle to coś, co Claude uruchamia i pozostawia włączone, gdy zajmuje się czymś innym. Na przykład serwer deweloperski uruchomiony przez npm run dev albo proces budowania, który śledzi zmiany w plikach.

Dokumentacja Claude Code mówi:

W sesji działającej bez nadzoru, takiej jak uruchomienie z flagą -p, aplikacja Agent SDK, zadanie CI lub sesja chmurowa, polecenia Bash i PowerShell działające w tle mają limit czasu. Lokalna sesja, w której pracujesz w terminalu, aplikacji desktopowej lub rozszerzeniu VS Code, nie ma limitu czasu dla poleceń działających w tle.

Limit czasu wymaga Claude Code w wersji v2.1.285 lub nowszej. Przed wersją v2.1.288 obowiązywał w każdej sesji.

— Anthropic, Dokumentacja narzędzi, https://code.claude.com/docs/en/tools-reference.md

Innymi słowy, limit dotyczy sytuacji, gdy nie ma Cię na miejscu: uruchomienia z -p, aplikacji Agent SDK, zadania CI lub sesji chmurowej. Gdy samodzielnie pracujesz w sesji w terminalu, aplikacji desktopowej lub VS Code, limit nie obowiązuje. Wprowadzono go w wersji 2.1.285, a przed wersją 2.1.288 dotyczył wszystkich sesji.

Jak sprawdzić, czy dotyczy to Ciebie:

  • Otwierasz Claude Code w terminalu lub VS Code, zlecasz mu zadanie i idziesz spać. Jeśli masz wersję 2.1.288 lub nowszą, limit nie obowiązuje. W wersjach od 2.1.285 do 2.1.287 także w tej sytuacji ma zastosowanie. W osobnym artykule wyjaśniłem, jak zaktualizować Claude Code do najnowszej wersji.
  • Claude Code jest uruchamiany za pomocą claude -p "task" zgodnie z harmonogramem, z Twojej aplikacji Agent SDK albo w CI. Limit obowiązuje.
  • Zadanie działa w sesji chmurowej. Limit obowiązuje.

Gdy zlecam agentom samodzielną pracę, proszę w promptcie: „Zapisz te warunki i powody zatrzymania w planie pracy. Sprawdź, czy proces nie zależy od okna, które zamknę, ani od samego komputera”. Limit 30 minut to jeden z takich powodów.

Jak długo działa polecenie w tle

Odliczanie rozpoczyna się, gdy polecenie przechodzi do działania w tle. Są 2 przypadki.

Claude od razu uruchamia polecenie w tle. Ma ono 30 minut. Jeśli Claude określi czas podczas uruchamiania (timeout), polecenie będzie działać przez wskazany czas, ale nie dłużej niż 2 godziny.

Polecenie nie kończy się, gdy Claude na nie czeka. W przypadku zwykłego polecenia Claude czeka 2 minuty. Jeśli nie zakończy się ono w tym czasie, Claude Code go nie zatrzymuje, tylko przenosi do tła. Od tej chwili ma ono 30 minut.

Po upływie czasu Claude Code zatrzymuje polecenie i informuje Claude:

Background command "<description>" was stopped after reaching its background time limit

Jeśli praca nie jest ukończona, Claude może ponownie uruchomić polecenie z dłuższym limitem czasu.

Jeszcze jedna kwestia dotycząca -p. W przypadku tego rodzaju uruchomienia polecenia działające w tle kończą się około 5 sekund po ostatniej odpowiedzi Claude. Serwer uruchomiony podczas nocnego zadania z -p będzie działać tylko tak długo, jak samo zadanie. Limit 30 minut ma znaczenie, gdy zadanie trwa dłużej: Claude uruchamia serwer na początku, a następnie przez godzinę wykonuje na nim testy.

Jak zorganizować nocną pracę w Claude Code

Zmęczyło mnie kierowanie agentem przez cały dzień, więc zastąpiłem to jednym promptem dla orkiestratora. Uruchamiam go wieczorem, a Claude przez całą noc samodzielnie przechodzi przez kolejne fazy: pisze, sprawdza, poprawia i zatwierdza zmiany.

Grupy subagentów piszą kod, a każdy z nich pracuje na własnych plikach, żeby nie przeszkadzać pozostałym. Kolejna, świeża grupa przyjmuje wykonane zadanie: przeprowadza przegląd kodu, kontrole bezpieczeństwa i testy na żywo. Jeśli znajdzie problem, jest on natychmiast naprawiany, a kontrole są uruchamiane ponownie. Prompt zawiera zdanie: „Jeśli zabraknie Ci kontekstu, zapisz stan; kolejne uruchomienie będzie kontynuować pracę”.

W opisanym przykładzie w ciągu 3 dni w ten sposób ukończono 8 z 14 faz.

Trzeba pamiętać tylko o 2 rzeczach. Orkiestrator nie myśli za Ciebie: najpierw przygotuj szczegółowy plan z podziałem na fazy, a dopiero potem rozpocznij nocną zmianę. Ponadto zużywa to dużo limitu subskrypcji, więc nie warto konfigurować tego dla małego zadania. Zawsze ograniczaj liczbę prób, bo inaczej agent może przez noc zużyć cały limit subskrypcji. W osobnym artykule wyjaśniłem, jak ustawić te limity.

Jak zwiększyć limit

Opcja 1: poproś Claude. Claude wybiera czas działania konkretnego polecenia; nie ustawiasz go samodzielnie. Możesz jednak napisać w zadaniu: „Uruchamiaj serwer deweloperski w tle przez 2 godziny”. W ten sposób nie można ustawić więcej niż 2 godziny.

Opcja 2: zmienne w pliku ustawień. Wartości są podawane w milisekundach. Nie możesz ustawić limitów niższych niż 30 minut i 2 godziny; możesz je tylko zwiększyć.

  • BASH_DEFAULT_TIMEOUT_MS ustawione na wartość większą niż 1800000 (30 minut) zmienia domyślny limit 30 minut. Dotyczy zarówno poleceń, które Claude uruchamia w tle bez podania czasu, jak i poleceń przenoszonych do tła po przekroczeniu czasu oczekiwania. Jeśli ustawisz wartość większą niż 7200000 (2 godziny), wzrośnie również limit maksymalny.
  • BASH_MAX_TIMEOUT_MS ustawione na wartość większą niż 7200000 (2 godziny) podnosi limit maksymalny wynoszący 2 godziny. Nie zmienia domyślnego limitu 30 minut: polecenie bez własnego czasu działania nadal zatrzyma się po 30 minutach.

BASH_DEFAULT_TIMEOUT_MS ma efekt uboczny. Ta sama zmienna określa, jak długo Claude czeka na zwykłe polecenie, zanim przeniesie je do tła. Ustaw wartość na 1 godzinę, a Claude będzie czekać 1 godzinę zamiast 2 minut. Nie przeszkadza to w pracy nocnej. W ciągu dnia dłużej będziesz czekać na odpowiedź, gdy wykonanie poleceń zajmie sporo czasu.

Jeśli nie chcesz zagłębiać się w szczegóły: jeśli potrzebujesz 3 godzin zarówno dla zwykłych poleceń, jak i dla limitu maksymalnego, ustaw BASH_DEFAULT_TIMEOUT_MS na 10800000. To wystarczy; nie potrzebujesz drugiej zmiennej.

Plik ustawień znajduje się w folderze .claude w katalogu domowym: ~/.claude/settings.json w systemach macOS i Linux oraz %USERPROFILE%\.claude\settings.json w Windows. Jeśli plik nie istnieje, utwórz go. Limit 1 godziny wygląda tak:

{
  "env": {
    "BASH_DEFAULT_TIMEOUT_MS": "3600000"
  }
}

Jeśli plik zawiera już blok env, dodaj do niego ten wiersz. Uruchomiona sesja wczyta nowe wartości po zapisaniu pliku. Usunięcie zmiennej zacznie obowiązywać dopiero przy następnym uruchomieniu claude.

Plik musi znajdować się na komputerze, na którym działa agent. Aby agent pracował przez noc, komputer nie może przejść w tryb uśpienia. Możesz też uruchomić Claude Code na zdalnym serwerze i umieścić tam ustawienia.

Jeśli polecenie już się zatrzymało

Nie musisz nic robić ręcznie. Claude Code informuje Claude, dlaczego polecenie się zatrzymało, więc najpierw po prostu zapytaj, co się stało.

Następnie postępuj krok po kroku:

  1. Jednorazowe długie uruchomienie, do 2 godzin. Poproś Claude o ponowne uruchomienie polecenia z dłuższym czasem.
  2. Polecenia regularnie działają ponad 30 minut. Ustaw BASH_DEFAULT_TIMEOUT_MS powyżej 1800000 w pliku ustawień, jak w powyższym przykładzie. Jeśli potrzebujesz więcej niż 2 godzin, ustaw tam również BASH_MAX_TIMEOUT_MS powyżej 7200000.
  3. Uruchom polecenie ponownie. Dokumentacja nie gwarantuje, że zmiana obejmie polecenie, które działało już w tle przed jej wprowadzeniem.
  4. Sprawdź wynik następnego uruchomienia. Jeśli raport Claude ponownie zawiera frazę „zatrzymano po osiągnięciu limitu czasu działania w tle”, ustawienie nie zostało zastosowane do tego polecenia.

Subagenci i rutyny pozwalają agentowi pracować, gdy Cię nie ma.

W osobnym artykule wyjaśniłem, jak uruchomić agenta w pętli na całą noc. Z kolei tutaj wyjaśniłem, jak skonfigurować Claude Code, żeby przez noc nie zepsuł projektu.

Sprawdź, na którym etapie zatrzymuje się nocne uruchomienie, i porównaj przyczynę z opisanymi limitami.

Źródła

  • Claude Code: Dokumentacja narzędzi - gdzie obowiązuje limit, wersje 2.1.285 i 2.1.288, 30 minut i 2 godziny, przenoszenie poleceń do tła po przekroczeniu czasu oczekiwania, treść powiadomienia oraz zmienne BASH_DEFAULT_TIMEOUT_MS i BASH_MAX_TIMEOUT_MS.
  • Claude Code: Zmienne środowiskowe - domyślne 2 minuty oczekiwania na zwykłe polecenie, blok env w ~/.claude/settings.json oraz moment, w którym sesja wczytuje nowe wartości.
  • Claude Code: Tryb bez interfejsu - uruchomienia z -p; polecenia działające w tle kończą się około 5 sekund po ostatniej odpowiedzi.
  • Claude Code: Ustawienia - lokalizacja ~/.claude/settings.json w systemie Windows.

Poznaj Ailoot.

Więcej szczegółów

Pytania i odpowiedzi

Czy pozostawienie interaktywnej sesji na noc wyzwala limit 30 minut?

W Claude Code 2.1.288 lub nowszym opisany limit dotyczy pracy bez nadzoru, np. -p, Agent SDK, CI i chmury. Samo pozostawienie zwykłej lokalnej interaktywnej sesji nie nadaje jej tej kategorii.

Czy większy timeout utrzyma serwer po zakończeniu -p?

Nie. Polecenia w tle przebiegu -p kończą się niedługo po ostatniej odpowiedzi. Timeout zmienia czas polecenia podczas przebiegu, nie zamienia go w trwały hosting.

Wszystkie artykuły