Przejdź do głównej zawartości

Transformacja przepływu pracy pod agentów AI to przebudowa zespołowej pętli od ticketu do merge’a: agenci przygotowują plan, kod i testy, a ludzie decydują o celu zmiany, kryteriach akceptacji i ryzyku. Każdy etap kończy się bramką: zatwierdzonym planem, testami akceptacyjnymi napisanymi przed kodem, pakietem dowodów i code review dopasowanym do ryzyka.

Twój zespół ma licencje na Claude Code, Codex i Cursora, i wszyscy z nich korzystają. A mimo to ticket wciąż czeka dwa dni, aż ktoś go weźmie, pull request wciąż czeka dwa dni na review, i nikt nie potrafi wskazać ani jednego kroku, który agenci usunęli. Narzędzia przyspieszyły pisanie, a pisanie nigdy nie było wąskim gardłem. Ten przewodnik jest dla tech leada, który musi zmienić samą pętlę, a nie edytor.

Zanim zaczniesz, upewnij się, że repozytorium jest gotowe na agentów: zobacz playbook konwersji projektu.

  • Prompt audytowy, który czyta ostatnie 30 scalonych pull requestów i pokazuje, gdzie naprawdę ucieka czas.
  • Mapę etapów: co na każdym etapie przygotowuje agent, o czym decyduje człowiek i jaki dowód zamyka bramkę.
  • Polecenia do bramki planu i implementacji w Claude Code, Codeksie i Cursorze oraz hook Claude Code, który odsyła agenta do poprawki, gdy testy są czerwone.
  • Dwa joby code review w CI (Claude Code i Codex) z minimalnymi uprawnieniami oraz tabelę torów ryzyka, która mówi, które pull requesty człowiek nadal czyta linijka po linijce.
  • Dwutygodniowy pilotaż z czterema miarami i regułą: rozszerzyć, wstrzymać albo wycofać.

Nie przebudowuj wszystkiego naraz. Wybierz pętlę, która kosztuje najwięcej: w większości zespołów to dostarczanie funkcji, od ticketu do scalonego pull requesta. Zmierz ją, zanim ją zmienisz, bo wąskie gardło rzadko leży tam, gdzie ludzie zgadują. Uruchom poniższy prompt w dowolnym z trzech narzędzi z katalogu głównego repozytorium, z zalogowanym GitHub CLI (gh).

Jeśli twój zespół ma już skonfigurowany serwer GitHub MCP, może on zastąpić gh w tym audycie i w późniejszych krokach review. Serwer działa we wszystkich trzech narzędziach, na przykład claude mcp add --scope project --transport http github https://api.githubcopilot.com/mcp/ -H 'Authorization: Bearer ${GITHUB_PAT}' w Claude Code albo codex mcp add github --url https://api.githubcopilot.com/mcp/ --bearer-token-env-var GITHUB_PAT w Codeksie (flagi sprawdzone w Claude Code 2.1.283 i Codex CLI 0.157.1). --scope project zapisuje wpis w .mcp.json, gdzie Claude Code rozwija ${GITHUB_PAT}, więc zespół współdzieli konfigurację bez commitowania tokena. Prompt zostaw bez zmian i poproś o odpowiednie narzędzia MCP zamiast poleceń gh.

Czytaj wynik krytycznie: agent szacuje granice etapów na podstawie znaczników czasu, więc traktuj liczby jak ranking, a nie pomiar. Jeśli twój audyt wygląda jak większość, czekanie (na doprecyzowanie i na review) zajmuje więcej niż pisanie, więc przebudowa musi objąć etapy wokół kodu, a nie tylko sam kod.

Które decyzje zostają przy ludziach, a jaka praca przechodzi na agenta?

Dział zatytułowany „Które decyzje zostają przy ludziach, a jaka praca przechodzi na agenta?”

Przebudowana pętla zachowuje sześć etapów. Zmienia się to, kto wytwarza każdy artefakt i co zamyka każdą bramkę. Reguła stojąca za tabelą: człowiek decyduje o wszystkim, co drogo kosztuje w razie pomyłki albo trudno to odwrócić, a agent przygotowuje wszystko, co da się potem sprawdzić testem, kontrolą typów albo review.

EtapAgent przygotowujeCzłowiek decydujeDowód, który zamyka bramkę
CelPytania o niejasności w tickeciePo co jest zmiana i co jest poza zakresemTicket z kryteriami akceptacji podpisanymi przez autora
AkceptacjaScenariusze Given/When/Then i czerwone testyCzy testy oddają wymaganieCzerwone testy w repozytorium przed kodem produkcyjnym
PlanPliki do zmiany, podejście, lista testów, otwarte pytaniaPodejście, kompromisy, odpowiedzi na otwarte pytaniaPlan zatwierdzony w sesji albo w tickecie
ImplementacjaKod i dodatkowe testy, jeśli plan ich wymagaNic, chyba że agent zatrzyma się na otwartym pytaniuDiff ograniczony do zatwierdzonego planu
WeryfikacjaPoprawki, aż cały zestaw testów przejdzieNic, chyba że któraś bramka uparcie nie przechodziTesty, typy, lint i build zielone w CI
Code reviewPierwsze przejście review w CIZatwierdzić, odesłać albo eskalować, według toru ryzykaPakiet dowodów plus review wymagane przez tor

Większość wartości niosą dwa wiersze. Wiersz akceptacji przesuwa ludzki osąd przed powstanie kodu, gdzie jest tani; pełną technikę opisuje strona o wykonywalnych kryteriach akceptacji. Wiersz code review sprawia, że nie każdy pull request dostaje takie samo czytanie linijka po linijce, a to właśnie ta kolejka niemal na pewno wyszła w twoim audycie. Zespół DORA z Google mówi to samo o wielkości partii: „AI can easily generate massive blocks of code, which are hard to review and test. Enforcing the discipline of small batches counteracts this risk” (blog Google Cloud, 2025-12-10).

Zanim napiszesz jakąkolwiek politykę, przeprowadź jeden prawdziwy ticket przez pętlę razem z zespołem. Kroki są takie same w każdym narzędziu; różni się mechanika.

  1. Zapisz kryteria akceptacji jako czerwone testy. Poproś agenta, żeby zamienił kryteria z ticketu na testy, przeczytaj testy (nie kod) i zatwierdź je w repozytorium (commit), póki nie przechodzą. Od tej chwili testy są specyfikacją, którą agent musi spełnić, i nie wolno mu ich zmieniać bez pytania.

  2. Uzyskaj plan i zatwierdź go. Agent czyta ticket i testy, a potem proponuje pliki, podejście i otwarte pytania, nie pisząc kodu. Poprawka planu kosztuje jedno zdanie; poprawka gotowej implementacji kosztuje całe popołudnie.

  3. Implementuj zgodnie z planem przy włączonych bramkach. Agent pisze kod i po każdym logicznym kroku uruchamia testy. Jeśli spróbuje skończyć przy czerwonych testach, hook raz odeśle go do poprawki, a jeśli testy nadal będą czerwone, CI zablokuje merge.

  4. Zbierz dowody. Pull request podaje wyniki testów akceptacyjnych, uruchomione kontrole i wszystko, co zmieniło się poza planem. Pełny kontrakt i sprawdzenie w CI, które go wymusza, opisuje pakiet dowodów.

  5. Zrób review według toru ryzyka. Pierwsze przejście robi reviewer w CI. Potem człowiek sprawdza to, czego wymaga tor, czyli w większości zmian dowody i testy, a nie każdą linię.

Zacznij od domyślnego modelu narzędzia i zanim zmienisz model, podnieś poziom wysiłku (effort); aktualne ustawienia domyślne i ceny są w przeglądzie modeli.

Planuj interaktywnie w trybie planowania (/plan albo Shift+Tab, który przełącza tryby) lub bez interfejsu, w skryptowanym pipeline. W terminalu:

Okno terminala
# Stage 2: plan only; plan mode cannot edit files
claude -p "Read docs/tickets/TICKET-482.md and the failing tests in tests/acceptance/. \
Produce an implementation plan: files, approach, extra tests, open questions. No code." \
--permission-mode plan
# Stage 3: implement the approved plan; claude -p starts in Manual mode
# (auto mode on third-party providers or with telemetry off, v2.1.285+),
# so allow exactly the commands the loop needs
claude -p "Implement the approved plan in docs/plans/TICKET-482.md. Run npm test after \
each logical step and fix failures before continuing. Do not edit tests/acceptance/." \
--permission-mode acceptEdits \
--allowedTools "Bash(npm test:*),Bash(npm run lint:*),Bash(npm run typecheck:*)"

Regułę „nie kończ na czerwono” wymuś mechanicznie hookiem Stop. Kod wyjścia 2 z hooka Stop nie pozwala Claude’owi zakończyć pracy i pokazuje mu twój komunikat. Zapisz ten skrypt jako .claude/hooks/tests-green.sh i nadaj mu prawo wykonywania (wymaga jq w PATH):

#!/usr/bin/env bash
# Stop hook: send Claude back once if the suite is red.
input=$(cat)
# CI jobs (such as the review job below) have their own gates; skip there.
[ -n "$GITHUB_ACTIONS" ] && exit 0
# Plan-mode sessions write no code, and the acceptance tests are red by design.
[ "$(printf '%s' "$input" | jq -r '.permission_mode // ""')" = "plan" ] && exit 0
# stop_hook_active is true when this hook already forced a continuation;
# let the session end then, and rely on CI to block the merge.
if [ "$(printf '%s' "$input" | jq -r '.stop_hook_active // false')" = "true" ]; then
exit 0
fi
# Nothing changed since the last commit; skip.
[ -z "$(git status --porcelain)" ] && exit 0
log=$(mktemp)
trap 'rm -f "$log"' EXIT
if ! npm test --silent > "$log" 2>&1; then
echo "Tests are failing. Fix them before you finish. Last lines:" >&2
tail -n 40 "$log" >&2
exit 2
fi

Warunek z git status --porcelain sprawia, że pytanie zadane po commicie nie uruchamia testów od nowa. Jeśli pełny zestaw testów działa wolno, skieruj hook tylko na testy jednostkowe, a resztę zostaw CI. Zarejestruj go w .claude/settings.json, który trafia do repozytorium, więc dostaje go cały zespół:

{
"hooks": {
"Stop": [
{ "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/tests-green.sh" } ] }
]
}
}

Dwa pierwsze warunki (sprawdzenie GITHUB_ACTIONS i sprawdzenie trybu planowania) sprawiają, że hook nie działa w sesjach, w których czerwone testy są zamierzone. Tryb planowania (krok 2) nie pisze kodu, a job review w CI nie ma zainstalowanych zależności, więc oba warunki kończą działanie hooka od razu. W kroku 1 zatwierdzone testy akceptacyjne są czerwone z założenia, więc albo uruchom sesję piszącą testy bez hooka (sesja osobista albo --setting-sources user), albo każ hookowi uruchamiać zestaw bez testów akceptacyjnych, na przykład npm test -- --exclude 'tests/acceptance/**' z Vitestem, którego --exclude przyjmuje glob plików (w cudzysłowie, żeby powłoka go nie rozwinęła), a nie samą nazwę katalogu.

Hook Stop pasuje tu lepiej niż hook PostToolUse przy każdej edycji: pełny zestaw testów po każdej zmianie pliku jest wolny, a hook PostToolUse i tak nie cofnie edycji, bo narzędzie już się wykonało. Testy fixture dla takich hooków opisuje strona Hooki Claude Code.

Czytanie linijka po linijce nie skaluje się, gdy większość pull requestów otwierają agenci, a kolejka code review staje się nowym wąskim gardłem. Zastąp je warstwami dowodów, z których każda łapie inną klasę błędów:

  1. Testy akceptacyjne napisane przed kodem dowodzą zachowania, o które prosił ticket. Zablokuj je: zmiana w tests/acceptance/ w tym samym pull requeście co implementacja wymaga osobnego zatwierdzenia. Zobacz ochronę wyroczni.
  2. Bramki mechaniczne (testy, typy, lint, build) działają w CI przy każdym pushu, a czerwona bramka blokuje merge.
  3. Reviewer w CI wyszukuje nieobsłużone błędy, brakujące przypadki brzegowe i podejrzane miejsca pod kątem bezpieczeństwa, żeby nie musiał tego robić człowiek.
  4. Człowiek robi review według toru ryzyka, zgodnie z tabelą poniżej.

Oba joby poniżej uruchamiają się na pull_request, więc przy pull requestach z forków sekret jest pusty i job kończy się błędem, zamiast go ujawnić; pull requesty z forków przeglądaj ręcznie albo workflowem uruchamianym przez maintainera, który pobiera kod forka tylko do odczytu. Nie przełączaj ich na pull_request_target, żeby dostarczyć sekrety do kodu z forka. Przy pull requestach z gałęzi we własnym repozytorium klucz jest dostępny, a job uruchamia plik workflow z tej gałęzi, jej hooki z .claude/settings.json, .mcp.json i AGENTS.md. Dlatego obejmij /.github/, .claude/, .codex/, .mcp.json i AGENTS.md plikiem CODEOWNERS z wymaganą recenzją właściciela kodu, bo inaczej pull request (także napisany przez agenta) może zmienić to, co działa obok klucza. Przegląd jest dowodem pomocniczym, a nie bramką scalania.

Na podstawie przykładu automatycznego review z anthropics/claude-code-action:

name: AI PR review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
id-token: write
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 1
persist-credentials: false
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
Review this pull request. Report only unhandled errors, missing edge cases,
security issues, and changes to tests/acceptance/. Skip style.
Use `gh pr comment` for a summary and inline comments for specific lines.
claude_args: |
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"

Które pull requesty człowiek nadal czyta linijka po linijce?

Dział zatytułowany „Które pull requesty człowiek nadal czyta linijka po linijce?”

Ustal tory raz, wpisz je do AGENTS.md i do szablonu pull requesta, i niech decydują ścieżki plików. Reviewer zatwierdza dowody wymagane przez tor; tech lead jest właścicielem polityki torów i zmienia ją tylko na podstawie błędów, które przeszły na produkcję.

TorTypowe ścieżkiReview człowieka
Tylko dowodyTeksty w UI, narzędzia wewnętrzne, testy, dokumentacja, kod za feature flagąPrzeczytaj pakiet dowodów i testy akceptacyjne; zatwierdź, jeśli są zielone
PróbkowanieZwykły kod produktowyDowody plus czytanie linijka po linijce najbardziej ryzykownego pliku albo co piątego pull requesta
Pełne czytanieUwierzytelnianie, płatności, migracje danych, kontrakty publicznego API, infrastrukturaReview linijka po linijce przez właściciela kodu, niezależnie od dowodów

Przesunięcie pętli z pełnego czytania w stronę samych dowodów to osobna, etapowa zmiana; review cieniowe, próbkowanie i regułę wycofania opisuje transfer zaufania.

Oto pętla na jednym tickecie: dodaj POST /api/exports do serwisu Express, z limitem pięciu zapytań na użytkownika na minutę.

  1. Akceptacja. Agent pisze trzy czerwone testy: eksport się udaje, niepoprawne body zwraca 400, a szóste zapytanie w ciągu minuty zwraca 429. Reviewer czyta testy i dodaje czwarty: limit jest na użytkownika, a nie globalny. Testy trafiają do repozytorium jako czerwone.
  2. Plan. Agent proponuje trasę w src/routes/exports.ts, schemat Zod i limiter w pamięci. Reviewer odrzuca limiter w pamięci, bo serwis działa na kilku instancjach, i wskazuje istniejącego klienta Redisa. Koszt: jedno zdanie.
  3. Implementacja i weryfikacja. Agent pisze trasę, schemat i limiter na Redisie. Test 429 jest wciąż czerwony, gdy agent próbuje zakończyć pracę (middleware zwraca 503), więc hook Stop raz odsyła go do poprawki i agent zmienia kod statusu; gdyby test został czerwony, CI zablokowałoby merge.
  4. Code review. Reviewer Claude Code w CI zauważa, że limiter przy niedostępnym Redisie odrzuca zapytania, więc awaria Redisa blokuje każdy eksport. To decyzja produktowa, więc osoba robiąca review eskaluje ją do product ownera; product owner wybiera przepuszczanie zapytań przy awarii (fail-open) dla eksportów, a decyzja trafia do opisu pull requesta. Ścieżka należy do toru próbkowania, więc reviewer czyta linijka po linijce plik limitera, a resztę sprawdza przez dowody.

Każdą decyzję wymagającą osądu (limit na użytkownika, Redis zamiast pamięci, fail-open) podjął człowiek. Żadna z nich nie wymagała czytania wygenerowanego handlera trasy.

Zapisz pętlę tak, by każdy inżynier uruchamiał tę samą

Dział zatytułowany „Zapisz pętlę tak, by każdy inżynier uruchamiał tę samą”

Przepływ pracy, który żyje w głowie jednego tech leada, u każdego inżyniera działa inaczej. Umieść go w repozytorium: reguły etapów w AGENTS.md (Claude Code czyta CLAUDE.md, a AGENTS.md wtedy, gdy nie ma CLAUDE.md, od v2.1.277; Cursor czyta też AGENTS.md i CLAUDE.md i używa Rules), hook Stop w .claude/settings.json, listę dowodów w .github/pull_request_template.md, a tory w CODEOWNERS i szablonie. Jeden plik bazowy z cienkimi adapterami dla każdego narzędzia opisuje strona Wspólne reguły agentów.

Wygenerowaną sekcję sprawdź tak jak kod: każde polecenie musi istnieć, każda ścieżka musi się rozwiązywać. Błędne polecenie testów w AGENTS.md jest gorsze niż żadne, bo każda sesja agenta uruchomi je z pełnym przekonaniem.

Pilotuj nowy przepływ przez dwa tygodnie, potem zdecyduj

Dział zatytułowany „Pilotuj nowy przepływ przez dwa tygodnie, potem zdecyduj”

Przez dwa tygodnie prowadź pętlę w jednym zespole i jednym repozytorium, a wszystkie tickety funkcjonalne przepuszczaj przez nią. Porównaj te cztery miary z wynikiem audytu:

MiaraJak ją policzyćJak wygląda dobry wynik
Czas od ticketu do merge’aMediana, od statusu „gotowy” do merge’aSpada, głównie przez krótsze czekanie na review
Rundy review na pull requestReview z prośbą o zmiany na jeden scalony pull requestSpadają, bo plany są poprawiane przed kodem
Kompletność dowodówOdsetek pull requestów z wypełnionymi wszystkimi sekcjami szablonuNiemal każdy pull request w drugim tygodniu
Błędy po merge’uBłędy przypisane do pull requestów z pilotażuNie więcej niż w punkcie odniesienia

Pełne definicje metryk opisuje strona DORA, SPACE, DX Core 4 i pomiar AI.

Potem zdecyduj. Rozszerz pilotaż na kolejny zespół, gdy spadł czas dostarczenia albo liczba rund review, a błędów po merge’u nie przybyło. Wstrzymaj i napraw najsłabszą bramkę, gdy liczby stoją w miejscu. Wycofaj tory do pełnego czytania, gdy błędów po merge’u przybyło, i zanim spróbujesz ponownie, znajdź bramkę, która przepuściła błąd. Kolejne pętle układa mapa adopcji, a sposób mierzenia skutecznego użycia w zespole definiuje strona Adopcja w zespole.

Raport DORA 2025 dobrze tu ostrzega: „AI doesn’t fix a team; it amplifies what’s already there” (blog Google Cloud, 2025-09-23). Pilotaż w zespole z niestabilnymi testami i niejasnymi ticketami najpierw wzmocni właśnie te problemy, więc napraw bramki, zanim obwinisz agentów.