Przejdź do głównej zawartości

Nowy projekt z agentem Cursora to siedem kroków: zamiana briefu na PRD w Plan Mode, reguły projektu przed jakimkolwiek kodem, szkielet frameworka, narzędzia z jednym poleceniem verify, dowód, że każda bramka potrafi zawieść, punkt wyjścia jako wymagane sprawdzenie w CI (required status check) i pierwsza funkcja pisana od testów. Pracę agenta potwierdzają wtedy bramki, a nie twoja lektura kodu.

Ta strona jest dla programisty, który od pustego katalogu odpowiada za nowy kod, i dla tech leada, który chce, żeby każde nowe repozytorium w zespole startowało z tego samego, sprawdzalnego punktu. Sytuacja: product manager pisze „potrzebujemy czegoś jak Trello, tylko prostszego, do codziennych standupów, prototyp na czwartek”. Nie ma specyfikacji ani makiet. Jeśli od razu każesz agentowi budować funkcje, w czwartek masz demo, a w piątek kod, którego nikt nie potrafi bezpiecznie zmienić.

  • PRD w docs/prd.md, w którym kryteria akceptacji mają postać Given/When/Then i przekładają się na testy
  • Dwie reguły projektu w .cursor/rules/, napisane, zanim agent napisze choćby linię kodu, które każdemu kolejnemu czatowi mówią, jaki jest stos i jakie polecenie oznacza „gotowe”
  • Szkielet z samymi narzędziami i jedno polecenie npm run verify, które uruchamia lint, sprawdzenie typów, testy jednostkowe i testy end-to-end
  • Tabelę pokazującą, że każda bramka robi się czerwona po celowym zepsuciu; to dowód, że późniejsze zielone przebiegi coś znaczą
  • Pięć promptów do skopiowania, po jednym na każdy krok z udziałem agenta, oraz sposoby wyjścia z typowych awarii

Wymagania: zainstalowany i zalogowany Cursor oraz Node.js i Git w PATH. Jeśli Cursor jest dla ciebie nowy, zacznij od szybkiego startu z Cursorem. Jeśli to funkcja w istniejącym kodzie, a nie nowy projekt, skorzystaj z workflow PRD w Cursorze.

Kolejność jest tu najważniejsza. Każdy krok zostawia na dysku plik, który czyta następny czat, więc żaden krok nie zależy od tego, czy przetrwa długa rozmowa. Każdy krok zaczynaj w nowym czacie.

  1. Zamień brief na PRD w Plan Mode. Plan Mode „tworzy szczegółowe plany implementacji, zanim powstanie jakikolwiek kod” (dokumentacja Cursora, sprawdzone 28 sierpnia 2026), więc agent może dopytać o brief, nie ruszając plików. Utwórz pusty folder, otwórz go w Cursorze, otwórz nowy czat, przełącz go na Plan Mode i wklej poniższy prompt, podmieniając cytowany brief na wiadomość od PM-a.

    Odpowiedz na pytania, potem wyjdź z Plan Mode i poproś agenta o zapisanie PRD w docs/prd.md. Ten plik przeczytaj uważnie: to jedyny dokument, który przeglądasz linijka po linijce, bo wszystko później jest sprawdzane właśnie względem niego.

  2. Napisz reguły projektu, zanim powstanie kod. Reguły zapisuj jako pliki .mdc w .cursor/rules/; taki wzorzec wczytuje agent z SDK Cursora (@cursor/sdk 1.0.32) i odczytuje z nich klucze frontmattera alwaysApply, globs i description: alwaysApply: true stosuje regułę do każdego zapytania, globs stosuje ją, gdy w grze są pasujące pliki, a description pozwala agentowi samemu zdecydować. Dokumentacja Cursora mówi to samo: „Project rules live in .cursor/rules as .mdc files”, z kluczami frontmattera description, globs i alwaysApply (sprawdzone 2026-10-12). Wklej ten prompt w nowym czacie:

    Polecenie verify jeszcze nie istnieje; reguła nazywa je już teraz, żeby krok 4 miał ustalony cel. Pełna składnia reguł i więcej szablonów: reguły projektu w Cursorze.

  3. Wygeneruj szkielet frameworka sam, w terminalu. Uruchom generator z podanymi wszystkimi opcjami, żeby o nic nie pytał:

    Okno terminala
    # W folderze projektu, w terminalu Cursora albo własnym
    npx create-next-app@16.3.6 . --ts --tailwind --eslint --app --src-dir --use-npm --yes

    Generator akceptuje folder, w którym są już docs/ i .cursor/. Domyślnie zapisuje też AGENTS.md ze wskazówkami dla Next.js i inicjuje repozytorium Git (każde z nich wyłączysz przez --no-agents-md albo --disable-git). Cursor obsługuje AGENTS.md w katalogu głównym projektu i w podkatalogach, więc agent czyta także ten plik (dokumentacja Cursora, sprawdzone 2026-10-12). Gdy uruchamiasz generator sam, a nie przez agenta, krok pobierający szablon zostaje poza czatem, a wynik jest znanym szablonem, a nie wygenerowanym kodem.

  4. Dodaj narzędzia i jedno polecenie verify, bez żadnych funkcji. Teraz agent instaluje resztę stosu i podłącza bramki. Funkcje zostaw na później: szkielet, w którym jest już pół tablicy, trudniej sprawdzić.

    Zatwierdzaj każde polecenie terminala zaproponowane przez agenta, chyba że twój tryb uruchamiania pozwala mu uruchamiać polecenia bez pytania. Tryby uruchamiania w Cursorze to Auto-review (zalecany tryb domyślny od Cursora 3.6: wywołania z allowlisty uruchamiają się od razu, a pozostałe polecenia powłoki, gdy się da, w sandboksie), Allowlist (akcje z twojej allowlisty uruchamiają się bez zatwierdzenia) i Run Everything (każde wywołanie narzędzia uruchamia się automatycznie). Wybierasz jeden w Settings > Agents > Approvals & Execution, a dokumentacja Cursora opisuje je na stronie Run modes w sekcji Agent security (sprawdzone 2026-10-12).

    Gdy verify przechodzi, zacommituj wszystko, co już masz. Krok 5 cofa swoje próby właśnie do tego commita, a git restore działa tylko na plikach, które Git już śledzi:

    Okno terminala
    git add -A
    git commit -m "Baseline: PRD, project rules, tooling and verify gate"
  5. Udowodnij, że każda bramka potrafi zawieść. Zielony verify pierwszego dnia niczego nie dowodzi, dopóki nie zobaczysz, jak każda bramka robi się czerwona. To ten krok pozwala później ufać pracy agenta bez czytania jej w całości.

    Odpowiedź „no” w kolumnie „failed as expected” to najcenniejszy wynik całego startu projektu. Napraw tę bramkę i uruchom prompt jeszcze raz.

  6. Ustaw punkt wyjścia jako wymagane sprawdzenie w CI. Jeśli w kroku 5 musiałeś naprawić którąś bramkę, zacommituj tę poprawkę teraz, żeby punktem wyjścia była wersja, której bramki widziałeś czerwone. Potem dodaj w CI job, który przy każdym pull requeście uruchamia npm ci, npx playwright install --with-deps chromium i npm run verify. Instaluje tylko Chromium, tę samą przeglądarkę co lokalnie, więc CI i twój komputer testują to samo:

    .github/workflows/verify.yml
    name: verify
    on: [pull_request]
    permissions:
    contents: read
    jobs:
    verify:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v7
    with:
    persist-credentials: false
    - uses: actions/setup-node@v7
    with:
    node-version: lts/*
    cache: npm
    - run: npm ci
    - run: npx playwright install --with-deps chromium
    - run: npm run verify

    Wypchnij plik, a potem w regułach ochrony gałęzi main ustaw job verify jako wymagane sprawdzenie. Lokalny przebieg agenta to podgląd; bramką jest CI. Działa to tylko dopóki pull request agenta nie może przepisać bramki: przy pull_request GitHub uruchamia verify.yml z samego pull requesta, a npm run verify pochodzi z jego package.json. Obejmij /.github/ i package.json wpisem w CODEOWNERS z wymaganą akceptacją właściciela kodu, a każdą zmianę w nich w pull requeście z funkcją traktuj jako znalezisko. Jak uruchomić agenta Cursora wewnątrz takiego workflow, pokazuje strona Cursor w CI/CD. Commity w Gicie to punkty przywracania, nad którymi masz kontrolę; jak łączą się z checkpointami Cursora, opisuje checkpointy i gałęzie.

  7. Zbuduj pierwszą funkcję z PRD, zaczynając od testów. Najpierw utwórz gałąź: git switch -c feat/move-card. Funkcja trafia do main przez pull request, który blokuje wymagane sprawdzenie. Otwórz nowy czat w Plan Mode i wybierz jedną funkcję MVP. Plan nazywa jej testy, zanim agent napisze kod, a każdy kamień milowy kończy się przebiegiem verify.

    Oceniaj plan względem PRD, nie własnego gustu: każde kryterium akceptacji musi mieć nazwany test. Potem go zbuduj. Najpierw napisz testy i sprawdź, że nie przechodzą, a dopiero potem implementuj. Wypchnij gałąź i otwórz pull request. Każda kolejna funkcja, łącznie z logowaniem, przechodzi przez ten sam krok.

Jak sprawdzić szkielet bez czytania każdego wygenerowanego pliku?

Dział zatytułowany „Jak sprawdzić szkielet bez czytania każdego wygenerowanego pliku?”

Linijka po linijce czytasz dwie rzeczy: PRD i dwie reguły, bo są krótkie, a wszystko inne jest sprawdzane względem nich. Resztę potwierdzają dowody:

Co chcesz wiedziećDowódSkąd się bierze
Bramki potrafią złapać błądTabela bramek z kroku 5 z wartością „yes” w każdym wierszuPrompt sprawdzający bramki
Agent stosuje regułyW nowym czacie zapytaj: „Which command proves a change is done here, and which files may you not edit?”. Odpowiedź cytuje npm run verify i regułę o testach.cursor/rules/project.mdc
Funkcja robi to, co mówi PRDKażde kryterium akceptacji ma test, który przed zmianą nie przechodził, a po zmianie przechodziPlan z kroku 7 i przebieg testów
Zmiana nie wyszła poza zakresgit diff --stat main...HEAD pokazuje tylko pliki wymienione w planieGit
Nic się nie zepsułoWymagane sprawdzenie w CI jest zielone na pull requeścieCI uruchamiające npm run verify

Akceptacja dzieli się tak samo. Programista, który odpowiada za projekt, zatwierdza PRD i reguły; gdy repozytorium ma być szablonem zespołu, zatwierdza je tech lead. Potem recenzenci czytają plan, nazwy testów i wynik CI, a do diffa zaglądają tylko tam, gdzie ten pakiet dowodów jest słaby. Jak pisać kryteria, które da się sprawdzić testem, opisuje wykonywalne kryteria akceptacji, a dlaczego przegląda się dowody zamiast diffów, wyjaśnia dowody zamiast diffów.

Agent sięga po przestarzałe API. Modele uczą się na latach starszego kodu, więc podsuwają wzorce Pages Routera albo starsze API biblioteki uwierzytelniania. Na przykład tag latest pakietu next-auth to 4.24.15, a wersja 5 jest pod tagiem beta (sprawdzone 26 września 2026), więc agent, który pisze kod pod wersję 5, a instaluje latest, dostaje błędy typów. Wyjście: przypnij główne wersje w project.mdc, a przy dodawaniu biblioteki podaj agentowi wersję, którą zwraca npm view <package> version.

Reguły jakby nie działały. Plik leży poza .cursor/rules/, ma inne rozszerzenie albo uszkodzony frontmatter. Loader SDK (@cursor/sdk 1.0.32) czyta .cursor/rules/**/*.mdc, więc używaj .mdc, a regułę wczyta i IDE, i SDK. Dokumentacja Cursora dodaje, że zwykły plik .md w .cursor/rules jest ignorowany przez system reguł (sprawdzone 2026-10-12). Wyjście: sprawdź, czy plik ma rozszerzenie .mdc i blok frontmattera na samej górze, a potem w nowym czacie zadaj pytanie kontrolne z tabeli powyżej. Jeśli odpowiedź nie cytuje npm run verify, reguła nie jest wczytywana.

Generator zatrzymuje się z komunikatem „contains files that could conflict”. create-next-app 16.3.6 toleruje docs/, .cursor/, .git i kilka innych plików, ale już nie na przykład package.json czy README.md, które napisałeś wcześniej. Wyjście: przenieś dodatkowy plik gdzie indziej, uruchom generator i przenieś plik z powrotem.

verify jest zielony, ale niczego nie testuje. Runner testów bez pasujących plików albo konfiguracja Playwrighta wskazująca zły port potrafią po cichu przejść lub pominąć testy, a ostrzeżenia ESLinta nie zmieniają kodu wyjścia, dlatego skrypt lint używa --max-warnings=0. Wyjście: właśnie to wyłapuje krok 5. Nie zaczynaj kroku 7, dopóki każdy wiersz tabeli bramek nie ma „yes”.

Agent zmienia test, żeby przeszedł. To dla agenta najtańsza droga do zielonego wyniku. Wyjście: linia „never edit an existing test” w project.mdc plus kontrola zakresu: jeśli git diff --stat pokazuje zmieniony plik testu, którego plan nie wymienia, odrzuć zmianę.

Architektura rośnie ponad brief. Poproszony o plan tablicy agent proponuje WebSockety, kolejkę i cache dla 12 użytkowników. Wyjście: podaj skalę w prompcie („12 users, two days, one SQLite file”) i odrzuć każdy punkt planu, którego nie wymaga żadne kryterium akceptacji. Decyzje, które zaważą na projekcie na lata, podejmuj według przewodnika projektowanie architektury z Cursorem.

Kolejne czaty przeczą wcześniejszym decyzjom. Decyzje podjęte w jednej rozmowie znikają w następnej. Wyjście: zapisuj każdą decyzję w PRD albo w regule, nie w czacie, i każdy krok zaczynaj w nowym czacie, który odwołuje się do tych plików.

Ten sam start projektu w innych narzędziach: nowy projekt z Codeksem oraz inicjalizacja projektu w Claude Code.