BlogHarness
Przygotowanie repozytorium na agentów kodujących, ze sprawdzeniami, które to potwierdzają
Zanim agent kodujący zacznie pracować niezawodnie, świeży checkout twojego repozytorium musi dać się zainstalować, zbudować i przetestować komendami zapisanymi tam, gdzie agent je czyta, a to, że te komendy nadal działają, musi potwierdzać coś innego niż pamięć inżyniera. Najważniejszy test jest prosty: uruchamiaj udokumentowaną konfigurację w czystym środowisku przy każdej jej zmianie i traktuj porażkę jak zepsuty build.
Czego agent nie ma, a twoi inżynierowie mają
Każda sesja Claude Code zaczyna się od pustego okna kontekstu i inni agenci kodujący działają podobnie. Poza instrukcjami organizacji lub osobistymi i pamięcią wczytywanymi na starcie agent wie o twoim repozytorium tyle, ile repozytorium mu powie, plus to, co znajdzie, przeszukując kod. Resztę twoi inżynierowie noszą w głowie, na przykład zmienną środowiskową, którą trzeba ustawić, usługę, która musi działać przed testami integracyjnymi, i test, który pada w poniedziałki.
Bez tej wiedzy agent zgaduje. Dokumentacja GitHuba dla jego agenta chmurowego mówi, że Copilot potrafi znaleźć i zainstalować zależności metodą prób i błędów, ale jest to wolne i zawodne, a przy prywatnych zależnościach może się w ogóle nie udać. Zgadywanie, które się kompiluje, i tak trafia do review, gdzie wygląda jak zwykły kod.
Sześć pytań, na które musi odpowiedzieć świeży checkout
Zadajemy je czystemu klonowi, w kontenerze albo na maszynie, która nigdy nie widziała tego repozytorium. Odpowiedź tak wymaga dowodu: komenda faktycznie się wykonała.
- Czy jedna udokumentowana komenda instaluje zależności z lockfile'a, bez pytań i bez narzędzi, które istnieją tylko na laptopach?
- Czy jedna komenda uruchamia szybki zestaw testów, który za każdym razem daje ten sam wynik, a wolne lub niestabilne zestawy są oznaczone i wyłączone z niego?
- Czy bazy danych, kolejki i inne usługi startują ze skryptu albo definicji kontenera, z danymi testowymi, których oczekują testy?
- Czy zapisano, jakich poświadczeń potrzebuje konfiguracja, a których sesja agenta nie może nigdy dostać?
- Czy plik instrukcji wymienia komendy, ścieżki, których agent nie może edytować, i konwencje, których pilnują recenzenci?
- Czy ten plik i otaczająca go konfiguracja agenta mają wskazanego właściciela?
Zamień udokumentowane komendy w job CI
Instrukcje starzeją się po cichu. Ktoś zmienia nazwę skryptu, a plik instrukcji nadal podaje starą. Rozwiązaniem jest jeden punkt wejścia, który wskazuje plik instrukcji i który job CI uruchamia z czystego checkoutu, dzięki czemu nieaktualna instrukcja psuje build, a nie przebieg agenta.
#!/usr/bin/env bash # The one command agents and CI both run from a clean checkout. # Named in AGENTS.md; CI runs it on every change to setup files. set -euo pipefail pnpm install --frozen-lockfile pnpm build pnpm lint pnpm test:unit
Agenci hostowani dokładają własną warstwę konfiguracji, która wymaga tego samego podejścia. GitHub przed startem swojego agenta chmurowego uruchamia workflow copilot-setup-steps.yml, i to tylko z domyślnego brancha. Jeśli krok konfiguracji się nie powiedzie, agent pomija pozostałe kroki i zaczyna pracę w takim stanie środowiska, jaki akurat jest, więc zepsuta konfiguracja objawia się dziwnym zachowaniem agenta, a nie czerwonym buildem. Workflow uruchamia się też jako zwykły check przy każdej zmianie i można go odpalić ręcznie, więc da się go testować.
W Codex Cloud od OpenAI Codex przygotowuje i testuje środowisko razem z tobą, a publikacja utrwala przygotowany system plików, od którego startują nowe zadania. Zmiany w tej przygotowanej konfiguracji docierają do nowych zadań po ponownej publikacji, a istniejące zadania zachowują własne pliki. Część zapisanej konfiguracji działa od razu w aktywnym środowisku, więc przed testem sprawdź, jaki rodzaj zmiany wprowadziłeś.
Co powinien zawierać plik instrukcji, a czego nie
Dokumentacja Claude Code wymaga instrukcji na tyle konkretnych, żeby dało się je sprawdzić, na przykład dokładnej komendy testów, i zaleca, by każdy CLAUDE.md miał poniżej 200 linii, bo dłuższe pliki zużywają kontekst i gorzej są przestrzegane. Dokumentacja reguł Cursora odradza kopiowanie przewodników stylu, które może egzekwować linter. To, czego plik potrzebuje, jest krótkie:
- Komendy instalacji, budowania, lintowania i szybkich testów, dokładnie takie, jakie uruchamia CI
- Ścieżki, których agent nie może edytować, na przykład kod generowany, dołączone zależności i zmergowane migracje
- Konwencje pilnowane przez recenzentów, które odbiegają od typowych domyślnych
- Co znaczy gotowe: które checki muszą przejść i co zawiera opis pull requesta
Kilka narzędzi czyta już AGENTS.md. Claude Code czyta go, gdy nie ma pliku CLAUDE.md, Cursor obsługuje go w katalogu głównym i w podkatalogach, a agent chmurowy GitHuba czyta pliki AGENTS.md obok własnych plików instrukcji. Jeden wspólny plik z cienkimi dodatkami dla konkretnych narzędzi zapobiega rozjeżdżaniu się trzech kopii. Żaden z tych plików niczego nie egzekwuje: dokumentacja Claude Code mówi, że narzędzie traktuje je jako kontekst, więc reguła, która musi obowiązywać, należy do uprawnień, hooków albo CI.
Od odpowiedzi do reguły pracy
Odpowiedzi decydują, jak agenci mogą pracować w danym repozytorium. Stosujemy taką regułę:
- Wszystkie sześć na tak: kandydaci do zadań delegowanych, które recenzent może zweryfikować, przy niezmienionym review i wymaganych checkach.
- Konfiguracja działa, ale testy są niestabilne lub wolne: tylko praca interaktywna, w której inżynier czyta wyniki testów, dopóki szybki zestaw testów się nie ustabilizuje.
- Czysty checkout się nie buduje: najpierw to napraw, bo agent zużyje tam budżet na ponowne odkrywanie konfiguracji.
W hipotetycznym repozytorium usługi checkout wymaga lokalnego Postgresa, którego inżynierowie uruchomili miesiące temu, i tokenu do prywatnego rejestru pakietów. Naprawa to definicja kontenera dla bazy, poświadczenie do rejestru dostępne tylko dla konfiguracji i powyższy skrypt agent-check, każde jako jedna zmiana do review.
Czego gotowość nie naprawi
Przygotowane repozytorium kończy zgadywanie co do środowiska. Nie sprawi jednak, że niejasne zadania staną się jasne, nie doda mocy przerobowej w review i nie uczyni agentów odpowiednimi do pracy wymagającej głębokiej wiedzy domenowej. Repozytoria zależne od licencjonowanych narzędzi, specjalnego sprzętu albo systemów wewnętrznych mogą nie pasować do współdzielonego hostowanego sandboxa, ale to nie wyklucza delegowania. Agent chmurowy GitHuba może działać na self-hosted runnerach z dostępem do zasobów wewnętrznych, zalecanych jako jednorazowe runnery na jeden job, a konfiguracja self-hosted lub lokalna sprawdza się, jeśli jest powtarzalna i ma te same uprawnienia, checki i review. Dopiero gdy nic z tego nie jest możliwe, pozostaje lokalna praca interaktywna.
Gdy zmiany agenta przechodzą lokalnie, a padają w CIHarness engineering
Pytania
Czy potrzebujemy osobnego pliku instrukcji dla każdego narzędzia agentowego?
Zwykle nie. Wspólne fakty trzymaj w AGENTS.md, a krótki plik dla konkretnego narzędzia dodawaj tylko tam, gdzie jedno narzędzie potrzebuje czegoś, czego inne nie potrzebują. Sprawdź, które pliki ładuje każde narzędzie, bo ustawienia domyślne się różnią.
Czy agent może sam napisać swój plik instrukcji?
Może przygotować szkic. /init w Claude Code analizuje kod i proponuje CLAUDE.md, a Codex ma komendę /init, która tworzy szkic AGENTS.md. Traktuj szkic jak pull request i dopisz to, czego agent sam nie odkryje, na przykład dlaczego dana konwencja istnieje.
Jak często powinno się uruchamiać sprawdzenie gotowości?
Przy każdej zmianie plików, które obejmuje, takich jak lockfile, skrypty konfiguracji, pliki instrukcji i konfiguracja CI, a do tego według harmonogramu, żeby zmiany zewnętrzne, na przykład wygasły token rejestru, wyszły na jaw, zanim przebieg agenta się nie powiedzie.
Powiązane usługi
Harness engineering
Konfiguracja, która mówi agentowi, jak budować, testować i zmieniać twój kod, trzymana w systemie kontroli wersji.
Wdrażanie agentów kodujących
Agenci, którzy z kilku zespołów pilotażowych trafiają do reszty działu inżynierii, ze szkoleniami i jedną wspólną konfiguracją.
Ewaluacje na twoich repozytoriach
Narzędzia, modele lub ustawienia porównywane ze sobą na zmianach, które zostały już zmergowane, zanim wybierzesz jedno z nich.
Więcej z bloga
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.
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.
Instrukcje Claude Code w zespole
Jak zespół przypisuje właścicieli do plików CLAUDE.md i reguł, przegląda je i usuwa wpisy, które nie zmieniają już tego, co robi Claude Code.
AI w SDLC
Jak agenci kodujący zmieniają każdą fazę cyklu wytwarzania oprogramowania, kto odpowiada za przekazania i jak mierzyć oraz nadzorować tę zmianę.
Źródła
- Dokumentacja Claude Code: How Claude remembers your project
- GitHub Docs: konfiguracja środowiska programistycznego Copilot cloud agent
- GitHub Docs: dobre praktyki pracy z GitHub Copilot nad zadaniami
- Dokumentacja OpenAI Codex: Cloud environments
- Dokumentacja Cursor: Rules
- OpenAI Cookbook: Iterating development workflows with Codex
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.