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.

Osobní režim: Majordomus jako nástroj jednoho člověka

osobní režim, nástroj jako nástroj jednoho člověka, po kterém nezůstane nic v gitu: pro koho je, proč je to běžná praxe, změřená cesta od osobního ke sdílenému, soubor exclude pro každý klon, soukromá politika s jednou projekcí a jedním vynucováním, objevování přes souborový systém pro server, jak do sebe jednotlivé části nástroje zapadají a co se měřilo a co ne

Vykresleno z docs/PERSONAL_MODE.md — stejný Markdown, jaký ukazuje GitHub.

Majordomus je vytvořen k tomu, aby se commitoval: polovina vrstvy .ai/repo/ cestuje s repozitářem, aby každý klon a každý pracovník četl stejná pravidla. Někdy to není na vás. Pracujete v repozitáři, který vlastní tým, chcete, aby vaše vlastní úlohy měly rozsah a smlouvu o dokončení, chcete briefing na začátku relace a UI nad vlastními záznamy, a do týmového stromu nesmíte přidat commit, řádek .gitignore ani nový soubor.

Osobní režim je název pro toto uspořádání: vrstva žije vedle kódu, jen ve vašem klonu, a repozitář zůstává bajt po bajtu tím, co tým commitnul. Organizace mají pro hardwarovou verzi tohoto slovo už léta: bring your own device. Toto je tentýž obchod o úroveň výš, bring your own discipline. Návyky a nástroj jsou vaše, repozitář a jeho pravidla organizace, a jedno druhé nemění.

Existuje pro to přepínač: majordomus init --personal a --personal u instalátoru (ADR 0145, claims/personal-layer-changes-nothing-shared.md). Přepínač říká, co dělá. Zbytek této stránky je měření, z něhož byl přepínač postaven, provedené ručně 2026-10-12 ve scratch repozitáři (jeden git init, README, jeden zdrojový soubor, jeden commit) proti released buildu toho dne, který přepínač neměl. Zůstává, protože ukazuje, čím je každý kus a proč je to běžná praxe. Každý krok říká, zda byl spuštěn. Dva spuštěny nebyly a jsou jmenovány. Kde přepínač mění níže uvedené tvrzení, tvrzení to říká.

Přepínač

majordomus init --personal
majordomus update
majordomus doctor

init --personal vytvoří vrstvu, kterou vytvoří obyčejné init, zakryje ji ve vyznačeném bloku souboru exclude gitu pro daný klon a skončí exitem 10, pokud git status po něm nečte totéž co předtím. Co dělá, co ručně vytvořené uspořádání níže nedělalo:

Ručně, nížeS přepínačem
init zapíše dva řádky do .gitignore, obnovené pomocí git checkout .gitignore.gitignore není zapsáno
řádky exclude jsou typované a nic je nekontrolujejeden označený blok, ověřovaný pomocí init, instalátorem a každým doctor
politika je zúžena tak, aby update zapisoval jeden soukromý souborinit --personal přizpůsobí zaseté projekce repozitáři: cíl, který projekt už sleduje, se přesune do souboru, který jeho poskytovatel čte pro jednu osobu (personal_target v share/providers.yaml, CLAUDE.local.md pro Claude Code), a poskytovatel bez takového souboru se vynechá. update pokryje každý cíl před zápisem a stále celou odmítne politiku, která jmenuje sledovaný cíl
capture install nebylo spuštěno, protože zapisuje pod .claude/pokrývá to, co zapisuje, stejným způsobem
commit a push záznamu relace jsou v politice vypnutypod osobní vrstvou nenastane ani jedno, ať politika říká cokoli
server potřebuje --discovery filesystem, spuštěný před klientemobjevování samo prochází pracovní strom, když vrstva není nikde sledována
doctor uchovává selhání týkající se READMEREADME projektu se nežádá, aby jmenovalo AGENTS.md
převod znamená smazat řádky exclude a init --extendmajordomus init --extend --shared

Hook si stále přidáváte sami a to, co politika organizace říká o nástrojích, je stále věcí organizace. Kam ho přidat, určuje git a init to vypíše: pod .git/hooks/ se ty dva řádky vloží přímo. Tam, kde core.hooksPath ukazuje na adresář, který projekt sleduje, je hook volaný gitem hookem projektu; dispečer, který spouští <hook>.d/, nechává místo pro váš vlastní soubor <hook>.d/majordomus-personal, který init --personal pokrývá ještě před jeho vznikem, a sledovaný hook bez takového adresáře nemá žádné místo pro váš vlastní soubor, což init oznámí místo toho, aby radil upravit sdílený soubor.

K čemu slouží

Uspořádání je nenarušující v přesném smyslu: diff repozitáře je prázdný, nikdo nic neposuzuje, žádný checkout kolegy se nechová jinak, CI běží to, co běželo dřív, a odstranění je smazání adresáře. Proto je použitelné v situacích níže, kde běžné zavedení není dostupné nebo ještě není zasloužené.

SituaceCo z toho máte
Vyzkoušet to dřív, než to navrhnete. Myslíte si, že by to týmu prospělo, a nemáte co ukázat.Dva týdny vlastních úloh s rozsahem, smlouvou o dokončení a předávkami na skutečném repozitáři. Navrhnete to se záznamy místo názoru.
Dodavatel nebo konzultant v repozitáři klienta. Konvence jsou klientovy a nepatří vám je rozšiřovat.Vaše vlastní disciplína cestuje s vámi: každé nasazení začíná briefingem a končí předávkou a strom klienta je takový, jaký jste jej našli.
Audit, revize nebo due diligence. Zadání je číst a měnit repozitář je mimo meze.Nálezy, rozhodnutí a otevřené otázky jako typované záznamy, každý vázaný na commit, ve kterém vznikl, takže nález sám říká, kdy se kód pod ním pohnul.
Přispívání do open-source projektu. Upstream nechce soubory vašeho nástroje, a právem.Rozsah drží příspěvek u cest, kterých se týkal, a kontrakt dokončení žádá o ověřovací příkaz dřív, než otevřete pull request.
Učení se kódové základny, kterou jste nenapsali.To, co zjistíte, se zapíše jednou, jako kandidáti znalostí a rozhodnutí, a je v briefingu příští relace, místo aby se zjišťovalo znovu.
Repozitář, kde je přidání souboru žádostí o změnu. Regulovaný kód, zmrazená větev release, dodávka od dodavatele.Vrstva je vedle kódu, ne v něm, takže není co schvalovat.
Práce s AI agentem na vlastní pěst.Agent čte vaše pravidla a váš kontext z CLAUDE.local.md a rozsah úlohy odmítne změnu mimo cesty, které jste jmenovali. Instrukční soubory týmu zůstávají nedotčeny.
Stejné návyky v každém repozitáři.Jeden životní cyklus všude, ať jsou konvence jednotlivých repozitářů jakékoli.

K čemu není: k ničemu, co potřebuje, aby byla vrstva sdílená. Pravidla, jimž je tým vázán, nástěnka, na které se kolegové vidí, plán, z něhož pracuje více lidí, a důkazy, které zaznamenává CI, všechno to potřebuje commitnutou adopci v ADOPTION.md. Toto uspořádání je nástroj jedné osoby.

Tři způsoby spuštění

Osobní režimCommitnutá adopceCommitnuto, s meshem
kde vrstva žijetento klon, vyloučený z gitu.ai/repo/ v repozitářitotéž, s runtime propojenými napříč stroji
kdo čte pravidlavy a váš AI klientkaždý klon a každý workerkaždý stroj
kdo musí souhlasitnikdo, protože se pro nikoho nic neměnítým, review pull requestutým a kdokoli, komu stroje patří
co odmítá změnuváš vlastní hook pre-pushhooky a kontroly CItotéž
nástěnka peerůvaše vlastní relacekaždý pracovník repozitářepracovníci všech strojů
zálohaje na vásgitgit
opouštísmazání adresářepull requestpull request

Sloupce jsou stejně tak cesta jako volba. Osobní režim je místo, kde jednotlivec zjistí, zda se životní cyklus vyplatí; Od osobního ke sdílenému je změřená cesta od prvního sloupce ke druhému a MESH.md je třetí.

Proč je to běžná praxe

Každý mechanismus používá k tomu, k čemu byl vytvořen.

  • .git/info/exclude je vlastní odpověď gitu na „vzory specifické pro pracovní postup jedné osoby, které se nemají sdílet“. Je to zdokumentovaná alternativa k .gitignore přesně pro tento účel.
  • CLAUDE.local.md je soubor, který AI klient čte pro instrukce jedné osoby vedle instrukcí projektu.
  • Hooky pod .git/hooks/ git nikdy nesdílel; každý klon má své vlastní.
  • Osobní nastavení editoru, .envrc.local, pracovní adresář a soukromý soubor poznámek jsou stejná kategorie věcí a každý vývojář nějaké z nich už má.

Co zůstává přesně tak, jak bylo, je to, co záleží všem ostatním. Vaše commity jsou běžné commity a revidují se jako jakékoli jiné. CI je posuzuje kontrolami, které tým zvolil. Žádná kontrola týmu se neobchází, neoslabuje ani se na ni neodpovídá jeho jménem a nic neopouští stroj: Majordomus nevolá žádný model a nikam nic neposílá.

Tři věci, které uspořádání nemění a které stále dlužíte:

  • Politika nástrojů organizace. Kde rozhoduje, které nástroje smějí číst repozitář, platí to i pro nástroj, který žije jen ve vašem klonu. Soukromé neznamená povolené.
  • Politika dat AI klienta. Vrstva je lokální; klient, který ji čte, být nemusí. Pokud na tomto kódu nejsou AI nástroje povoleny, tohle je nepovoluje.
  • Poctivost ohledně vaší práce. To, co zůstává lokální, je nástroj, nikdy změna. Když se kolega zeptá, jak si držíte úlohy v pořádku, odpověď je jedna věta, a až se osvědčí, dalším krokem je navrhnout commitnuté zavedení.

Odchod

Odebrání je stejně malé jako přidání a nechá repozitář bit po bitu tak, jak byl.

rm -rf .ai CLAUDE.local.md .git/hooks/pre-push
git status --short --ignored

Pak smažte řádky, které jste přidali do .git/info/exclude. Druhá cesta ven, sdílení vrstvy, je Od osobního ke sdílenému.

Kde všechno skončí

MístoCo tam jeKdo to vidí
commitnuté souborynic nového; git status zůstává čistýtým
pracovní strom, vyloučen.ai/repo/, .ai/local/, CLAUDE.local.mdpouze tento disk
.git/info/exclude, hooks/pre-pushpouze tento klon; git jej nikdy nepushuje

.git/info/exclude má syntaxi .gitignore a žádnou z jeho viditelnosti: není to soubor pracovního stromu, takže se nikdy necommituje. Žije ve společném adresáři gitu, což znamená, že platí i pro každý linked worktree klonu.

Co Majordomus zapisuje a jak je každá část držena stranou

Co se objevíZapsalVyloučeno kýmZměřeno
adresář .ai/initřádek .ai/ v .git/info/excludeano
dva řádky připsané do .gitignoreinitgit checkout .gitignore; vyloučení .ai/ pokrývá obojíano
AGENTS.md, CLAUDE.md, GEMINI.mdupdatejedna projekce zbývá v soukromé politice, do CLAUDE.local.md, vyloučenaano
git hookyvy, ručně.git/hooks/ je ze své podstaty lokální; pre-push stačíano
soubor nastavení Claude Code a .claude/hooks/capture installvyloučit obojí; kde tým sleduje tento soubor nastavení, capture install nespouštějtene
.mcp.jsonvy, ručnězaregistrovat server MCP pro uživatele, ne pro projektne

Kroky, ručně

Takto vypadalo uspořádání, než přepínač existoval. Stále funguje a je to to, co číst, když přepínač něco odmítne a chcete vědět proč.

majordomus init
git checkout .gitignore
printf '.ai/\nCLAUDE.local.md\n' >> .git/info/exclude
git status --short

init připojí .ai/local/ a .ai/repo/**/.tmp.* do .gitignore. Obnovení souboru nic neztratí, protože řádek exclude pokrývá celý adresář. Poslední příkaz nevypisuje nic.

Politika v .ai/repo/policy.yaml je nyní jen vaše. Nechte v ní jedno vynucování a jednu projekci:

enforcement:
  - name: finish-on-push
    path: majordomus
    args: [finish, --check]
    wired_by: git-hook:pre-push

projections:
  - provider: claude-code
    target: CLAUDE.local.md
    always_loaded: true

session:
  commit_record_on_end: false
  push_record_on_end: false

Dva klíče session jsou opatření navíc. Osazená politika (share/skeleton/policy.yaml) commituje a pushuje záznam relace při uzavření epizody. Co ty s vyloučenou vrstvou dělají, nebylo změřeno, proto jsou zde vypnuté. Ze stejného důvodu continuity publish a continuity sync nejsou pro toto uspořádání: pushují ref na sdílené vzdálené úložiště, kde ho může číst každý.

doctor odmítne politiku bez položky vynucování a takovou, ve které není žádná projekce označena always_loaded, takže po jedné od každé je minimum. CLAUDE.local.md je soubor, který Claude Code čte vedle CLAUDE.md týmu, jenž zůstává, jaký je.

majordomus update
printf '#!/bin/sh\nmajordomus finish --check || exit $?\n' > .git/hooks/pre-push
chmod +x .git/hooks/pre-push

Nezapojujte doctor do pre-commit zde. V tomto uspořádání si ponechává jedno selhání, které nelze odstranit (níže), a hook, který selhává vždy, odmítne každý commit.

majordomus serve --discovery filesystem

To je krok, na kterém záleží. Objevování má výchozí hodnotu vcs: spustitelný soubor se ptá indexu gitu, které soubory existují, a vyloučená vrstva v žádném indexu není. Změřeno, výchozí hodnota čte:

index built objects=1 diagnostics=4 state=Degraded
required class 'policy' (:(glob).ai/repo/policy.yaml) discovered nothing
required class 'rule' (:(glob).ai/repo/rules/**/*.md) discovered nothing

S --discovery filesystem se tentýž strom čte jako state ok, s jeho politikou, profily, prompty a vendorovanými pravidly jako objekty, a server odpovídá na /ui a /cockpit. Spusťte jej před AI klientem: klient se připojí k serveru, který už běží, a převezme jeho volby, a ten, který spustí vlastní, převezme výchozí.

Odtud je životní cyklus úlohy obvyklý. V pokusném repozitáři check započítal jediný upravený zdrojový soubor jako uvnitř rozsahu, finish --check v hooku prošlo a git status ukázalo ten soubor a nic z vrstvy. finish také odmítlo --verify-command "true": příkaz, který nedělá nic, nic neověřuje.

Jak zapadá do zbytku nástroje

Součást nástrojeV tomto uspořádáníProč
životní cyklus úlohy: start, check, finishfunguje, změřenocheck započítalo upravený soubor dovnitř rozsahu a finish --check prošlo
rozsah úlohyfunguje, změřenogit status ukázal změnu zdroje a nic z vrstvy
briefing a kontextfunguje, změřenocontext vypsal git, úlohu a profil
checkpointy, předávky, rozhodnutífungujejsou lokálními záznamy i v commitnutém zavedení
projekce instrukcífunguje, změřenoupdate zapsalo CLAUDE.local.md a žádný jiný soubor
hook pre-pushfunguje, změřenožije pod .git/hooks/ tohoto klonu
server, /ui a Cockpitfunguje s --discovery filesystem, změřenovýchozí discovery se ptá indexu gitu
plánfunguje lokálně/cockpit/plan odpověděl
doctorjedno selhání zůstáváREADME nejmenuje AGENTS.md
MCP nástroje pro AI klientanejprve spusťte serverčtení vrstvy bylo změřeno; připojený klient ne
nástěnka peerůjen vaše vlastní relacenikdo jiný se k vašemu serveru nepřipojuje
záznamy znalostílokálníkandidáti se odvozují pro jednoho čtenáře; odvození při uzavření epizody nebylo měřeno
kniha důkazůlokálnínepodporuje žádnou záruku, kterou čte někdo jiný
Hooky relací Claude Codeneměřenocapture install zapisuje pod .claude/ v pracovním stromu
commit a push záznamu relacevypnoutdva klíče politiky výše
continuity publish a syncnepoužívatpushují ref na sdílený remote
meshnepoužívatsdílí metadata relací a claimů s dalšími stroji
Kontroly CInení co plánovatsoukromá vrstva nedeklaruje žádný model CI; CI týmu zůstává nedotčeno

Na čem každý výrok stojí

VýrokKde se rozhoduje
init zapíše .ai/ a dva řádky .gitignore a nenainstaluje žádný hooklib/init.sh, test/cases/01_init.sh, claims/local-state-ignored.md, claims/ai-layer-manifest.md
instrukční soubory jsou projekce politiky a cíl projekce je jeden řádeklib/update.sh, claims/projection-generation.md, claims/region-projection.md
dotčený soubor mimo rozsah je selhání a finish vyhodnocuje svou smlouvu řádek po řádkuclaims/scope-enforcement.md, claims/finish-contract.md
ověřovací příkaz, který nic nedělá, je odmítnutverification-integrity
nástroj shellu neprovádí žádné síťové voláníclaims/no-network.md, no-network-no-eval
osobní vrstva nemění nic sdíleného a příkaz, který to říká, to ověřujelib/common.sh, test/cases/2979_a_personal_layer_changes_nothing_shared.sh, claims/personal-layer-changes-nothing-shared.md
objevování může procházet pracovní strom místo dotazování indexuapps/majordomus-cli/src/cli.rs, MCP.md, the-server-sees-the-current-tree
co worker nikdy nečte, je deklarováno jednouclaims/scope-declared.md, SCOPE.md

Co se nevejde

  • Ručně doctor ponechá jedno selhání. Z šesti, které hlásí čerstvé zavedení, pět odpadne s výše uvedenou politikou a hookem. Zbývá bootstrap README.md — does not name AGENTS.md a jeho odstranění vyžaduje úpravu README. S přepínačem se tato kontrola na osobní vrstvu neuplatňuje.
  • Vydaný build nemá příkaz ui. Povrch /ui se servíruje; otevřete jej v prohlížeči.
  • Nic se nesdílí, takže nic není zálohováno. ADR, záznamy znalostí, záznamy relací a plán existují na jednom disku. git clean -fdx je smaže, protože -x odstraňuje vyloučené soubory a git stash -a je skrývá. Zkopírujte .ai/ jinam.
  • Pohled na tým je pohled gitu. Nástěnka ukazuje vaše vlastní relace. Co víte o kterémkoli jiném, říkají jeho větve a commity. Zda /ui čte pull requesty jiného repozitáře, nebylo změřeno.
  • Dva řádky tabulky výše nebyly spuštěny. Relační hooky Claude Code a registrace MCP mimo repozitář jsou popsány podle toho, jak jsou postaveny, ne podle běhu.

Od osobního ke sdílenému

Osobní režim splnil svůj úkol, když dokážete ukázat, co vám dal. Návrh týmu je pak pull request a sada záznamů, ne názor: úlohy, které jste spustili s rozsahem, předávky, od kterých relace začala, kolikrát finish odmítlo. Konverze byla změřena 2026-10-12 ve scratch repozitáři, jehož vrstva stále nesla osazenou politiku.

S přepínačem je to jeden příkaz, majordomus init --extend --shared: odstraní zakrytí, přidá dva řádky .gitignore, vypíše, co je nyní třeba v repozitáři commitnout, a nic necommituje. Ručně to bylo toto.

Smažte dva řádky, které jste přidali do .git/info/exclude. git status --short pak ukáže vrstvu jako jeden nesledovaný adresář. Potom:

majordomus init --extend
majordomus update
majordomus doctor

Co tam každý dělal:

KrokNaměřený výsledek
odstranění řádků excludegit status --short ukazuje ?? .ai/ a nic jiného
init --extendpřidá .ai/local/ a .ai/repo/**/.tmp.* zpět do .gitignore, a nic jiného
git add -A -njmenuje 96 cest pod .ai/ a .gitignore; žádná z nich není pod .ai/local/
updatese zaseté politikou vytvoří AGENTS.md, CLAUDE.md a GEMINI.md
doctordvě selhání, obě v zapojení: hooky pre-commit a pre-push, které jmenuje, nejsou nainstalovány

Politika, kterou jste zúžili pro osobní režim, se sama nerozšíří. Před update vraťte její bloky projections a enforcement na to, co tým chce, počínaje share/skeleton/policy.yaml; tato úprava nebyla součástí měření. Vaše vlastní záznamy pod .ai/local/ zůstávají lokální v každém uspořádání. Odtud je cesta ADOPTION.md.

Jak to říct

Nic na osobním režimu nevyžaduje pečlivou odpověď. Co potřebuje každý tazatel, je krátké a rozhoduje se to někde, kde se to dá přečíst.

Kdo se ptáCo platíKde se rozhoduje
kolegamoje úlohy, jejich rozsah a moje předávky jsou v lokálním adresáři, který git ignoruje; nic z toho není v repozitářigit status --short --ignored v mém klonu
vedoucí týmurepozitář, jeho recenze a jeho CI jsou přesně takové, jaké byly; pokud se ukáže jako užitečné, navrhnu to jako pull requestOd osobního ke sdílenému
bezpečnostnástroj nevolá žádný model a neposílá telemetrii a jeho síťové použití jsou čtení serveru, meshe a forge, která spustíte; AI klient, který používám, je ten, který organizace už povoluje, pod stejnou politikou datclaims/no-network.md, no-network-no-eval
architektstejný životní cyklus, jaký běží commitnutá adopce, se soukromou politikou; žádné pravidlo týmu se neopakuje ani nepřepisujeADOPTION.md
kdokoli vlastní politiku nástrojůje to lokální nástroj v kategorii konfigurace editoru a podléhá politice o tom, které nástroje smějí číst tento kódpolitika organizace, kterou toto nemění

Co zůstává viditelné

Osobní neznamená skrytý. Toto jsou místa, kde je uspořádání vidět, a každé stojí za to znát dřív, než se sdílí obrazovka.

  • git add -f přidá vyloučenou cestu. Před commitem si přečtěte git status.
  • Trailery commitů, tvar zpráv commitů a názvy větví vidí každý.
  • Banner nakreslený při vstupu do adresáře je viditelný na sdílené obrazovce; MAJORDOMUS_BANNER=off jej vypne.
  • git check-ignore -v .ai/manifest.yaml jmenuje řádek .git/info/exclude, který vrstvu vylučuje, a git status --ignored vypíše vše vyloučené.

Soukromé neznamená povolené. Kde organizace rozhoduje, které nástroje smějí číst repozitář, to rozhodnutí pokrývá i nástroj, který žije jen ve vašem klonu. Majordomus nikam nic neposílá a nevolá žádný model; to dělá AI klient, který jej používá.

  • ADOPTION.md pro běžnou, commitnutou adopci.
  • INSTALL.md pro instalátor.
  • MCP.md pro sdílený server, jeho režimy zjišťování a co klient zdědí.
  • SCOPE.md pro to, co spustitelný soubor z repozitáře vůbec čte.

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