Bramkowane procedury dostarczania kodu z agentami AI
Żadnego „gotowe” bez dowodów.
Kuznia Relay to otwarta procedura dostarczania prawdziwych funkcjonalności z Claude Code, Codex lub dowolnym CLI agenta. Świeży agent na każdy krok, każda kontrola oddzielona od poprawki, a każde twierdzenie poparte dowodami w plikach: hashe z gita, diff stat, wyniki testów. Niech koordynator prowadzi pętlę w nocy, a ty przeczytaj podsumowanie przy kawie. Albo zatwierdzaj każdą bramkę sam.
Zwykły Markdown i git. Bez serwera, bez konta, nic do instalowania.
Długie sesje agentów zawodzą po cichu.
Długie sesje zapominają, co ustalono na początku. Zakres rozrasta się po cichu.
Autor ocenia własną pracę. Znajduje to, czego się spodziewa.
„Wszystkie testy przechodzą” bez komendy, bez liczby, bez hasha commita.
„Zaimplementowałem flagę wersji i zaktualizowałem testy. Wszystko działa, wszystkie testy przechodzą! Funkcjonalność gotowa. ✅”
RYS. 2a.— Tyle zwykle dostajesz. Który commit? Które testy? Kto sprawdził?
commits: c66916d [P1-T1] Fix F3
git diff --stat:
.gitignore | 1 +
__pycache__/greet.cpython-313.pyc | Bin 1496 -> 0 bytes
__pycache__/test_greet.cpython-313.pyc | Bin 3369 -> 0 bytes
proof: git ls-files __pycache__ (empty)
python3 -m unittest -q
Ran 6 tests in 0.000s
OK
push: wip/p1-t1-version-flag -> wip/p1-t1-version-flagRYS. 2b.— Co oddaje agent Relay: prawdziwy wynik komend, w pliku, który możesz później sprawdzić.
Brakujący etap między ticketem a pull requestem.
Wymagania, kryteria akceptacji, projekt
- 01Analyze
- 02Spec check
- 03Build
- 04Review
- 05Done
Świeży agent na krok · stan w bazie wiedzy w Markdownie · bramki zatwierdza delegowany koordynator lub ty
Gałąź funkcjonalności, każde zadanie scalone, otagowane i udokumentowane
RYS. 3.— Relay pracuje na gałęzi funkcjonalności, jedno zadanie naraz. Gdy każde zadanie jest Done, otwierasz PR do gałęzi bazowej. Agenci nigdy tego nie robią.
Claude Code, Codex albo dowolne CLI, które przeczyta plik i uruchomi gita.
Najlepiej sprawdza się przy pracy za dużej na jedno okno kontekstu.
Recenzent, klient albo ty za trzy miesiące, czytając ślad w dokumentach.
Zatwierdzaj ręcznie albo deleguj czyste kontrole koordynatorowi. Zmiany zakresu zawsze zatrzymują się na tobie.
Pięć kroków. Dwie bramki. Jedna pałeczka.
- Kto
- Świeży agent, tylko do odczytu
- Wynik
- Odpowiedzi na pytania z promptu, z odwołaniami plik:linia
- Warunek wyjścia
- Pytania mają odpowiedzi albo trafiły do Właściciela
- Gdzie działa
- Jednorazowy, odłączony worktree we własnym folderze roboczym
Przy małym zadaniu można pominąć. Karta zadania mówi dlaczego.
## Findings or changes
- Q1: where are CLI flags defined? greet.py:5-10 (build_parser)
- Q2: are flags tested end to end? no; test_greet.py:6-10 calls greet() directlyRYS. 4.— Dwie bramki: zatwierdzenie specyfikacji przed Build i zatwierdzenie kodu (ze wskazaniem zrecenzowanego commita) przed Done. Delegowane koordynatorowi albo twoje.
Jak przebiega runda
Koordynator (albo ty) rozmawia z planistą (dowolną sesją LLM) prostymi komendami. Planista pisze prompt i zwraca jedną linię do wklejenia świeżemu agentowi. Agent odpowiada raportem w pliku. Nic ważnego nie żyje w oknie czatu.
- 1.Koord.prompt P1-T1
- 2.Planistapisze Workflow/Prompts/P1-T1 - 1 Analyze.md, odpowiada jedną linią do wklejenia
- 3.Koord.uruchamia świeżego agenta z tą linią
- 4.Agentwykonuje krok, pisze Workflow/Reports/P1-T1 - 1 Analyze.md
- 5.Koord.report P1-T1
- 6.Planistaczyta dowody, aktualizuje kartę, Board, Plan, Decisions. Mówi, co dalej
Tryby lotu: autopilot albo ręcznie
Procedura jest taka sama w obu trybach. Zmienia się tylko to, kto otwiera bramki.
Sesja koordynatora prowadzi pętlę za ciebie, także w nocy.
- —Na start: uporządkowana lista zadań i Done: yes albo no
- —Zatwierdza czyste kontrole, jeśli mu to delegujesz. Każde zatwierdzenie trafia do Decisions.md z oznaczeniem do przeglądu
- —Zostawia krótkie poranne podsumowanie każdego zadania: co poszło, co zdecydował bez ciebie, czym zająć się najpierw
Sam wysyłasz każdą komendę i otwierasz każdą bramkę.
- —prompt, wklej linię świeżemu agentowi, report
- —approve specyfikacji, approve zrecenzowanego commita
- —Najlepszy na pierwsze funkcjonalności albo kod, któremu jeszcze nie ufasz
Jasne role. Jeden autor na plik.
| Rola | Kto | Robi | Nigdy nie robi |
|---|---|---|---|
Właściciel Kierownik lotu | Ty, inżynier. Jeden na projekt. | Zakłada gałęzie, zatwierdza specyfikacje i kod albo to deleguje, decyduje o zakresie | Ręcznie edytuje historię kroków zadania |
Planista Capcom | Sesja LLM w bazie wiedzy | Pisze plany, specyfikacje i prompty. Czyta raporty. Aktualizuje karty, Board, Decisions | Zmienia repozytorium kodu albo uruchamia agentów |
Agent Załoga, świeża na każdy etap | Nowa sesja agenta kodującego na każdy krok | Czyta swój prompt, wykonuje dokładnie jeden krok, pisze jeden raport | Edytuje inne pliki bazy wiedzy, pushuje gdzie indziej, otwiera PR |
Koordynator Opcjonalnie · autopilot | Długo działająca sesja LLM, jedna na funkcjonalność | Prowadzi pętlę: wysyła komendy planiście, uruchamia świeżych agentów, zatwierdza czyste kontrole, gdy ma delegację, pisze poranne podsumowania | Edytuje kod lub dokumenty zadań albo mija punkt zatrzymania |
Kontrole znajdują. Rundy poprawek poprawiają.
Świeży agent znajduje i zapisuje. Nigdy nie poprawia ani tego nie proponuje.
Planista kopiuje uwagi do karty. Blocker / should fix → fix. Nit → later.
Runda o wąskim zakresie: tylko wskazane ID, jeden commit, test, który najpierw nie przechodzi, na każdą uwagę.
Kolejny świeży agent weryfikuje każdą poprawkę, potem patrzy tylko na to, co się zmieniło.
RYS. 5.— Pętla kończy się, gdy nie ma otwartej uwagi typu blocker ani should fix. Wtedy bramka się otwiera: przez koordynatora z twoją delegacją albo przez ciebie.
Prawdziwy przegląd złapał to, co przeoczył build.
.pyc. Jego testy były zielone. Świeży agent Review to wychwycił, runda poprawek o wąskim zakresie to usunęła, ponowna kontrola to potwierdziła.# Report: P1-T1 - 4 Review ## Summary1Reviewed origin/relay/p1...origin/wip/p1-t1-version-flag (3904ade).Behaviour matches the Spec and REQ-1; 6 tests pass in the throwawayworktree. The commit also adds two compiled .pyc files. ## Findings| ID | Severity | Finding2| F3 | should fix | Commit adds build output __pycache__/*.pyc| | | Fix: A git rm --cached · B A + .gitignore| F4 | nit | Tests duplicate stdout capture · later ## Git3git remote get-url --push --all origin -> matches RELAY.mdgit diff --stat (origin/relay/p1...3904ade): __pycache__/greet.cpython-313.pyc | Bin 0 -> 1496 bytes greet.py | 1 + test_greet.py | 29 +++++++++++++- ## TestsRan 6 tests in 0.000s OK 4Verdict: fix round needed: F3- 1Inny agent
Recenzuje wypchnięty commit w odłączonym, jednorazowym worktree. Nigdy nie widział sesji Build.
- 2Uwagi, nie poprawki
ID, waga, miejsce i opcje, gdy jest realny wybór. Planista zamienia wagę na decyzję.
- 3Prawdziwy wynik komend
Sprawdzony remote, diff stat, liczba testów. Gdy komenda się nie powiedzie, tu trafia jej wynik.
- 4Werdykt to ostatnia linia
Odczytują go narzędzia i planista. Same nity oznaczają clean.
Dowód B · Dziennik misji, P1-T1
Historia kroków z karty zadania, od początku do końca. Dwie uwagi poprawione, dwie zweryfikowane, dwa nity odłożone na później.
- 1 Analyzeskipped: one-line change, REQ-1 gives the behaviour in full
- 2 Spec checkfix round needed: F1
- 2 Spec fix (2)F1 fixed in Spec Tests
- 2 Spec check (2)clean; F1 verified
- Owner approvedSpec approved → 3 Build
- 3 Build3904ade pushed, 6 tests OK
- 4 Reviewfix round needed: F3
- 2 Spec fix (3)F3 option B: .gitignore added to the spec (small call, logged)
- 3 Build (2)F3 fixed in c66916d, proof command empty
- 4 Review (2)clean; F3 verified
- Owner approvedCode approved @ c66916d → 5 Done
- 5 Donemerged 585ee0e, tagged wip/p1-t1-done, pushed
Za każdą zasadą stoi incydent.
Jeden autor na plikDlaczego · Dwóch autorów logu decyzji wyprodukowało zdublowane wiersze.
Zabijaj po PID lub porcie, nigdy pkill -f <wzorzec>Dlaczego · Zabicie po wzorcu w jednym zadaniu najpewniej ubiło workery testów innego worktree w trakcie testów.
Pliki robocze tylko we własnym /tmp/<repo>-<task-step>/Dlaczego · Konfigurację testów przeglądarkowych we wspólnym /tmp usunął późniejszy krok.
Żadnego --no-verifyDlaczego · Build pominął hook, żeby obejść lint, więc commit nigdy nie przeszedł kontroli, które uruchamia CI.
Pełna lista testów przy Done, timeouty uruchamiaj osobnoDlaczego · Podzbiory przegapiały regresje. Timeouty pod obciążeniem wyglądały jak błędy.
Przed startem zrób fetch i porównaj z remoteDlaczego · Praca przenosi się między maszynami w nocy.
Uczciwe zastrzeżenie: dziś te zasady działają na zaufaniu. Nic jeszcze nie zatrzyma agenta, który zignoruje „nigdy nie rób force-push”. Pakiet hooków, który je wymusza, jest na roadmapie.
Nie chcesz wdrażać całości? Ukradnij pomysły.
- Świeży kontekst na każdy krok
Czysta sesja widzi kod, nie wymówki.
- Dowody zamiast deklaracji
Status odtwarza się z wyników, nie z tego, co mówi agent.
- Werdykty czytelne dla maszyn
Jedna stała ostatnia linia pozwala narzędziom łączyć kroki bez zgadywania.
- Wymagania mają kolejność
Gdy źródła się różnią, rozstrzyga spisana kolejność źródeł.
# Minimalne zasady relay (wklej do AGENTS.md lub CLAUDE.md)
- Jeden krok na sesję. Sesja, która recenzuje kod, nigdy go nie pisała.
- Kontrole tylko znajdują i zapisują. Poprawki idą w osobnej rundzie, potem ponowna kontrola.
- Każde twierdzenie wymaga wyniku: hash commita, git diff --stat, komenda testów i ich liczba.
- Ostatnia linia raportu z kontroli to "Verdict: clean" albo "Verdict: fix round needed: F<n>, ...".
- Stan żyje w plikach, nie w czacie. Napisz raport, nawet gdy utkniesz.
- Drobne decyzje techniczne: zdecyduj, zapisz, jedź dalej. Zakres i zatwierdzenia: zatrzymaj się i zapytaj.Zacznij w 5 minut.
- T–5:00
Załóż bazę wiedzy obok repozytorium
terminalgit clone https://github.com/Kuznia-Tech/kuznia-relay.git cp -R kuznia-relay/kit my-project-kb cp kuznia-relay/SPEC.md kuznia-relay/AGENT-RULES.md my-project-kb/ - T–4:00
Uzupełnij RELAY.md
YAML na górze: ścieżka repo, dozwolony remote, komendy testów, twoja pierwsza funkcjonalność. Jej wymagania (ticket, kryteria akceptacji, projekt) wrzuć do
sources/. - T–3:00
Utwórz gałąź funkcjonalności i jej worktree
terminalcd my-project git fetch origin git branch --no-track feat/my-feature origin/main && git push -u origin feat/my-feature git worktree add ../my-project-worktrees/p1 feat/my-feature - T–2:00
Uruchom planistę w folderze bazy wiedzy
Kit zawiera
AGENTS.md(Codex) iCLAUDE.md(Claude Code), więc planista sam wczyta swoje instrukcje.planistaplan P1 prompt P1-T1 - T–1:00
Wykonaj krok w świeżym agencie, w swoim repo
Daj mu prawo zapisu do bazy wiedzy na raport, wklej linię od planisty, potem powiedz planiście
report P1-T1. Powtarzaj aż do Done.terminalclaude --add-dir /home/you/my-project-kb - T–0:00
Dostarcz
Gdy każde zadanie jest Done, sam otwórz pull request z gałęzi funkcjonalności, potem usuń worktree i gałęzie zadań oraz foldery robocze.
Komendy planisty
| where are we? | Bieżący krok każdego aktywnego zadania, na kogo czeka, co dalej |
| plan <F> | Napisz plan funkcjonalności z jej dokumentu wymagań, z listą zadań |
| new task <F>: <name> | Dodaj jedno zadanie: karta, wiersz w Board, linia w Plan |
| prompt <task> | Napisz prompt dla bieżącego kroku, odpowiedz linią do wklejenia |
| report <task> | Przeczytaj najnowszy raport, zaktualizuj dokumenty, przesuń krok |
| approve <task> | Specyfikacja zatwierdzona → Build. Kod zatwierdzony @ <commit> → Done |
| fix <task> | Rozpocznij rundę poprawek dla uwag oznaczonych fix |
| findings <task> | Pokaż otwarte uwagi: ID, waga, decyzja, runda |
Ostatnie odliczanie
Spec. Build. Review. Merge. Start.
Przeczytaj specyfikację w dziesięć minut, przejdź przykład, a pierwsze zadanie uruchom jeszcze dziś.