Lekce 03.6: Spouštění bash příkazů (Running Bash Commands)
🧠 Mentální model & teoretický rozbor
Nástroj Bash je tou nejmocnější a zároveň nejnebezpečnější zbraní v arzenálu kódovacího agenta.
Na rozdíl od čtení souborů má spuštění bash příkazu vedlejší účinky (Side Effects) v reálném světě:
- Může instalovat systémové balíčky.
- Může odesílat síťové požadavky přes
curl. - Může modifikovat databáze nebo smazat diskové oddíly.
KLASIFIKACE BASH PŘÍKAZŮ PRO AGENTA:┌───────────────────────────┬─────────────────────────────────────────────┐│ DISKRÉTNÍ / BEZPEČNÉ │ DLOUHOBĚŽÍCÍ / BLOKUJÍCÍ ││ (Ideální pro agenta) │ (STRIKTNĚ ZAKÁZÁNO v sezení agenta) │├───────────────────────────┼─────────────────────────────────────────────┤│ • npm test -- auth.test │ • npm run dev / next dev (nikdy neskončí) ││ • npx tsc --noEmit │ • docker compose up (bez přepínače -d) ││ • git status / git diff │ • tail -f /var/log/server.log ││ • curl localhost:3000/api │ • interaktivní CLI nástroje (nano, vim) │└───────────────────────────┴─────────────────────────────────────────────┘Agent potřebuje příkazy, které proběhnou, vygenerují výstup a skončí s návratovým kódem (Exit Code 0 = úspěch, cokoliv jiného = chyba).
🏢 Realistický scénář z praxe
Vývojář zadal agentovi: „Ověř, zda funguje frontend.“
Agent spustil: npm run dev.
- Vývojový server Next.js nastartoval a začal čekat na požadavky na portu 3000.
- Protože proces nikdy neskončil, CLI harness zablokoval své sezení a čekal na návratový kód.
- Vývojář musel sezení přerušit přes
Ctrl + C. - Správné inženýrské řešení: Dev server běží v samostatném terminálu vývojáře. Agent v sezení spouští pouze diskrétní test:
pnpm vitest runnebonpx playwright test.
💻 Konkrétní ukázky kódu & promptů
Nastavení pravidel pro Bash v AGENTS.md (nebo CLAUDE.md):
## Pravidla pro terminál a Bash1. Spouštěj VÝHRADNĚ diskrétní příkazy, které skončí do 30 sekund.2. ZÁKAZ spouštění vývojových serverů (`pnpm dev`, `vite`, `nodemon`). Tyto procesy běží externě.3. Výstupy testů vždy filtruj na konkrétní testovaný modul (např. `pnpm vitest run <cesta>`).4. Nikdy nespouštěj příkazy vyžadující interaktivní uživatelský vstup v shellu (např. dotazy `Are you sure? (y/n)`). Vždy použij přepínač pro tichý běh (např. `-y`, `--non-interactive`).⚠️ Analýza selhání & Anti-patterns
Chyba: Spuštění interaktivního příkazu bez flagu pro potvrzení
Příklad: npm init nebo apt-get install <balik>.
Příkaz se zastaví a čeká na stisk klávesy v terminálu. Protože harness toto rozhraní nemá jak obsloužit, sezení zamrzne.
- Pravidlo: Vždy používejte neinteraktivní přepínače (
npm init -y,rm -f).
🛠️ Inženýrský postup krok za krokem (Playbook)
- Mějte dlouhoběžící procesy (dev server, databázový docker) spuštěné ve vedlejším panelu terminálu.
- V sezení agenta (
agyneboclaude) nechte spouštět pouze kompilaci, testy a jednorázové skripty. - Pokud se agent zasekne na běžícím procesu, okamžitě stiskněte
Ctrl + C.
🧪 Praktické cvičení (Hands-on Lab)
Úkol:
Otestujte chování agenta při spuštění terminálového příkazu s exit kódem.
Kroky:
- V
agyneboclaudevyzvěte agenta: „Spusť v bashi příkaz, který selže s chybou:node -e 'process.exit(1)'a vysvětli mi výsledek.“ - Sledujte, jak harness zachytí nenulový exit kód a jak model zareaguje na chybu.
- Následně zadejte: „Spusť příkaz, který uspěje:
node -e 'console.log("Vše v pořádku"); process.exit(0)'“.