BlogNadzór
Jaka ochrona branchy powinna obowiązywać, gdy agenci kodujący otwierają pull requesty
Gdy agenci kodujący otwierają pull requesty, docelowy branch powinien wymagać zatwierdzenia przez człowieka innego niż ten, kto wypchnął ostatnią zmianę, unieważniać zatwierdzenia po nowych commitach, przyjmować wymagane checki tylko od aplikacji, która ma je raportować, wymagać review właścicieli kodu dla plików sterujących agentem i nie dawać tożsamości agenta żadnego obejścia. Żeby inżynier, który uruchomił agenta, nie mógł zatwierdzić jego pracy, potrzebny jest jeszcze jeden element: w Copilocie jest wbudowany, przy innych agentach dodajesz go sam.
Co się zmienia, gdy pull request otwiera agent
Ochronę branchy zaprojektowano z myślą o ludziach: jedna osoba pisze, inna zatwierdza. Agenci zmieniają trzy rzeczy. Autorem jest narzędzie działające na czyimś tokenie, więc nie jest oczywiste, kto może zatwierdzić. Agenci często pushują, czasem już po zatwierdzeniu. A agent może edytować pliki, które mówią jemu i CI, jak mają się zachowywać, w tym pliki instrukcji i workflowy.
Instrukcje w AGENTS.md czy w playbooku proszą agenta o właściwe zachowanie. O tym, co da się zmergować, decydują ustawienia repozytorium. Ten tekst dotyczy tych ustawień na GitHubie. Przegląd kodu napisanego przez agenta to osobny temat, który omawiamy w poradniku o code review z AI.
Podstawowy zestaw dla branchy, do których celują agenci
Na GitHubie to ustawienia w regule ochrony brancha albo w rulesecie dla domyślnego brancha i ewentualnych branchy release. Przy każdym punkcie piszemy, dlaczego przy agentach zyskuje na znaczeniu.
- Wymagaj pull requesta z co najmniej jednym zatwierdzeniem, żeby każda zmiana agenta przeszła przez człowieka.
- Unieważniaj nieaktualne zatwierdzenia, gdy nowe commity zmieniają diff, bo agenci pushują dalej po komentarzach z review.
- Wymagaj zatwierdzenia ostatniego pusha przez kogoś innego niż osoba, która go wypchnęła.
- Wymagaj review właścicieli kodu, z właścicielami wskazanymi dla konfiguracji agentów i workflowów.
- Wymagaj checków statusu dla buildu i testów, a tam, gdzie się da, ustaw oczekiwaną aplikację źródłową.
- Utrzymaj blokadę force pushy i usuwania brancha, co reguła ochrony robi domyślnie.
- Włącz Do not allow bypassing, bo domyślnie administratorzy i role z uprawnieniem do obejścia są zwolnieni z reguł.
Wymagane checki trudne do podrobienia
GitHub dokumentuje, że każda osoba i każda integracja z prawem zapisu może ustawić stan dowolnego checka statusu w repozytorium. Token agenta z prawem zapisu mógłby więc teoretycznie zgłosić wymagany check jako zaliczony. Ustaw jako oczekiwane źródło każdego wymaganego checka aplikację GitHub, która go uruchamia, żeby status od kogoś innego nie spełniał reguły.
Ważne są jeszcze dwa szczegóły. Wymagane checki są zaliczone, gdy raportują successful, skipped albo neutral, więc check, który jest pomijany na branchach agentów albo zgłasza uwagi jako neutral, niczego nie blokuje. Nazwy jobów powinny być unikalne we wszystkich workflowach, bo duplikaty czynią wyniki niejednoznacznymi i mogą blokować merge.
Ustal, kto jest autorem
Traktuj inżyniera, który uruchomił agenta, jako autora, żeby zatwierdzał ktoś inny. GitHub wbudował to w Copilot cloud agent, i tylko tam: osoba, która poprosiła o pull request, nie może go zatwierdzić, agent pushuje tylko na własny branch copilot/ albo na branch pull requesta i nie może zatwierdzać ani mergować. Gdy Copilot otwiera pull request pod własną tożsamością aplikacji, na przykład z wspólnego wątku na Slacku, rulesety domyślnie wymagają jednego dodatkowego zatwierdzenia. GitHub oznacza to ustawienie jako public preview.
Inni agenci pushują z tożsamością, którą im dasz: osobistym tokenem, kontem bota albo aplikacją GitHub. Sprawdź, czy nie ma ona roli administratora, nie jest na żadnej liście obejść i nie może zmieniać rulesetów. Potem zobacz, kogo reguła ostatniego pusha faktycznie wyklucza. Jeśli commity pojawiają się pod kontem inżyniera, wyklucza tego inżyniera. Jeśli agent pushuje jako bot albo aplikacja, wyklucza tylko bota, a inżynier, który uruchomił przebieg, nadal może zatwierdzić. Wtedy niech system uruchamiający agenta zapisuje, kto go uruchomił, i dodaj wymagany check, raportowany przez aplikację pod twoją kontrolą, który nie przechodzi, dopóki zatwierdzenie tej osoby jest jedynym.
Chroń pliki, które sterują agentem
Wytyczne GitHuba dotyczące zabezpieczeń Copilota zalecają chronić pliki konfiguracji agentów i MCP przez CODEOWNERS i wymagane review właścicieli kodu. To samo dotyczy workflowów CI i samego pliku CODEOWNERS. Pull requesty używają pliku CODEOWNERS z brancha bazowego, więc agent nie zmieni swoich recenzentów w tym samym pull requeście.
/AGENTS.md @example-org/platform /CLAUDE.md @example-org/platform /.claude/ @example-org/platform /.cursor/rules/ @example-org/platform /.github/copilot-instructions.md @example-org/platform /.github/workflows/ @example-org/platform /.github/CODEOWNERS @example-org/platform
Rulesety mogą też wymagać zatwierdzenia przez określone zespoły, gdy pull request dotyka wybranych ścieżek, na przykład zespołu bezpieczeństwa przy kodzie uwierzytelniania. To daje regułę opartą na ścieżkach bez polegania wyłącznie na kolejności w CODEOWNERS.
Sprawdź ustawienia w repozytorium testowym
Ustawienia się zmieniają i nakładają. Kilka rulesetów na jednym branchu jest łączonych i obowiązuje najbardziej restrykcyjna wersja każdej reguły, obok ewentualnej reguły ochrony brancha. Samo przeczytanie konfiguracji nie wystarcza, więc testujemy ją prawdziwą tożsamością agenta w jednorazowym repozytorium, które kopiuje reguły produkcyjne:
- 1
Push na chroniony branch
Bezpośredni push tokenem agenta musi się nie udać.
- 2
Zatwierdź pracę własnego agenta
Inżynier, który uruchomił przebieg, zatwierdza jego pull request, a merge musi pozostać zablokowany. Copilot egzekwuje to sam; przy innych agentach działa to tylko wtedy, gdy masz check sprawdzający, kto uruchomił agenta.
- 3
Push po zatwierdzeniu
Nowy commit agenta po zatwierdzeniu musi wymagać ponownego zatwierdzenia.
- 4
Podrób status
Ustawienie wymaganego checka na success przez API statusów commitów tokenem agenta nie może odblokować merge'a.
- 5
Zmień plik sterujący
Oznacz testowy pull request jako gotowy do review, bo przy wersjach roboczych właściciele kodu nie są proszeni o przegląd. Zmiana AGENTS.md albo workflowu musi wtedy wywołać prośbę o review zespołu platformowego, a merge musi pozostać zablokowany, dopóki ktoś z tego zespołu nie zatwierdzi.
Powtarzaj test, gdy dodajesz agenta, zmieniasz jego tożsamość albo edytujesz rulesety. Takie ustawienia są częścią tego, jak wdrażamy agentów kodujących razem z zespołami platformowymi.
Pytania
Czy pull requesty agentów powinny wymagać dwóch zatwierdzeń?
Nie jako ogólna zasada. Podstawą jest jedno zatwierdzenie przez kogoś innego niż osoba, która uruchomiła agenta. Drugie zatwierdzenie dodaj regułami opartymi na ścieżkach dla obszarów takich jak uwierzytelnianie, płatności czy infrastruktura.
Czy agenci mogą sami mergować zmiany niskiego ryzyka?
Technicznie tak, jeśli ich tożsamość ma do tego prawo. Zalecamy, żeby o merge'u decydował deterministyczny kod pipeline'u, nigdy agent, i to tylko dla wąskich typów zadań, takich jak aktualizacje zależności z wiarygodnymi testami. Wszystko inne nadal zatwierdza człowiek.
Używać rulesetów czy reguł ochrony branchy?
Oba mechanizmy egzekwują te same podstawowe ustawienia i nakładają się na siebie. Na danym branchu obowiązuje naraz tylko jedna reguła ochrony, a rulesety się sumują, przy czym niektóre nowsze reguły, na przykład wymagani recenzenci według ścieżek, istnieją tylko w rulesetach.
Powiązane usługi
Więcej z bloga
Code review z AI
Jak skonfigurować code review z AI i utrzymać odpowiedzialność człowieka za każdy merge, gdy agenci kodujący piszą coraz więcej kodu.
Bezpieczeństwo agentów AI
Bezpieczeństwo agentów AI do programowania i zarządzanie nimi w praktyce: prompt injection, sekrety, uprawnienia, sandboxing, uruchomienia bez nadzoru i podział odpowiedzialności.
Przekazywanie zadań agentom chmurowym
Co powinno zawierać zadanie, zanim trafi do agenta kodującego w chmurze: szablon opisu, trzy pytania kontrolne i zasady oddawania pracy.
Zmiany agentów, które padają w CI
Jak ustalić, dlaczego zmiana agenta kodującego przeszła w jego własnym środowisku, a padła w CI, i jakie poprawki harnessu zapobiegają powtórce.
Porozmawiaj z inżynierem
Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.
Rezerwacja odbywa się w Kalendarzu Google.
Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.
Sprawdź wersję roboczą w swoim programie pocztowym
Wyślij ją stamtąd, a inżynier odpowie ci osobiście, proponując terminy 30-minutowej rozmowy. Jeśli wersja robocza się nie otworzyła, napisz do nas na adres miki@cloudsail.com.