Kód běží u poskytovatele
Jazykový model, který umí nejen psát, ale i spouštět příkazy, potřebuje bezpečné prostředí, kde se nic nepokazí. Takovému prostředí se říká sandbox: oddělený kontejner, ve kterém může příkaz běžet, aniž by sahal na zbytek systému. Služba OpenRouter ve svém blogu popisuje, že tuto práci může převzít server poskytovatele. Příkazy navržené modelem se provedou v jeho sandboxu přímo během API požadavku, tedy během jediného dotazu, který aplikace modelu pošle. Vývojář podle textu nemusí kontejner sám zajišťovat, záplatovat ani zabezpečovat. Odpadá tak starost o jeho přípravu, aktualizace i ochranu. Jde o článek samotného prodejce, takže všechna tvrzení o vlastním produktu je třeba číst jako tvrzení výrobce, ne jako nezávislé ověření. Text přesto obsahuje konkrétní čísla o limitech, ceně a zpoždění. Zároveň v něm autoři sami uvádějí, kdy se hostovaný sandbox nehodí, což jeho důvěryhodnost mírně zvyšuje.
Kdo spouští kód a pro které modely
OpenAI, Anthropic a Google podle článku spouštějí kód vždy jen pro své vlastní modely. Kdo tedy chce, aby model od jednoho z nich pracoval s hostovaným sandboxem, je vázán na jeho dodavatele. OpenRouter se snaží být neutrální vrstvou. Tvrdí, že jeho nástroj openrouter:shell zvládne příkazy pro libovolný model na rozhraních Responses a Messages. Druhý nástroj, openrouter:bash, nabízí totéž pouze na rozhraní Messages. Rozhraním se zde myslí způsob, jakým aplikace s modelem komunikuje, a rozsah podpory se tedy liší podle toho, které z nich vývojář používá. Oba nástroje jsou zatím v betě, což je pro případné nasazení do ostrého provozu důležitá výhrada. Kdo kombinuje modely různých firem, by tak podle OpenRouteru nemusel řešit samostatnou implementaci sandboxu pro každého poskytovatele. Kompatibilitu ovšem popisuje sám vendor a zdroj v dodaných pasážích žádné nezávislé srovnání neuvádí.
Jak se liší hostovaný a vlastní sandbox
Rozdíl je nejlépe vidět na toku požadavku. U hostovaného nástroje aplikace pošle modelu požadavek se seznamem nástrojů. Model vydá volání shellu, OpenRouter ho provede v sandboxu a standardní výstup s návratovým kódem vrátí modelu, který odpoví aplikaci. U vlastního sandboxu model vrátí volání nástroje zpět do orchestračního kódu aplikace. Ten příkaz spustí v sandboxu z vlastního image, výstup pošle v dalším požadavku modelu a teprve potom přijde odpověď. Hostovaná varianta tedy vynechává mezikrok v kódu vývojáře i druhý požadavek na model. Kdo provozuje sandbox sám, podle článku vlastní i ty části, které by jinak měl poskytovatel: vybírá základní image, zajišťuje výpočetní výkon, napojuje SDK pro spouštění a čtení výstupu a řídí životní cyklus každého běhu. Vlastní je také bezpečnostní hranice. Hostovaný nástroj tuto kontrolu vymění za jednu položku v poli JSON, kontejner není potřeba dimenzovat, záplatovat ani provozovat. OpenRouter jej podle vlastních slov navrhl pro případ, kdy jde o hrstku krátkých příkazů na požadavek.

Izolace, limity a výchozí zákaz sítě
Sandbox OpenRouteru je podle popisu izolovaný kontejner vázaný na účet a workspace. Odchozí síť je ve výchozím stavu vypnutá, takže příkaz spuštěný modelem se sám nedostane na internet. Každý příkaz má navíc omezený čas běhu i velikost výstupu. Vývojář si může nastavit vlastní stropy. Parametr timeout_ms určuje, jak dlouho smí příkaz běžet. Výchozí hodnota je 120 000 milisekund, tedy dvě minuty, a maximum činí 300 000 milisekund, tedy pět minut. Parametr max_output_length omezuje množství vypsaného textu. Výchozích je 16 384 znaků na jeden proud a strop je 65 536 znaků. Hodnoty se tedy dají zvýšit, ale jen do pevné hranice, kterou nepřekročí ani nastavení vývojáře. Pro běžné krátké příkazy je to dostatečné, dlouhotrvající výpočty nebo velké výpisy se do takových limitů ale nemusí vejít.
Test blokování sítě
OpenRouter uvádí, že blokování sítě ověřil 22. září 2026. Poslal požadavek bez network_policy, tedy bez nastavené síťové politiky, a nechal model stáhnout stránku example.com pomocí curl. Měl vypsat jen stavový kód HTTP a po pěti sekundách to vzdát. Příkaz vypsal 000, což curl dělá, když nepřijde žádná odpověď, a skončil s kódem 28, tedy vypršením časového limitu. Chybový výstup hlásil, že se nepodařilo připojit k example.com na portu 443 po zhruba 5206 milisekundách. Síť lze otevřít allowlistem, tedy seznamem povolených cílů, až s 50 hostiteli nebo vzory. Dosažitelné jsou jen porty 80 a 443 a politika se pevně nastaví při startu kontejneru, takže ji nelze měnit za běhu. Praktický detail se týká instalace balíčků: pip install vyžaduje v seznamu pypi.org i files.pythonhosted.org. Bez druhé z domén by instalace pravděpodobně nefungovala. Jde nicméně o jeden test provedený samotným prodejcem.
Sandbox nenahrazuje kontrolu obsahu
Izolace omezuje dosah příkazu, který by model spustil po útoku prompt injection, tedy po podvržených instrukcích ukrytých v textu. Neznamená ale, že útok někdo zachytí. Detekce injekcí v guardraily workspace kontroluje jen obsah zprávy od uživatele v příchozím požadavku, a to pomocí regulárních výrazů pro běžné techniky, ještě než se požadavek předá modelu. Co model načte později přes nástroj, tedy stránku, soubor nebo výstup příkazu, už kontrolou neprochází. Podle OpenRouteru je to třeba ošetřit vlastními prostředky, například revizí výstupu sandboxu, který aplikace dostane. Detekce navíc není vyčerpávající a může dávat falešné poplachy. Autoři proto radí nejdřív v režimu flag změřit, kolik vlastního provozu se se vzory shoduje, a teprve potom zapnout redakci nebo blokování. Bezpečnost tak stojí na dvou nezávislých vrstvách, izolaci kontejneru a kontrole obsahu, a jedna druhou nenahrazuje.
Cena a zpoždění
Čas v sandboxu účtuje OpenRouter po 0,0001 USD za sekundu. Nový nebo uspaný kontejner platí minimum 30 sekund. V ukázkovém požadavku se spustil nový kontejner a objekt usage nahlásil server_tool_cost 0,003, což přesně odpovídá tomuto minimu: třicet sekund krát 0,0001 USD dává právě tři tisíciny dolaru. I krátký příkaz tak stojí alespoň tři desetiny centu. Při větším objemu drobných volání se tato částka může sčítat, i když dokument žádný přepočet na reálný provoz neuvádí. Cena tedy v ukázce vychází z minimálního účtovaného času, nikoli z toho, jak dlouho příkaz skutečně běžel. Kdo plánuje nasazení, by si měl spočítat, kolik nových nebo uspaných kontejnerů jeho aplikace bude potřebovat.
Zpomalení je znát, ale není změřené plošně
Spuštění kódu přidává latenci, tedy čekání na odpověď. V sadě jednotlivých požadavků z 22. září 2026 se odpověď bez shell nástroje vrátila asi za dvě sekundy. Požadavky s jedním voláním shellu trvaly od 8 do 21 sekund podle modelu. Rozdíl je tedy výrazný, a to už při jediném volání. Autoři přitom výslovně zdůrazňují, že jde o jednotlivé vzorky z jedné relace, nikoli o benchmark. Údaje proto ukazují řádově, s čím je třeba počítat, ale nedovolují srovnávat modely mezi sebou. Nevíme, jak se doba mění při opakování, při složitějších příkazech ani při různé zátěži. Pro interaktivní aplikace je to ovšem dostatečný důvod změřit si zpoždění na vlastním provozu a nespoléhat na cizí čísla.
Kdy zůstat u vlastního sandboxu
Sám OpenRouter v textu přiznává, že hostovaný nástroj není univerzální. Počítá s několika krátkými příkazy na požadavek. Sandbox platforma, kterou si vývojář provozuje sám, je podle článku stále správnou volbou pro vlastní základní image, práci s GPU nebo relace trvající hodiny. Jako příklady uvádí dokumentaci tří služeb. Modal podle ní nabízí sandboxy z vlastních image s nastavitelnou životností až 24 hodin a s GPU. Daytona popisuje sandboxy z veřejného kontejnerového image včetně variant s GPU. E2B uvádí až 24 hodin na plánu Pro a hodinu na základním plánu, s pozastavením a obnovením pro delší úlohy. Volba tak záleží na povaze práce: krátké příkazy bez vlastního prostředí vyhovují hostovanému řešení, dlouhé relace a specializovaný hardware spíše vlastnímu provozu. Nezávislé srovnání všech služeb ve zdroji chybí, přehled vychází z dokumentace jednotlivých poskytovatelů.
Grafy a schéma pocházejí z původního článku uvedeného ve zdrojích.
Zdroje
- Server-Side Code Execution Tools for AI Agents, Compared — OpenRouter Blog
Článek vznikl s pomocí AI; podklady a odkazy jsou uvedeny výše.