Co obklopuje jednu pracovní relaci, v jednom řádku i v několika, aby relace mohla o sobě podávat zprávu, aniž by se jí kdo ptal. Chování tak, jak je implementováno a testováno; kde se implementace a tento dokument liší, dokument se mýlí a mění se ve stejném commitu jako oprava. Rozhodnutí a to, co zamítlo, je ADR 0136.
Problém, který to řeší
Každý fakt, který pracovní relace o svém okolí potřebuje, už má vlastníka: epizoda a úloha (lifecycle.episodes, continuity.state), pracovníci každého checkoutu (peers.list), stroje (mesh.cooperation, mesh.state), fronta pull requestů (majordomus prs brief) a derive zámek stroje (lib/machine_lock.sh). Relace nečte žádný z nich, pokud si nevzpomene. 2026-10-10 si relace tohoto repozitáře předávaly stav nástěnky ručně a nástěnka nahrazeného serveru chyběla v každém sběru, aniž to někomu bylo řečeno. Relace, které nikdo nic neřekne, ztichne, a ztichlou relaci nelze rozeznat od mrtvé.
Jedna schopnost, čtyři povrchy
brief.session se ptá každého vlastníka jednou a po sekcích říká, zda šlo sekci přečíst. Nic neukládá a sám nic neposuzuje.
| Povrch | Jak se ptá |
|---|---|
| Příkazová řádka | majordomus brief (řádky), --line (jeden řádek), --keep-awake (úvodní text, pak řádek), --format json |
| HTTP | GET /api/v1/brief?session=<id>&checkouts=this |
| MCP | nástroj majordomus_brief |
| Cockpit | karta „Session brief“ na přehledu, vedle čtyř otázek |
Vstup je všude volitelný: session je vlastní identita relace poskytovatele (id relace Claude Code), takže brief jmenuje otevřenou epizodu, kterou ta relace vlastní, jinak tu, na kterou ukazuje ukazatel; checkouts je repository (každá nástěnka, výchozí) nebo this; local je to, co říká přeposlaný požadavek, a člověk jej nikdy nepotřebuje.
Sekce
| Sekce | Vlastník | Říká |
|---|---|---|
session | lifecycle.episodes, continuity.state | epizoda, větev a head, aktivní úloha a místo volající relace MCP na nástěnce |
peers | peers.list | připojení pracovníci napříč přečtenými nástěnkami, každá nástěnka, kterou nešlo přečíst, s důvodem, překrývající se claimy a až osm pracovníků jmenovitě s tím, co oznámili |
mesh | runtime mesh | propojení spojená a selhávající, držené nároky a podíl tohoto runtime, a co deník adresuje tomuto runtime: otevřená review, která jej jmenují, předávky, které nikdo nepřevzal, překryvy s jeho nároky |
integration | majordomus prs brief | fronta tak, jak ji zanechalo poslední pozorování forge, nebo že ji tento checkout nikdy nepozoroval |
derive | zámek derive | jeho držitel, zda ten proces běží, jak dlouho zámek drží, a značka priority; undeclared v repozitáři, který žádný zámek nedodává |
Každá sekce nese stav: read, partial (část toho, co pokrývá, nešlo zjistit; shrnutí říká, kterou), unread (její vlastník neodpověděl; shrnutí říká proč) nebo undeclared. Sekce se nikdy nevynechá proto, že ji nešlo přečíst.
Kdo odpovídá
Nástěnka a mesh žijí v paměti serveru, který drží lease checkoutu. Proces příkazové řádky má vlastní prázdnou nástěnku a žádný mesh, takže brief složený tam by řekl „nikdo tu není“, když pravda je „neptal jsem se“. Příkazová řádka se proto ptá držitele lease přes trasu HTTP, kterou deklaruje registr, s local=true, aby se server nikdy nezeptal zpět, a brief skládá sama, jen když neodpoví žádný server. Odpověď říká, který proces ji složil (answered_by: leaseholder, superseded nebo this_process) a proč, když to není držitel lease.
Server, který prohrál lease s novějším, stále drží vlastní relace MCP a sběr repozitáře je nevidí, protože peers.list čte nástěnku checkoutu ze serveru, jejž jmenuje jeho lease. Takový server odpovídá na brief relace MCP z vlastní nástěnky, přidá nástěnku držitele leasu, označí sekci peerů partial a řádek SUPERSEDED a řekne, že peeři k němu připojení jsou pro všechny ostatní nedosažitelní.
Udržení relace vzhůru
session.brief_on_interval je přepínač a session.brief_interval_minutes interval (20, když chybí). Brief nese interval, takže ho každý čtenář bere z jednoho místa.
- Na začátku každé epizody, ať je poskytovatel jakýkoli, končí briefing události startu sekcí „Keeping awake“: každých N minut, aniž by o to někdo žádal, podat report ve dvou až čtyřech řádcích z
majordomus brief, nikdy z paměti, a naplánovat tento report tam, kde si klient umí plánovat vlastní prompty. Pak brief tak, jak stojí. - V Claude Code
capture installzapíše mod poskytovateleshare/mods/claude-code/majordomus-briefdo.claude/skills/majordomus-brief, vedle modu předávky z ADR 0123 a pod stejnými pravidly vlastnictví. Mod ukazuje jednořádkový brief jako stavový řádek a obnovuje ho každou minutu. Jednou za interval, když je relace nečinná, odešle vlastní prompt, který nese brief a žádá krátký report, takže se relace probudí a reportuje. Prompt, který člověk pošle po uplynutí intervalu, nese poslední brief s sebou. Mod nikdy nesestavuje spustitelný soubor (MAJORDOMUS_NO_BUILD=1) a mimo dozorovaný repozitář nedělá nic.
Ani jedno nezapisuje .claude/settings.json. Oddíl události start jede na shimu SessionStart, který capture install už zapojuje, a relace Claude Code si mod načte z .claude/skills/<name> sama.
Čím není
Brief je jedna složená odpověď, žádaná, když je třeba. Není to proud a nemá režim sledování: sledování událostí, jak se dějí, patří monitoru (ADR 0133). Nečte forge a nespouští server; sekce integrace je to, co po sobě nechalo poslední pozorování.
Kde to žije
| Cesta | Co |
|---|---|
apps/majordomus-cli/src/capability/builtin/brief.rs | schopnost, její sekce a jejich složení |
apps/majordomus-cli/src/commands/brief.rs | vykreslení příkazové řádky |
apps/majordomus-cli/tests/brief.rs | každý povrch nad skutečným serverem a příkazová řádka vedle něj i bez něj |
share/mods/claude-code/majordomus-brief/ | mod Claude Code a jeho vlastní test (claude plugin test) |
test/cases/1065_a_session_briefs_itself.sh | instalace, přepnutí a tvary příkazové řádky |