SP. WaysConf 2026

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

GodzinaCzęśćCo robisz
14:55WprowadzenieSłuchasz.
15:03StartOtwierasz terminal w folderze turbine, uruchamiasz agenta, wklejasz prompt 01.
15:08ProjektWkł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:30Ratunek 1Cokolwiek agent robi, naciskasz Esc. Jeśli nie ma design/data, bierzesz design-data.zip poniżej. Potem /clear.
15:33Checker, najpierw testyPlan 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:50Ratunek 2Znowu Esc. Jeśli npm run check nie działa, bierzesz checker.zip poniżej. Potem /clear.
15:53BudowaPlan mode, prompt 04: agent buduje całą stronę i raz uruchamia test. W tym czasie przeglądasz stronę sekcja po sekcji.
16:08PętlaEsc, commit tego, co jest, /clear, prompt 05: agent poprawia stronę, aż test przejdzie.
16:16PublikacjaEsc, /clear, prompt 06: strona trafia na produkcję, a test uruchamia się na adresie na żywo.
16:22Ograniczenia i pytaniaSł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 oNie maszPobierzPotem
15:30design/data z promptu 02design-data.zipNapisz 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:50działającego npm run check z promptu 03checker.zipNapisz 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:

  1. 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.
  2. 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śnij Shift+Tab, aż w stopce pojawi się accept edits on (Codex: /permissions).
  3. 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.

  1. 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 i notes.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:

  1. Czerwono. Test powstaje z danych projektu i uruchamia się na pustym projekcie. Nie przechodzi, a raport wypisuje wszystko, czego strona jeszcze nie ma.
  2. 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

Pętla: plan, implementacja, weryfikacja, powtarzane aż test przejdzie, potem publikacja

Pętla kończy się, gdy test zwraca 0. Wtedy praca trafia do commita, a strona na produkcję.


Kto sprawdza pracę

Fałszywa pętla: ten sam agent ocenia własną pracę. Prawdziwa pętla: program i adversarial review ze świeżym kontekstem sprawdzają stronę równolegle

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 sprawdzaDo czego się nadaje
Ten sam agent, w tym samym kontekścieDo niczego. Powtarza rozumowanie, które stworzyło pracę.
Program: npm run checkDo 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

Trzy poziomy sprawdzania: testy deterministyczne, porównanie mierzone, adversarial review
  1. Testy deterministyczne. Build, błędy w konsoli, sekcje, kolory, teksty, kontrast, przewijanie w poziomie. Za każdym razem ten sam wynik.
  2. 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.
  3. 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 sesjaNowa sesja
Trzyma wszystkie wcześniejsze próbyCzyta raport: aktualne błędy
Powtarza własne wcześniejsze rozumowanieCzyta notes.md: co próbowano i z jakim skutkiem
ZwalniaCzyta design/data/: projekt w JSON, zapisany w prompcie 02
Wklej to agentowi
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 planu, implementacji i weryfikacji obok siedmiu faz promptu 08 i faz, które się rozgałęziają

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

Klasyfikuj i działaj: klasyfikator przekazuje zadanie jednemu z trzech agentów

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

Rozgałęzienie i scalenie: agenci równolegle, wyniki scalone w jeden

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

Adversarial verification: jeden wykonawca, trzech weryfikatorów ze świeżym kontekstem próbuje podważyć wynik

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

Generuj i filtruj: wiele propozycji, kryteria zostawiają najlepsze

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

Turniej: propozycje porównywane parami, aż jedna wygra

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

Pętla do skutku: kolejna runda, dopóki są nowe uwagi

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


Częste problemy

ObjawPrzyczynaCo zrobić
Test zmienia się na zielony, a nic nie zostało poprawioneAgent edytował testPrzywróć test i przeczytaj różnice
Dwa błędne stany na zmianęDwa wymagania, które nie mogą być spełnione narazZatrzymaj pętlę. Sprzeczność jest w projekcie albo w briefie
Pracuje dalej, choć zadanie jest skończoneNic nie uruchamia testu na początkuUruchamiaj test przed każdą poprawką
Zwalnia i odpowiada ogólnikamiKontekst jest pełnyZapisz stan do notes.md, zacznij nową sesję
„Już działa”, a nie działaAgent relacjonuje zamiast mierzyćUfaj tylko kodowi wyjścia npm run check
Długo nic się nie dziejeKrok czeka na dane bez limitu czasuDaj każdemu krokowi limit czasu

Po warsztacie

Zacznij od jednego testu, nie od całej strony:

  1. Wybierz test, który twój zespół robi ręcznie.
  2. Zamień go w program, który kończy się kodem 0 albo 1.
  3. Zapisuj jego wynik do pliku, który agent może przeczytać.
  4. 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.


Wklej to agentowi
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 widziszPowiedz to
Zaczyna budować landing pageNaciś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 directoryCodex pyta o zgodę. Odpowiedz tak.
Codex pyta o dostęp do sieciOdpowiedz tak. Instalacja paczek i push go wymagają.
command not found: npmNode nie jest zainstalowany. Wróć na stronę Przygotowanie.
Prosi o wybór szablonuWybierz 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 wypisujeInstaluje. Poczekaj do pięciu minut.
git push nie działa albo prosi o hasłoUruchom 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ś zalogowanyUruchom gh auth login w nowym oknie terminala, wybierz GitHub.com i przeglądarkę, potem powiedz Spróbuj jeszcze raz.
Name already exists on this accountRepozytorium 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 origin zamienia 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ć.
  • /clear mię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

  1. Na stronie warsztatu kliknij Pobierz turbine.fig.
  2. Włóż plik do folderu design w projekcie. Najprościej: powiedz agentowi Przenieś 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.
  3. 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 /plan i 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.


Wklej to agentowi
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:

Wklej to agentowi
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 widziszPowiedz to
Pisze kod, zanim pokaże planNaciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę.
Rozkodowuje plik raz i nie pisze skryptuProsiłem o narzędzie. Przenieś rozkodowanie do skryptu, niech uruchamia go npm run design, i uruchom go.
Pisze testy albo dodatkowe narzędzia dla dekoderaDekoder ma być jednym skryptem. Bez testów dla niego. Zapisz siedem plików JSON i zdjęcia, potem przestań.
W pliku JSON brakuje wartościW 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 folderuPlik .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 projektNaciś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ę sypieNode jest starszy niż 22.15. Użyj paczki, która czyta zstd, i działaj dalej.
Codex pyta o dostęp do sieciOdpowiedz 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łaUruchom 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/dataNaciś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 .fig to jedno npm 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.


Wklej to agentowi
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 widziszPowiedz to
Pisze kod, zanim pokaże planNaciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę.
Przechodzi na pustym projekciePrzeszł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ętyTest, 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ółówKażdy błąd musi podać element, wartość oczekiwaną, wartość zmierzoną i próg.
Bierze wartości z własnego wyobrażenia o designieKaż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 sieciOdpowiedz tak. Instalacja przeglądarki i narzędzi do dostępności go wymaga.
Raport mówi, że strona się nie ładujeChecker ma sam zbudować i serwować stronę. Nie polegaj na serwerze deweloperskim.
npm run check -- --url https://example.com niczego nie zmieniaChecker 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.


Wklej to agentowi
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ę:

Wklej to agentowi
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 widziszPowiedz to
Pisze kod, zanim pokaże planNaciśnij Esc, potem powiedz Stop. Najpierw pokaż mi plan i poczekaj na moją zgodę.
Zatrzymuje się po jednej sekcji i pytaNie czekaj na mnie. Zbuduj całą stronę, potem mi pokaż.
Zaczyna naprawiać błędyNaciśnij Esc, potem powiedz Stop. Uruchom test raz i pokaż wynik. Naprawianie to następny krok.
Zaczyna naprawiać twój przeglądNaciśnij Esc, potem powiedz Stop. Tylko zapisz mój przegląd do notes.md. Naprawianie to następny krok.
Zmienia checkerPrzywróć 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ęcieUżyj tu obrazu, który wymienia design/data/images.json.
Kolor, który jest prawie dobryTo nie jest wartość z design/data/colours.json. Użyj dokładnej i powiedz mi, jak się nazywa.
Znowu zaczyna rozkodowywać .figNaciśnij Esc, potem powiedz Stop. Wszystko, czego potrzebujesz, jest w design/data i notes.md.
Mówi, że skończył, a wyraźnie nieKtóre sekcje zbudowałeś, a których jeszcze nie ma? Wypisz jedne i drugie.
Jest coraz wolniejszy i mniej konkretnyKontekst 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ńczonaNaciś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.md przed commitem: /clear czyś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.


Wklej to agentowi
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ę:

Wklej to agentowi
/goal npm run check exits 0

W 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 widziszPowiedz to
Zedytował checkerPrzywróć checker dokładnie tak, jak był, i napraw stronę zamiast niego. Potem zobacz, co zmienił w checkerze.
Chcesz wcześniej zatrzymać /goalWpisz /goal clear.
Pyta przed każdą zmianą plikuClaude 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 rundzieJedź 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ółkoPró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 czerwonyUruchom npm run check i wklej pięć ostatnich linijek, bez poprawiania.
Jest coraz wolniejszy i mniej konkretnyKontekst 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 przechodziNaciś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.md i 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ś.


Wklej to agentowi
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 widziszPowiedz to
Mówi, że nie jesteś zalogowanyUruchom netlify login w nowym oknie terminala (w dowolnym folderze), jak na stronie Przygotowanie, potem powiedz Jestem już zalogowany.
Codex pyta o dostęp do sieciOdpowiedz tak. Publikacja i pobranie adresu na żywo go wymagają.
Netlify CLI zadaje pytanie i czekaNaciśnij Esc, potem powiedz Stop, przerwij tę komendę. Opublikuj z --site-name, żeby o nic nie pytała.
Nazwa strony jest zajętaDodaj krótki dopisek do nazwy strony i opublikuj jeszcze raz.
CLI ciągle zawodziPowiedz 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 żywoStrona na żywo jest pusta. Który folder opublikowałeś?
Strona na żywo bez stylówOpublikuj folder dist, nie katalog główny projektu.
„Deploy się udał" i żadnego adresuPodaj 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 adresuPrompt 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-name zakł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.


Wklej to agentowi
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:

Wklej to agentowi
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 widziszPowiedz to
Znalezisko bez konkretnego elementuNazwij 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 budowaniaSesja nie została wyczyszczona. Wpisz /clear i wklej prompt jeszcze raz.
Serwer deweloperski nie działaUruchom 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 stronyNazwa 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.


Wklej to agentowi
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.md i jedzie dalej.
  • Między fazami nie ma /clear. Każda faza zaczyna od ponownego przeczytania notes.md i design/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/data i zapisuje różnice do notes.md pod nagłówkiem „Design review".
  • Faza 05 nie kończy przebiegu: kiedy npm run check skoń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:

FazaWzorzecCo się dzieje
04Rozgałęzienie i scaleniestrona dzielona na sekcje budowane jednocześnie, po jednym subagencie na sekcję, potem scalana w jedną stronę
05Pętla do skutkuplan, implementacja, weryfikacja, powtarzane, aż npm run check zwróci kod 0
07Adversarial verificationsubagenci 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ętlaWorkflow
Kształtrób to znowu, aż warunek będzie spełnionywykonaj kroki po kolei, z warunkiem między każdym
Ty definiujeszwarunek wyjściafazy
Kończy się, gdyprogram mówi „tak"skończy się ostatnia faza
W tym zestawieprompt 05ten 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 widziszPowiedz to
Faza 01 mówi, że folder nie jest pustyNie ruszaj folderu design i załóż projekt obok niego.
Ogłasza fazę 04, zanim istnieje npm run checkPominąłeś fazę 03. Najpierw test. Wróć i go napisz.
npm run check przechodzi w fazie 03Test przeszedł na pustym projekcie. Niczego nie sprawdza. Popraw checker przed fazą 04.
Nie czeka po fazie 02Faza 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 04Zapisz plan do notes.md i jedź dalej.
Czeka na twój przegląd w fazie 04Sam 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ńczoneFaza 05 to nie koniec. Przejdź do fazy 06.
Robi się mniej konkretny koło fazy 05Streść 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ńczonaUruchom npm run check i wklej pięć ostatnich linijek, bez poprawiania.
Faza się wywala, a on idzie dalejMiałeś zatrzymać się na nieudanej fazie. Co się wywaliło i dlaczego kontynuowałeś?
Buduje sekcje jedną po drugiejFaza 04 to niezależne sekcje. Zbuduj je równolegle, po jednym subagencie na każdą.
Faza 07 zgłasza znaleziska i żadnego nie odrzuciłaIlu kandydatów odrzuciłeś i dlaczego?
Uruchamia dwudziestu subagentów do małej stronyUżywaj tylu, ilu wymaga robota. Podaj mi liczbę i uzasadnienie, zanim zaczniesz.