Odlehčená řídicí dozorová vrstva pro práci s podporou AI.
Tento dokument je produktová specifikace v0.1. Vznikl po prostudování velkého množství nahromaděné inženýrské praxe kolem AI kódovacích workerů: instrukčních souborů, protokolů kontinuity relací, korpusů politik, vynucovacích hooků, nástrojů pro paralelní práci, auditních knih, retrospektiv a několika opuštěných pokusů právě o tento druh nástroje. Zdrojový materiál je soukromý a není zde reprodukován. Reprodukován je tvar toho, co selhalo, rozsah selhání a malý počet mechanismů, které prokazatelně obstály.
Tento dokument popisuje návrh; CLI.md a SCHEMAS.md popisují, co v0.1 skutečně dělá, a test/cases/ to dokazuje.
Problém
Týmy nasazují schopné AI pracovníky a pak je provozují bez jakýchkoli kontrol, na které by trvaly u lidského týmu. Selhání jsou provozní, ne jazyková, a opakují se bez ohledu na to, kterého modelu nebo dodavatele se týkají:
- Instrukce tiše hnijí. V jednom workspace s zhruba dvaceti repozitáři sdílel instrukční soubor jednoho nástroje AI a instrukční soubor jiného nástroje ve stejném repozitáři mezi 0 % a 9 % obsahu. Nebyly to duplikáty. Byly to disjunktní sady pravidel. Která pravidla platila, záleželo na tom, kdo byl najat.
- Vždy načítaný kontext nemá strop. Vždy načítaný provozní kontrakt jednoho repozitáře kolísal mezi 0 a asi 1 100 řádky během zhruba 200 ručních úprav, než ho pevný rozpočet s padající kontrolou přišpendlil pod 50.
- Vynucování je deklarováno, ne zapojeno. V prostudovaném materiálu bylo nalezeno nejméně sedmnáct nezávislých případů kontroly, která byla zdokumentována jako blokující, existovala na disku, byla spustitelná a nic ji nevyvolávalo. V jednom případě bylo 34 z 39 skriptů pre-commit osiřelých, zatímco soubory politiky, které je pojmenovávaly, hlásaly „BLOCKING“. V jiném měl katalog 546 agentů přesně jednu skutečně zaregistrovanou položku u runtime. Ve třetím ztratil dobře navržený ochranný hook svou registraci, když nesouvisející nástroj přepsal soubor nastavení; hook, jeho testy i dokumentace, která na něj odkazuje, zůstaly na místě.
- Izolace bez koordinace kolizi jen odkládá. Při plně platném jednom git worktree na workera dalo čtyřicet worktrees stále asi 3 200 souběžně změněných souborů a 67 shluků duplicitních záplat. Sloučilo se kdy jen 9 z 80 worktrees. Krok nárokování rozsahu, který by tomu zabránil, byl volitelný, porovnával se přesnou shodou řetězců a vynucovaly ho hooky, které nikdy neběžely.
- Přepisy se stávají databází. Poznámky relací narostly v jednom repozitáři na 10 GB. Obnova pracovního stavu po skončení relace vyžadovala ručně psaný runbook na patnáct až třicet minut. Poznámky měly data v názvu souboru, která se neshodovala s daty v obsahu, a nic neověřovalo ani jedno proti gitu.
- Nic neměří výdaje na AI při vývoji s pomocí AI. Stejný tým, který postavil schopný profiler nákladů pro vlastní volání modelů svého produktu, neměl žádnou telemetrii toho, co spotřebovávají jeho programátorští pracovníci. Za každým údajem „o 35 % lepší“ a „o 50 % rychlejší“ v jeho dokumentaci směrování nestálo žádné měření.
- Dozorové nástroje se opouštějí během dnů. V jednom pracovním prostoru se našly čtyři samostatné pokusy o řídicí vrstvu. Každý byl opuštěn ne proto, že by myšlenka byla špatná, ale proto, že nic nezjistilo, kdy přestal fungovat, a nic nezařídilo, aby byla další relace levnější než ho ignorovat.
To jsou problémy řízení. Lepší prompty je neopraví.
Teze produktu
AI pracovníci by se neměli řídit sami.
Majordomus je vrstva, která rozhoduje, co se workeru řekne, čeho se smí dotknout, kdy je hotov a zda lze jeho tvrzení o dokončení věřit. Práci nevykonává a model nevolá. Dohlíží.
Nejdůležitější vlastnost, převzatá přímo z důkazů: deklarace vynucování, která není mechanicky sladěna s tím, co skutečně běží, je horší než žádná deklarace. Vyrobí dokument politiky, zprávu o souladu a falešný pocit pokrytí, a pak se rozpadne. Majordomus proto bere „je tato kontrola skutečně zapojena?“ jako svou primární deterministickou záruku, aplikovanou nejdřív na sebe.
Volitelná složitost
Jednoduché věci triviální, složité možné, divné hackovatelné, v tomto pořadí. Jádro je malá množina konceptů, které jmenuje CONCEPTS.md, a zůstává uzavřené; rozšíření přidává instance, validátory, šablony a integrace kolem těchto konceptů, na okrajích, a nikdy koncept. Mechanismy zůstávají stabilní a význam může být řízen daty, aniž by se stal frameworkem pro definování frameworků. Pravidlo, s revizními otázkami, na které musí architektonická změna odpovědět, a anti-vzory, které odmítá, je .ai/repo/rules/project/optional-complexity.v1.md; tento dokument jej neopakuje.
Uživatelé
- Individuální inženýr, který nad repozitářem provozuje jeden či více AI nástrojů pro kódování a chce, aby se stejná pravidla uplatnila bez ohledu na to, který nástroj je otevřen.
- Malý tým, kde se jedné kódové báze dotýká několik lidí a několik AI pracovníků a kdo potřebuje vědět, kdo na čem pracuje a zda hrozí, že se dva pracovníci srazí.
- Inženýrský vedoucí, který chce vědět, zda práce AI splnila svou smlouvu, než ji přijme, aniž by četl přepis.
Majordomus není pro organizace, které potřebují hostovanou řídicí rovinu, SSO nebo správu napříč repozitáři. To jsou cesty rozšíření, ne v0.1.
Necíle
Majordomus v0.1 nedělá:
- vyvolávat, proxyovat ani obalovat jakýkoli model
- měřit skutečnou spotřebu tokenů nebo náklady
- směrovat požadavky dynamicky
- spouštět autonomní agenty nebo je orchestrovat
- sledovat cokoli na pozadí
- poskytují server, databázi, webové UI, démona, frontu nebo hostovanou službu
- zhušťovat, shrnovat nebo ukládat přepisy konverzací
- definovat agenty, persony, role, úrovně nebo registr pojmenovaných AI workerů
Poslední položka je záměrná. Studovaný materiál ukázal, že dozorová vrstva, která přidává podstatná jména, se stane tím, na co měla dohlížet.
Základní mentální model
flowchart TD human["Human / Organisation"] --> mj["MAJORDOMUS<br>policy · state · verification"] mj --> wa["Worker A<br>(Claude Code)"] mj --> wb["Worker B<br>(Codex)"] mj --> wc["Worker C<br>(Gemini, Cursor, local ...)"] wa & wb & wc -->|"an orchestrator (bb) runs any of them;<br>the agent stays the worker"| out["Verified, accepted outcomes"]
Majordomus sedí mezi člověkem a pracovníky. Drží jednu kanonickou politiku, promítá ji do jakéhokoli formátu instrukcí, který každý pracovník čte, drží trvalý stav mimo každou konverzaci a odmítá označit práci za dokončenou, dokud není splněn kontrakt dokončení.
Každou částí návrhu procházejí dva podpůrné principy:
- Git je autorita; všechno ostatní je pomůcka. Pole identity na jakémkoli záznamu se počítají z gitu, nikdy nepíší. Worker si vymyslí název větve.
git rev-parsene. - Čísla v próze se počítají, nebo jsou zakázána. Počet zapsaný do vždy načítaného souboru zastará během dnů. Majordomus píše příkaz, který číslo vytvoří, nikdy číslo.
Odpovědnosti
Politika
Udržovat jednu kanonickou, verzovanou provozní politiku pro práci AI v repozitáři. Zjistit, kdy se politika a její projekce rozešly. Zjistit, kdy politika deklaruje vynucování, které se nepřeloží na nic, co běží.
Kontext
Definovat minimální dostatečný kontext úlohy jako malou sadu pojmenovaných přepínačů, ne jako korpus. Držet vždy načtený materiál pod pevným rozpočtem s kontrolou, která selhává. Zajistit, že cokoli výslovně nevymezeného se počítá jako vždy načtené, protože tím také je.
Stav
Udržujte trvalý stav úlohy v malém počtu typovaných souborů mimo jakoukoli konverzaci. Každý záznam nese stav gitu, ve kterém byl zapsán, takže zastaralost se počítá při čtení, ne důvěřuje se jí při zápisu.
Sledovat
Deterministicky zkontrolovat stav, politiku a projekce kvůli driftu. Hlásit jen to, co lze prokázat. Každý nález nese příkaz, který jej reprodukuje.
Koordinace
Reprezentovat, kdo na čem pracuje. Normalizovat nároky na rozsah tak, aby detekce překryvu pracovala s cestami, nikoli s řetězci. Porovnávat nároky s tím, čeho se skutečně dotklo, protože každá kolize v důkazech byla pro kontrolu jen podle deklarace neviditelná.
Rozpočet
Oddělte úsilí uvažování, upovídanost výstupu, strategii kontextu a schopnosti modelu jako nezávislé osy. Sdružte je do pojmenovaných profilů. Úsilí zaznamenávejte jako odchylku od výchozí hodnoty, nikdy jako absolutní hodnotu. Prezentaci (strohý strojový výstup, technický detail, shrnutí pro vedení) berte jako poslední vrstvu volenou profilem, ne jako vlastnost samotné práce. Netvrďte, že spotřebu měříte, dokud ji neměříte.
Ověření
Definovat, co znamená „hotovo“, dřív než práce začne, jako kontrolní seznam, který vyhodnotí příkaz finish. Rozlišit důkazy, které vytvořil worker, od důkazů, které spočítal Majordomus.
Předávka
Přenášejte trvalý stav, ne přepisy. Zapisujte předávky jen připojováním, atomicky, bez jejich stagingu. Rozřešujte je v další relaci podle rozsahu, nikdy ne jen podle novosti.
Údržba
Deterministicky přegenerovat projekce poskytovatelů z kanonické politiky. Označit razítkem, co bylo vygenerováno, aby ruční úprava nebo zastaralá projekce byla odhalitelná jedním příkazem.
Ukončení
Vědět, kdy má pracovník přestat: když je splněna smlouva o dokončení, když úloha čeká na člověka nebo když relace překročila svůj deklarovaný rozsah.
Kanonický model politiky
Jeden soubor. Malý. Čitelný pro člověka. Nezávislý na poskytovateli.
# .ai/repo/policy.yaml
version: 1
context:
always_loaded_budget_lines: 150
strategy: minimum-sufficient
transcript_is_state: false
profiles:
default: implementation
verification:
required_for_changes: true
finish_requires:
- tests_run
- state_updated
- no_open_blockers
handover:
required_sections: [objective, current_state, next_action]
enforcement:
- name: finish-contract
kind: command
path: bin/majordomus
args: [finish, --check]
wired_by: git-hook:pre-push
- name: instruction-budget
kind: command
path: bin/majordomus
args: [doctor]
wired_by: git-hook:pre-commit
projections:
- provider: claude-code
target: CLAUDE.md
- provider: codex
target: AGENTS.md
- provider: gemini
target: GEMINI.md
Návrhová pravidla tohoto schématu:
- Každé pole se zapisuje i čte. Důkazy obsahovaly schémata se čtyřmi trvale null poli převzatými z dřívějšího systému. Pole, které nic nečte, se odstraní.
- Blok
enforcementjmenuje artefakty podle cesty a jmenuje, co je zapojuje. To je reprezentace, kterou zdrojový materiál udělal správně a nikdy neověřil. Majordomus ji ověřuje: každá položka musí existovat, být spustitelná a dosažitelná z pojmenovaného dispečera, jinakdoctorselže. - Neznámé klíče jsou chyby. Překlep musí selhat nahlas. Dva agenti ve zdrojovém materiálu znovu vstoupili do lintovaného katalogu nesoucího čtyři vymyšlené klíče; nic je nezastavilo.
- Žádná schopnost providera nežije v kanonické vrstvě. Názvy modelů, udělení nástrojů a příznaky dodavatele patří do projekcí.
Model úlohy a model epizody
Jsou to dva modely a tento dokument je do 2026-09-11 nazýval jedním. Ten zmatek není akademický: to, že druhý závisel na prvním, způsobilo, že obyčejná dokončená úloha tiše vypnula kontinuitu pro každou následující konverzaci po šest dní, zatímco každá diagnostika hlásila zdraví; ADR 0052, „Životní cyklus relace patří epizodě, ne úloze“, zaznamenává audit a rozhodnutí.
Úloha je jednotka zamýšlené práce, kterou člověk otevře a uzavře.
flowchart TD st["majordomus start <task>"] --> sc["scope declared (paths)"] sc --> claim["claim normalised, overlap reported"] sc --> pf["profile selected"] pf --> fixed["effort / verbosity / context /<br>verification fixed"] pf --> worker["worker executes<br>(Majordomus is not involved)"] worker --> ck["majordomus check"] ck --> report["state consistent? scope respected? blockers?"] ck -->|"incomplete"| cont["continue, or majordomus handover"] ck --> fin["majordomus finish"] fin --> contract["finish contract evaluated;<br>refuses if unmet"]
Odkazuje z tohoto diagramu (4)
Úloha je omezena start a buď finish, nebo handover. Žádný stav „stále otevřeno od úterý“, který by Majordomus uznal za zdravý, neexistuje; watch hlásí každý záznam úlohy, jehož poslední aktualizace předchází deklarovaný interval checkpointu.
Epizoda je hranice konverzace poskytovatele. Začíná, když se klient připojí, a končí, když se odpojí, ať už někdo deklaroval úlohu, nebo ne, a ať byla poslední deklarovaná úloha dokončena před týdnem.
flowchart TD ss["provider fires SessionStart"] kept["session start --if-open keep<br>(keyed by the provider session,<br>not the checkout)<br>briefing to stdout"] work["work happens, every command stamping its own<br>episode id onto its ledger line"] pc["provider fires PreCompact"] cp["checkpoint --derive<br>(a checkpoint is an artefact of the episode;<br>no task is required)"] se["provider fires SessionEnd"] ho["handover, then session close<br>(the envelope's references computed from the ledger)"] ss --> kept ss --> work work --> pc pc --> cp pc --> se se --> ho
task != session v obou směrech: úloha rozložená do dvou sezení je jmenována oběma epizodami a epizoda, která se dotkne tří úloh, jmenuje všechny tři. Výsledek úlohy může změnit, co záznam pokračování říká; nikdy nesmí rozhodnout, zda se zapíše.
Majordomus se do runtimu workera zaháčkuje, kde poskytovatel nabízí hooky ke spuštění. majordomus capture install zapíše shimy a jmenuje položky konfigurace, které za vás nepřepíše; které události adaptér poskytovatele řídí, je deklarováno v share/providers.yaml a hlášeno lifecycle.providers. Poskytovatel bez adaptéru ztrácí automatizaci a nic z modelu — každý příkaz níže je beze změny a jejich spouštění je opět otázkou zapamatování.
CONTINUITY.md nese celou cestu, od entry přes epizodu až po sledovaný záznam a budoucí obnovení, a čtení, které umožňuje člověku ji sledovat.
Model kontextu
Tři úrovně, každá s deklarovaným spouštěčem:
| Úroveň | Co | Načteno když | Rozpočet |
|---|---|---|---|
| Vždy | promítnutý soubor instrukcí | každá relace | pevný limit řádků, selhávající kontrola |
| S rozsahem | pravidla vázaná na globy cest | odpovídající soubor je ve hře | krátký; musí deklarovat paths |
| Na požádání | postupy s popisem směrování | popis odpovídá úloze | žádné, ale musí být dosažitelné |
Dvě pravidla z důkazů, která nejsou zřejmá a jsou nosná:
- Artefakt bez deklarovaného spouštěče je vždy načtený kontext a počítá se proti rozpočtu. Nejostřejší jednotlivý řádek zdrojového linteru byl přesně tento.
- Popis směrování musí rozlišovat. „Reviews supervision trees, process ownership and restart semantics“ se směruje. „An elite agent for high-quality missions“ ne, a stojí tokeny při každém rozhodování, zda ho načíst.
Složení kontextu pro úlohu je vektor pojmenovaných booleovských přepínačů zvolených profilem, ne ručně sestavený korpus. Majordomus hlásí, co vyloučil a proč, protože nedostatečně naplněný kontext se ladí ze seznamu vyloučení.
Model trvalého stavu
.ai/
README.md # the protocol, readable without the tool
manifest.yaml # the section registry and the format version, ai-repository/v1
repo/ # tracked: the canonical context every checkout shares
policy.yaml
profiles/
routine.yaml
implementation.yaml
debugging.yaml
deep-work.yaml
rules/
vendor/majordomus/ # the pinned baseline, byte for byte the package the tool ships
project/ # rules this repository wrote
prompts/ workflows/ skills/ knowledge/ adrs/ project/
local/ # ignored: this checkout's own, never normative, never shared
state/
current.yaml # the one active task, or absent
decisions.md # append-only, dated
open-questions.md # things blocked on a human
handovers/ # append-only, one file per handover
checkpoints/ # append-only, one file per checkpoint
sessions/ # closed session envelopes
ledger.jsonl # append-only events, retention-capped
cache/ prompts/ session-contexts/
Rules:
- Dvě poloviny, jedna hranice.
repo/je celý sdílený kontrakt; čerstvý klon obsahuje jen ten.local/je provozní stav: nikdy necestuje přes git, nikdy se implicitně nenačítá do kontextu modelu a nic nepřebíjí.doctorhranici dokazuje: manifest se vyřeší, každá sekce, kterou jmenuje, existuje,local/je ignorováno a nic pod ním není sledováno. - Identita se počítá.
repository_id,branch,head,working_treeachanged_filesna jakémkoli záznamu pocházejí z gitu v okamžiku zápisu. Promítnuté instrukce workeru zakazují je psát. - Stav se čte s popiskem divergence. Při čtení Majordomus porovná zaznamenaný
headse současnýmHEADpřes merge-base a záznam označíexact,advanced,divergednebodifferent_context. Zastaralý stav se detekuje a pojmenuje, nikdy se mu tiše nevěří. - Ve v0.1 žádný výčet stavů, pokud není validován. Zdrojový materiál obsahoval čtyři vzájemně nekonzistentní, nevynucované slovníky stavů. Kde se zaznamenává stav životního cyklu, jeho hodnoty jsou uzavřené a kontrolované.
- Úložiště jen pro připojování mají strop retence. Jeden repozitář nashromáždil 10 GB snímků metrik, které nikdy nikdo nečetl.
ledger.jsonlahandovers/deklarují strop adoctorhlásí, když je překročen. - Každý adresář vrstvy má producenta.
local/session-contexts/vytvořilinita nic jej neplnilo po celou dobu existence rozvržení, což se čte jako funkce, která nefunguje. Nyní drží jeden dokument na epizodu, zapsaný, kdyžsession startzmrazí kontext, který builder vyřešil, a doplněný při uzavření epizody. Adresář, který kostra vytvoří a žádný příkaz do něj nezapisuje, je vadou téhož druhu jako tvrzení bez testu. - Záznamy Majordomus nikdy nestaguje ani necommituje. Zapisovatel atomicky vytvoří jeden nový soubor pod
local/a vypíše jeho cestu. Záznam se k jinému checkoutu dostane jen tím, že se tam přenese — předávka jej jmenuje, git jej nepřesune. - Přepisy se nikdy neukládají. Předávka má povinné sekce (
objective,current_state,next_action) a při zápisu je odmítnuta, je-li kterákoli prázdná.
Model paralelní práce
Rozsah: jeden izolovaný pracovní strom na každého souběžného autonomního zapisovatele. S jedním agentem nebo s agenty, kteří běží přísně po sobě, jsou správné obyčejné větve a koordinační mechanismus je režie. README to říká, místo aby to přeceňovalo.
Mechanism:
startbere rozsah: seznam cest. Claimy se normalizují v okamžiku nárokování: odstraní se koncová lomítka a obsažení se testuje v obou směrech. Všichni spotřebitelé používají jednu porovnávací funkci.- Nárok není volitelný. Pokud lze krok přeskočit, přeskočí se; důkazy ukázaly 10 z 18 aktivních worktree s prázdnými nároky. Nárok je součástí
start. - Překryv se hlásí podle dotčených souborů, vypočtených z
git statusagit log <base>..HEAD --name-onlyv každém worktree, nikoli jen podle deklarací. - Drobný sidecar JSON zaznamenává
id,path,branch,base_commit,created_at,owner,status,claimed_paths. Osm polí. Nic, co by bylo null v každém živém záznamu zdrojového systému. git worktree listje pravda. Vedlejší soubor lze jedním příkazem znovu sestavit z gitu.- Majordomus vydává příkazy ke sloučení. Slučování nevlastní. Zdrojová implementace tiše zahazovala nepushnuté commity na cílové větvi.
ownerje řetězec ve volné formě. Uzavřený enum byl již porušen v živém registru, který jej definoval.
Model ověřování
„Hotovo“ je smlouva vyhodnocená finish, ne slovo, které pracovník napíše.
done =
scope respected (touched files within claimed paths)
+ verification command ran (exit 0, recorded with timestamp and command)
+ state updated (current.yaml reflects completion)
+ no open blockers (open-questions.md has no unresolved entry for this task)
+ handover or completion note present with required sections
Každá poznámka o dokončení a každý záznam v knize nese typovaný výsledek z uzavřeného, validovaného slovníku:
completed objective satisfied and the finish contract met
partial some of the objective delivered; remainder named in next_action
blocked cannot proceed without a human decision; recorded in open-questions
no_match the work was done and the thing sought does not exist
failed the work could not be done; the reason is recorded
no_match a failed vypadají v přepisu podobně („nic jsme nenašli“ versus „nemohli jsme hledat“). Provozně jsou to různá fakta a dohled, který je nerozliší, nemůže rozhodnout, zda zopakovat, eskalovat, nebo přijmout. Próza nikdy nenahrazuje typované pole.
Rozlišení, která důkazy učinily nutnými:
- Zaručeno versus pozorováno. Kontrola je buď deterministická a blokující, nebo je to zpráva s příkazem k reprodukci. Třída pravidla,
blockingneboadvisory, se čte při dispatchi a směruje zjištění; neexistuje třetí třída, žádný žebříček závažnosti a žádný override, protože každá odstupňovaná úroveň ve zdrojovém materiálu do měsíců zdegenerovala v dekoraci. Poradní pravidlo je takové, které nástroj hlásí a nezastavuje se na něm, a říká to; nikdy se nepopisuje jako vynucování. - Trailer dokazuje autorství řetězce, nikdy že kontrola proběhla. Majordomus nikdy nepovažuje značku ve zprávě commitu za důkaz. Důkaz je záznam v
ledger.jsonlzapsaný samotnou kontrolou. - Návratové kódy jsou smlouva.
0projde; odlišné nenulové kódy pro nesplněnou smlouvu, chybějící artefakt, vnitřní chybu a odmítnuté přepsání. Hook, který obdrží jakýkoli nenulový kód a pokračuje, porušuje smlouvu adoctorskenuje skripty hooků na|| truea|| exit 0kolem volání Majordomus. - Při nejednoznačnosti selhat. Když není jasné, zda kontrola prošla, selhala.
- Stávající špína se ratchetuje, nová se blokuje. Pro každou spočitatelnou metriku drží soubor základní linie jedno celé číslo. Nárůst selže; pokles nebo beze změny projde; chybějící základní linie varuje a projde, protože selhání bez základní linie učí tým kontroly obcházet. Jednorázové katastrofické třídy (tajné klíče, vzdálené spuštění kódu) se nikdy neratchetují; jsou na tvrdé nule.
Model projekce providerů
flowchart TD policy[".ai/repo/policy.yaml"] -->|"majordomus update"| claude["CLAUDE.md"] policy -->|"majordomus update"| agents["AGENTS.md"] policy -->|"majordomus update"| gemini["GEMINI.md"] policy -->|"majordomus update"| extra["(+ .cursor/rules, generic)"]
- Projekce se generují, ručně se neupravují. Každá nese hlavičku, která uvádí, že je generována, a pojmenovává příkaz, který ji znovu vygeneruje.
- každá projekce nese razítko: hash politiky, z níž byla vykreslena, a hash vlastního obsahu, na prvním řádku nebo ve značce začátku své oblasti;
doctorselže u projekce, jejíž obsah se liší od jejího razítka, awatchhlásí projekci, jejíž označený hash politiky není politikou na disku (zastaralá). - Projekce je tenký bootstrap, ne sbírka pravidel. Říká pracovníkovi, kde žije kontext repozitáře —
README.md, pak.ai/README.mda jeho protokol vyhledávání — jmenuje výchozí profil a workflow životního cyklu úlohy a nenese žádné vlastní pravidlo. Pravidla čte z.ai/repo/rules/každý pracovník stejně, takže pravidlo, které existuje pro jednoho poskytovatele a pro jiného ne, nemůže nastat;doctorselže u projekce, která nese vlastní korpus pravidel (tabulku profilů, odrážky pravidel, nadpis pravidel, životního cyklu nebo kontraktu dokončení), u té, jejíž generovaný obsah jmenuje id pravidla, které účinná množina pravidel neposkytuje (varování místo toho, když ho zapsala starší šablona amajordomus updateby ho odstranil), a uREADME.md, který nejmenujeAGENTS.md. - Adaptéry překládají tento bootstrap do formátu providera a nic víc. Šablony se dodávají s nástrojem; repozitář, který potřebuje jiný adaptér, jeden přepíše pod
.ai/repo/providers/, ve stejném tenkém tvaru. Generický adaptér vyrobí prostý soubor Markdown pro providery bez známé konvence.
Model CLI
Chování jednotlivých příkazů, kontrakt návratových kódů a cílový výstup jsou specifikovány v CLI.md; formáty souborů v SCHEMAS.md. Tato sekce uvádí tvar.
Jeden spustitelný soubor, majordomus, přenositelný POSIX shell ve v0.1, s malou sadou sémanticky odlišných podpříkazů:
| Příkaz | Odpovědi | Zapisuje |
|---|---|---|
init | vytvořit vrstvu .ai/ v tomto repozitáři | ano, odmítne přepsat; --extend doplní, co chybí |
migrate | přesunout data projektu před .ai z .majordomus/ do .ai/, s náhledem a ověřenou zálohou | přesuny gitu, záloha, index |
rules | efektivní sada pravidel, vyřešená: vendorovaná základna plus vlastní pravidla repozitáře | jen vendor update |
doctor | je Majordomus sám zdravý a skutečně zde zapojený? | ne |
start <task> | zahájit úlohu s rozsahem a profilem | state/current.yaml, tvrzení |
check | je aktuální úloha konzistentní s politikou, rozsahem a stavem? --explain vypíše efektivní sloučenou politiku a profil | ne |
watch | co se rozešlo: stav, politika, projekce, retence? | ne |
update | znovu vygenerovat projekce z politiky | projections |
handover | zapsat záznam pokračování jen pro přidávání | jeden nový soubor |
finish | vyhodnotí kontrakt finish; pokud není splněn, odmítne | state/current.yaml, ledger |
Rules:
- Každý příkaz má zdokumentované chování, bezpečné výchozí hodnoty, použitelnou chybovou zprávu a behaviorální testy v jednorázovém repozitáři.
doctor,checkawatchjsou jen pro čtení a bez vedlejších účinků.- Žádný příkaz neprovádí rekurzivní mazání, tiché přepsání, síťový přístup ani vyhodnocení generovaného textu.
doctorběží proti samotné instalaci Majordomus před čímkoli jiným. Linter proti rozrůstání o 500 řádcích ve zdrojovém materiálu zchátral za devatenáct dní, protože jej nic nespouštělo proti jeho vlastnímu povrchu.
Model Watch / Doctor
doctor odpovídá na „je dozorová vrstva tady skutečná?“ Deterministické kontroly, všechny blokující:
policy.yamlse parsuje; žádné neznámé klíče; verze podporována.- Každá položka
enforcement: cesta existuje, je spustitelná a je dosažitelná z pojmenovaného dispatcheruwired_by(soubor hooku gitu existuje, je spustitelný a volá cestu). Deklarováno, ale nezapojeno je výchozí konečný stav; tato kontrola je produkt. - Každý cíl
projectionsexistuje, nese razítko a odpovídá mu. - Vždy načítaná projekce se vejde do
always_loaded_budget_lines. - Každá cesta relativní k repozitáři odkazovaná z projekce se vyřeší.
- Žádné pevně zapsané počty ve vždy načítané projekci.
- Retenční stropy na
ledger.jsonlahandovers/nepřekročeny. - Zaznamenané sondy prostředí: verze shellu, dostupnost
git,jq,yqnebo ekvivalentů; zpráva uvádí, které volitelné kontroly byly přeskočeny pro nedostatek nástroje.
watch odpovídá na otázku „co se v práci rozjelo?“ Deterministicky, hlášeno s příkazy pro reprodukci, záměrně neblokující, protože se týkají rozpracované práce:
| Drift | Jak zjištěno |
|---|---|
| Drift politiky | razítko projekce jmenuje hash politiky, který není politikou na disku |
| Drift projekce | obsah projekce se liší od hashe, který jmenuje její razítko |
| Drift stavu | stav current.yaml odporuje registru, nebo štítek head je diverged |
| Drift rozsahu | dotčené soubory mimo nárokované cesty |
| Drift předávky | poslední předávce chybí povinná sekce, nebo je starší než current.yaml |
| Drift ověření | current.yaml označeno jako dokončené bez záznamu v knize od finish |
| Zastaralost | current.yaml starší než interval checkpointů profilu |
| Retence | úložiště jen pro připojování nad limitem |
Každé zjištění se vydává jako <category> <path-or-id> <reproduce-command>. Zjištění bez příkazu pro reprodukci je chyba v Majordomus.
Bezpečnost a soukromí
- Local-first. Žádná síťová volání. Žádná telemetrie. Žádný sběr přihlašovacích údajů.
- Žádné
eval, žádné provádění textu, který pochází od pracovníka nebo modelu. - Každý zápis jde na cestu pod
.ai/nebo na deklarovaný cíl projekce. Argumenty cest se kanonizují a odmítnou se, pokud unikají z kořene repozitáře. - Přepsání vyžaduje explicitní příznak; výchozí je odmítnutí se zprávou pojmenovávající existující soubor.
- Soubory předávek se vytvářejí s režimem
0600. - Autorizační vstupy každého přepsání odvozuje Majordomus nebo se potvrzují proti skutečnému objektu gitu. Proměnné prostředí z okolí nikdy nezruší pravidlo. Validátor přepsání ve zdrojovém materiálu byl poražen právě touto třídou vstupu a jeho postmortem je základem tohoto pravidla.
- Bootstrap do existujícího repozitáře používá sebevypínací poklopec: uplatní se, jen dokud ledger ještě neexistuje, zaznamená událost a poté je mrtvý.
Čistá hranice extrakce
Prismatic Majordomus nese jméno Prismatic. Z Prismatic Platform nenese nic jiného.
Zcela vyloučeno: doménová inteligence, vyšetřovací workflow, adaptéry OSINT, aparát inference, sémantický a doménový grafový aparát, společnosti agentů, interní názvy komponent, interní cesty, názvy hostitelů, materiály zákazníků nebo případů, obsah auditů, tajemství a slovník pilířů a doktríny zdrojového prostředí.
Jeden řádek v tom seznamu dříve zněl „sémantika grafu“ bez upřesnění a byl příliš hrubý k použití. Zakazoval dvě různé věci najednou: systém, který odvozuje, co artefakty znamenají, a tabulku odkazů, které artefakty už samy uvádějí. První zůstává venku. Druhé je to, čím je knowledge. Hranice je proto vyslovena jako test, který čtenář může na návrh uplatnit:
Majordomus neimportuje doménu, inferenci, inteligenci ani sémantický graf Prismatic Platform. Smí udržovat obecný deterministický graf odkazů a původu odvozený z artefaktů vlastního repozitáře, ve kterém každá hrana pojmenovává soubor, v němž byla pozorována, a žádná hrana se neodvozuje z prózy.
Test je provenience. Hrana, která dokáže jmenovat řádek, který ji uvádí, je reference; hrana, která existuje, protože něco vypadalo příbuzně, je sémantické tvrzení, a sémantická tvrzení jsou mimo hranici bez ohledu na to, jak se počítají. Podobnost, embedding, shlukování a automatická taxonomie jsou vyloučeny toutéž větou, protože žádné z nich nedokáže jmenovat řádek.
Směr závislosti je jednosměrný. Prismatic Platform může Majordomus přijmout. Majordomus nikdy nic neimportuje z Prismatic Platform, nelinkuje na ni ani ji nevyžaduje. Žádný kód se nesdílí.
Co přešlo přes hranici, jen abstrakcí a odvozením znovu:
- pozorování, že se deklarace vynucování nikdy nesbíhají
- identita odvozená z gitu a označování divergence při čtení pro záznamy stavu
- append-only, atomické, nikdy neindexované předávky s povinnými sekcemi
- vždy načtený rozpočet s selhávající kontrolou a integritou ukazatelů
- oddělení modelu, úsilí, upovídanosti a kontextu jako nezávislých os
- normalizace nároků a hlášení překryvu dotčených souborů
- ratchet počtu s pravidlem chybějící základní linie a výjimkou tvrdé nuly
- kontrakt exit kódů a zákaz „varovat a pokračovat“
- sebevypínací bootstrap poklopec
- pravidlo, že čísla v próze se počítají nebo zakazují
Druhý průchod stejným materiálem, provedený při návrhu vrstev relací a znalostí, přidal tyto:
- identita odvozená ze stabilního zdrojového faktu a hashe obsahu používané jen k detekci změny — nikdy naopak
- provenience jako povinná vlastnost každé hrany, takže relaci, kterou nikdo nedokáže vystopovat k řádku, nelze vůbec vytvořit
- klasifikace ze struktury a deklarovaných metadat, nikdy z prózy, s
unknownjako plnohodnotnou odpovědí místo věrohodné výchozí hodnoty - blokovat jen vady, které způsobil sám běh, a ostatní hlásit, protože trvale červený report nečte nikdo
- rozlišení chybějícího artefaktu, což je legitimní první běh, od poškozeného, který musí selhat nahlas, ne být brán jako chybějící
- seřazený, deduplikovaný generovaný artefakt, aby bylo v diffu vidět, co rebuild změnil
- promítnout druh záznamu s vysokým objemem a nízkou trvanlivostí jako jeden index, ne po jednom uzlu
Úplná kniha druhého průchodu, včetně toho, co bylo odmítnuto a proč, je v EXTRACTION_REPORT.md, sekce 11.
MVP
v0.1 dodává přesně:
policy.yamls výše uvedeným schématem a validátorem, který odmítá neznámé klíče- čtyři profily:
routine,implementation,debugging,deep-work, z nichž každý nezávisle nastavuje úsilí, upovídanost, přepínače kontextu, požadavky na ověření a výstupní kontrakt (která pole musí poznámka o dokončení nést) - šablony stavu: aktuální úloha, rozhodnutí, otevřené otázky, předávka, poznámka o dokončení
- podpříkazy, které
majordomus --helpvypisuje, v přenosném shellu, s behaviorálními testy doctorspouští každou doktrínu, kterou efektivní množina pravidel deklaruje, včetně sesouhlasení zapojení vynucování a integrity vendorovaného balíkuwatchs výše uvedenou tabulkou driftuupdatevytváří projekci, kterou politika deklaruje pro každého poskytovatele, kterého distribuce dodává (docs/generated/providers.md), každou označenou její proveniencí- README, které se stejnou důležitostí uvádí, co v0.1 zaručuje, co jen pozoruje a co odmítá dělat
Kritérium úspěchu: vývojář, který projekt nikdy neviděl, přečte README, ve scratch repozitáři spustí init, start, check, handover a finish a přibližně za deset minut pochopí, kde žije stav a co znamená „hotovo“.
Odložené funkce
Odloženo, s důvodem:
- Runtime hooky do nástrojů pracovníků (pre-tool a post-tool omezování velikosti čtení, velikosti výstupu, počtu subagentů). Mechanismus je prokázaný a hodnotný, ale je specifický pro poskytovatele a jediná zkoumaná implementace byla během dnů vrácena, protože její limity byly globální konstanty místo odvozených z úlohy. v0.2, jako volitelné adaptéry s limity odvozenými z profilu.
- Měření tokenů a nákladů. Nic ve v0.1 jej neumí měřit poctivě. Každé pole
estimated_je tak označeno a vyloučeno z vynucování. - Doporučení směrování. Vyžadují nejdřív měření.
- Hrany závislostí mezi úlohami. Žádný skutečný případ užití v důkazech graf neospravedlnil. Odloženo, dokud některý ne.
- Politika napříč repozitáři nebo organizací. Mimo rozsah nástroje s prioritou lokálnosti.
- Jakýkoli daemon, plánovač nebo monitor na pozadí. Povrch MCP byl zde odložen spolu s nimi a později přidán jako něco jiného: proces stdio pouze pro čtení, který klient spouští a který s ním zaniká, v
apps/majordomus-cli/, rozhodnutý v.ai/repo/adrs/0001-rust-cli-and-stdio-mcp.mda popsaný vMCP.md.
Cesty komerčního rozšíření
Uvedeno pro orientaci, ne jako závazek:
| Úroveň | Přidává |
|---|---|
| Komunita | vše v tomto dokumentu, open source |
| Pro | runtimové adaptéry s limity odvozenými z profilu; bohatší sada projekcí |
| Tým | sdílená politika napříč repozitáři; hlášení překryvů napříč pracovníky a stroji |
| Enterprise | audit exportu, schvalovací workflow, vynucování rozpočtu, jakmile se měří útrata |
| Doporučení | audit workflow stávající AI-asistované inženýrské praxe, před a po |
Trvalým přínosem nejsou soubory politik. Je to případná smyčka od politiky přes pozorovaná provedení a výsledky zpět k upřesnění politiky. v0.1 poctivě staví polovinu politiky a stavu této smyčky a polovinu měření výslovně nechává nepostavenou.
Záměrně chybí
Publikováno, aby čtenáři viděli, co bylo zamítnuto, a nemysleli si, že se na to zapomnělo:
- žádní agenti, persony, role, úrovně ani registry pojmenovaných workerů
- žádné minimální rozvětvení ani minimální počet agentů
- žádná poradní úroveň, která se sama popisuje jako vynucování
- žádné počty zapsané v žádném souboru, který worker načítá
- žádné neomezené úložiště jen pro připojování
- žádný slovník stavů, který by nebyl validován
- žádné přejmenování se nepřijímá jako oprava
- žádný nález bez reprodukčního příkazu
- žádné vlastní hlášení se nedůvěřuje bez nezávislé kontroly