Wiki · Funkce do hloubky

Spouštění příkazů a schvalování

Jak nastavit, aby agent v běžné práci neotravoval, a přitom nemohl smazat server. Včetně toho, co se děje u úloh bez dozoru.

🛂
Než agent spustí příkaz, projde kontrolou. Buď se rozhodne sám, nebo se zeptá vás — podle toho, jak si to nastavíte. Tahle stránka je o tom, jak nastavit, aby agent v běžné práci neotravoval a přitom nemohl smazat server. A taky o tom, že zápis do souborů má vlastní pravidla, na která se nikdo neptá.

Kdy se agenta nezeptá a kdy ano

RežimCo děláPro koho
smart (výchozí)Pomocný model posoudí riziko: jasně bezpečný příkaz povolí pro ten jeden případ, opravdu nebezpečný sám zamítne a u nejasných se zeptáBěžná práce — nejlepší kompromis
manualZeptá se pokaždé, když jde o nebezpečný příkazKdyž chcete mít přehled o každém rizikovém kroku
offVypne všechny kontroly (obdoba --yolo)Jen v izolovaném prostředí, kde nic nemůže utéct
# ~/.hermes/config.yaml approvals: mode: smart # smart | manual | off timeout: 300 # kolik vteřin čeká na vaše rozhodnutí cron_mode: deny # co mají dělat pravidelné úlohy bez dozoru single_query_mode: deny # jednorázová spuštění (hermes chat -q) unattended_mode: deny # webhooky a rozhraní bez člověka u klávesnice

Když nemá kdo odklikat „povolit“

Noční úloha nebo webhook nemá nikoho, kdo by na dotaz odpověděl. Proto mají tyhle situace vlastní nastavení: deny (výchozí) příkaz zablokuje a agent musí hledat jinou cestu; approve všechno dopředu povolí.

SituaceNastaveníVýchozí
Pravidelná úloha (cron)cron_modezablokovat
Jednorázový příkaz hermes chat -qsingle_query_modezablokovat
Webhook, API bez obsluhyunattended_modezablokovat

Tohle je důležité pro pochopení tichých problémů: když noční úloha narazí na nebezpečný příkaz a nikdo neklikne, úloha se prostě nedokončí a v logu zůstane zamítnutí. Když takovou úlohu chcete, navrhněte ji tak, aby zvládla i zablokování.

YOLO režim (vše bez ptaní)

JakRozsah
hermes --yolo nebo hermes chat --yoloCelé spuštění
/yolo v rozhovoruOd té chvíle do konce sezení

Nikdy ho nezapínejte tam, kde agent pracuje na živém webu nebo kde jsou vaše klíče a přístupy. V izolovaném kontejneru nebo v testovacím projektu je to naopak rozumná volba.

Zápis do souborů: tady se neptá, tady se rovnou blokuje

U zápisu do souboru není žádné okno „povolit". Hermes zkontroluje cestu proti seznamu chráněných míst a když na nějaké narazí, zápis odmítne — bez možnosti to z chatu obejít:

Chráněno vždyPříklady
Přístupy k systému a clouduKlíče SSH, authorized_keys, přístupy k AWS a Kubernetes, nastavení sudoers
Tajemství samotného Hermese.env, přihlašovací soubory, trezor, profil prohlížeče, tokeny pro nástroje, párovací soubory
Soubory s přihlašovacími údaji v projektu.env.local, .env.production, .envrc — agent je nesmí přečíst, ale může je pro vás napsat

Hranici zápisu navíc můžete omezit na jedinou složku — pak agent nesmí zapsat nic mimo ni (HERMES_WRITE_SAFE_ROOT). Chráněná místa výše zůstávají blokovaná, i kdyby byla uvnitř té složky.

⚠️
Pozor na tichý omyl: když je zápis zablokovaný, agent to dostane jako chybu — ale ve shrnutí může přesto napsat, že se to povedlo. Věnovat pozornost patičce, kde se ověření zápisu hlásí, vyplatí se víc než věřit poslední větě odpovědi.

Kde agent běží a co to znamená pro kontrolu

Kde terminál běžíKontrola nebezpečných příkazůPro co se hodí
Na vašem počítačianoVývoj a běžná práce
Na vzdáleném serveru přes SSHanoPráce na serveru
V kontejneru (Docker a podobně)přeskočena — hranicí je kontejnerNepřetržitý provoz, když je vše izolované
V cloudovém sandboxu (Modal, Daytona, Vercel)přeskočenaPráce, která má zmizet se strojem

Přeskočená kontrola není chyba — jen to znamená, že ochranou je izolace kontejneru, ne dotazy. Zkontrolujte, co všechno je do kontejneru připojené (složky, klíče, síť).

Pasti z našeho provozu

Co se staloCo s tím
Noční úloha se tiše nedokončilaNarazila na nebezpečný příkaz a nebyl kdo schválit → výchozí chování je zablokovat. Úlohu navrhněte tak, aby zvládla jinou cestu, nebo jí povolení přiznejte vědomě
Agent tvrdil, že soubor uložil, ale neuložilZápis byl zablokovaný (chráněná cesta nebo mimo povolenou složku). Kontrolujte patičku s ověřením zápisu, ne shrnutí odpovědi
Agent nemohl přečíst .envSprávně — soubory s přihlašovacími údaji se nečtou. Když potřebujete hodnotu použít, zadejte ji agentovi jako nastavení, ne jako obsah souboru
Zapnuté „vše povolit“ na produkčním serveruNedělejte to. Když už to nutně potřebujete, jen na omezenou dobu a s vědomím, že agent může sáhnout na cokoli
Schválení vypršelo, protože jsme byli pryčVýchozí čekání je 5 minut. Buď se k rozhodnutí vraťte, nebo zvolte režim, který se neptá (a nést jeho riziko)
Přesun do kontejneru zrušil i kontrolní bodyV kontejneru se cesty týkají kontejneru, takže snímky nejdou. V kontejnerovém režimu se spolehněte na git a zálohy

Naše tipy

TipProč
Nechte smart, dokud nemáte důvod ho měnitVětšinu rutiny povolí a u opravdu riskantních věcí se zastaví
Hranici zápisu nastavte na složku projektuAgent pak nemůže zapsat mimo ni, i kdyby se spletl
U pravidelných úloh počítejte s možností zamítnutíÚloha má umět pokračovat i bez povolení, jinak bude tiše selhávat
Nikdy nevypínejte kontroly „na zkoušku“ na živém systémuRiziko se projeví jednou a nevratně

Kam dál

← Zpět na wiki