Plan przed kodem

Jak sprawdzić plan coding agenta, zanim napisze kod

Plan agenta to propozycja. Zanim go zatwierdzisz, zadaj cztery pytania: co akceptuję, co odrzucam, czego brakuje i która decyzja jest moja. Wycięcie kroku z planu kosztuje jedno zdanie. Wycięcie go z diffu kosztuje pliki, testy i czas review.

Autor · · 7 min czytania · Read in English

Karta planu agenta z siedmioma krokami: dwa przekreślone na bursztynowo jako poza zakresem, pozostałe pięć prowadzi do zatwierdzenia

Poprosiłem agenta o zapisane wyszukiwania w katalogu urządzeń w aplikacji React. Plan miał osiem porządnych kroków w sensownej kolejności, więc zatwierdziłem go po pobieżnym przejrzeniu. Krok trzeci wprowadzał nowy globalny store dla całego modułu wyszukiwania, choć projekt miał już serwis zapisanych wyszukiwań i lokalny stan widoku, które w zupełności wystarczały. Kiedy to zauważyłem, store miał już slice, selektory, providera w app shellu i kilkanaście poprawionych testów. Kod był dobry. Kierunek nie był mój.

Jak korzystać z plan mode w Claude Code

W Claude Code plan mode pozwala agentowi czytać pliki i uruchamiać komendy, żeby rozpoznać repozytorium, ale nie edytuje kodu, dopóki nie zatwierdzisz planu. Włączasz go przez Shift+Tab, prefiksem /plan przed pojedynczą wiadomością albo startując claude --permission-mode plan. Inne agenty mają podobny krok planowania lub tryb tylko do odczytu. Niezależnie od narzędzia wartość bierze się z tego, co zrobisz z planem przed akceptacją:

  1. Opisz sytuację: jak jest teraz, jak ma być i czego nie wolno zmienić.
  2. Poproś o plan, nie o kod, razem z założeniami i otwartymi pytaniami.
  3. Przeczytaj plan przez cztery pytania audytu opisane niżej.
  4. Odeślij poprawki i poproś o nową wersję planu, nadal bez implementacji.
  5. Zatwierdź dopiero wtedy, gdy plan zgadza się z zadaniem, granicami i sposobem weryfikacji.
Prompt: poproś o plan, który da się sprawdzić
Użytkownik ma móc zapisać do 5 wyszukiwań na liście urządzeń
i później do nich wrócić. Nie zmieniaj API ani współdzielonych komponentów.

Najpierw przejrzyj listę urządzeń i istniejący kod zapisanych wyszukiwań.
Potem zaproponuj plan, w którym będą:
- pliki, które zmienisz, i istniejący wzorzec, którego się trzymasz
- założenia i otwarte pytania
- czego świadomie nie robisz
- jak to zweryfikujemy (testy i kroki ręczne)
Jeszcze nie pisz kodu.
Diagram: plan, potem decyzja developera, potem diff. Rosnąca linia pokazuje, jak na każdym etapie rośnie koszt zmiany kierunku.
Zmiana kroku w planie kosztuje jedno zdanie. Ta sama decyzja w diffie kosztuje pliki, testy i czas review.

Plan jest najtańszą wersją diffu. Właśnie dlatego warto go poprawiać.

Zbigniew Jaryst

Dlaczego płynny plan wciąż może być zły?

Agent pisze uporządkowany plan z takiego obrazu systemu, jaki akurat ma, a niepełny obraz wcale nie sprawia, że plan brzmi mniej pewnie. Schludna lista kroków wygląda na przemyślaną. To nie to samo. Plan może czytać się świetnie i mimo to:

  • dotyczyć złego obszaru, na przykład pierwszego podobnego komponentu, który agent znalazł;
  • dokładać funkcje, o które nikt nie prosił;
  • bez potrzeby zmieniać kontrakt, współdzielony komponent albo API;
  • pomijać edge case: puste dane, odświeżenie strony, limit;
  • budować nowy mechanizm obok istniejącego;
  • zakładać zachowanie, którego nikt nie potwierdził.

Oto plan zbliżony do tego, który zatwierdziłem za szybko. Zadanie: użytkownik może zapisać do pięciu wyszukiwań na liście urządzeń i później do nich wrócić.

Plan agenta v1
## Plan: zapisane wyszukiwania

1. Rozszerz model SavedSearch o aktywne filtry i sortowanie.
2. Dodaj zapis i odczyt do istniejącego savedSearchService.
3. Wprowadź nowy globalny searchStore dla całego modułu wyszukiwania,
   żeby zapisane wyszukiwania, filtry i wyniki miały jedno źródło prawdy.
4. Dodaj przycisk „Zapisz wyszukiwanie” do toolbara listy urządzeń.
5. Utwórz stronę /saved-searches, na której użytkownik edytuje
   kryteria zapisanego wyszukiwania.
6. Wczytaj zapisane wyszukiwanie w widoku listy i zaktualizuj URL.
7. Przepisz DeviceFilters tak, żeby czytał z searchStore.
8. Dodaj testy jednostkowe dla searchStore i nowej strony.

Kroki 1, 2, 4 i 6 służą zadaniu. Krok 3 dodaje abstrakcję, której repozytorium nie potrzebuje, krok 7 istnieje tylko z powodu kroku 3, a krok 5 to funkcja, o którą nikt nie prosił. Krok 8 testuje nowy kod, a nie zachowanie, na którym zależy użytkownikowi. Limitu pięciu wyszukiwań, pustych kryteriów i odświeżenia strony nie ma wcale.

Jakie cztery pytania zadać przed zatwierdzeniem planu?

Każde pytanie wymusza osobną ocenę. Razem zamieniają „wygląda OK” w decyzję, którą potrafisz uzasadnić.

  1. Co akceptuję? Wskaż kroki, które służą zadaniu i pasują do repozytorium, żeby agent wiedział, którą część rozumowania zostawić.
  2. Co odrzucam? Wytnij kroki, które poszerzają zakres, dokładają abstrakcje, bez potrzeby ruszają współdzielony kod albo dublują istniejący wzorzec. Powód podaj w jednym zdaniu.
  3. Czego brakuje? Edge case’ów, non-goals, ryzyk, a przede wszystkim sposobu weryfikacji. Plan bez weryfikacji nie ma określonego końca.
  4. Która decyzja jest moja? Znajdź wybór produktowy lub architektoniczny, którego agent nie powinien podejmować sam, i podejmij go przed implementacją.

Plan v1 po audycie

Animacja: plan agenta pojawia się krok po kroku, audyt oznacza dwa kroki jako poza zakresem i je przekreśla, a potem plan zostaje zatwierdzony.
Scope creep najłatwiej zobaczyć w planie. Dwa kroki spoza zakresu zostają przekreślone, zanim staną się plikami.

Zatwierdzenie

Wygląda dobrze, działaj.

Agent buduje wszystkie osiem kroków, razem ze storem i dodatkową stroną.

Audyt

Akceptuję 1, 2, 4 i 6. Odrzucam 3 i 7: rozszerz savedSearchService i trzymaj stan lokalnie w widoku listy, bez nowego store’a. Odrzucam 5: edycja kryteriów jest poza zakresem. Brakuje: maksymalnie 5 wyszukiwań, pustych kryteriów nie zapisujemy, otwarcie zapisanego wyszukiwania zaczyna od strony 1, zapisane wyszukiwania przetrwają odświeżenie. Moja decyzja: na razie localStorage, bez zmian w API. Popraw plan i dodaj testy tych zachowań. Jeszcze nie implementuj.

Cztery oceny, jedna decyzja i jasny następny krok.

Audyt dłużej się pisze, ale agent nie musi już niczego zgadywać.

Co powinien zawierać dobry plan coding agenta?

Tyle, żeby było widać, jak agent zrozumiał zadanie, i żebyś mógł się z nim nie zgodzić, zanim cokolwiek powstanie. Elegancja nie ma znaczenia. Znaczenie mają:

  • Zrozumienie: problem w jednym, dwóch zdaniach, własnymi słowami agenta.
  • Obszar: pliki, które zmieni, i wzorzec, którego się trzyma, np. savedSearchService.ts i DeviceListPage.tsx, a nie „moduł wyszukiwania”.
  • Kolejność: kroki na tyle małe, żeby błędny dało się tanio cofnąć.
  • Ryzyka: współdzielone komponenty, stan, routing, kontrakty.
  • Otwarte pytania: czego nie wie i czego nie powinien zakładać.
  • Non-goals: czego świadomie nie rusza.
  • Weryfikacja: testy i kroki ręczne, które pokażą, że zadanie jest zrobione.

Które decyzje należą do człowieka, a nie do agenta?

Każda, która zmienia zakres, kontrakt, współdzielony komponent albo zachowanie produktu. Ustal podział, zanim zatwierdzisz plan:

  • Agent decyduje sam: lokalne nazwy, kolejność małych kroków, użycie istniejącego i jednoznacznego wzorca, szczegóły techniczne bez wpływu na kontrakt.
  • Agent proponuje, Ty zatwierdzasz: nową abstrakcję, zmianę architektury, zmianę współdzielonego komponentu lub kontraktu, każde rozszerzenie zakresu.
  • Agent musi zapytać: gdy wymagania są sprzeczne, gdy dwa zachowania produktu są równie uprawnione, gdy odkrycie zmienia pierwotny cel.
  • Agent nie robi sam: operacji destrukcyjnych, zmian na produkcji, migracji danych, niczego z sekretami, nieodwracalnych zmian bez checkpointu.

Warunki zatrzymania wpisz wprost do wiadomości z akceptacją, w języku tego zadania:

Dopisane do akceptacji
Zatrzymaj się i zapytaj mnie, zanim:
- ruszysz pliki poza listą urządzeń i savedSearchService
- zmienisz typ SavedSearch, z którego korzystają inne widoki
- rozstrzygniesz zachowanie produktu, którego plan nie opisuje
- zrobisz cokolwiek, czego nie ma w zatwierdzonym planie

Czy każde zadanie potrzebuje planu?

Nie. Mały, lokalny bug z jasnym zakresem, istniejącym wzorcem i łatwą weryfikacją może iść od razu do diagnozy i poprawki. O plan proś, gdy zmiana dotyka kilku modułów, state managementu, API, współdzielonego komponentu, ważnego flow użytkownika, wydajności albo migracji. Zapisane wyszukiwania się kwalifikują: model, serwis, widok listy, URL i trwałość danych. Literówka w etykiecie przycisku już nie.

Co powinno się wydarzyć przed startem implementacji?

Agent rozpoznaje, dopytuje i proponuje. Ty decydujesz. Ułóż kroki we właściwej kolejności.

Ułóż kroki przed implementacją

Ułóż pięć kroków w kolejności, w której kierunek zostaje pod Twoją kontrolą.

  1. Rozpoznanie repozytorium
  2. Wyjaśnienie niewiadomych
  3. Przygotowanie planu
  4. Twoja ocena kierunku
  5. Start implementacji

Rozpoznanie na początku sprawia, że plan opiera się na tym, co już istnieje, a nie na pierwszym podobnym pliku. Potem niewiadome, bo każde pytanie bez odpowiedzi staje się założeniem ukrytym w planie. Twoja ocena stoi tuż przed implementacją: to ostatni moment, w którym zmiana kierunku kosztuje zdanie, a nie diff.

Kiedy kod już powstanie, audyt przenosi się na dowody: jak robić review kodu z AI w aplikacji React lub Angular.

Najczęstsze pytania

Czym jest plan mode w Claude Code?

To tryb uprawnień, w którym Claude czyta pliki, uruchamia komendy, żeby rozpoznać repozytorium, i pisze plan, ale nie edytuje kodu, dopóki go nie zatwierdzisz. Włączasz go przez Shift+Tab, prefiksem /plan albo komendą claude --permission-mode plan.

Czy mogę sam poprawić plan?

Tak. W Claude Code Ctrl+G otwiera proponowany plan w edytorze, zanim Claude ruszy dalej. Działa też wiadomość „akceptuję, odrzucam, brakuje, decyduję”, która zostawia Twoje rozumowanie w rozmowie. W obu przypadkach zatwierdzasz poprawioną wersję, nie pierwotną.

Jak długi powinien być plan coding agenta?

Na tyle długi, żeby pokazać zrozumienie, zakres, ryzyka, otwarte pytania i weryfikację. Miarą nie jest długość, tylko to, czy każdy krok możesz osobno przyjąć albo odrzucić.

Co zrobić, gdy agent odchodzi od zatwierdzonego planu?

Zatrzymaj go i zdecyduj: aktualizacja planu, wydzielenie nowego odkrycia do osobnego zadania albo cofnięcie zmian. Nie pozwalaj agentowi samodzielnie rozszerzać zakresu.