Skip to content

Integrácia s gitom ​

kontext používa ako vrstvu spolupráce samotný git: súbory pre pravdu, commity pre review, trailery pre odkazy, hooky pre vynucovanie.

Hooky ​

HookČo kontext robíMôže zablokovať?
pre-commitzvaliduje stagnuté znalosti a preskenuje ich na tajné údaje; znova vygeneruje .ai/README.md zo stagnutého stromu a stagne ho; pripomenie kandidátov z inboxu, ktorí sa týkajú stagnutých ciestáno, pri chybách
prepare-commit-msgpridá pre stagnuté záznamy trailery Decision:, Convention:, Learning:, Incident: (pri merge commitoch sa preskočí; amend sa meria od rodiča HEAD)nie
post-commitzaradí udalosti sync pre znalosti, ktoré sa zmenili v HEAD, odstráni povýšené položky inboxu, ktoré sú už commitnuté, spustí doručovanie na pozadínie
post-merge, post-rewritezaradí udalosti sync po pulle, merge a rebasenie

Jednorazovo obídeš cez KONTEXT_SKIP=1 git commit … alebo git commit --no-verify.

Pravidlá inštalácie ​

kontext hooks install (spúšťa ho aj kontext init) nikdy nenahradí tvoje hooky:

  • Cieľom je core.hooksPath, ak je nastavený (.husky/_ od husky sa mapuje na .husky/), inak .git/hooks (git rev-parse --git-path hooks, zdieľané všetkými worktree).
  • Do existujúceho shellového hooku sa vloží označený blok hneď za shebang, takže sa spustí, aj keby zvyšok skriptu skončil predčasne.
  • Hook, ktorý nie je shellový (napr. Node skript), sa premenuje na <hook>.kontext-chained a zavolá sa po bloku kontextu.
  • Každý blok hľadá kontext v PATH, v ~/.local/bin a ~/.cargo/bin a bez neho neurobí nič. Zdieľané adresáre hookov teda nerozbijú kolegov, ktorí kontext nemajú.
  • Ak je adresár hookov sledovaný (napr. .githooks/), zmena sa ukáže v git status: commitni ju, aby hooky zdieľal celý tím.
  • Ak sledovaný adresár hookov existuje, ale ešte nie je aktívny (napríklad core.hooksPath nastaví až npm install), kontext ťa na to upozorní a kontext hooks install --hooks-dir .githooks ho pokryje.
  • Správcovia hookov, ktorí súbory hookov generujú znova (lefthook, pre-commit), sa rozpoznajú; namiesto toho pridaj kontext hook <name> do ich konfigurácie.

kontext hooks status ukáže, čo je nainštalované; kontext hooks uninstall bloky odstráni a obnoví zreťazené originály.

jj (Jujutsu) ​

Kolokovaný repozitár jj je pre kontext git repozitár, s dvoma rozdielmi: jj nikdy nespúšťa git hooky a nikdy nestaguje. Commit za teba nikto neskontroluje, takže kontroly spusti ručne pred jj commit / jj describe alebo jj git push:

  • kontext prepare-commit (alebo ctx_prepare_commit): keď nie je nič stagnuté, prečíta zmeny pracovného stromu voči HEAD, teda pracovnú kópiu jj, a vypíše znalosti, ktoré ich pokrývajú;
  • kontext drift: znalosti, ktoré tvoja zmena, commitnutá či nie, nechala za sebou od predvolenej vetvy;
  • kontext check: validáciu a sken tajných údajov, ktoré by spustil pre-commit hook.

Pre tím patrí brána tam, kadiaľ prejde každý commit, nech ho urobilo čokoľvek: kontrolný skript (bun run check, make check) alebo CI spúšťa kontext drift --fail (stav 2, keď zmena nechala zaznamenané znalosti za sebou) alebo kontext ci --strict. kontext nepridáva git hook, ktorý by commit pre drift blokoval, lebo commit z jj by naň nikdy nenarazil; to isté hovorí kontext hooks status.

kontext confirm aj povýšenia stagujú súbory v indexe gitu; jj berie súbory z pracovnej kópie a index ignoruje, takže to neškodí. Trailery sa nepridajú samy: napíš ich do popisu (prepare-commit ich vypíše).

Kontroly, ktoré hľadajú špinavý strom (beh verify označí [dirty: <cesty>] v denníku a cez MCP sa nespustí, confirm odmietne súbor s nestagnutými úpravami), vidia pracovnú kópiu jj ako necommitnuté zmeny z pohľadu gitu. Najprv spusti jj commit alebo jj new, aby súbory, ktoré potvrdzuješ, boli v commite; colocated jj smoke test beží v CI, keď je jj nainštalované.

Trailery ​

Pre každý súbor znalostí stagnutý v commite pridá prepare-commit-msg trailer (git interpret-trailers --if-exists addIfDifferent):

text
fix(billing): round in cents

Decision: 2026-09-28-prices-are-integer-cents

Kľúče trailerov pochádzajú z store.kinds.<kind>.trailer. Obyčajný git s nimi odpovedá na otázky:

sh
git log --format='%h %s%n%(trailers:key=Decision,valueonly)' -- src/billing
git log --grep 'Decision: 0007'

kontext why zoradí commity s trailermi kontextu na prvé miesta.

Záznamy vyťažené cez kontext init žiadne nedostanú: pochádzajú zo starších commitov uvedených v ich poli commits.

Preformulovanie cez git commit --amend -m … trailery zachová: hook amend rozpozná (z argumentov alebo z commitujúceho procesu git) a to, čo commit pridáva, meria od rodiča HEAD. Commit z git merge --squash dostane trailery všetkého, čo nesie.

Udalosti sync ​

Po commite, merge alebo rebase porovná kontext súbory znalostí v HEAD so snapshotom poslednej synchronizácie (pre každý worktree) a zaradí udalosť sync pre každý pridaný alebo zmenený záznam. Prvé spustenie vo worktree snapshot len zapíše; kontext sync --all raz zrkadlí všetky záznamy. Nič sa nedeje, kým udalosť sync neodoberá žiadny adaptér.

Outbox ​

Hooky nikdy nekomunikujú so sieťou. Udalosti sa pripisujú do <git-common-dir>/kontext/outbox.jsonl a odpojený kontext outbox flush ich doručí. Doručenia sa sledujú pre každý adaptér a operáciu a v jednom klone beží naraz len jedno doručovanie. Pokus sa ráta len adaptéru, ktorý sa naozaj skúsil, takže výpadok jedného adaptéra nemíňa pokusy ostatným; eventy pre adaptér, ktorý preskočilo when, ostanú vo fronte. Po ôsmich neúspešných pokusoch sa event presunie do outbox.dead.jsonl, ktorý ukáže kontext status a vráti kontext outbox retry. Nič sa nestratí ticho. kontext outbox vypíše, čo čaká, a poslednú chybu; sync hlási mazania a premenovania; logy adaptérov rotujú.

Merge ​

  • Záznamy sú samostatné súbory: paralelné vetvy sa toho istého súboru dotknú len zriedka.
  • .ai/README.md sa generuje znova a je označený merge=union (v .ai/.gitattributes).
  • Sekvenčné čísla ADR môžu medzi vetvami kolidovať, rovnako ako pri akejkoľvek praxi s ADR; ID podľa dátumu (predvolené pre nové úložiská) sa tomu vyhnú.

Worktree ​

Všetko lokálne žije v spoločnom git adresári, takže všetky worktree klonu zdieľajú inbox, outbox a postup zavádzania, zatiaľ čo každý worktree má vlastný vyhľadávací index a snapshot synchronizácie (riadia sa checkoutnutou vetvou; commity, ktoré z histórie vypadnú cez amend alebo rebase, sa z indexu odstránia).

Každý kandidát v inboxe si pamätá worktree a vetvu, v ktorých vznikol. Pri paralelných agentoch v samostatných worktree (Superset, Codex, Claude Code) ponúkajú ctx_prepare_commit, pripomienka v pre-commit hooku a brief len vlastných kandidátov aktuálneho worktree; kandidáti iného živého worktree sa ukážu zvlášť ako „not for this commit“ a kandidátov zmazaného worktree si môže prevziať ktokoľvek. kontext inbox ukáže, odkiaľ ktorý pochádza.

Vydané pod licenciou MIT alebo Apache-2.0.