Co je agent harness?
Agent harness je kód, který obaluje jazykový model a dělá z něj agenta schopného dokončit úkol. Microsoft ho ve své dokumentaci k Agent Frameworku definuje jako „běhové lešení, které z jazykového modelu udělá agenta schopného odvádět práci“ (přeloženo z angličtiny). Harness řídí volání modelu a nástrojů, spravuje stav konverzace i kontext a uplatňuje pravidla schvalování. Umí se také postarat o to, aby agent v úkolu o mnoha krocích postupoval dál.
LangChain ho v článku The anatomy of an agent harness vymezuje ostřeji: „Harness je veškerý kód, konfigurace a logika provádění, které nejsou samotným modelem“ (přeloženo z angličtiny). Týž článek to shrnuje vzorcem Agent = Model + Harness. Model rozhoduje, co udělat dál. K harnessu patří smyčka, která spustí volání nástroje a vrátí modelu výsledek. Patří k němu také soubor s poznámkami agenta a pravidlo, které zastaví nebezpečný příkaz.
Lidsky řečeno
Kůň je silný, ale sám o sobě nic netáhne a nikdo ho neřídí. Postroj ho spojí s vozem a díky otěžím rozhoduje vozka, kam kůň pojede. Jazykový model je ten kůň: schopnosti má on. Agent harness je postroj, který ty schopnosti zapřáhne do skutečné práce (soubory, nástroje, seznam úkolů) a otěže nechá v rukou člověka.
Co harness dělá
Harnessy se liší v detailech, většina z nich se ale stará o stejné úkoly:
- Smyčka agenta. Harness pošle požadavek modelu, spustí nástroje, o které si model přes function calling řekne, vrátí mu výsledky a celé to opakuje. Harness od Microsoftu tuto smyčku spouští „s konfigurovatelným limitem iterací pro každý požadavek“ (přeloženo z angličtiny).
- Kontext. Rozhoduje, co se dostane do kontextového okna: systémový prompt, soubory s instrukcemi jako AGENTS.md, popisy nástrojů a historie. Když historie naroste, harness ji zhustí, protože plné okno zhoršuje odpovědi (context rot).
- Nástroje a schopnosti. Shell, úpravy souborů, vyhledávání na webu, MCP servery a skills.
- Oprávnění. Rozhoduje, která volání nástrojů proběhnou sama a která počkají na schválení člověkem. To je podstata dohledu typu human-in-the-loop.
- Stav a paměť. Soubory, seznamy úkolů a poznámky o postupu, které zůstanou k dispozici i v dalším kontextovém okně. Víc v hesle o agentické paměti.
- Orchestrace. Spouští subagenty, předává práci a pro každý krok volí model.
- Deterministické kontroly. Kód, který běží v pevně daných bodech bez ohledu na to, co model zamýšlel, třeba hooky v Claude Code. LangChain mezi součásti harnessu řadí „hooky/middleware pro deterministické provádění (zhušťování, pokračování, kontroly linterem)“ (přeloženo z angličtiny).
Claude Code a Codex od OpenAI jsou v tomto smyslu harnessy. LangChain upozorňuje, že oba produkty „prošly dotrénováním, při kterém byly model i harness součástí trénovací smyčky“ (přeloženo z angličtiny). Inženýrský blog Anthropicu popisuje Claude Agent SDK jako „výkonný univerzální agent harness, který dobře zvládá programování“ (přeloženo z angličtiny).
Harness, framework, nebo SDK? Agentní AI framework vám dává stavební bloky. V harnessu už jsou tyto bloky sestavené do běhového prostředí s výchozím chováním, které můžete vypnout. O svém Harnessu Microsoft píše, že „skládá existující stavební bloky Agent Frameworku, místo aby definoval samostatné běhové prostředí pro agenty“ (přeloženo z angličtiny). SDK, třeba Claude Agent SDK, vám dá hotový harness, který zavoláte z vlastního kódu.
Proč na tom záleží
- Stejný model dosahuje v různých harnessech různých výsledků. LangChain odkazuje na žebříček Terminal Bench 2.0 a píše, že „Opus 4.6 v Claude Code dosahuje mnohem nižšího skóre než Opus 4.6 v jiných harnessech“ (přeloženo z angličtiny). Kdo srovnává modely a neuvede harness, srovnává jen polovinu systému.
- Dlouhé úlohy jsou otázkou harnessu. Inženýři Anthropicu píšou, že „přimět agenty, aby soustavně postupovali v průběhu více kontextových oken, zůstává otevřeným problémem“ (přeloženo z angličtiny). V článku Effective harnesses for long-running agents na to odpovídají změnou harnessu. První session připraví prostředí. Soubor
claude-progress.txtzaznamenává, co která session udělala, a každá session commitne do gitu, co stihla. Další session tak může navázat tam, kde předchozí skončila. - Spolehnout se dá jen na pravidla v kódu. Instrukce v promptu je žádost, kterou model může ignorovat. Kontrola oprávnění nebo hook v harnessu je rozhodnutí, které model žádnou argumentací neobejde.
Takto fungují naši vlastní headless agenti. Claude Code spouštějí neinteraktivně (claude -p). Claude Code je přitom vnitřní harness: řídí smyčku volání nástrojů, zhušťuje kontext, spouští subagenty a vyvolává hooky. Kolem něj jsme postavili druhou, vnější vrstvu pro práci, u které nikdo nesedí:
- Každá lane má vlastní rozvrh a plánovač ji podle něj spouští. Lane je jeden opakující se druh práce, třeba denní standup report. Každá drží zámek, takže dokud běží, její druhé spuštění se přeskočí.
- Některé lane začínají deterministickým skriptem předběžné kontroly (precheck), který zjistí, jestli je vůbec co dělat. Když práce není, model se nespustí a běh nespotřebuje žádné tokeny modelu.
- Každý běh má tvrdý časový limit. Komentář v našem spouštěcím skriptu shrnuje účel limitu na jednom řádku: „Timeout je pojistka proti zaseknutému běhu“ (přeloženo z angličtiny).
- Přístupové údaje zůstávají mimo model. Skript, který spouští Claude Code, odstraní z jeho prostředí tajné údaje, třeba tokeny pro Slack. Skripty, které posílají zprávy do Slacku, si token načítají samy.
- Po skončení běhu skript commitne soubory se stavem agenta.
Žádné z těchto pravidel není zapsané v promptu, a proto žádné z nich nezávisí na tom, jestli si na ně model vzpomene.
Na co si dát pozor
- Ne každý agent potřebuje vlastní harness. Když vývojář s agentem pracuje interaktivně a čte jeho kroky, o harness se už postará Claude Code, Codex nebo Cursor. Vlastní vrstva jen přidá kód, který musíte udržovat. Svou vrstvu si postavte tehdy, když běhy probíhají bez dozoru, spouštějí se podle rozvrhu nebo musejí vynucovat firemní pravidla, která žádný hotový nástroj nezná.
- Funkce jednoho harnessu se do jiného nepřenese. Narazili jsme na to při vývoji naší MCP Gateway. Klient chtěl, aby určitá volání nástrojů schvaloval člověk. Díky flagu v metadatech nástroje se Claude na schválení zeptá, jiné harnessy včetně Cursoru ale totéž volání pustí rovnou dál. Schvalování jsme proto museli přesunout na gateway, přes kterou prochází každý klient. Celý příběh najdete v článku Oprávnění nástrojů AI agenta.
- Vnější vrstva může vnitřní kdykoli zastavit. Timeout ukončí běh uprostřed kroku bez ohledu na to, co agent zrovna dělá. Počítejte s tím, že kterýkoli běh může skončit v polovině. Postup proto ukládejte po malých dokončených krocích, jako to s commity v gitu dělají dlouho běžící agenti Anthropicu. Naši agenti pro obsah commitují po každé dokončené fázi článku, takže po přerušeném běhu zůstane na větvi poslední hotová fáze.
- Harness sám o sobě není bezpečnostní hranice. Oprávnění a hooky drží agenta v dohodnutých mantinelech, kontrolují ale volání, která spouští sám model. Pokud chcete omezit, kam až proces vůbec dosáhne, přidejte sandbox pro AI agenta a přístupové údaje s omezeným rozsahem.
Související články:
- Co to je Agent? – pojem, ze kterého harness dělá běžící software.
- Co jsou agentní AI frameworky? – stavební bloky, ze kterých se harness skládá.
- Co jsou hooky v Claude Code? – deterministické kontroly, které harness spouští v pevně daných bodech session.
- Co jsou subagenti? – jak harness rozdělí práci mezi agenty s odděleným kontextem.
- Co je sandbox pro AI agenta? – hranice, která omezuje, kam až dosáhnou příkazy spuštěné harnessem.
- Co je context rot? – proč musí harness kontextové okno spravovat, místo aby ho plnil.
Chcete být o krok napřed?
Nenechte si utéct naše nejlepší postřehy. Žádný spam, jen praktické analýzy, pozvánky na exkluzivní eventy a shrnutí podcastů přímo do vaší schránky.
