Warsztat
Warsztat to siedem promptów: wiadomości, które wklejasz agentowi po kolei, i ósmy do domu. Są na dole tej strony, każdy z przyciskiem Kopiuj. Nad nimi: plik projektu, plan warsztatu i idee, na których prompty są oparte.
Kiedy prompt 01 utworzy projekt, załóż w folderze projektu folder design i włóż do niego turbine.fig. Nie obok projektu: Claude Code pyta o zgodę, zanim przeczyta plik spoza folderu projektu.
Plan warsztatu
| Godzina | Część | Co robisz |
|---|---|---|
| 14:55 | Wprowadzenie | Słuchasz. |
| 15:03 | Start | Otwierasz terminal w folderze turbine, uruchamiasz agenta, wklejasz prompt 01. |
| 15:08 | Projekt | Wkładasz turbine.fig do design/. Plan mode, prompt 02: agent planuje i buduje dekoder npm run design, który zapisuje dane projektu w JSON. Odpowiadasz na jego otwarte pytania. |
| 15:30 | Ratunek 1 | Cokolwiek agent robi, naciskasz Esc. Jeśli nie ma design/data, bierzesz design-data.zip poniżej. Potem /clear. |
| 15:33 | Checker, najpierw testy | Plan mode, prompt 03: agent pisze npm run check z danych projektu, zanim powstanie jakakolwiek strona. Test nie przechodzi. Pokaz: test, który nie przechodzi, i jego raport. |
| 15:50 | Ratunek 2 | Znowu Esc. Jeśli npm run check nie działa, bierzesz checker.zip poniżej. Potem /clear. |
| 15:53 | Budowa | Plan mode, prompt 04: agent buduje całą stronę i raz uruchamia test. W tym czasie przeglądasz stronę sekcja po sekcji. |
| 16:08 | Pętla | Esc, commit tego, co jest, /clear, prompt 05: agent poprawia stronę, aż test przejdzie. |
| 16:16 | Publikacja | Esc, /clear, prompt 06: strona trafia na produkcję, a test uruchamia się na adresie na żywo. |
| 16:22 | Ograniczenia i pytania | Słuchasz, pytasz. |
Obie godziny ratunkowe są z zegara, nie na życzenie. W pełnym, zmierzonym przebiegu tych promptów agentowi zeszło 23 minuty na prompt 02 i 20 na prompt 03 — dłużej, niż mamy w sali. Paczki są sposobem, żeby mimo to każdy wyszedł z działającym adresem, a wzięcie paczki nic nie kosztuje: to dokładnie to, co produkuje dany krok.
Prompty od 02 do 05 zależą od siebie: checker potrzebuje danych projektu, a strona checkera. Prompt 07 — agent ze świeżym kontekstem atakujący stronę — i prompt 08, czyli całość w jednej wiadomości, są na po warsztacie.
Paczki awaryjne
Dwie paczki z pełnego przebiegu tych promptów. Każda zastępuje jeden krok.
| Jeśli o | Nie masz | Pobierz | Potem |
|---|---|---|---|
| 15:30 | design/data z promptu 02 | design-data.zip | Napisz agentowi Rozpakuj design-data.zip z mojego folderu Pobrane do tego projektu, uruchom npm install i zrób commit. Potem /clear i prompt 03. |
| 15:50 | działającego npm run check z promptu 03 | checker.zip | Napisz agentowi Rozpakuj checker.zip z mojego folderu Pobrane do tego projektu, uruchom npm install i zrób commit. Potem /clear i prompt 04. |
Jak przebiega każdy krok
Prompty 02, 03 i 04 budują coś konkretnego: dekoder, checker, stronę. Każdy przebiega tak samo:
- Plan mode. Zanim wkleisz prompt, przełącz agenta w tryb planowania: w Claude Code naciskaj
Shift+Tab, aż w stopce pojawi się plan mode on; w Codeksie wpisz/plan. Agent robi rozpoznanie i pokazuje plan. Nie może zmieniać plików, dopóki go nie zatwierdzisz. - Implementacja. Przeczytaj plan, popraw go zwykłymi słowami, zatwierdź. W Claude Code wybierz Yes, auto-accept edits: agent zmienia wtedy pliki bez pytania. Kiedy pierwszy raz uruchamia nowy rodzaj komendy (
npm run check,git push), wybierz Yes, and don't ask again. Przed promptem 05, który nie ma planu, naciśnijShift+Tab, aż w stopce pojawi się accept edits on (Codex:/permissions). - Commit. Na końcu kroku agent robi commit z opisem tego, co zrobił ten krok, i wypycha go do twojego repozytorium na GitHubie. Żeby cofnąć krok, napisz agentowi
Wróć do commita z kroku 03(albo z innego kroku).
Żeby zatrzymać agenta w trakcie pracy, naciśnij Esc. Ctrl+C dwa razy zamyka agenta; uruchom go ponownie przez claude --continue albo codex resume --last.
- Czyszczenie. Wpisz
/clear(ta sama komenda w Claude Code i w Codeksie). Następny prompt zaczyna z pustym kontekstem i czyta to, czego potrzebuje, z plików: dane projektu, raport inotes.md.
Dane projektu, nie obrazek
Prompt 02 nie dekoduje pliku .fig jednorazowo. Agent pisze małe narzędzie, npm run design, które czyta plik i zapisuje w design/data/ jako JSON to, czego potrzebują strona i checker: sekcje, kolory, typografię, layout, komponenty, teksty i obrazy. Każdy kolejny krok czyta te pliki. Kiedy projekt się zmieni, uruchom npm run design jeszcze raz.
Agent, który dostaje zrzut ekranu, wyprowadza każdy kolor i wymiar z pikseli i trafia prawie. Kiedy dostaje plik, odczytuje z niego #FF6A1A.
Najpierw testy
Test-driven development to pisanie testu przed kodem. Na tym warsztacie testem jest npm run check, a prompt 03 pisze go, zanim powstanie strona:
- Czerwono. Test powstaje z danych projektu i uruchamia się na pustym projekcie. Nie przechodzi, a raport wypisuje wszystko, czego strona jeszcze nie ma.
- Zielono. Prompt 04 buduje stronę, a prompt 05 poprawia ją, aż test przejdzie.
Test napisany po stronie zwykle opisuje stronę, która już jest. Test napisany wcześniej może opisać tylko projekt.
Pętla
- Plan. Agent mówi, co zmieni i dlaczego. Od drugiej rundy plan zaczyna się od raportu.
- Implementacja. Agent pisze kod. Za pierwszym razem generuje stronę, potem poprawia to, co wskazuje raport.
- Weryfikacja. Test z promptu 03,
npm run check, sam buduje i serwuje stronę, a potem sprawdza ją w prawdziwej przeglądarce i kończy się kodem 0 (zaliczone) albo 1 (niezaliczone). Przy 1 zapisuje raport.
Pętla kończy się, gdy test zwraca 0. Wtedy praca trafia do commita, a strona na produkcję.
Kto sprawdza pracę
Agent może sprawdzać pracę pod dwoma warunkami: nie wykonywał jej w tym samym kontekście i ma szukać błędów, a nie potwierdzać wynik.
| Kto sprawdza | Do czego się nadaje |
|---|---|
| Ten sam agent, w tym samym kontekście | Do niczego. Powtarza rozumowanie, które stworzyło pracę. |
Program: npm run check | Do wszystkiego, co ma dokładną odpowiedź: sekcje, kolory, teksty, kontrast, przewijanie w poziomie. |
| Agenci ze świeżym kontekstem, którzy mają atakować (adversarial review) | Do tego, czego program nie zmierzy: kolejność czytania, bezużyteczny tekst alternatywny, tekst na zdjęciach, teksty niepasujące do marki. |
Program i review uruchamiaj równolegle. Błędy i potwierdzone uwagi trafiają do jednego raportu, a strona idzie na produkcję, gdy raport jest pusty. Na warsztacie strona najpierw trafia na produkcję, żeby każdy miał adres. Review to prompt 07 w nowej sesji, a jego poprawki są publikowane ponownie.
Poziomy sprawdzania
- Testy deterministyczne. Build, błędy w konsoli, sekcje, kolory, teksty, kontrast, przewijanie w poziomie. Za każdym razem ten sam wynik.
- Porównanie mierzone. Zrzuty ekranu porównane z projektem. Wykrywa zmianę, ale jej nie ocenia. Rysunek pokazuje checker gotowej strony; checker, który piszesz w prompcie 03, obejmuje poziom 1.
- Adversarial review. Agenci ze świeżym kontekstem szukają tego, czego poziomy 1 i 2 nie zmierzą. Każda uwaga musi wskazać konkretny element i przetrwać próbę obalenia.
Raport z błędami
Test zapisuje każdy błąd do pliku. Przykład:
**3. [check 4] tekst poniżej minimalnego kontrastu**
- Gdzie: linijka pod nazwą w każdej karcie sekcji lineup
- Oczekiwane: kolor projektu "text / secondary", co najmniej 4.5:1 do tła
- Faktyczne: kolor projektu "text / muted", 4.07:1
- Wskazówka: muted jest przeznaczony tylko na tekst prawny i stopkę
Każdy błąd ma cztery pola: co nie przeszło, gdzie, czego oczekuje projekt, co jest na stronie. W następnej rundzie agent czyta ten plik, a nie swoją pamięć poprzedniej rundy.
Agent nigdy nie może edytować checkera. Jeśli może zmienić test, zaliczenie nic nie znaczy.
Kontekst i notatki
Długa sesja zbiera porzucone próby i stare rozumowanie. Kiedy agent zwalnia albo odpowiada ogólnikami, przenieś stan do plików i zacznij nową sesję.
| Długa sesja | Nowa sesja |
|---|---|
| Trzyma wszystkie wcześniejsze próby | Czyta raport: aktualne błędy |
| Powtarza własne wcześniejsze rozumowanie | Czyta notes.md: co próbowano i z jakim skutkiem |
| Zwalnia | Czyta design/data/: projekt w JSON, zapisany w prompcie 02 |
Zapisz do notes.md, co zostało do zrobienia, w dziesięciu linijkach: co próbowałeś,
co zadziałało, co nie i dlaczego.Potem wpisz /clear i każ agentowi przeczytać notes.md i raport.
Pętle i workflow
- Pętla: plan, implementacja i weryfikacja powtarzane, aż warunek będzie spełniony. Ty definiujesz warunek wyjścia. Prompt 05; w Claude Code także
/goal npm run check exits 0. - Workflow: fazy w ustalonej kolejności, z warunkiem, który musi być spełniony przed następną fazą. Faza może uruchomić kilku agentów jednocześnie. Ty definiujesz fazy. Prompt 08.
Workflow może zawierać pętlę: faza 05 promptu 08 to pętla z promptu 05.
Wzorce workflow
Sześć sposobów układania kilku agentów w workflow. Prompt 08 używa trzech: rozgałęzienie i scalenie (faza 04), pętla do skutku (faza 05) i adversarial verification (faza 07).
1. Klasyfikuj i działaj
Jak działa: jeden agent czyta zadanie i przekazuje je dokładnie jednemu wyspecjalizowanemu agentowi.
Kiedy użyć: zadania różnego rodzaju, które wymagają różnych instrukcji. Przykład: zgłoszenia błędów kierowane do agenta od projektu, od tekstów albo od dostępności.
2. Rozgałęzienie i scalenie
Jak działa: zadanie dzieli się na niezależne części, każdą obsługuje osobny agent równolegle, a ostatni krok scala wyniki.
Kiedy użyć: części, które od siebie nie zależą. Przykład: faza 04 promptu 08 buduje każdą sekcję strony osobnym agentem i składa je w kolejności.
3. Adversarial verification
Jak działa: jeden agent daje wynik, kilku agentów ze świeżym kontekstem próbuje go podważyć, a ich uwagi wracają do pierwszego agenta.
Kiedy użyć: do wszystkiego, czego nie sprawdzi program. Przykład: prompt 07 i faza 07 promptu 08.
4. Generuj i filtruj
Jak działa: kilku agentów tworzy wiele propozycji, a filtr z kryteriami usuwa duplikaty i słabe propozycje.
Kiedy użyć: potrzebujesz opcji, a nie jednej odpowiedzi. Przykład: dziesięć wersji nagłówka hero, z których trzy trafiają do projektanta.
5. Turniej
Jak działa: agenci-sędziowie porównują propozycje parami, a zwycięzcy przechodzą dalej, aż zostanie jedna.
Kiedy użyć: wybór między kompletnymi wersjami, gdy nie ma liczbowej oceny. Przykład: cztery wersje sekcji lineup porównywane po dwie.
6. Pętla do skutku
Jak działa: agent pracuje, test sprawdza, czy pojawiło się coś nowego, i zaczyna się kolejna runda, aż nic nowego się nie pojawi.
Kiedy użyć: poprawianie, aż test przejdzie, albo review, aż runda nie znajdzie nic nowego. Przykład: prompt 05.
Publikacja i sprawdzenie strony na żywo
Prompt 06 uruchamia te komendy za ciebie; nie wpisuj ich sam. Pierwszy deploy zakłada stronę: netlify deploy --prod --dir=dist --site-name turbine-<twoja nazwa na GitHubie>. Kolejne trafiają na tę samą stronę.
Po publikacji porównaj serwowaną stronę z plikami w dist i uruchom npm run check -- --url <adres> na adresie na żywo. Zaliczony test lokalny nie dowodzi, że strona na żywo jest ta sama: stary build, zły folder albo kod dodany przez hosting mogą ją zmienić. Prompt 06 robi oba kroki.
Ograniczenia automatycznych testów
- Automatyczne reguły dostępności obejmują około 30 do 40% WCAG. Zaliczenie oznacza brak znanych błędów, a nie dostępną stronę.
- axe nie ocenia tekstu na zdjęciach ani gradientach. Oznacza takie pary jako incomplete, a test z regułą „zero naruszeń” traktuje incomplete jak zaliczenie. Twój checker musi zmierzyć takie pary z wyrenderowanych pikseli i nie przejść, jeśli nie da się ich zmierzyć.
- Porównanie zrzutów ekranu wykrywa zmianę. Nie mówi, czy zmiana jest lepsza.
- Żaden z tych testów nie ocenia, czy sam projekt jest dobry.
Częste problemy
| Objaw | Przyczyna | Co zrobić |
|---|---|---|
| Test zmienia się na zielony, a nic nie zostało poprawione | Agent edytował test | Przywróć test i przeczytaj różnice |
| Dwa błędne stany na zmianę | Dwa wymagania, które nie mogą być spełnione naraz | Zatrzymaj pętlę. Sprzeczność jest w projekcie albo w briefie |
| Pracuje dalej, choć zadanie jest skończone | Nic nie uruchamia testu na początku | Uruchamiaj test przed każdą poprawką |
| Zwalnia i odpowiada ogólnikami | Kontekst jest pełny | Zapisz stan do notes.md, zacznij nową sesję |
| „Już działa”, a nie działa | Agent relacjonuje zamiast mierzyć | Ufaj tylko kodowi wyjścia npm run check |
| Długo nic się nie dzieje | Krok czeka na dane bez limitu czasu | Daj każdemu krokowi limit czasu |
Po warsztacie
Zacznij od jednego testu, nie od całej strony:
- Wybierz test, który twój zespół robi ręcznie.
- Zamień go w program, który kończy się kodem 0 albo 1.
- Zapisuj jego wynik do pliku, który agent może przeczytać.
- Dopiero wtedy postaw przed nim agenta.
Prompty
Wklejaj je po kolei, po jednym, i po każdym wpisz /clear. Prompty od 02 do 05 zależą od siebie; jeśli któryś nie skończy się na czas, użyj jego paczki awaryjnej z tabeli wyżej.
Wklejaj każdy prompt w całości. Reguły w prompcie znaczą tyle samo co samo polecenie.
Prompt 01
Start
Zakłada w folderze repozytorium projekt Astro z Tailwindem, uruchamia serwer deweloperski i zapisuje projekt w twoim repozytorium na GitHubie. Bez stron i bez treści.
Zanim wkleisz
Otwórz terminal, wejdź do folderu projektu i uruchom agenta:
cd turbine
claude
W Codeksie wpisz codex zamiast claude. Jeśli cd turbine mówi, że nie ma takiego folderu, wpisz ls i poszukaj turbine na liście. Jeśli tam też go nie ma, załóż go i wejdź do środka:
mkdir turbine
cd turbine
claude
Nic przez to nie tracisz: prompt poniżej sprawdza, czy masz już na GitHubie repozytorium turbine, i zakłada je, jeśli go nie masz.
Esc zatrzymuje agenta w trakcie pracy. Ctrl+C dwa razy go zamyka; uruchomisz go ponownie przez claude --continue albo codex resume --last.
Załóż w tym folderze nowy projekt strony internetowej.
Najpierw upewnij się, że ten folder jest repozytorium gita, które wypycha zmiany na GitHuba,
bo każdy kolejny krok kończy się commitem i pushem.
1. Uruchom gh auth status. Jeśli nie jestem zalogowany, zatrzymaj się i powiedz mi to.
2. Uruchom gh repo view turbine. Jeśli na moim koncie jest już repozytorium turbine, zrób
z tego folderu repozytorium gita, którego zdalne origin wskazuje na tamto repozytorium,
i pobierz to, co już w nim jest.
3. Jeśli repozytorium turbine nie ma, załóż je z tego folderu: git init -b main, jeśli to
jeszcze nie jest repozytorium gita, a potem
gh repo create turbine --private --source . --remote origin
4. Powiedz mi jedną linijką, co zastałeś i co zrobiłeś.
Potem zajmij się samą stroną.
Użyj Astro z Tailwind CSS. Statyczny output — bez Reacta, Vue ani Svelte, bez serwera, bez
bazy danych. Node jest już zainstalowany.
Potem uruchom serwer deweloperski i podaj mi adres, który mam otworzyć w przeglądarce.
Nie buduj jeszcze żadnych stron. Nie wymyślaj żadnej treści. Design przyjdzie w następnym
kroku i chcę, żeby strona była wtedy nadal pusta.
W trakcie pracy mów mi jedną linijką, co robi każda komenda. Nigdy wcześniej nie używałem
terminala i chcę nadążać.
Potem zrób commit wszystkiego z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok
jest skończony, żebym mógł wyczyścić sesję.Oczekiwany wynik. Najpierw jedna linijka o repozytorium — zastane albo założone. Potem kilka minut instalacji i linijka w rodzaju Local http://localhost:4321/. Pod tym adresem jest strona zastępcza Astro. Agent trzyma serwer uruchomiony. Potem robi commit projektu i push: commit widać w twoim repozytorium na github.com.
Agent pyta, zanim uruchomi komendę. Wybierz opcję, która pozwala na ten rodzaj komend bez pytania. Codex pyta też, czy ufasz folderowi. Odpowiedz tak.
Po tym prompcie wpisz /clear i naciśnij Enter. /clear kończy rozmowę i zaczyna nową, z pustym kontekstem, w Claude Code i w Codeksie. Nic nie przepada: kolejny prompt czyta to, czego potrzebuje, z plików w projekcie.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Zaczyna budować landing page | Naciśnij Esc, potem powiedz Stop. Cofnij strony, które utworzyłeś. Chcę pusty projekt, dopóki nie dam ci designu. |
| Pyta, zanim uruchomi komendę | Wybierz opcję, która pozwala na ten rodzaj komend bez pytania. |
Not inside a trusted directory | Codex pyta o zgodę. Odpowiedz tak. |
| Codex pyta o dostęp do sieci | Odpowiedz tak. Instalacja paczek i push go wymagają. |
command not found: npm | Node nie jest zainstalowany. Wróć na stronę Przygotowanie. |
| Prosi o wybór szablonu | Wybierz minimalny albo pusty szablon. Bez przykładowej treści. |
| „Katalog nie jest pusty" | W folderze jest coś poza plikami gita, na przykład folder design. Wyjmij go, uruchom ten prompt i włóż go z powrotem przed promptem 02. |
| Przez dwie minuty nic się nie wypisuje | Instaluje. Poczekaj do pięciu minut. |
git push nie działa albo prosi o hasło | Uruchom gh auth status w nowym oknie terminala (w dowolnym folderze). Jeśli nie jesteś zalogowany, powtórz krok Zaloguj się ze strony Przygotowanie, potem powiedz Zrób push jeszcze raz. |
Zatrzymuje się, bo gh auth status mówi, że nie jesteś zalogowany | Uruchom gh auth login w nowym oknie terminala, wybierz GitHub.com i przeglądarkę, potem powiedz Spróbuj jeszcze raz. |
Name already exists on this account | Repozytorium już masz. Powiedz Użyj repozytorium turbine, które już istnieje, jako origin. |
Dlaczego jest tak napisany
- Sprawdzenie repozytorium jest pierwsze: każdy kolejny krok kończy się commitem i pushem, więc folder bez zdalnego
originzamienia każdy z nich w małą kłótnię. Sprawdzenie kosztuje jedną komendę; odkrycie tego przy prompcie 04 kosztuje cały krok. - „Nie buduj jeszcze żadnych stron": bez tego agent wymyśla hero, siatkę funkcji i opinie klientów, zanim zobaczy design.
- Commit na końcu każdego kroku: każdy krok jest zapisany w repozytorium i do każdego da się wrócić.
/clearmiędzy krokami: każdy prompt zaczyna z pustym kontekstem i czyta stan z plików, a nie z długiej rozmowy.
Prompt 02
Popatrz na design
Agent planuje i buduje dekoder pliku Figmy: skrypt w projekcie, uruchamiany przez npm run design, który zapisuje design jako JSON w design/data. Każdy kolejny krok i checker czytają te dane. Jeszcze bez kodu strony.
Zanim wkleisz
- Na stronie warsztatu kliknij Pobierz turbine.fig.
- Włóż plik do folderu
designw projekcie. Najprościej: powiedz agentowiPrzenieś turbine.fig z mojego folderu Pobrane do nowego folderu design w tym projekcie.Musi leżeć w projekcie: Claude Code pyta o zgodę, zanim przeczyta plik spoza folderu projektu. - Przełącz agenta w plan mode. W plan mode agent robi rozpoznanie i pokazuje plan, a nie zmienia żadnego pliku, dopóki go nie zatwierdzisz. Claude Code: naciskaj
Shift+Tab, aż w stopce pojawi się plan mode on. Codex: wpisz/plani naciśnij Enter.
Nie musisz rozumieć całego planu. Sprawdź trzy rzeczy: to skrypt, który uruchamia npm run design, zapisuje pliki JSON do design/data i nie pisze kodu strony. Potem zatwierdź. W Claude Code wybierz Yes, auto-accept edits, żeby agent nie pytał przed każdą zmianą pliku.
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
W tym projekcie jest folder design, a w nim plik .fig. To jest sam plik Figmy, tak jak
zapisuje go Figma. To nie jest obrazek: to cały design jako dane — każdy tekst,
kolor, zmienna, komponent i zdjęcie.
Pracuj na tym jednym pliku i na niczym więcej. Nie szukaj na tym komputerze designu,
specyfikacji, obrazków referencyjnych ani niczego innego o tym projekcie: nic więcej nie ma,
a cokolwiek znajdziesz, nie jest designem. Jeśli plik wymienia coś, czego w nim nie ma,
wpisz to w punkt 6, zamiast tego szukać.
Chcę narzędzia, a nie jednorazowego rozkodowania: skryptu w tym projekcie, który czyta plik
.fig z folderu design i zapisuje dane designu, których będą potrzebować strona i checker.
Spraw, żeby uruchamiała go komenda „npm run design". Ponowne uruchomienie na nowym pliku .fig
ma odświeżyć dane, żeby nikt już nie musiał ręcznie rozkodowywać ani eksportować designu.
Dekoder ma być mały: jeden skrypt, bez zestawu testów dla dekodera, bez dodatkowych narzędzi.
Przestań nad nim pracować, gdy tylko siedem plików JSON i zdjęcia są zapisane.
Nie ma programu, który otwiera plik .fig, więc skrypt rozkodowuje go sam. Co wiadomo
o formacie:
- Plik .fig to zip. Design jest w środku, w canvas.fig. thumbnail.png to tylko mały
podgląd: nie pracuj na nim.
- canvas.fig zaczyna się od bajtów „fig-kiwi" i numeru wersji, potem są kawałki, każdy
poprzedzony swoją długością. Pierwszy to schemat w binarnym formacie kiwi
(github.com/evanw/kiwi); drugi to dokument zakodowany tym schematem. Każdy kawałek jest
skompresowany, surowym deflate albo zstd.
- Folder images w zipie trzyma zdjęcia, nazwane hashem, którego używają wypełnienia.
- Pomiń wszystko, co ma isSoftDeleted, i wszystko, co należy do czegoś, co to ma.
Zostało usunięte w Figmie, a wciąż siedzi w pliku. Zmienna w usuniętej kolekcji sama nie
jest oznaczona — pomiń ją też.
- Tekst w komponencie może pochodzić z właściwości komponentu i z nadpisań. Jeśli każda
karta tego samego rodzaju pokazuje te same słowa, czytasz komponent zamiast instancji.
Rozwiąż to, zanim zaufasz jakiemukolwiek tekstowi.
Skrypt może użyć paczki; sieć jest dostępna. Nie pisz żadnego kodu strony.
Skrypt zapisuje pliki JSON do design/data, a zdjęcia do design/images:
- design/data/sections.json: każda sekcja, w kolejności od góry strony, i co jest w każdej
z nich
- design/data/colours.json: każdy kolor, po nazwie z designu, z dokładną wartością i miejscem
użycia
- design/data/typography.json: każdy styl tekstu, z fontem, rozmiarem, grubością, interlinią
i odstępem między literami, i gdzie który jest użyty
- design/data/layout.json: każda szerokość, którą design obejmuje, a przy każdej odstępy,
rozmiary, zaokrąglenia rogów i kolumny
- design/data/components.json: każdy komponent, z jego wariantami i stanami
- design/data/copy.json: każdy tekst, sekcja po sekcji, słowo w słowo, razem z tekstami
alternatywnymi i etykietami, których nie pokazuje żadna ramka
- design/data/images.json: każdy obraz, z jego plikiem w design/images, miejscem użycia,
rozmiarem i tekstem alternatywnym
Każda wartość jest przepisana dokładnie tak, jak jest w pliku: bez zaokrąglania, bez zmiany
nazw. Od teraz design/data jest designem. Każdy kolejny krok czyta je zamiast pliku .fig,
a checker sprawdza stronę względem nich. Jeśli okaże się, że jakiejś wartości brakuje,
poprawka trafia do skryptu, a potem npm run design uruchamia się jeszcze raz.
Twój plan ma powiedzieć, jak skrypt czyta plik, jakiej paczki używa, jeśli jakiejś, i jaki
kształt ma każdy plik JSON.
Kiedy zatwierdzę plan, napisz skrypt, uruchom npm run design, potem pokaż mi listę, a jej
punkt 6 zapisz do notes.md:
1. Każdą sekcję, w kolejności od góry strony, i imię na każdej karcie artysty.
2. Każdy kolor, po nazwie z designu, z dokładną wartością.
3. Każdy rozmiar tekstu i gdzie który jest użyty.
4. Każdą szerokość, którą design obejmuje.
5. Każdy plik w design/data i co w nim jest, po jednej linijce.
6. Wszystko, co w pliku się nie zgadza albo czego w nim nie ma, a co inaczej musiałbyś
zgadnąć.
Punkt 6 obchodzi mnie najbardziej. Bądź konkretny i bądź szczery: „w pliku jest stan hover,
do którego nie mam żadnych wartości" jest warte więcej niż pewne siebie zgadnięcie.
Potem zatrzymaj się i poczekaj, aż odpowiem na punkt 6.
Kiedy odpowiem na punkt 6, zapisz moje odpowiedzi do notes.md. Potem zrób commit wszystkiego
z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok jest skończony, żebym mógł
wyczyścić sesję.Oczekiwany wynik. Najpierw plan: jak skrypt czyta plik, jakiej paczki używa i jaki kształt ma każdy plik JSON. Przeczytaj go, popraw zwykłymi słowami albo zatwierdź. Potem agent pisze i uruchamia dekoder. Może to potrwać dłużej, niż pozwala warsztat: o 15:30 każdy, kto nie ma jeszcze design/data, bierze paczkę awaryjną (ostatni wiersz tabeli niżej). Na końcu jest npm run design, w design/data siedem plików JSON, w design/images zdjęcia, a w czacie lista z sześcioma punktami.
Sprawdź w liście dwie rzeczy:
- Punkt 1 zgadza się z designem: dwanaście kart artystów z dwunastoma różnymi imionami, a nie ogólny landing page.
- Punkt 6 nie jest pusty. Odpowiadaj nazwami z designu, na przykład nazwą koloru albo stylu tekstu z punktu 2, a nie nowymi wartościami. Jeśli punkt 6 jest pusty, zapytaj
co z tego przeczytałeś, a co wywnioskowałeś?
Na to, na co nie umiesz tak odpowiedzieć, wklej:
Tam, gdzie nie odpowiedziałem: wybierz najbardziej prawdopodobny odczyt, zapisz go do
notes.md jako założenie i jedź dalej.Po twoich odpowiedziach agent robi commit i push.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Pisze kod, zanim pokaże plan | Naciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę. |
| Rozkodowuje plik raz i nie pisze skryptu | Prosiłem o narzędzie. Przenieś rozkodowanie do skryptu, niech uruchamia go npm run design, i uruchom go. |
| Pisze testy albo dodatkowe narzędzia dla dekodera | Dekoder ma być jednym skryptem. Bez testów dla niego. Zapisz siedem plików JSON i zdjęcia, potem przestań. |
| W pliku JSON brakuje wartości | W design/data/typography.json nie ma interlinii. Popraw skrypt, żeby je czytał, i uruchom npm run design jeszcze raz. |
| Zaczyna budować stronę | Naciśnij Esc, potem powiedz Stop. W tym kroku bez kodu strony. Cofnij wszystko, co napisałeś dla strony. |
| Prosi o przeczytanie pliku spoza folderu | Plik .fig leży obok projektu, nie w nim. Przenieś go do design w projekcie i powiedz Jest teraz w design. |
| Przeszukuje dysk albo czyta inny projekt | Naciśnij Esc, potem powiedz Stop. Design to plik .fig w design i nic więcej. Nie używaj niczego, co znalazłeś poza tym projektem. |
| „Nie mogę otworzyć pliku binarnego" | To jest zip. Skrypt ma go rozpakować i rozkodować canvas.fig tak, jak opisałem w poprzedniej wiadomości. |
| Opisuje małą, rozmytą stronę | Przeczytał thumbnail.png. To jest podgląd. Pracuj na canvas.fig. |
zstd nieobsługiwany albo dekompresja się sypie | Node jest starszy niż 22.15. Użyj paczki, która czyta zstd, i działaj dalej. |
| Codex pyta o dostęp do sieci | Odpowiedz tak. Instalacja paczki go wymaga. |
| Claude Code pyta przed każdą komendą | Odpowiedz tak i wybierz opcję, która przestaje pytać o ten rodzaj komend. |
| Każda karta artysty ma to samo imię | Czytasz komponent, a nie instancje. Rozwiąż w skrypcie właściwości komponentu i nadpisania. |
| Kolory wracają jako „ciemny szary" | Podaj dokładne wartości. Jeśli skrypt nie potrafi ich odczytać, powiedz to. |
git push nie działa | Uruchom gh auth status w nowym oknie terminala (w dowolnym folderze). Jeśli nie jesteś zalogowany, powtórz krok Zaloguj się ze strony Przygotowanie, potem powiedz Zrób push jeszcze raz. |
Jest 15:30, a nie masz design/data | Naciśnij Esc. Jeśli stopka pokazuje plan mode, naciskaj Shift+Tab, aż zniknie (Codex: wyjdź z /plan, wpisując /plan jeszcze raz albo Esc). Pobierz design-data.zip ze strony warsztatu i powiedz agentowi: Rozpakuj design-data.zip z mojego folderu Pobrane do tego projektu, zrób to, co mówi RESCUE.md w środku, i zrób commit. Potem /clear i prompt 03. W Codespace przeciągnij zip ze swojego komputera na listę plików po lewej, potem powiedz Rozpakuj design-data.zip w tym projekcie, zrób to, co mówi RESCUE.md w środku, i zrób commit. |
Dlaczego jest tak napisany
- Najpierw plan: złe podejście do pliku poprawiasz jednym zdaniem, zanim skrypt powstanie.
- Skrypt, a nie jednorazowe rozkodowanie: nowa wersja pliku
.figto jednonpm run design, a strona i checker czytają ten sam JSON. - Punkt 6: lista rzeczy, których plik nie określa, to ta część briefu, której nikt nie napisał.
Prompt 03
Najpierw checker
Agent pisze npm run check: program, który testuje stronę w prawdziwej przeglądarce względem design/data i zapisuje raport do pliku. Pisze go, zanim strona powstanie.
Pisanie testu przed kodem nazywa się test-driven development. Test powstaje pierwszy i nie przechodzi, bo nie ma jeszcze czego sprawdzać. Prompt 04 buduje potem stronę, a prompt 05 poprawia ją, aż test przejdzie.
Zanim wkleisz
Przełącz agenta w plan mode, tak jak przed promptem 02. Claude Code: Shift+Tab, aż w stopce pojawi się plan mode on. Codex: /plan. Zatwierdzając plan w Claude Code, wybierz Yes, auto-accept edits.
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
Napisz teraz program, który sprawdza stronę względem designu, zanim strona powstanie.
To musi być program, nie opinia. Uruchamia się, patrzy na prawdziwą stronę w prawdziwej
przeglądarce i kończy kodem 0, jeśli wszystko jest w porządku, a kodem różnym od zera,
jeśli cokolwiek jest nie tak. Nigdy nie pyta modelu językowego, nigdy nie pyta mnie i
dwa razy na tej samej stronie daje tę samą odpowiedź.
Spraw, żeby uruchamiała go komenda „npm run check". Zainstaluj, co potrzebne, żeby
sterować prawdziwą przeglądarką i testować dostępność. To są narzędzia do sprawdzania;
żadne z nich nie wchodzi do strony.
Domyślnie sam buduje stronę, sam serwuje zbudowane pliki i sprawdza tę stronę. Nie może
zależeć od serwera deweloperskiego uruchomionego przez kogoś innego. Musi też przyjmować
adres — npm run check -- --url https://… — i uruchamiać te same testy na tamtej stronie,
żeby później mógł ocenić też stronę na żywo.
Co sprawdzać, wyprowadź z design/data, nie ode mnie. Nie ma jeszcze strony, na którą można
patrzeć: każdy test wynika z designu. Minimum, i to względem strony tak, jak renderuje ją
przeglądarka, a nie względem kodu źródłowego:
1. że projekt się buduje, bez błędów
2. że wczytanie strony nie produkuje błędów w konsoli przeglądarki
3. że każda sekcja, którą definiuje design, jest obecna i w kolejności z designu
4. że jest dostępna, przy każdej szerokości, którą design określa
5. że każdy kolor, który strona maluje, jest kolorem z designu — cokolwiek innego to błąd
6. że każdy fragment tekstu z designu jest na stronie
7. że nic nie wystaje w bok przy najwęższej szerokości, którą design określa
8. że każdy obrazek ma tekst alternatywny i że nie jest nim nazwa pliku
Kiedy coś nie przechodzi, raport musi powiedzieć cztery rzeczy: co nie przeszło, gdzie na
stronie, co według designu powinno tam być i co faktycznie tam było. „Problem
z kontrastem na stronie" jest bezużyteczne. Nazwanie elementu, wartości oczekiwanej,
wartości zmierzonej i progu — to jest cała robota.
Zapisz raport do pliku, nie tylko wypisz go na ekran, bo później podam ci ten plik
z powrotem. Powiedz mi, jak go nazwałeś.
Trzy reguły dotyczące samego checkera:
- Jeśli test nie może się wykonać — przeglądarka nie wstaje, strona się nie wczytuje,
brakuje design/data — to jest PORAŻKA, nigdy zaliczenie i nigdy ciche pominięcie.
Test, który się nie odbył, nie może wyglądać jak test, który przeszedł.
- Wynik dostępności oznaczony jako incomplete, na przykład tekst na zdjęciu albo gradiencie,
nie jest zaliczeniem. Zmierz kontrast z wyrenderowanych pikseli pod tym tekstem i zgłoś
błąd tylko wtedy, gdy zmierzony stosunek jest poniżej progu albo gdy nie da się go zmierzyć.
- Nie rozluźniaj testów, żeby przechodziły.
Twój plan ma wymienić każdy test, co czyta z design/data i jak mierzy.
Strony jeszcze nie ma. Kiedy checker będzie napisany, uruchom go od razu na projekcie takim,
jaki jest: ma nie przejść, a raport ma powiedzieć dlaczego. Test, który przechodzi na pustej
stronie, niczego nie sprawdza.
Potem zrób commit wszystkiego z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok
jest skończony, żebym mógł wyczyścić sesję.Oczekiwany wynik. Najpierw plan: testy, co każdy czyta z design/data, jak mierzy, jakie narzędzia instaluje i jak nazywa się plik z raportem. Zatwierdź go albo popraw. Potem checker powstaje i uruchamia się na pustym projekcie. Nie przechodzi, a raport mówi dlaczego przy każdym teście: brakuje sekcji, brakuje tekstów i tak dalej. Potem commit i push.
Jak odróżnić checker, który celowo nie przechodzi, od zepsutego:
- Działa: plik z raportem istnieje i wymienia każdy test z miejscem, wartością oczekiwaną i faktyczną.
- Zepsuty: błąd ze ścieżkami plików i numerami linii, a pliku z raportem nie ma.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Pisze kod, zanim pokaże plan | Naciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę. |
| Przechodzi na pustym projekcie | Przeszło bez strony. Pokaż mi, które testy się wykonały i co każdy zmierzył. |
| Chce najpierw zbudować stronę, żeby test miał co sprawdzać | W tym kroku bez strony. Test ma nie przejść na projekcie takim, jaki jest. |
| Test jest pominięty | Test, który nie może się wykonać, to porażka. Niech nie przechodzi i niech powie, dlaczego się nie wykonał. |
| Wynik kontrastu oznaczony jako incomplete (tekst na zdjęciu albo gradiencie) | Zmierz ten kontrast z wyrenderowanych pikseli pod tekstem. Zgłoś błąd tylko wtedy, gdy stosunek jest poniżej progu albo nie da się go zmierzyć. |
| Raport mówi „problem z kontrastem" bez szczegółów | Każdy błąd musi podać element, wartość oczekiwaną, wartość zmierzoną i próg. |
| Bierze wartości z własnego wyobrażenia o designie | Każdy test czyta wartości z design/data. Pokaż mi, skąd pochodzi każda z nich. |
| Pyta, jakiej biblioteki testowej użyć | Twój wybór. Weź taką, która steruje prawdziwą przeglądarką i testuje dostępność. |
| Codex pyta o dostęp do sieci | Odpowiedz tak. Instalacja przeglądarki i narzędzi do dostępności go wymaga. |
| Raport mówi, że strona się nie ładuje | Checker ma sam zbudować i serwować stronę. Nie polegaj na serwerze deweloperskim. |
npm run check -- --url https://example.com niczego nie zmienia | Checker musi przyjmować --url i uruchamiać te same testy na tym adresie. |
| Jest 15:50, a checker jest zepsuty (błąd, brak pliku z raportem) | Naciśnij Esc. Jeśli stopka pokazuje plan mode, naciskaj Shift+Tab, aż zniknie (Codex: wyjdź z /plan, wpisując /plan jeszcze raz albo Esc). Pobierz checker.zip ze strony warsztatu i powiedz agentowi: Rozpakuj checker.zip z mojego folderu Pobrane do tego projektu, zrób to, co mówi RESCUE.md w środku, i zrób commit. Zawiera własne design/data, które zastępuje twoje. Potem /clear i prompt 04. W Codespace przeciągnij zip ze swojego komputera na listę plików po lewej, potem powiedz Rozpakuj checker.zip w tym projekcie, zrób to, co mówi RESCUE.md w środku, i zrób commit. |
Dlaczego jest tak napisany
- Najpierw testy: test powstaje z designu, zanim jest jakakolwiek strona, więc nie da się go dopasować do tego, co zbudowano.
- Program, nie opinia: kod wyjścia 0 albo nie, ta sama odpowiedź przy każdym uruchomieniu, bez modelu językowego.
- Incomplete to nie zaliczenie: narzędzia do dostępności zgłaszają tekst na zdjęciu albo gradiencie jako „incomplete". Checker mierzy wyrenderowane piksele pod tym tekstem i zgłasza błąd tylko wtedy, gdy stosunek jest za niski albo nie da się go zmierzyć; inaczej reguła „zero naruszeń" przepuściłaby go niezauważony, a reguła „incomplete to błąd" nigdy nie pozwoliłaby stronie przejść.
Prompt 04
Zbuduj to
Agent planuje stronę, buduje ją całą z design/data w jednym przebiegu, potem raz uruchamia checker z promptu 03 i pokazuje, co jeszcze nie przechodzi. Potem ty przeglądasz stronę, a agent zapisuje twój przegląd do notes.md, zanim zrobi commit.
Zanim wkleisz
Przełącz agenta w plan mode, tak jak przed promptami 02 i 03. Claude Code: Shift+Tab, aż w stopce pojawi się plan mode on. Codex: /plan.
Żeby agent nie pytał przed każdą zmianą pliku: w Claude Code przy zatwierdzaniu planu wybierz Yes, auto-accept edits; stopka pokaże wtedy accept edits on. Akceptowanie zmian obejmuje tylko pliki. Kiedy agent pierwszy raz uruchamia nowy rodzaj komendy, na przykład npm run check, git commit albo git push, Claude Code i tak pyta: wybierz Yes, and don't ask again for … commands. W Codeksie wpisz /permissions i wybierz opcję, która pozwala edytować pliki i uruchamiać komendy w tym folderze bez pytania; git push może i tak zapytać o dostęp do sieci.
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
Zbuduj teraz stronę, na podstawie designu. Czytaj design/data i notes.md; nie rozkodowuj
pliku .fig jeszcze raz.
Twój plan ma wymienić sekcje w kolejności z design/data/sections.json i powiedzieć, jakich
kolorów, stylów tekstu, wartości layoutu, tekstów i obrazów używa każda z nich.
Zbuduj całą stronę za jednym razem: każdą sekcję z design/data/sections.json, w tej
kolejności. Nie zatrzymuj się między sekcjami, żeby mnie pytać. Kiedy skończysz, powiedz mi,
które sekcje zbudowałeś, po jednej linijce, i podaj adres do otwarcia.
Jeśli musisz zobaczyć stronę w przeglądarce, a serwer deweloperski nie działa, uruchom go sam
i podaj mi adres.
Reguły, wszystkie nienegocjowalne:
- Każdy kolor i każdy rozmiar pochodzi z design/data. Jeśli wartości, której potrzebujesz,
tam nie ma, sprawdź, czy nie gubi jej skrypt uruchamiany przez npm run design; jeśli tak,
popraw skrypt i uruchom go jeszcze raz. Jeśli design jej nie ma, nie wybieraj sam: to
pytanie do notes.md, niżej.
- Każde słowo pochodzi z design/data/copy.json. Nie pisz tekstów. Nie poprawiaj tekstów.
Jeśli jakiegoś fragmentu brakuje, zapisz to do notes.md; nie zapychaj dziury.
- Każde zdjęcie pochodzi z designu: użyj obrazów wymienionych w design/data/images.json,
nigdy zastępczych.
- Do samej strony nie wchodzi nic nowego: żaden framework UI, żadna biblioteka
komponentów, żaden serwis z fontami ani ikonami. Strona jest z Astro i Tailwinda.
- Strona musi działać z niezaładowanymi obrazkami i z wyłączonym JavaScriptem. Wszystko,
co sprytne, jest dodatkiem na czymś, co już działa bez tego.
Jeśli design czegoś nie mówi, nie zgaduj. Zapisz pytanie do notes.md, wybierz odczyt, który
uważasz za najbardziej prawdopodobny, powiedz mi jedno i drugie, i jedź dalej. Wolę poprawić
jedno założenie niż odkryć sześć.
Kiedy strona będzie zbudowana, uruchom raz npm run check i pokaż mi, ile testów nie
przechodzi i które. Nie naprawiaj ich jeszcze i nie zmieniaj checkera.
Potem poczekaj, aż przejrzę stronę. Kiedy podam ci mój przegląd, zapisz go do notes.md pod
nagłówkiem „Design review" i jeszcze niczego nie naprawiaj. Potem zrób commit wszystkiego
z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok jest skończony, żebym mógł
wyczyścić sesję.Oczekiwany wynik. Najpierw plan: sekcje w kolejności i to, czego każda używa z design/data. Zatwierdź go albo popraw. Potem kilka minut pracy, lista zbudowanych sekcji i adres. Potem jedno uruchomienie npm run check: mniej błędów niż po prompcie 03, zwykle nie zero. Potem agent czeka na twój przegląd.
Otwórz stronę obok designu w Figmie i przeglądaj ją sekcja po sekcji. Nie masz konta w Figmie albo Figma prosi o zalogowanie? Porównaj z gotową stroną, do której link jest na stronie głównej. Wpisz każdy problem zwykłymi słowami, na przykład Odstęp pod nagłówkiem jest za ciasny, a pomarańczowy to nie ten pomarańczowy., a po nich wklej tę linijkę:
Zapisz te problemy do notes.md pod nagłówkiem „Design review". Jeszcze ich nie naprawiaj.Agent zapisuje twój przegląd do notes.md, robi commit i push. Prompt 05 naprawia to, co mają dane designu.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Pisze kod, zanim pokaże plan | Naciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę. |
| Zatrzymuje się po jednej sekcji i pyta | Nie czekaj na mnie. Zbuduj całą stronę, potem mi pokaż. |
| Zaczyna naprawiać błędy | Naciśnij Esc, potem powiedz Stop. Uruchom test raz i pokaż wynik. Naprawianie to następny krok. |
| Zaczyna naprawiać twój przegląd | Naciśnij Esc, potem powiedz Stop. Tylko zapisz mój przegląd do notes.md. Naprawianie to następny krok. |
| Zmienia checker | Przywróć checker dokładnie tak, jak był. Zmienia się strona, nie checker. |
| Pyta, zanim uruchomi komendę | Wybierz Yes, and don't ask again for … commands. |
| Tekst, którego nigdy nie widziałeś | Skąd wzięło się to zdanie? Zastąp je tekstem z design/data/copy.json. |
| Szare pudełko tam, gdzie powinno być zdjęcie | Użyj tu obrazu, który wymienia design/data/images.json. |
| Kolor, który jest prawie dobry | To nie jest wartość z design/data/colours.json. Użyj dokładnej i powiedz mi, jak się nazywa. |
| Znowu zaczyna rozkodowywać .fig | Naciśnij Esc, potem powiedz Stop. Wszystko, czego potrzebujesz, jest w design/data i notes.md. |
| Mówi, że skończył, a wyraźnie nie | Które sekcje zbudowałeś, a których jeszcze nie ma? Wypisz jedne i drugie. |
| Jest coraz wolniejszy i mniej konkretny | Kontekst jest pełny. Powiedz Zaktualizuj notes.md tym, gdzie jesteśmy, wpisz /clear, potem powiedz Przeczytaj design/data i notes.md i buduj dalej. |
| Jest 16:08, a strona nie jest skończona | Naciśnij Esc, potem powiedz Stop. Zrób commit tego, co masz, i push. Potem /clear i prompt 05. |
Dlaczego jest tak napisany
- Każda wartość pochodzi z
design/data: wartość, którą agent wybierze sam, checker zgłosi jako błąd. - Test uruchamia się raz i nic nie jest naprawiane: naprawianie to prompt 05, w nowej sesji, w pętli.
- Twój przegląd trafia do
notes.mdprzed commitem:/clearczyści rozmowę, a prompt 05 czyta przegląd z pliku.
Prompt 05
Pętla
W nowej sesji agent uruchamia checker z promptu 03 (npm run check), czyta plik z raportem, który checker zapisuje, naprawia pierwszy błąd i uruchamia checker ponownie, aż zakończy się kodem 0. Naprawia też problemy z twojego przeglądu w notes.md, które mają pokrycie w danych designu. Każda runda ma trzy kroki: zaplanuj poprawkę, wprowadź ją, uruchom checker. Kiedy test przejdzie, agent robi commit i push.
Zanim wkleisz
Wpisz /clear. Żeby agent nie zatrzymywał się przed każdą zmianą pliku: w Claude Code naciskaj Shift+Tab, aż w stopce pojawi się accept edits on. Akceptowanie zmian obejmuje tylko pliki: kiedy agent pierwszy raz uruchamia nowy rodzaj komendy, na przykład npm run check, git commit albo git push, Claude Code i tak pyta, więc wybierz Yes, and don't ask again for … commands. W Codeksie wpisz /permissions i wybierz opcję, która pozwala edytować pliki i uruchamiać komendy w tym folderze bez pytania; git push może i tak zapytać o dostęp do sieci.
Przeczytaj notes.md. Potem uruchom npm run check.
Pozycje pod nagłówkiem „Design review" w notes.md to problemy, które znalazłem, oglądając
stronę. Te, które mają pokrycie w design/data, traktuj jak błędy z raportu i też je napraw. Przy
każdej, która nie ma pokrycia w design/data, zapisz do notes.md jedną linijkę, że go nie ma,
i zostaw ją.
Jeśli npm run check kończy się kodem 0 i nie została żadna pozycja z „Design review", która ma
pokrycie w design/data, zrób commit wszystkiego z opisem, że test przechodzi, zrób push
i powiedz mi, że skończyliśmy.
W przeciwnym razie przeczytaj raport, który zapisał test, i napraw to, co wymienia. Potem
uruchom npm run check jeszcze raz. Powtarzaj, aż skończy się kodem 0, a pozycje z „Design
review" będą załatwione.
Każda runda ma trzy kroki. Plan: weź pierwszy błąd z raportu i zapisz do notes.md jedną
linijkę: co nie przechodzi, co według ciebie jest przyczyną i co zmienisz. Implementacja:
wprowadź tę zmianę. Weryfikacja: uruchom npm run check.
Pracuj w kolejności, w jakiej raport wymienia rzeczy. Naprawiaj przyczynę, nie objaw:
jeśli kolor jest zły, użyj tego z designu, nie przesuwaj go, aż liczba drgnie. Rób
najmniejszą zmianę, która usuwa dany błąd, i nie ruszaj niczego, co już przechodziło.
Trzy reguły, a pierwsza znaczy więcej niż dwie pozostałe:
1. NIGDY nie zmieniaj checkera, żeby test przeszedł. Ani progu, ani pominiętej asercji,
ani wyłączonej reguły. Jeśli naprawdę uważasz, że jakiś test jest zły, ZATRZYMAJ SIĘ,
powiedz mi który i dlaczego, i nie zmieniaj niczego.
2. Nie dodawaj niczego, czego nie ma w designie, i nie wymyślaj tekstów.
3. Jeśli ten sam błąd przeżyje trzy próby, zatrzymaj się i powiedz mi, co próbowałeś za
każdym razem i co się stało. Trzy nieudane naprawy zwykle znaczą, że design prosi
o dwie rzeczy, które nie mogą być jednocześnie prawdziwe, i czwarta próba tego nie
rozwiąże.
Zapisuj do notes.md na bieżąco, co próbowałeś i co się stało, żeby nowa sesja mogła to
podjąć. Pracuj dalej sam. Nie proś mnie o potwierdzenie po każdej rundzie./goal
Najpierw wklej prompt powyżej, potem tę linijkę:
/goal npm run check exits 0W Claude Code /goal ustawia warunek. Po każdej turze osobny model sprawdza, czy warunek jest spełniony, a Claude pracuje dalej, dopóki nie jest. Agent musi więc uruchomić npm run check i pokazać kod wyjścia w rozmowie. Codex też ma /goal: ta sama linijka go ustawia, a /goal clear usuwa. Bez /goal pętlę podtrzymuje sam prompt; jeśli agent zatrzyma się za wcześnie, powiedz Jedź dalej.
Oczekiwany wynik. Kilka rund: zaplanuj, napraw, sprawdź. Liczba błędów spada, może wzrosnąć o jeden, kiedy naprawa zepsuje coś innego, i znowu spada. W notes.md przybywa jedna linijka na rundę. Kiedy npm run check zwróci kod 0, agent robi commit i push.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Zedytował checker | Przywróć checker dokładnie tak, jak był, i napraw stronę zamiast niego. Potem zobacz, co zmienił w checkerze. |
Chcesz wcześniej zatrzymać /goal | Wpisz /goal clear. |
| Pyta przed każdą zmianą pliku | Claude Code: Shift+Tab, aż w stopce pojawi się accept edits on. Codex: /permissions. |
| Pyta, zanim uruchomi komendę | Wybierz Yes, and don't ask again for … commands. |
| Przestaje po jednej rundzie | Jedź dalej. Nie zatrzymuj się, dopóki npm run check nie skończy się kodem 0. Albo użyj /goal. |
| Ten sam błąd wraca w kółko | Próbowałeś tego trzy razy. Stop. Powiedz mi, co próbowałeś i co się stało za każdym razem. |
| Mówi, że skończone, a test jest czerwony | Uruchom npm run check i wklej pięć ostatnich linijek, bez poprawiania. |
| Jest coraz wolniejszy i mniej konkretny | Kontekst jest pełny. Powiedz Zapisz do notes.md, co zostało, w dziesięciu linijkach, wpisz /clear, potem wklej ten prompt jeszcze raz. |
| Jest 16:16, a test dalej nie przechodzi | Naciśnij Esc (i wpisz /goal clear, jeśli użyłeś /goal), potem powiedz Stop. Zapisz do notes.md, gdzie jesteś, zrób commit i push. Potem /clear i prompt 06. |
Dlaczego jest tak napisany
- Agent nigdy nie edytuje checkera. Gdyby mógł, zaliczenie nic by nie znaczyło.
- Jedna linijka na rundę w
notes.mdi raport na dysku: nowa sesja kontynuuje z plików. - Trzy nieudane próby przy jednym błędzie to sygnał stop: zwykle dwa wymagania, które nie mogą być jednocześnie spełnione.
Prompt 06
Opublikuj
W nowej sesji agent buduje stronę, zakłada stronę na Netlify i publikuje ją bez pytań w terminalu, sprawdza adres na żywo tym samym checkerem, a potem robi commit i push wszystkiego, co się zmieniło.
Zanim wkleisz
Wpisz /clear, jeśli jeszcze tego nie zrobiłeś.
Wystaw to do internetu.
Zbuduj stronę, a potem opublikuj ją na Netlify przez Netlify CLI. Netlify CLI jest
zainstalowane i jestem zalogowany; jeśli powie, że nie jestem, powiedz mi, co zrobić, zamiast
robić to po cichu.
Ten projekt nie ma jeszcze strony na Netlify. Załóż ją i opublikuj jedną komendą, bez pytań
w terminalu: netlify deploy --prod --dir=dist --site-name turbine-<moja nazwa na GitHubie>.
Moją nazwę sprawdzisz przez gh api user --jq .login. Jeśli ta nazwa jest zajęta, dodaj krótki
dopisek i uruchom jeszcze raz.
Kiedy będzie na żywo, nie mów mi po prostu, że się udało. Sprawdź:
- pobierz publiczny adres i potwierdź, że zwraca 200
- potwierdź, że strona, którą serwuje, jest tą, którą przed chwilą zbudowałeś, a nie
starszą — porównaj to, co wraca, z tym, co jest w folderze dist
- uruchom npm run check -- --url na adresie na żywo i pokaż mi wynik
Zapisz nazwę strony na Netlify i adres na żywo do notes.md. Potem zrób commit wszystkiego, co
się zmieniło, z opisem, co zrobił ten krok, i zrób push.
Potem podaj mi adres w osobnej linijce, żebym mógł go skopiować.Oczekiwany wynik. Netlify CLI o nic nie pyta: --site-name zakłada stronę i od razu na nią publikuje. Adres wygląda jak https://turbine-twojanazwa.netlify.app. Agent podaje potem wynik trzech sprawdzeń: adres zwraca 200, serwowana strona zgadza się z dist, a npm run check -- --url przechodzi na adresie na żywo. Zapisuje nazwę strony do notes.md, robi commit i push wszystkiego, co się zmieniło, na przykład ustawień Netlify, które utworzył. Adres jest na końcu, w osobnej linijce.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Mówi, że nie jesteś zalogowany | Uruchom netlify login w nowym oknie terminala (w dowolnym folderze), jak na stronie Przygotowanie, potem powiedz Jestem już zalogowany. |
| Codex pyta o dostęp do sieci | Odpowiedz tak. Publikacja i pobranie adresu na żywo go wymagają. |
| Netlify CLI zadaje pytanie i czeka | Naciśnij Esc, potem powiedz Stop, przerwij tę komendę. Opublikuj z --site-name, żeby o nic nie pytała. |
| Nazwa strony jest zajęta | Dodaj krótki dopisek do nazwy strony i opublikuj jeszcze raz. |
| CLI ciągle zawodzi | Powiedz Otwórz mi folder tego projektu. Przeciągnij folder dist na https://app.netlify.com/drop i przejmij stronę, kiedy Netlify to zaproponuje. Potem powiedz Połącz ten folder z moją stroną na Netlify <nazwa> przez netlify link --name <nazwa>, zapisz nazwę strony do notes.md i uruchom npm run check -- --url na jej adresie. |
| Pusta strona pod adresem na żywo | Strona na żywo jest pusta. Który folder opublikowałeś? |
| Strona na żywo bez stylów | Opublikuj folder dist, nie katalog główny projektu. |
| „Deploy się udał" i żadnego adresu | Podaj mi publiczny adres w osobnej linijce. |
| Test na żywo nie przechodzi, a lokalny przechodził | Pokaż mi dokładnie, które testy różnią się między lokalnym a na żywo, i dlaczego. Nie zmieniaj checkera. |
| Mówi, że checker nie przyjmuje adresu | Prompt 03 prosił o --url. Dodaj to, nie zmieniając tego, co rozstrzyga którykolwiek test, i uruchom na adresie na żywo. |
Dlaczego jest tak napisany
--site-namezakłada stronę w tej samej komendzie: agent nie odpowie na pytanie zadane w terminalu, a komenda, która czeka, czeka bez końca.- Udany deploy nic nie mówi o tym, co jest serwowane. Agent porównuje stronę na żywo z
dist, treść, a nie bajty, bo Netlify dokłada własne tagi do serwowanego HTML. - Nazwa strony trafia do
notes.md: prompt 07 publikuje jeszcze raz na tę samą stronę po/clear.
Prompt 07
Spróbuj to zepsuć
Przegląd strony przez agenta, który jej nie budował. Agent szuka problemów, których checker z promptu 03 nie wyłapie, argumentuje przeciwko każdemu i zgłasza tylko te, które to przetrwają. Ty wybierasz, które naprawić; agent je naprawia, uruchamia npm run check jeszcze raz, robi commit i push, i publikuje stronę jeszcze raz pod adresem z promptu 06. Przegląd uzupełnia npm run check, nie zastępuje go.
Po prompcie 06 strona jest już na żywo. Jeśli zabraknie czasu, pomiń ten prompt: adres, który masz, zostaje.
Zanim wkleisz
Wpisz /clear, żeby recenzent nie widział budowania strony. Agent, który ocenia własną pracę w tej samej sesji, pamięta powody każdej decyzji i ich broni; to nie jest przegląd. Strona jest przeglądana na tym komputerze; agent sam uruchamia serwer deweloperski, jeśli nie działa.
Cokolwiek npm run check mówi w tej chwili, spróbuj udowodnić, że strona jest zła.
Nie budowałeś tej strony. Oceniaj ją wyłącznie po tym, co pokazuje przeglądarka, i po tym,
co jest w tym projekcie, a nie po czymkolwiek, co padło wcześniej w tej rozmowie.
Oglądaj stronę na tym komputerze. Jeśli serwer deweloperski nie działa, uruchom go sam i podaj
mi adres.
Twoim zadaniem teraz jest atakować, nie bronić i nie naprawiać. Znajdź pięć
rzeczy, które są ze stroną nie tak, a których checker w tym projekcie nie potrafi złapać,
i dla każdej powiedz mi:
- dokładnie który element, opisany tak, jak go widzę na ekranie
- co jest z nim nie tak
- dlaczego checker to przepuścił — jakie pytanie zadaje, że to się prześlizguje?
Szukaj szczególnie tam, gdzie automat nie sięga:
- tekst na zdjęciu albo gradiencie: narzędzie do dostępności nie policzy tej pary i oznaczy
ją jako incomplete; checker w tym projekcie może mierzyć ją z pikseli, więc sprawdź, co tam
faktycznie zmierzył
- kolejność czytania dla kogoś na klawiaturze albo czytniku ekranu: technicznie poprawna
i bez sensu to jest stan, który istnieje
- tekst alternatywny, który jest, i jest bezużyteczny
- struktura nagłówków, która wygląda na hierarchię i nią nie jest
- teksty, które przechodzą każdą regułę i nadal nie brzmią jak ta marka
- co się dzieje przy szerokości pomiędzy tymi, które określa design — takiej, której nikt
nie zrzucił
- cokolwiek, co psuje się dopiero przy drugiej wizycie albo na wolnym łączu
Zanim powiesz mi którąkolwiek z nich, sam argumentuj przeciwko każdej, z trzech stron:
czy to prawda - idź i zobacz jeszcze raz, nie ufaj pierwszemu odczytowi
czy to ma znaczenie - czy odwiedzający to zauważy, czy tylko checklista?
czy to obsłużone - czy już gdzieś jest, tam gdzie nie patrzyłem?
Zgłoś tylko te znaleziska, które przeżyją wszystkie trzy. W razie wątpliwości domyślnie
wyrzucaj i powiedz mi, ile wyrzuciłeś. Cztery prawdziwe znaleziska są warte więcej niż
pięć, w których jedno jest zgadywanką. Jeśli nie umiesz wskazać konkretnego elementu, to
nie jest znalezisko.
Nie naprawiaj jeszcze niczego. Najpierw chcę zdecydować, które z nich są prawdziwe.Oczekiwany wynik. Do pięciu znalezisk, każde z elementem, problemem i powodem, dla którego checker go nie wyłapał, oraz liczba odrzuconych kandydatów. Zdecyduj, które znaleziska są prawdziwe. Potem wpisz Napraw znaleziska i numery, które wybrałeś, naciśnij Shift+Enter, żeby przejść do nowej linijki, i wklej blok poniżej:
Napraw tylko znaleziska, które wymieniłem wyżej. Resztę zostaw. Potem uruchom npm run check
jeszcze raz: chcę wiedzieć, czy naprawa zepsuła coś, co przechodziło. Jeśli kończy się kodem 0,
zrób commit wszystkiego z opisem, które znaleziska naprawiłeś, i zrób push. Jeśli kończy się
kodem różnym od zera, powiedz mi, które błędy są nowe od twoich poprawek, a potem i tak zrób
commit i push. Potem opublikuj jeszcze raz na tę samą stronę przez
netlify deploy --prod --dir=dist --site <nazwa strony z notes.md> i uruchom
npm run check -- --url na adresie na żywo.Agent naprawia wybrane znaleziska, uruchamia test, robi commit i push, publikuje jeszcze raz na stronę z promptu 06 i uruchamia test na adresie na żywo.
Po tym prompcie wpisz /clear.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Znalezisko bez konkretnego elementu | Nazwij element tak, jak widzę go na ekranie, albo usuń to znalezisko. |
| Pięć znalezisk i nic nie odrzucił | Ilu kandydatów odrzuciłeś i dlaczego? Jeśli argumentowanie przeciwko znaleziskom niczego nie usunęło, w praktyce się nie odbyło. |
| Zaczyna naprawiać, zanim wybrałeś | Naciśnij Esc, potem powiedz Stop. Jeszcze bez poprawek. Najpierw ja decyduję, które znaleziska są prawdziwe. |
| Wspomina decyzje z budowania | Sesja nie została wyczyszczona. Wpisz /clear i wklej prompt jeszcze raz. |
| Serwer deweloperski nie działa | Uruchom serwer deweloperski sam i podaj mi adres. |
| Poprawka psuje test, który wcześniej przechodził | Ta poprawka zepsuła test, który wcześniej przechodził. Cofnij ją, powiedz mi, dlaczego zepsuła test, i nie zmieniaj checkera. |
| Nie może znaleźć nazwy strony | Nazwa strony z promptu 06 jest w notes.md. Jeśli jej tam nie ma, uruchom netlify status i użyj tej strony. |
Dlaczego jest tak napisany
- Nowa sesja: recenzent, który nie budował strony, nie ma czego bronić.
- Znajdź, potem argumentuj przeciwko każdemu znalezisku z trzech stron (czy to prawda, czy to ma znaczenie, czy to już obsłużone): dostajesz to, co przetrwało, a nie wszystko, co znalazł.
- Szuka tam, gdzie program nie sięga: tekst na zdjęciach, kolejność czytania, alt, który jest i nic nie mówi, szerokości pomiędzy tymi z designu.
Prompt 08
Ta sama robota, jako workflow
Prompty 01 do 07 wklejone jako jedna wiadomość, faza po fazie, z różnicami wymienionymi niżej. Wiadomość jest podzielona na siedem faz, ponumerowanych od 01 do 07, a każda faza zawiera tekst promptu o tym samym numerze: faza 03 robi to, co prompt 03. Agent sam przechodzi fazy po kolei i zatrzymuje się dla ciebie tylko po fazie 02 i tam, gdzie reguła każe zatrzymać się i zapytać.
Zanim wkleisz
Potrzebujesz nowego, pustego repozytorium na GitHubie, sklonowanego na komputer, i pliku turbine.fig. Otwórz terminal, wejdź do folderu repozytorium i uruchom agenta w nowej sesji, w zwykłym trybie, nie w plan mode:
cd turbine
claude
W Codeksie wpisz codex zamiast claude. Fazy, które proszą o plan, zapisują go do notes.md i jadą dalej.
W Claude Code najpierw wpisz /effort ultracode. Prompt zaczyna się od słowa kluczowego ultracode, które włącza workflow z wieloma agentami tylko dla tej jednej wiadomości; /effort ultracode zostawia go włączonego na całą sesję, także dla twojej odpowiedzi na punkt 6. Więcej w części ultracode niżej.
Faza 01 zakłada projekt w tym folderze, a przebieg od razu przechodzi do fazy 02, która czyta turbine.fig z folderu design. Utwórz folder design, włóż do niego turbine.fig i powiedz agentowi, żeby w fazie 01 go nie ruszał: wklej prompt poniżej, naciśnij Shift+Enter, żeby przejść do nowej linijki, wpisz Folder design jest już w tym projekcie. W fazie 01 go nie ruszaj. i naciśnij Enter.
ultracode. Chcę, żebyś wykonał całą robotę w siedmiu fazach. Każda faza to jeden z siedmiu
promptów z warsztatu, w tej samej kolejności, tymi samymi słowami i z tymi samymi regułami.
Przejdź je samodzielnie i nie przeskakuj do przodu.
Użyj dynamicznego workflow: wewnątrz fazy powołuj tyle subagentów, ile wymaga robota, i
uruchamiaj je równolegle, decydując o liczbie na podstawie tego, co zastaniesz, a nie
liczby, którą ci podałem — jeden na sekcję, jeden na soczewkę review, jeden na znalezisko,
czego akurat wymaga faza. Scal ich wyniki, zanim z niej wyjdziesz.
Ponieważ to jeden przebieg zamiast siedmiu wiadomości, zmieniają się te rzeczy:
- Zatrzymujesz się i czekasz na mnie tylko na końcu fazy 02, na moją odpowiedź na punkt 6,
i tam, gdzie reguła mówi, żeby się zatrzymać i zapytać. Tam, gdzie faza każe pokazać mi
plan i czekać na zgodę, zapisz plan do notes.md i jedź dalej.
- Tam, gdzie faza mówi, że wyczyszczę sesję, nie zatrzymuj się: zacznij następną fazę od
ponownego przeczytania notes.md i design/data.
- W fazie 04 budujesz sekcje równolegle, po jednym subagencie na każdą, zamiast jedna po
drugiej, i sam przeglądasz stronę względem design/data, zamiast czekać na mój przegląd.
- Faza 05 nie jest końcem przebiegu: kiedy npm run check skończy się kodem 0, przejdź do
fazy 06.
- W fazie 07 przegląd robią subagenci, którzy zaczynają ze świeżym kontekstem, a znaleziska,
które przetrwały, naprawiasz bez czekania, aż wybiorę.
FAZA 01 — START
Załóż w tym folderze nowy projekt strony internetowej.
Najpierw upewnij się, że ten folder jest repozytorium gita, które wypycha zmiany na GitHuba,
bo każdy kolejny krok kończy się commitem i pushem.
1. Uruchom gh auth status. Jeśli nie jestem zalogowany, zatrzymaj się i powiedz mi to.
2. Uruchom gh repo view turbine. Jeśli na moim koncie jest już repozytorium turbine, zrób
z tego folderu repozytorium gita, którego zdalne origin wskazuje na tamto repozytorium,
i pobierz to, co już w nim jest.
3. Jeśli repozytorium turbine nie ma, załóż je z tego folderu: git init -b main, jeśli to
jeszcze nie jest repozytorium gita, a potem
gh repo create turbine --private --source . --remote origin
4. Powiedz mi jedną linijką, co zastałeś i co zrobiłeś.
Potem zajmij się samą stroną.
Użyj Astro z Tailwind CSS. Statyczny output — bez Reacta, Vue ani Svelte, bez serwera, bez
bazy danych. Node jest już zainstalowany.
Potem uruchom serwer deweloperski i podaj mi adres, który mam otworzyć w przeglądarce.
Nie buduj jeszcze żadnych stron. Nie wymyślaj żadnej treści. Design przyjdzie w następnym
kroku i chcę, żeby strona była wtedy nadal pusta.
W trakcie pracy mów mi jedną linijką, co robi każda komenda. Nigdy wcześniej nie używałem
terminala i chcę nadążać.
Potem zrób commit wszystkiego z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok
jest skończony, żebym mógł wyczyścić sesję.
Zanim pójdziesz dalej: serwer deweloperski działa i podałeś mi jego adres.
FAZA 02 — POPATRZ
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
W tym projekcie jest folder design, a w nim plik .fig. To jest sam plik Figmy, tak jak
zapisuje go Figma. To nie jest obrazek: to cały design jako dane — każdy tekst,
kolor, zmienna, komponent i zdjęcie.
Pracuj na tym jednym pliku i na niczym więcej. Nie szukaj na tym komputerze designu,
specyfikacji, obrazków referencyjnych ani niczego innego o tym projekcie: nic więcej nie ma,
a cokolwiek znajdziesz, nie jest designem. Jeśli plik wymienia coś, czego w nim nie ma,
wpisz to w punkt 6, zamiast tego szukać.
Chcę narzędzia, a nie jednorazowego rozkodowania: skryptu w tym projekcie, który czyta plik
.fig z folderu design i zapisuje dane designu, których będą potrzebować strona i checker.
Spraw, żeby uruchamiała go komenda „npm run design". Ponowne uruchomienie na nowym pliku .fig
ma odświeżyć dane, żeby nikt już nie musiał ręcznie rozkodowywać ani eksportować designu.
Dekoder ma być mały: jeden skrypt, bez zestawu testów dla dekodera, bez dodatkowych narzędzi.
Przestań nad nim pracować, gdy tylko siedem plików JSON i zdjęcia są zapisane.
Nie ma programu, który otwiera plik .fig, więc skrypt rozkodowuje go sam. Co wiadomo
o formacie:
- Plik .fig to zip. Design jest w środku, w canvas.fig. thumbnail.png to tylko mały
podgląd: nie pracuj na nim.
- canvas.fig zaczyna się od bajtów „fig-kiwi" i numeru wersji, potem są kawałki, każdy
poprzedzony swoją długością. Pierwszy to schemat w binarnym formacie kiwi
(github.com/evanw/kiwi); drugi to dokument zakodowany tym schematem. Każdy kawałek jest
skompresowany, surowym deflate albo zstd.
- Folder images w zipie trzyma zdjęcia, nazwane hashem, którego używają wypełnienia.
- Pomiń wszystko, co ma isSoftDeleted, i wszystko, co należy do czegoś, co to ma.
Zostało usunięte w Figmie, a wciąż siedzi w pliku. Zmienna w usuniętej kolekcji sama nie
jest oznaczona — pomiń ją też.
- Tekst w komponencie może pochodzić z właściwości komponentu i z nadpisań. Jeśli każda
karta tego samego rodzaju pokazuje te same słowa, czytasz komponent zamiast instancji.
Rozwiąż to, zanim zaufasz jakiemukolwiek tekstowi.
Skrypt może użyć paczki; sieć jest dostępna. Nie pisz żadnego kodu strony.
Skrypt zapisuje pliki JSON do design/data, a zdjęcia do design/images:
- design/data/sections.json: każda sekcja, w kolejności od góry strony, i co jest w każdej
z nich
- design/data/colours.json: każdy kolor, po nazwie z designu, z dokładną wartością i miejscem
użycia
- design/data/typography.json: każdy styl tekstu, z fontem, rozmiarem, grubością, interlinią
i odstępem między literami, i gdzie który jest użyty
- design/data/layout.json: każda szerokość, którą design obejmuje, a przy każdej odstępy,
rozmiary, zaokrąglenia rogów i kolumny
- design/data/components.json: każdy komponent, z jego wariantami i stanami
- design/data/copy.json: każdy tekst, sekcja po sekcji, słowo w słowo, razem z tekstami
alternatywnymi i etykietami, których nie pokazuje żadna ramka
- design/data/images.json: każdy obraz, z jego plikiem w design/images, miejscem użycia,
rozmiarem i tekstem alternatywnym
Każda wartość jest przepisana dokładnie tak, jak jest w pliku: bez zaokrąglania, bez zmiany
nazw. Od teraz design/data jest designem. Każdy kolejny krok czyta je zamiast pliku .fig,
a checker sprawdza stronę względem nich. Jeśli okaże się, że jakiejś wartości brakuje,
poprawka trafia do skryptu, a potem npm run design uruchamia się jeszcze raz.
Twój plan ma powiedzieć, jak skrypt czyta plik, jakiej paczki używa, jeśli jakiejś, i jaki
kształt ma każdy plik JSON.
Kiedy zatwierdzę plan, napisz skrypt, uruchom npm run design, potem pokaż mi listę, a jej
punkt 6 zapisz do notes.md:
1. Każdą sekcję, w kolejności od góry strony, i imię na każdej karcie artysty.
2. Każdy kolor, po nazwie z designu, z dokładną wartością.
3. Każdy rozmiar tekstu i gdzie który jest użyty.
4. Każdą szerokość, którą design obejmuje.
5. Każdy plik w design/data i co w nim jest, po jednej linijce.
6. Wszystko, co w pliku się nie zgadza albo czego w nim nie ma, a co inaczej musiałbyś
zgadnąć.
Punkt 6 obchodzi mnie najbardziej. Bądź konkretny i bądź szczery: „w pliku jest stan hover,
do którego nie mam żadnych wartości" jest warte więcej niż pewne siebie zgadnięcie.
Potem zatrzymaj się i poczekaj, aż odpowiem na punkt 6.
Kiedy odpowiem na punkt 6, zapisz moje odpowiedzi do notes.md. Potem zrób commit wszystkiego
z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok jest skończony, żebym mógł
wyczyścić sesję.
Zanim pójdziesz dalej: npm run design zapisał design/data, notes.md istnieje, a ja odpowiedziałem na punkt 6.
FAZA 03 — UZBRÓJ
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
Napisz teraz program, który sprawdza stronę względem designu, zanim strona powstanie.
To musi być program, nie opinia. Uruchamia się, patrzy na prawdziwą stronę w prawdziwej
przeglądarce i kończy kodem 0, jeśli wszystko jest w porządku, a kodem różnym od zera,
jeśli cokolwiek jest nie tak. Nigdy nie pyta modelu językowego, nigdy nie pyta mnie i
dwa razy na tej samej stronie daje tę samą odpowiedź.
Spraw, żeby uruchamiała go komenda „npm run check". Zainstaluj, co potrzebne, żeby
sterować prawdziwą przeglądarką i testować dostępność. To są narzędzia do sprawdzania;
żadne z nich nie wchodzi do strony.
Domyślnie sam buduje stronę, sam serwuje zbudowane pliki i sprawdza tę stronę. Nie może
zależeć od serwera deweloperskiego uruchomionego przez kogoś innego. Musi też przyjmować
adres — npm run check -- --url https://… — i uruchamiać te same testy na tamtej stronie,
żeby później mógł ocenić też stronę na żywo.
Co sprawdzać, wyprowadź z design/data, nie ode mnie. Nie ma jeszcze strony, na którą można
patrzeć: każdy test wynika z designu. Minimum, i to względem strony tak, jak renderuje ją
przeglądarka, a nie względem kodu źródłowego:
1. że projekt się buduje, bez błędów
2. że wczytanie strony nie produkuje błędów w konsoli przeglądarki
3. że każda sekcja, którą definiuje design, jest obecna i w kolejności z designu
4. że jest dostępna, przy każdej szerokości, którą design określa
5. że każdy kolor, który strona maluje, jest kolorem z designu — cokolwiek innego to błąd
6. że każdy fragment tekstu z designu jest na stronie
7. że nic nie wystaje w bok przy najwęższej szerokości, którą design określa
8. że każdy obrazek ma tekst alternatywny i że nie jest nim nazwa pliku
Kiedy coś nie przechodzi, raport musi powiedzieć cztery rzeczy: co nie przeszło, gdzie na
stronie, co według designu powinno tam być i co faktycznie tam było. „Problem
z kontrastem na stronie" jest bezużyteczne. Nazwanie elementu, wartości oczekiwanej,
wartości zmierzonej i progu — to jest cała robota.
Zapisz raport do pliku, nie tylko wypisz go na ekran, bo później podam ci ten plik
z powrotem. Powiedz mi, jak go nazwałeś.
Trzy reguły dotyczące samego checkera:
- Jeśli test nie może się wykonać — przeglądarka nie wstaje, strona się nie wczytuje,
brakuje design/data — to jest PORAŻKA, nigdy zaliczenie i nigdy ciche pominięcie.
Test, który się nie odbył, nie może wyglądać jak test, który przeszedł.
- Wynik dostępności oznaczony jako incomplete, na przykład tekst na zdjęciu albo gradiencie,
nie jest zaliczeniem. Zmierz kontrast z wyrenderowanych pikseli pod tym tekstem i zgłoś
błąd tylko wtedy, gdy zmierzony stosunek jest poniżej progu albo gdy nie da się go zmierzyć.
- Nie rozluźniaj testów, żeby przechodziły.
Twój plan ma wymienić każdy test, co czyta z design/data i jak mierzy.
Strony jeszcze nie ma. Kiedy checker będzie napisany, uruchom go od razu na projekcie takim,
jaki jest: ma nie przejść, a raport ma powiedzieć dlaczego. Test, który przechodzi na pustej
stronie, niczego nie sprawdza.
Potem zrób commit wszystkiego z opisem, co zrobił ten krok, i zrób push. Powiedz mi, że krok
jest skończony, żebym mógł wyczyścić sesję.
Zanim pójdziesz dalej: npm run check uruchamia się i nie przechodzi na projekcie takim, jaki jest.
FAZA 04 — BUDUJ
Najpierw plan. Zbadaj, czego potrzebujesz, potem pokaż mi plan i poczekaj na moją zgodę. Nie
twórz ani nie zmieniaj żadnego pliku, dopóki go nie zatwierdzę.
Zbuduj teraz stronę, na podstawie designu. Czytaj design/data i notes.md; nie rozkodowuj
pliku .fig jeszcze raz.
Twój plan ma wymienić sekcje w kolejności z design/data/sections.json i powiedzieć, jakich
kolorów, stylów tekstu, wartości layoutu, tekstów i obrazów używa każda z nich.
Zbuduj wszystkie sekcje z design/data/sections.json naraz, po jednym subagencie na sekcję,
a potem złóż je w tej kolejności. Nie zatrzymuj się między sekcjami, żeby mnie pytać. Kiedy
skończysz, powiedz mi, które sekcje zbudowałeś, po jednej linijce, i podaj adres do otwarcia.
Jeśli musisz zobaczyć stronę w przeglądarce, a serwer deweloperski nie działa, uruchom go sam
i podaj mi adres.
Reguły, wszystkie nienegocjowalne:
- Każdy kolor i każdy rozmiar pochodzi z design/data. Jeśli wartości, której potrzebujesz,
tam nie ma, sprawdź, czy nie gubi jej skrypt uruchamiany przez npm run design; jeśli tak,
popraw skrypt i uruchom go jeszcze raz. Jeśli design jej nie ma, nie wybieraj sam: to
pytanie do notes.md, niżej.
- Każde słowo pochodzi z design/data/copy.json. Nie pisz tekstów. Nie poprawiaj tekstów.
Jeśli jakiegoś fragmentu brakuje, zapisz to do notes.md; nie zapychaj dziury.
- Każde zdjęcie pochodzi z designu: użyj obrazów wymienionych w design/data/images.json,
nigdy zastępczych.
- Do samej strony nie wchodzi nic nowego: żaden framework UI, żadna biblioteka
komponentów, żaden serwis z fontami ani ikonami. Strona jest z Astro i Tailwinda.
- Strona musi działać z niezaładowanymi obrazkami i z wyłączonym JavaScriptem. Wszystko,
co sprytne, jest dodatkiem na czymś, co już działa bez tego.
Jeśli design czegoś nie mówi, nie zgaduj. Zapisz pytanie do notes.md, wybierz odczyt, który
uważasz za najbardziej prawdopodobny, powiedz mi jedno i drugie, i jedź dalej. Wolę poprawić
jedno założenie niż odkryć sześć.
Kiedy strona będzie zbudowana, uruchom raz npm run check i pokaż mi, ile testów nie
przechodzi i które. Nie naprawiaj ich jeszcze i nie zmieniaj checkera.
Potem sam przejrzyj stronę: porównaj to, co pokazuje przeglądarka, z design/data i zapisz
każdą różnicę do notes.md pod nagłówkiem „Design review". Jeszcze niczego nie naprawiaj.
Potem zrób commit wszystkiego z opisem, co zrobił ten krok, i zrób push.
Zanim pójdziesz dalej: każda sekcja z design/data/sections.json jest zbudowana, projekt buduje się bez błędów, a notes.md ma sekcję „Design review".
FAZA 05 — NAPRAWIAJ
Przeczytaj notes.md. Potem uruchom npm run check.
Pozycje pod nagłówkiem „Design review" w notes.md to różnice, które znalazłeś w fazie 04.
Te, które mają pokrycie w design/data, traktuj jak błędy z raportu i też je napraw. Przy
każdej, która nie ma pokrycia w design/data, zapisz do notes.md jedną linijkę, że go nie ma,
i zostaw ją.
Jeśli npm run check kończy się kodem 0 i nie została żadna pozycja z „Design review", która ma
pokrycie w design/data, zrób commit wszystkiego z opisem, że test przechodzi, zrób push
i przejdź do fazy 06.
W przeciwnym razie przeczytaj raport, który zapisał test, i napraw to, co wymienia. Potem
uruchom npm run check jeszcze raz. Powtarzaj, aż skończy się kodem 0, a pozycje z „Design
review" będą załatwione.
Każda runda ma trzy kroki. Plan: weź pierwszy błąd z raportu i zapisz do notes.md jedną
linijkę: co nie przechodzi, co według ciebie jest przyczyną i co zmienisz. Implementacja:
wprowadź tę zmianę. Weryfikacja: uruchom npm run check.
Pracuj w kolejności, w jakiej raport wymienia rzeczy. Naprawiaj przyczynę, nie objaw:
jeśli kolor jest zły, użyj tego z designu, nie przesuwaj go, aż liczba drgnie. Rób
najmniejszą zmianę, która usuwa dany błąd, i nie ruszaj niczego, co już przechodziło.
Trzy reguły, a pierwsza znaczy więcej niż dwie pozostałe:
1. NIGDY nie zmieniaj checkera, żeby test przeszedł. Ani progu, ani pominiętej asercji,
ani wyłączonej reguły. Jeśli naprawdę uważasz, że jakiś test jest zły, ZATRZYMAJ SIĘ,
powiedz mi który i dlaczego, i nie zmieniaj niczego.
2. Nie dodawaj niczego, czego nie ma w designie, i nie wymyślaj tekstów.
3. Jeśli ten sam błąd przeżyje trzy próby, zatrzymaj się i powiedz mi, co próbowałeś za
każdym razem i co się stało. Trzy nieudane naprawy zwykle znaczą, że design prosi
o dwie rzeczy, które nie mogą być jednocześnie prawdziwe, i czwarta próba tego nie
rozwiąże.
Zapisuj do notes.md na bieżąco, co próbowałeś i co się stało, żeby nowa sesja mogła to
podjąć. Pracuj dalej sam. Nie proś mnie o potwierdzenie po każdej rundzie.
Zanim pójdziesz dalej: npm run check kończy się kodem 0.
FAZA 06 — WYSTAW
Wystaw to do internetu.
Zbuduj stronę, a potem opublikuj ją na Netlify przez Netlify CLI. Netlify CLI jest
zainstalowane i jestem zalogowany; jeśli powie, że nie jestem, powiedz mi, co zrobić, zamiast
robić to po cichu.
Ten projekt nie ma jeszcze strony na Netlify. Załóż ją i opublikuj jedną komendą, bez pytań
w terminalu: netlify deploy --prod --dir=dist --site-name turbine-<moja nazwa na GitHubie>.
Moją nazwę sprawdzisz przez gh api user --jq .login. Jeśli ta nazwa jest zajęta, dodaj krótki
dopisek i uruchom jeszcze raz.
Kiedy będzie na żywo, nie mów mi po prostu, że się udało. Sprawdź:
- pobierz publiczny adres i potwierdź, że zwraca 200
- potwierdź, że strona, którą serwuje, jest tą, którą przed chwilą zbudowałeś, a nie
starszą — porównaj to, co wraca, z tym, co jest w folderze dist
- uruchom npm run check -- --url na adresie na żywo i pokaż mi wynik
Zapisz nazwę strony na Netlify i adres na żywo do notes.md. Potem zrób commit wszystkiego, co
się zmieniło, z opisem, co zrobił ten krok, i zrób push.
Potem podaj mi adres w osobnej linijce, żebym mógł go skopiować.
Zanim pójdziesz dalej: adres na żywo zwraca 200, serwuje stronę, którą zbudowałeś, a npm run check -- --url przechodzi na nim.
FAZA 07 — ATAKUJ
Cokolwiek npm run check mówi w tej chwili, spróbuj udowodnić, że strona jest zła.
Nie budowałeś tej strony. Oceniaj ją wyłącznie po tym, co pokazuje przeglądarka, i po tym,
co jest w tym projekcie, a nie po czymkolwiek, co padło wcześniej w tej rozmowie.
Oglądaj stronę na tym komputerze. Jeśli serwer deweloperski nie działa, uruchom go sam i podaj
mi adres.
Twoim zadaniem teraz jest atakować, nie bronić i nie naprawiać. Znajdź pięć
rzeczy, które są ze stroną nie tak, a których checker w tym projekcie nie potrafi złapać,
i dla każdej powiedz mi:
- dokładnie który element, opisany tak, jak go widzę na ekranie
- co jest z nim nie tak
- dlaczego checker to przepuścił — jakie pytanie zadaje, że to się prześlizguje?
Szukaj szczególnie tam, gdzie automat nie sięga:
- tekst na zdjęciu albo gradiencie: narzędzie do dostępności nie policzy tej pary i oznaczy
ją jako incomplete; checker w tym projekcie może mierzyć ją z pikseli, więc sprawdź, co tam
faktycznie zmierzył
- kolejność czytania dla kogoś na klawiaturze albo czytniku ekranu: technicznie poprawna
i bez sensu to jest stan, który istnieje
- tekst alternatywny, który jest, i jest bezużyteczny
- struktura nagłówków, która wygląda na hierarchię i nią nie jest
- teksty, które przechodzą każdą regułę i nadal nie brzmią jak ta marka
- co się dzieje przy szerokości pomiędzy tymi, które określa design — takiej, której nikt
nie zrzucił
- cokolwiek, co psuje się dopiero przy drugiej wizycie albo na wolnym łączu
Zanim powiesz mi którąkolwiek z nich, sam argumentuj przeciwko każdej, z trzech stron:
czy to prawda - idź i zobacz jeszcze raz, nie ufaj pierwszemu odczytowi
czy to ma znaczenie - czy odwiedzający to zauważy, czy tylko checklista?
czy to obsłużone - czy już gdzieś jest, tam gdzie nie patrzyłem?
W tej fazie zrób to subagentami, z których każdy zaczyna ze świeżym kontekstem, który nie
widział budowania strony: po jednym na każde miejsce z listy powyżej, szukających równolegle,
a potem, dla każdego kandydata, którego znajdą, osobny subagent, którego jedynym zadaniem
jest argumentować przeciwko niemu z tych trzech stron.
Zgłoś tylko te znaleziska, które przeżyją wszystkie trzy. W razie wątpliwości domyślnie
wyrzucaj i powiedz mi, ile wyrzuciłeś. Cztery prawdziwe znaleziska są warte więcej niż
pięć, w których jedno jest zgadywanką. Jeśli nie umiesz wskazać konkretnego elementu, to
nie jest znalezisko.
Potem napraw znaleziska, które przetrwały, i uruchom npm run check jeszcze raz; musi nadal
kończyć się kodem 0. Zapisz znaleziska i to, co naprawiłeś, do notes.md, zrób commit
wszystkiego z opisem, które znaleziska naprawiłeś, i zrób push. Potem opublikuj jeszcze raz
na tę samą stronę przez netlify deploy --prod --dir=dist --site <nazwa strony z notes.md>
i uruchom npm run check -- --url na adresie na żywo.
To jest koniec przebiegu: znaleziska, które przetrwały, są naprawione, npm run check nadal kończy się kodem 0, strona jest opublikowana jeszcze raz, a npm run check -- --url przechodzi na adresie na żywo.
Reguły na cały przebieg:
- Ogłaszaj każdą fazę, kiedy w nią wchodzisz, i mów, ilu subagentów używasz i dlaczego.
- Jeśli faza nie może się skończyć, zatrzymaj się na niej i powiedz dlaczego. Nie idź
dalej z poprzednią zepsutą.
- Utrzymuj notes.md na bieżąco. Jeśli będziemy musieli zacząć nową sesję, notes.md
i design/data to wszystko, co będzie miała.Oczekiwany wynik. Agent ogłasza FAZA 01 — START i pracuje bez nadzoru. Zatrzymuje się raz, po fazie 02, na twoją odpowiedź na punkt 6 jego listy. Po drodze: npm run design, npm run check, który nie przechodzi na pustym projekcie, strona i własny przegląd designu zrobiony przez agenta, pętla aż do zaliczenia testu, commit po każdym z tych kroków, adres na żywo, a na końcu przegląd, poprawki i drugi deploy na tę samą stronę.
Subagenci
Subagent to osobny agent, którego główny agent uruchamia do jednej części roboty. Zaczyna z pustym kontekstem: zna tylko zadanie, które dostał, a nie dotychczasową rozmowę. Główny agent zbiera to, co zwrócą jego subagenci.
Czym różni się od siedmiu promptów
- Przebieg czeka na ciebie tylko po fazie 02 i tam, gdzie reguła każe zatrzymać się i zapytać.
- Plany nie czekają na zatwierdzenie. W siedmiu promptach przed 02, 03 i 04 włączasz plan mode i zatwierdzasz każdy plan; tutaj każda z tych faz zapisuje plan do
notes.mdi jedzie dalej. - Między fazami nie ma
/clear. Każda faza zaczyna od ponownego przeczytanianotes.mdidesign/data. - Faza 04 buduje sekcje strony jednocześnie, po jednym subagencie na sekcję, zamiast jedna po drugiej.
- Faza 04 nie czeka na twój przegląd strony: agent sam porównuje stronę z
design/datai zapisuje różnice donotes.mdpod nagłówkiem „Design review". - Faza 05 nie kończy przebiegu: kiedy
npm run checkskończy się kodem 0, agent przechodzi do fazy 06. - Faza 07 robi przegląd subagentami: po jednym na każde miejsce do sprawdzenia i osobny, który argumentuje przeciwko każdemu znalezisku. Każdy zaczyna z pustym kontekstem, więc żaden nie widział budowania strony. Agent naprawia znaleziska, które przetrwały, bez czekania, aż wybierzesz, a potem publikuje jeszcze raz na stronę, której nazwa jest w
notes.md, z--site.
scripts/build-workflow-prompt.mjs generuje ten prompt z promptów 01 do 07, a jego --check nie przechodzi, jeśli różnią się w czymkolwiek innym.
ultracode
Pierwsze słowo promptu. W Claude Code ultracode włącza workflow z wieloma agentami tylko dla wiadomości, w której je wpiszesz, i tylko jeśli twoja subskrypcja Claude obejmuje dynamiczne workflow. Przebieg zatrzymuje się po fazie 02 na twoją odpowiedź na punkt 6, a ta odpowiedź to nowa wiadomość. Żeby workflow działał przez cały przebieg, wpisz /effort ultracode, zanim wkleisz prompt, albo zacznij odpowiedź na punkt 6 od ultracode.
Codex nie ma takiego słowa. Zostaw je w obu narzędziach: zdanie po nim, „powołuj tyle subagentów, ile wymaga robota, i uruchamiaj je równolegle", daje tę samą instrukcję każdemu z nich.
Wzorce workflow w tym prompcie
Strona warsztatu opisuje sześć wzorców workflow. Ten prompt używa trzech:
| Faza | Wzorzec | Co się dzieje |
|---|---|---|
| 04 | Rozgałęzienie i scalenie | strona dzielona na sekcje budowane jednocześnie, po jednym subagencie na sekcję, potem scalana w jedną stronę |
| 05 | Pętla do skutku | plan, implementacja, weryfikacja, powtarzane, aż npm run check zwróci kod 0 |
| 07 | Adversarial verification | subagenci z pustym kontekstem szukają problemów, osobni subagenci argumentują przeciwko każdemu |
Przegląd w fazie 07 działa obok npm run check. Checker rozstrzyga to, co da się zmierzyć; przegląd szuka tego, czego zmierzyć się nie da.
Pętla i workflow
| Pętla | Workflow | |
|---|---|---|
| Kształt | rób to znowu, aż warunek będzie spełniony | wykonaj kroki po kolei, z warunkiem między każdym |
| Ty definiujesz | warunek wyjścia | fazy |
| Kończy się, gdy | program mówi „tak" | skończy się ostatnia faza |
| W tym zestawie | prompt 05 | ten prompt |
Faza 05 jest pętlą wewnątrz workflow.
Sparametryzuj to
Zmień listę faz, a zmienisz robotę:
Faza 04 buduje tylko hero i lineup. Resztę zostaw.
Między fazą 04 a 05 dodaj fazę: pokaż mi każdą sekcję jako zrzut ekranu przy najwęższej szerokości i poczekaj na moją zgodę.
Pomiń fazę 06 i opublikuj tylko raz, na końcu fazy 07.
W fazie 07 patrz tylko na szerokości, których design nie określa.
Kiedy go użyć
- Workflow: znasz etapy i chcesz wyniku bez pilnowania każdego kroku.
- Siedem promptów: uczysz się, chcesz zatwierdzać każdy plan albo spodziewasz się zmiany designu w połowie.
Jeśli coś pójdzie nie tak
| Co widzisz | Powiedz to |
|---|---|
| Faza 01 mówi, że folder nie jest pusty | Nie ruszaj folderu design i załóż projekt obok niego. |
Ogłasza fazę 04, zanim istnieje npm run check | Pominąłeś fazę 03. Najpierw test. Wróć i go napisz. |
npm run check przechodzi w fazie 03 | Test przeszedł na pustym projekcie. Niczego nie sprawdza. Popraw checker przed fazą 04. |
| Nie czeka po fazie 02 | Faza 02 mówiła: poczekaj na moją odpowiedź na punkt 6. Zatrzymaj się i pokaż mi notes.md. |
| Czeka na zatwierdzenie planu w fazie 03 albo 04 | Zapisz plan do notes.md i jedź dalej. |
| Czeka na twój przegląd w fazie 04 | Sam porównaj stronę z design/data, zapisz różnice do notes.md pod nagłówkiem „Design review" i jedź dalej. |
| Zatrzymuje się po fazie 05 i mówi, że skończone | Faza 05 to nie koniec. Przejdź do fazy 06. |
| Robi się mniej konkretny koło fazy 05 | Streść stan do notes.md. Potem wpisz /clear, wklej ten prompt jeszcze raz i powiedz notes.md i design/data mają stan. Kontynuuj od fazy 05. |
| Ogłasza, że całość skończona | Uruchom npm run check i wklej pięć ostatnich linijek, bez poprawiania. |
| Faza się wywala, a on idzie dalej | Miałeś zatrzymać się na nieudanej fazie. Co się wywaliło i dlaczego kontynuowałeś? |
| Buduje sekcje jedną po drugiej | Faza 04 to niezależne sekcje. Zbuduj je równolegle, po jednym subagencie na każdą. |
| Faza 07 zgłasza znaleziska i żadnego nie odrzuciła | Ilu kandydatów odrzuciłeś i dlaczego? |
| Uruchamia dwudziestu subagentów do małej strony | Używaj tylu, ilu wymaga robota. Podaj mi liczbę i uzasadnienie, zanim zaczniesz. |