Blog

Claude Code: 30minutový limit příkazů na pozadí

Markdown

Claude Code zastaví příkaz na pozadí po 30 minutách při běhu bez dozoru: -p, Agent SDK, CI, cloud. Jak zvýšit limit a co dělat po zastavení příkazu.

Přečíst celý článek

Claude Code zastaví příkaz na pozadí po 30 minutách, když běží bez dozoru: při spuštění s příznakem -p, v aplikaci Agent SDK, v úloze CI nebo v cloudové relaci. Pokud Claude nastaví časový limit samotného příkazu, poběží nejvýše 2 hodiny, zatímco běžný terminál, desktopová aplikace a VS Code nemají od verze 2.1.288 žádný limit.

Dřív jsem celý den seděl před obrazovkou: zadal agentovi krok, zkontroloval ho, opravil a požádal o pokračování. Fázi za fází. Kód sice psal stroj, ale řízení bylo na mně. Teď napíšu plán, rozdělím ho do fází, přes noc svěřím implementaci podagentům a odejdu. Během 8 hodin beze mě Claude postupuje podle plánu: zkoumá, vytváří a dolaďuje. Ráno věnuji více času přijetí práce než jejímu předělávání.

Pokud ale noční běh používá -p, běží podle plánu na serveru, v CI nebo v cloudu, vývojový server a sestavení běžící na pozadí vydrží 30 minut. Claude Code je pak zastaví a noční práce uvízne v polovině. Vysvětlím, koho se limit týká, jak ho zvýšit a co dělat, když se příkaz už zastavil. Pojďme na to.

Nápovědu k používání služby najdete v dokumentaci Ailoot.

Hlavní poznatek

Od verze 2.1.285 Claude Code samo zastavuje příkazy na pozadí, když dosáhnou časového limitu, a sděluje Claude důvod. Od verze 2.1.288 se limit vztahuje pouze na běhy bez dozoru: -p, Agent SDK, CI a cloudové relace. Příkaz spuštěný přímo na pozadí běží 30 minut nebo po zadanou dobu, nejvýše však 2 hodiny. Příkaz přesunutý na pozadí po vypršení čekacího limitu běží od tohoto okamžiku 30 minut. Limit můžete zvýšit pomocí 2 proměnných v souboru nastavení ~/.claude/settings.json.

Koho se limit týká

Příkaz na pozadí je něco, co Claude spustí a nechá běžet, zatímco se věnuje něčemu jinému. Například vývojový server spuštěný příkazem npm run dev nebo sestavení, které sleduje změny souborů.

Dokumentace Claude Code uvádí:

V relaci bez dozoru, například při běhu s příznakem -p, v aplikaci Agent SDK, úloze CI nebo cloudové relaci, mají příkazy Bash a PowerShell na pozadí časový limit. Místní relace, ve které pracujete v terminálu, desktopové aplikaci nebo rozšíření VS Code, nemá pro příkazy na pozadí žádný časový limit.

Časový limit vyžaduje Claude Code v2.1.285 nebo novější. Před verzí v2.1.288 platil v každé relaci.

— Anthropic, referenční příručka k nástrojům, https://code.claude.com/docs/en/tools-reference.md

Jinými slovy, limit platí, když u toho nejste: při běhu s -p, v aplikaci Agent SDK, úloze CI nebo cloudové relaci. Pokud v relaci sami pracujete, v terminálu, desktopové aplikaci ani ve VS Code žádný limit není. Limit byl zaveden ve verzi 2.1.285 a před verzí 2.1.288 platil všude.

Jak poznat, zda se vás to týká:

  • Otevřeli jste Claude Code v terminálu nebo VS Code, zadali mu úkol a šli spát. Pokud máte verzi 2.1.288 nebo novější, žádný limit neplatí. Ve verzích 2.1.285 až 2.1.287 platí i zde. V samostatném článku jsem vysvětlil, jak aktualizovat na nejnovější verzi.
  • Claude Code se spouští pomocí claude -p "task" podle plánu, z vaší vlastní aplikace Agent SDK nebo v CI. Limit platí.
  • Úloha běží v cloudové relaci. Limit platí.

Když nechávám agenty pracovat samostatně, do zadání píšu: „Zapiš tyto podmínky a důvody zastavení do pracovního plánu. Ověř, že proces nezávisí na okně, které zavřu, ani na samotném počítači.“ Limit 30 minut je jedním z těchto důvodů.

Jak dlouho může běžet příkaz Claude Code na pozadí?

Odpočet začíná ve chvíli, kdy příkaz přejde na pozadí. Jsou 2 případy.

Claude spustí příkaz přímo na pozadí. Běží 30 minut. Pokud Claude při spuštění zadá čas (parametr timeout), poběží po tuto dobu, nejvýše však 2 hodiny.

Příkaz se nedokončí, zatímco na něj Claude čeká. Claude čeká na běžný příkaz 2 minuty. Pokud do té doby neskončí, Claude Code ho nezastaví, ale přesune na pozadí. Od té chvíle má 30 minut.

Po vypršení času Claude Code příkaz zastaví a sdělí Claude:

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

Pokud práce není dokončená, Claude může příkaz spustit znovu s delším časovým limitem.

Ještě jedna poznámka k -p. Při tomto typu běhu se příkazy na pozadí ukončí přibližně 5 sekund po závěrečné odpovědi Claude. Server spuštěný během nočního běhu s -p tedy poběží jen po dobu samotného běhu. Limit 30 minut je důležitý, pokud běh trvá déle: Claude spustí server na začátku a pak na něm hodinu provádí kontroly.

Jak organizovat noční práci v Claude Code?

Už mě unavovalo celý den agenta řídit, a tak jsem to nahradil jedním zadáním pro orchestrátor. Spustím ho večer a Claude celou noc postupuje po jednotlivých fázích: píše, kontroluje, opravuje a samostatně provádí commit.

Skupiny podagentů píší kód, každý se stará o vlastní soubory, aby si navzájem nepřekáželi. Další, čerstvá skupina práci přebírá: provádí revizi kódu, bezpečnostní kontroly a kontroly v živém prostředí. Pokud najdou problém, okamžitě se opraví a kontroly se spustí znovu. Zadání obsahuje větu: „Pokud ti dojde kontext, zaznamenej stav; další běh bude pokračovat.“

V popsaném příkladu bylo tímto způsobem během 3 dnů dokončeno 8 ze 14 fází.

Je třeba mít na paměti jen 2 věci. Orchestrátor za vás nepřemýšlí: nejprve napište podrobný plán s fázemi a teprve potom spusťte noční práci. A spotřebuje velkou část vašeho předplatného, takže nemá smysl nastavovat to pro malý úkol. Vždy omezte počet pokusů, jinak agent přes noc vyčerpá celý limit předplatného. V samostatném článku jsem vysvětlil, jak nastavit tyto limity čerpání.

Jak zvýšit limit

Možnost 1: požádejte Claude. Claude zvolí čas pro konkrétní příkaz; nenastavujete ho sami. Do úkolu ale můžete napsat: „Nechte vývojový server běžet na pozadí 2 hodiny.“ Tímto způsobem nelze získat více než 2 hodiny.

Možnost 2: proměnné v souboru nastavení. Hodnoty se udávají v milisekundách. Limity nelze snížit pod 30 minut a 2 hodiny; lze je pouze zvýšit.

  • BASH_DEFAULT_TIMEOUT_MS nastavená nad 1800000 (30 minut) mění výchozí limit 30 minut. Platí jak pro příkazy, které Claude spustí na pozadí bez zadání času, tak pro příkazy přesunuté na pozadí po vypršení čekacího limitu. Pokud ji nastavíte nad 7200000 (2 hodiny), zvýší se také horní limit.
  • BASH_MAX_TIMEOUT_MS nastavená nad 7200000 zvyšuje horní limit 2 hodin. Výchozí limit 30 minut nemění: příkaz bez vlastního zadaného času se stále zastaví po 30 minutách.

Proměnná BASH_DEFAULT_TIMEOUT_MS má vedlejší účinek. Nastavuje také dobu, po kterou Claude čeká na běžný příkaz, než ho přesune na pozadí. Nastavte ji na 1 hodinu a Claude bude čekat 1 hodinu místo 2 minut. Přes noc to nevadí. Přes den budete na odpověď čekat déle, pokud příkazy poběží dlouho.

Pokud se nechcete zabývat podrobnostmi: potřebujete-li 3 hodiny pro běžné příkazy i horní limit, nastavte BASH_DEFAULT_TIMEOUT_MS na 10800000. To stačí; druhou proměnnou nepotřebujete.

Soubor nastavení se nachází ve složce .claude ve vašem domovském adresáři: ~/.claude/settings.json v systémech macOS a Linux a %USERPROFILE%\.claude\settings.json ve Windows. Pokud soubor neexistuje, vytvořte ho. Limit 1 hodiny vypadá takto:

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

Pokud už soubor obsahuje blok env, přidejte do něj řádek. Běžící relace načte nové hodnoty po uložení souboru. Odebrání proměnné se projeví až při příštím spuštění claude.

Soubor musí být na počítači, na kterém agent běží. Aby agent pracoval přes noc, počítač nesmí přejít do režimu spánku. Případně spusťte Claude Code na vzdáleném serveru a uložte nastavení tam.

Pokud se příkaz už zastavil

Nemusíte nic dělat ručně. Claude Code sděluje Claude, proč se příkaz zastavil, takže se nejprve jednoduše zeptejte, co se stalo.

Pak postupujte krok za krokem:

  1. Jednorázový dlouhý běh do 2 hodin. Požádejte Claude, aby příkaz spustil znovu s delším časovým limitem.
  2. Příkazy pravidelně potřebují více než 30 minut. V souboru nastavení nastavte BASH_DEFAULT_TIMEOUT_MS nad 1800000, jak je uvedeno v příkladu výše. Pokud potřebujete více než 2 hodiny, nastavte tam také BASH_MAX_TIMEOUT_MS nad 7200000.
  3. Spusťte příkaz znovu. Dokumentace nic neslibuje ohledně příkazu, který už běžel na pozadí před změnou.
  4. Zkontrolujte výsledek dalšího běhu. Pokud Claudeova zpráva znovu obsahuje frázi „zastaven po dosažení časového limitu pro běh na pozadí“, nastavení se na daný příkaz nepoužilo.

Podagenti a rutiny udržují agenta v práci, i když jste pryč.

V samostatném článku jsem vysvětlil, jak nechat agenta běžet v cyklu celou noc. A zde je vysvětleno, jak nakonfigurovat Claude Code, aby přes noc nerozbil projekt.

Zjistěte, v jakém kroku se noční běh zastaví, a porovnejte důvod s výše uvedenými limity.

Zdroje

Poznejte Ailoot.

Další podrobnosti

Časté otázky

Spustí ponechání interaktivní relace přes noc limit 30 minut?

V Claude Code 2.1.288 a novějším se limit z článku týká bezobslužných běhů, například -p, Agent SDK, CI a cloudových relací. Samotné ponechání běžné místní interaktivní relace otevřené ji do této kategorie nezařadí.

Udrží větší timeout server v chodu po skončení běhu -p?

Ne. Příkazy na pozadí běhu -p končí krátce po závěrečné odpovědi. Změna timeoutu ovlivňuje délku příkazu během běhu; neudělá z běhu trvalý hosting.

Všechny články