Pracovní smyčka
Úkol je předávka — session ho převezme z jednoho ohraničeného pohledu, zakládá, co uvidí, v okamžiku, kdy to uvidí, a odevzdává jedněmi dveřmi, jejichž vytištěný blok je předávka.
Úkol je předávka
Úkol, na kterém pracuje agent, má zůstat pravdivý, aniž by agent přemýšlel jak. Navazující kroky, vynechané věci a zpozorované chyby přistanou jako podúkoly v okamžiku, kdy je někdo uvidí; stav se pohybuje s běhy a pull requesty; a to, co po session zbyde, doputuje na úkol jedněmi dveřmi, jejichž vytištěný výstup je předávka v chatu. Další session vloží URL úkolu a dostane ohraničený, serverem složený pickup, který říká, co dělat, kde začít, co si přečíst nejdřív, která větev existuje a co nenačítat.
Tři okamžiky, tři slovesa:
| Okamžik | Sloveso | Co udělá server |
|---|---|---|
| Začátek | pickup | Složí jeden ohraničený pohled na úkol a přihlásí se k němu |
| Objev | spot | Založí chybu nebo navazující krok jako podúkol, hned |
| Konec | hand back | Založí další kroky, připojí shrnutí, posune stav, vrátí blok |
Každé sloveso je skill (/vitrinka:pickup, /vitrinka:spot, /vitrinka:handoff v Claude Code; $pickup, $spot, $handoff v Codexu), MCP volání a příkaz CLI. Zbytek obstarají pravidla a hooky session.
Pickup
get {kind: "task", id, view: "pickup"} (vitrinka task pickup <id|url>) odpoví JSONem pickupu a polem rendered, hustým textovým blokem, který se tiskne tak, jak přišel:
pickup #718 · Checkout as one guided flow · epic · in_progress
WHAT <the epic's outcome, else the body's first line>
LAST <when> · by <who> · <the last hand-back's summary>
DONE <what that hand-back finished>
ON <surfaces it opened — APIs, components> — <where to build on>
BRANCH <branch> · worktree <path>
BEFORE <what must be true first> [#id status] · …
READ <kind> v<n> <filename> — <hint> (one line each)
WHO <actor> since <relative> (live runs)
NEXT ☐ <open step on this task> [type] (the task's own checklist)
NEXT [<key>](<url>) <title> [type] (open children, rank order)
SKIP 17 done children · 42 events · 3 attachments · 5 comments — not loadedBlok je anglicky, jak ho server tiskne: WHAT je výsledek, LAST poslední předávka, ON co otevřela a na čem stavět, BEFORE co musí platit nejdřív, READ co číst, WHO živé běhy, NEXT nejdřív otevřené kroky checklistu úkolu a pak otevřené podúkoly v pořadí ranku, SKIP co se nenačetlo. Řádky, pro které server nic neměl, chybí. Příloha, o které je dobré vědět, ale nestojí za načtení, se pod READ ukáže jako read on demand: <kind>. Pohled má pevný strop velikosti (6 000 bajtů): řádky za ním se zahodí celé a započítají do SKIP, nikdy se neuseknou uprostřed. Hotová práce se nikdy nerozbaluje, události a transkripty se nikdy nenačítají a CLI navíc řekne, zda větev existuje na originu.
Session z něj pracuje v pořadí: BEFORE je stopka, ne poznámka; READ jmenuje jediné přílohy, které se mají načíst (read_task_ref); na BRANCH se pokračuje, když existuje, jinak session naváže čerstvý worktree vt-<id>; úkol se přihlásí živým během (vitrinka task start, obvykle to udělá hook SessionStart); a první řádek NEXT, který nikdo ve WHO nedrží, je ta práce. U epicu jsou řádky NEXT jeho podúkoly — epic samotný se nikdy nepracuje.
URL úkolu nebo epicu vložené do promptu znamená pro každého MCP klienta „nejdřív pickup“: říkají to instrukce serveru a celý strom se nikdy nenačítá dopředu.
Spot
Co uvidíte uprostřed práce a v této změně neuděláte — chybu, navazující krok, rozhodnutí, které patří člověku — založíte v okamžiku, kdy to vidíte, nikdy nahromaděně na konec a nikdy jen v chatu. spot (vitrinka task spot <title>, POST /projects/{project}/spot) to založí jako podúkol navázaného úkolu; bez navázaného úkolu pod průběžný epic projektu Found during implementation, vyražený při prvním použití.
- Typ podle povahy —
bugpro chybu, která existuje dnes,taskpro navazující práci, která potřebuje vlastní session; kontrola rozdělané práce je krok na navázaném úkolu, nikdy podúkol, a rozhodnutí, které vlastní člověk, je tam bránahuman(Decide: …). - Krok přeroste checklist —
fromStepho povýší: položka opustí checklist rodiče ve chvíli, kdy vznikne podúkol. - Tělo = co · kde · proč — co bylo vidět, kde (soubor, cesta, obrazovka) a proč je to tady mimo rozsah.
production: truepřidá štítekmight-affect-production, takže chyba viditelná uživatelům je k nalezení před dalším releasem.- Reference jedou s tím — nástěnka, pull request nebo nahraná session jako důkaz.
Nejdřív se přečtou podúkoly navázaného úkolu, aby se nic nezaložilo dvakrát.
Hand back
Práce na navázaném úkolu končí jedním voláním. hand_back (vitrinka task handback [id], POST /tasks/{id}/handback) vezme to, co by se jinak napsalo do chatu, a v jedné transakci to uloží na úkol:
| Pole | Stane se z něj |
|---|---|
summary | Řádek LAST příštího pickupu — psaný pro tým, ne pro reviewera |
done | Jeden řádek na hotovou věc v bloku |
surfaces · buildOn | Řádek ON pickupu — co teď existuje a kde začít |
next | Kroky a brány v checklistu úkolu, v zadaném pořadí (kind step · human · date · action, who / at, when, které krok odškrtne samo); task: true založí podúkol pro práci, která potřebuje vlastní session |
omitted | decide: true je brána human Decide: … čekající na who — jen pro běh bez člověka; živá relace se nejdřív zeptá a odpověď zapíše do summary; ostatní vynechané věci jsou podúkoly |
branch · worktree | Řádek BRANCH |
prerequisites | Řádek BEFORE; neprázdný seznam označí rodičovský epic jako čekající |
readFirst | Id referencí, které povedou řádky READ příštího pickupu |
refs | Pull request a nástěnka, které z práce vznikly |
sessionId | Živý běh navázaný na začátku session skončí se shrnutím |
Shrnutí se uloží jako další verze přílohy handoff úkolu, takže každá předávka zůstane čitelná a pickup čte vždy tu nejnovější. next_action rodičovského epicu se posune na první otevřený podúkol. Odpověď nese rendered:
Summary
<summary>
<one line per done item>
Next steps
1. <open step on this task> — human gate · <who>
2. <step>
Filed 2 child task(s): [<key>](<child url>) [<key>](<child url>)
📋 Task: [<key>](<url>) — <status>
🔀 PR (merged): [<repo>#<n>](<url>)
🖼️ Board: [<board title>](<url>)Každý odkaz je maskovaný Markdown odkaz: krátký popisek (klíč úkolu, repo#N pull requestu, název boardu) nad přesnou URL, kterou vydal server, takže terminál nebo chat ukáže popisek a otevře adresu. Next steps je otevřený checklist úkolu — nejdřív brány, u každé lidské brány ten, na koho čeká; když nic otevřeného nezbývá, blok to řekne. Podúkoly založené přes task: true nebo jako vynechané věci jsou jeden řádek odkazů; ponesou je řádky NEXT příštího pickupu. Pull request uvádí stav před odkazem: merged, waiting (otevřený, ještě nesloučený), draft nebo closed; ref připojený bez stavu se čte unknown.
Tento blok je předávka. Agent ho vytiskne tak, jak přišel, a nic nepřidává; řádek, který by chtěl dopsat rukou, je pole, které zapomněl vyplnit.
Stav se posouvá sám a status se vyplňuje jen pro opravu — znovuotevření, zrušení, vrácení do backlogu.
Transkript session se na úkol dostane jen na požádání: vitrinka task handback --transcript ho po předávce archivuje a označí úkol štítkem eve-distill, takže kolega čte výtah místo celé session.
Stav se posouvá sám
Tři výchozí pravidla čtou události ledgeru úkolů, takže při práci nikdo nenastavuje stav ručně (první dvě jsou nová s pracovní smyčkou, třetí existovalo dřív):
| Pravidlo | Co dělá |
|---|---|
run-starts-work | Živý běh zahájený na úkolu v backlogu nebo nezahájeném úkolu ho označí jako rozpracovaný. |
open-pr-reviews | Otevřený pull request, který si úkol nárokuje, ho označí jako v review. PR, který úkol v těle jen zmiňuje, ho propojí, ale nikdy nezmění jeho stav. |
merged-pr-completes | Sloučený pull request, který si úkol nárokuje, ho dokončí: vt-<id> úkolu ve větvi nebo názvu PR, uzavírací klíčové slovo v jeho těle (Closes vt-12) nebo PR připojený ručně. Spustí se jednou, při sloučení nebo když člověk připojí už sloučený PR: úkol znovu otevřený poté zůstane otevřený i přes pozdější přílohy a aktualizace PR, a dokončí jen práci, kterou nic dalšího nedrží: dokud je otevřená některá položka checklistu (brána, akce, krok) nebo jiný pull request, který si úkol nárokuje, sloučení se jen zapíše k jeho referenci a úkol zůstane otevřený pro toho, kdo dokončí zbytek. PR, který úkol jen zmiňuje, ho propojí, ale nikdy nedokončí — stejně jako klíč nebo klíčové slovo v PR z repozitáře mimo ty, které projekt uvádí. |
Epicy jsou vyňaté: jejich uzavření vlastní portfoliový ledger. update {kind: "task", id, status} zůstává explicitními dveřmi pro znovuotevření a opravy.
Hooky session
vitrinka setup před zápisem ukáže přesné položky hooků a nainstaluje je do settings.json Claude Code a, je-li na stroji Codex, tři hooky session do ~/.codex/hooks.json:
- SessionStart — na větvi
vt-<id>naváže session na úkol jako živý běh a vytiskne pickup, takže session začíná s vědomím, co dělat; při čerstvém startu nebo/clearnavíc vypíše todo projektu, jejichž podmínky nastaly, a plány, které jsou na řadě. - SessionEnd — zapíše do běhu to, co ví git: commity od začátku běhu, pull request na větvi, dotčené soubory. I zapomenutá session po sobě nechá stopu.
- Stop — zablokuje závěrečný tah jen tehdy, když jeho poslední zpráva nese nadpis
Next stepsa navázaný úkol nemá předávku novější než běh této session. Důvod říká „call hand_back first“; odpovědí je skill handoff. Čte jen nadpis, nikdy obsah. - PreToolUse (jen Claude Code) — při úpravě souboru ohlásí todo, jehož podmínka
pathna soubor sedí, jednou za session.
Codex spouští tytéž tři hooky; jeho událost Stop předá hooku poslední zprávu asistenta přímo. Codex důvěřuje hooku jednou na stroj: po vitrinka setup otevřete Codex a spusťte /hooks, abyste tři položky schválili — do té doby je Codex přeskakuje, pod codex exec potichu. vitrinka doctor ukazuje stav jako hooks·codex a vlastní bezhlavé běhy Codexu ve vitrince (vitrinka work watch --exec codex) předávají --dangerously-bypass-hook-trust, takže tam brána běží i bez tohoto rituálu.
vitrinka task pickup 718 # ohraničený pickup s kontrolou větve
vitrinka task spot "Checkout total ignores the coupon" --production \
--body "seen on /checkout with a percentage coupon · cart.ts · out of scope for the address step"
vitrinka task handback --summary "Address step ships as one guided flow" \
--done "address form validates inline" --next "Wire the payment step" \
--pr acme/shop#42Kde se to děje
- Agenti —
get {kind: "task", view: "pickup"},spot,hand_back; skillypickup,spotahandoffmodulupm. - Terminál —
vitrinka task pickup,task spot,task handback;task startbez id naváže větevvt-<id>z checkoutu. - Stránka projektu — předávka je nejnovější příloha
handoffúkolu, podúkoly jsou jeho děti a Přehled ukazuje, co čeká na vás, časovou osu sprintů a postup vybraného sprintu.