Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Prismatic Majordomus

zakládající specifikace: problém, teze, modely, hranice, co záměrně chybí

Vykresleno z docs/DESIGN.md — tentýž Markdown, který ukazuje GitHub.

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:

  1. 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-parse ne.
  2. Čí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 enforcement jmenuje 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, jinak doctor selž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 &lt;task&gt;"] --> 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"]

Ú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ňCoNačteno kdyžRozpočet
Vždypromítnutý soubor instrukcíkaždá relacepevný limit řádků, selhávající kontrola
S rozsahempravidla vázaná na globy cestodpovídající soubor je ve hřekrá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í. doctor hranici 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_tree a changed_files na 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ý head se současným HEAD přes merge-base a záznam označí exact, advanced, diverged nebo different_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.jsonl a handovers/ deklarují strop a doctor hlásí, když je překročen.
  • Každý adresář vrstvy má producenta. local/session-contexts/ vytvořil init a 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 start zmrazí 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:

  • start bere 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 status a git log <base>..HEAD --name-only v 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 list je 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.
  • owner je ř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, blocking nebo advisory, 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.jsonl zapsaný samotnou kontrolou.
  • Návratové kódy jsou smlouva. 0 projde; 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 a doctor skenuje skripty hooků na || true a || exit 0 kolem 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; doctor selže u projekce, jejíž obsah se liší od jejího razítka, a watch hlá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.md a 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; doctor selž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 a majordomus update by ho odstranil), a u README.md, který nejmenuje AGENTS.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říkazOdpovědiZapisuje
initvytvořit vrstvu .ai/ v tomto repozitářiano, odmítne přepsat; --extend doplní, co chybí
migratepřesunout data projektu před .ai z .majordomus/ do .ai/, s náhledem a ověřenou zálohoupřesuny gitu, záloha, index
rulesefektivní sada pravidel, vyřešená: vendorovaná základna plus vlastní pravidla repozitářejen vendor update
doctorje Majordomus sám zdravý a skutečně zde zapojený?ne
start <task>zahájit úlohu s rozsahem a profilemstate/current.yaml, tvrzení
checkje aktuální úloha konzistentní s politikou, rozsahem a stavem? --explain vypíše efektivní sloučenou politiku a profilne
watchco se rozešlo: stav, politika, projekce, retence?ne
updateznovu vygenerovat projekce z politikyprojections
handoverzapsat záznam pokračování jen pro přidáváníjeden nový soubor
finishvyhodnotí kontrakt finish; pokud není splněn, odmítnestate/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, check a watch jsou 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.
  • doctor běží 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í:

  1. policy.yaml se parsuje; žádné neznámé klíče; verze podporována.
  2. Každá položka enforcement: cesta existuje, je spustitelná a je dosažitelná z pojmenovaného dispatcheru wired_by (soubor hooku gitu existuje, je spustitelný a volá cestu). Deklarováno, ale nezapojeno je výchozí konečný stav; tato kontrola je produkt.
  3. Každý cíl projections existuje, nese razítko a odpovídá mu.
  4. Vždy načítaná projekce se vejde do always_loaded_budget_lines.
  5. Každá cesta relativní k repozitáři odkazovaná z projekce se vyřeší.
  6. Žádné pevně zapsané počty ve vždy načítané projekci.
  7. Retenční stropy na ledger.jsonl a handovers/ nepřekročeny.
  8. Zaznamenané sondy prostředí: verze shellu, dostupnost git, jq, yq nebo 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:

DriftJak zjištěno
Drift politikyrazítko projekce jmenuje hash politiky, který není politikou na disku
Drift projekceobsah projekce se liší od hashe, který jmenuje její razítko
Drift stavustav current.yaml odporuje registru, nebo štítek head je diverged
Drift rozsahudotčené soubory mimo nárokované cesty
Drift předávkyposlední 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
Zastaralostcurrent.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 unknown jako 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.yaml s 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 --help vypisuje, v přenosném shellu, s behaviorálními testy
  • doctor spouští každou doktrínu, kterou efektivní množina pravidel deklaruje, včetně sesouhlasení zapojení vynucování a integrity vendorovaného balíku
  • watch s výše uvedenou tabulkou driftu
  • update vytváří 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.md a popsaný v MCP.md.

Cesty komerčního rozšíření

Uvedeno pro orientaci, ne jako závazek:

ÚroveňPřidává
Komunitavše v tomto dokumentu, open source
Proruntimové adaptéry s limity odvozenými z profilu; bohatší sada projekcí
Týmsdílená politika napříč repozitáři; hlášení překryvů napříč pracovníky a stroji
Enterpriseaudit 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

Tvrzení, která tento dokument definuje

Každý odkazuje na vlastní stránku s implementací, testem a místy použití.

Prohledává názvy a popisy všech stránek, které tento web publikuje.