Tworzenie Nowych Projektów z Terminala
Inicjalizacja projektu w Claude Code to pętla czterech ruchów: konkretny prompt opisujący stack, przebieg generujący katalogi, narzędzia i konfigurację, weryfikacja dowodząca, że szkielet naprawdę startuje, i jedna korekta kursu. Wygenerowany CLAUDE.md przenosi konwencje do każdej kolejnej sesji, a /init stosuje ten sam przepływ do bazy kodu, która już istnieje.
Poniedziałek rano, właśnie zapaliło się zielone światło. Product manager opisał usługę jednym zdaniem — “REST API do preferencji użytkownika, PostgreSQL, uwierzytelnianie, rate limiting, logi strukturalne” — a tradycyjna odpowiedź to cały dzień klejenia boilerplate’u, zanim powstanie pierwsza linia logiki biznesowej. Struktura projektu, konfiguracja lintera, połączenie z bazą, zmienne środowiskowe, pipeline CI: nic z tego nie jest produktem.
Claude Code ściska ten dzień do jednej sesji w terminalu. Sztuka nie polega na samym generowaniu — drzewo katalogów wypluje każde narzędzie. Sztuka polega na poprowadzeniu pierwszego promptu tak, żeby wyszedł szkielet produkcyjny, a nie generyczny szablon, i na utrzymaniu ciasnej pętli buduj-zweryfikuj-koryguj, która łapie luki, póki są jeszcze małe.
Co daje dziesięciominutowy bootstrap
Dział zatytułowany „Co daje dziesięciominutowy bootstrap”- Powtarzalną pętlę bootstrapowania dowolnego projektu z CLI: opisz, zbuduj szkielet, zweryfikuj, koryguj kurs
- Zwięzły
CLAUDE.md, który działa jak trwała pamięć projektu, zamiast zostać zignorowanym przy trzeciej sesji - Prompty copy-paste do Next.js, FastAPI, Phoenix i Express z Drizzle
- Przepływ
/init, który zamienia nieznaną, istniejącą bazę kodu w skonfigurowaną sesję - Fazową migrację na TypeScript, która nie psuje deployu, i tryb prototypowania na wypadek, gdy wąskim gardłem są pytania o uprawnienia
Od pustego katalogu do usługi, która działa
Dział zatytułowany „Od pustego katalogu do usługi, która działa”Bootstrap, który się sprawdza, to nie “wpisz jedno życzenie i odejdź od klawiatury”. To cztery ruchy: opisz konkretnie, pozwól Claude zbudować szkielet, każ mu udowodnić, że szkielet startuje, a potem popraw jedną realną lukę.
-
Stwórz katalog projektu i uruchom Claude Code
Okno terminala mkdir my-saas-app && cd my-saas-appgit initclaudeRozpoczęcie od
git initma znaczenie. Claude Code zna git i tworzy commity w logicznych punktach kontrolnych całego scaffoldingu. Bez repozytorium tracisz możliwość cofnięcia się, kiedy któryś krok pójdzie bokiem. -
Opisz projekt na tyle szczegółowo, żeby uniknąć generycznego outputu
Mgliste “stwórz aplikację webową” daje generyczny szablon. Konkretny prompt daje coś, na czym da się budować. Podaj stack, główne funkcje i swoje konwencje.
-
Każ Claude udowodnić, że szkielet startuje, zanim na nim zbudujesz
To ten krok odróżnia prawdziwy przepływ pracy od folderu reklamowego, i to jego większość ludzi pomija. Nie ufaj wypisanemu drzewu katalogów — uruchom je.
Start Postgres with docker compose, run the migrations, then start thedev server and confirm /health returns 200. Run the linter and the testsuite. Paste any errors and fix them until everything is green.Claude jest najlepszy wtedy, gdy ma przed sobą prawdziwy błąd. Kiedy wersje zależności wchodzą w konflikt albo migracja się wywala, to właśnie faktyczny stderr pozwala mu poprawić kurs precyzyjnie, zamiast zgadywać.
-
Popraw jedną realną lukę
Wygenerowane szkielety prawie zawsze pomijają coś specyficznego dla twojego sposobu pracy. Nazwij to wprost, zamiast opisywać cały projekt od nowa:
The CRUD handlers call Prisma directly. Extract a preferences servicelayer between the routes and the DB so business logic is testable inisolation, and move the Zod schemas into src/schemas/. -
Wygeneruj plik CLAUDE.md
Ten krok zwraca się przy każdej kolejnej sesji, bo to jego Claude czyta, zanim przeczyta cokolwiek innego.
/initKomenda
/initanalizuje strukturę projektu, wykrywa frameworki i narzędzia i generuje startowyCLAUDE.md. Przejrzyj go i dopisz to, czego Claude nie wywnioskuje z samego kodu.
Po kilku minutach masz bazę kodu, którą faktycznie uruchomiłeś: warstwę serwisową, zwalidowane trasy, migracje, które przeszły, zielony zestaw testów i Dockera, którego widziałeś startującego — a nie drzewo katalogów, co do którego masz nadzieję, że się skompiluje.
Pisanie CLAUDE.md, którego Claude faktycznie słucha
Dział zatytułowany „Pisanie CLAUDE.md, którego Claude faktycznie słucha”/init daje dobry punkt startowy, ale najlepsze pliki CLAUDE.md są bezlitośnie przycinane i dopracowywane w czasie. Oto co uwzględnić, a co pominąć.
Co należy do CLAUDE.md
Dział zatytułowany „Co należy do CLAUDE.md”# Build and test commandsnpm run dev # Start dev server on port 3000npm run build # Production buildnpm run test # Run vitestnpm run lint # ESLint checknpm run db:migrate # Run Prisma migrationsnpm run db:seed # Seed development data
# Code conventions- Use server components by default, client components only for interactivity- Named exports only, no default exports except page.tsx and layout.tsx- Colocate tests next to source files: Button.tsx / Button.test.tsx- Use Zod for all runtime validation, never trust client input- Service layer between routes and DB; routes stay thin
# Architecture decisions- Auth: NextAuth.js with database sessions (not JWT)- State: Server state via React Server Components, client state via Zustand only where needed- API: Server Actions for mutations, Route Handlers only for webhooks
# Common gotchas- Prisma client must be instantiated as singleton (see src/lib/db.ts)- Middleware runs on Edge Runtime -- no Node.js APIs available- Migrations are append-only; use the generator, never hand-edit- IMPORTANT: Never commit .env files. Use .env.example for templates.Czego nie wpisywać do CLAUDE.md
Dział zatytułowany „Czego nie wpisywać do CLAUDE.md”Nie wpisuj rzeczy, które Claude wyczyta z kodu: standardowych konwencji TypeScriptu, działania hooków Reacta ani tego, co robi npm install. Nie wpisuj dokumentacji, która często się zmienia — podlinkuj ją.
Prompty startowe do stacków, od których najczęściej zaczynasz
Dział zatytułowany „Prompty startowe do stacków, od których najczęściej zaczynasz”Każdy z nich ma ten sam kształt co prompt Next.js powyżej — stack, układ katalogów, konwencje i pierwszy zasób do zbudowania — tylko ze zmienionymi szczegółami.
Python FastAPI
Dział zatytułowany „Python FastAPI”Phoenix LiveView
Dział zatytułowany „Phoenix LiveView”Express z TypeScriptem i Drizzle
Dział zatytułowany „Express z TypeScriptem i Drizzle”To prompt do usługi preferencji użytkownika z początku artykułu. Idzie dalej niż wersja dla Next.js w dwóch miejscach: nazywa wprost middleware uwierzytelniania, rate limitingu i logowania oraz zamawia workflow CI w tym samym przebiegu, więc repozytorium przychodzi z zielonym pipeline’em zamiast z takim, który dokręcasz później.
Konfiguracja, która odmawia startu przy złej wartości
Dział zatytułowany „Konfiguracja, która odmawia startu przy złej wartości”Szkielet, który wypluł pliki konfiguracyjne, nie jest gotowy. Chcesz konfiguracji, która krzyczy przy złej wartości — i chcesz zobaczyć, jak krzyczy. Poproś o konfigurację świadomą środowiska z walidacją przy starcie, a potem przetestuj tę walidację, podając jej coś zepsutego.
Cała rzecz tkwi w drugiej połowie, w “then prove it”. Walidacja konfiguracji, której nigdy nie widziałeś w akcji, to walidacja, której w praktyce nie masz.
Uruchamianie /init w bazie kodu, do której właśnie dołączyłeś
Dział zatytułowany „Uruchamianie /init w bazie kodu, do której właśnie dołączyłeś”Nie każdy projekt zaczyna się od zera. Kiedy dołączasz do istniejącej bazy kodu, /init staje się narzędziem onboardingu.
-
Wejdź do katalogu głównego projektu i uruchom Claude Code
Okno terminala cd /path/to/existing-projectclaude -
Wygeneruj CLAUDE.md z istniejącej bazy kodu
/initClaude czyta package.json (albo jego odpowiednik), ogląda strukturę katalogów, wykrywa frameworki testowe i generuje
CLAUDE.mddopasowany do projektu. -
Poproś Claude o uzupełnienie tego, co
/initpominąłRead through the README, the CI configuration, and the last 20 commits.Update CLAUDE.md with any conventions, gotchas, or workflow patternsyou can identify that aren't already captured. -
Zweryfikuj pytaniem, na które odpowie tylko dobrze skonfigurowana sesja
How do I run just the unit tests for the auth module?What is the deployment process?Jeśli Claude odpowie poprawnie z samego
CLAUDE.md, bez doczytywania kolejnych plików, konfiguracja działa.
Migracja starej aplikacji zamiast budowania nowej od zera
Dział zatytułowany „Migracja starej aplikacji zamiast budowania nowej od zera”Czasem projekt, który inicjalizujesz, już istnieje, a prawdziwym zadaniem jest przeniesienie go na nowoczesny toolchain — stara aplikacja Express, która potrzebuje TypeScriptu bez ryzykownego przepisania na raz. Pętla jest ta sama, opisz-wygeneruj-zweryfikuj, tyle że stosowana po jednej fazie, żeby aplikacja pozostała wdrażalna na każdym etapie.
-
Poproś o plan fazowy, nie o diff
Analyze this Express app and propose a phased migration to TypeScriptstrict that keeps the service deployable after each phase. Start withtsconfig + build wiring and the leaf modules with no internal imports. -
Wykonaj pierwszą fazę i potwierdź, że build nadal przechodzi
Implement phase 1: add the TypeScript config and convert the leafmodules. Then run the build and the existing test suite and confirmboth pass before we touch anything else. -
Iteruj, weryfikując każdą fazę
Tests pass. Convert the next layer (the route handlers), add types forthe external deps they use, and run the suite again. Stop if anythingbreaks.
Dyscyplina siedzi w kroku weryfikacji między fazami. Pominięcie go to dokładnie ten sposób, w jaki “stopniowa” migracja po cichu zbiera sto błędów typów, które odkrywasz naraz.
Prototypowanie, gdy wąskim gardłem są pytania o uprawnienia
Dział zatytułowany „Prototypowanie, gdy wąskim gardłem są pytania o uprawnienia”Hackathon rządzi się innymi prawami. Pomysł trzeba zwalidować w kilka godzin, a to prośba o zgodę przy każdym zapisie pliku cię spowalnia. W Claude Code nie ma żadnego “trybu YOLO” — prawdziwym mechanizmem jest flaga --dangerously-skip-permissions (albo tryb uprawnień bypassPermissions), która wyłącza pytania o zgodę na czas sesji.
claude --dangerously-skip-permissionsPotem podaj mu prompt z wyraźnie ograniczonym zakresem:
Hooki, które egzekwują to, co CLAUDE.md tylko sugeruje
Dział zatytułowany „Hooki, które egzekwują to, co CLAUDE.md tylko sugeruje”Hooki to skrypty uruchamiane automatycznie w konkretnych punktach przepływu pracy Claude. Instrukcje z CLAUDE.md są doradcze, hooki wykonują się deterministycznie za każdym razem.
{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx eslint --fix" } ] } ] }}Ten hook uruchamia ESLint z auto-fixem po każdej edycji pliku przez Claude. Koniec z wyłapywaniem w review problemów stylistycznych, które powinny zniknąć automatycznie.
Kształt ma tu znaczenie. Wpis z matcherem opakowuje wewnętrzną tablicę hooks z obiektami { type: "command", command: ... } — nie ma czegoś takiego jak gołe pole command na najwyższym poziomie. Hooki nie dostają też zmiennej $FILE_PATH: Claude Code podaje zdarzenie jako JSON na stdin, więc ścieżkę edytowanego pliku wyciągasz przez jq -r '.tool_input.file_path' i przekazujesz dalej przez xargs. Pomiń jq, a ESLint dostanie pusty argument i po cichu nie zrobi nic.
Rozszerzanie konfiguracji przez skille i serwery MCP
Dział zatytułowany „Rozszerzanie konfiguracji przez skille i serwery MCP”Dwa mechanizmy rozszerzeń realnie skracają setup i rozwiązują różne problemy: skill to przepis wielokrotnego użytku, serwer MCP to żywe połączenie z systemem.
Skill, który buduje funkcje po waszemu
Dział zatytułowany „Skill, który buduje funkcje po waszemu”Kiedy projekt już stoi, zakoduj zespołowy przepływ pracy jako skill, który każdy może wywołać.
---name: new-featuredescription: Scaffold a new feature with all required files---Create a new feature: $ARGUMENTS
1. Create a new branch named feature/$ARGUMENTS2. Add route handler in src/app/api/$ARGUMENTS/route.ts3. Add service in src/services/$ARGUMENTS.service.ts4. Add Zod schemas in src/schemas/$ARGUMENTS.schema.ts5. Add tests in src/services/$ARGUMENTS.service.test.ts6. Update CLAUDE.md if new conventions are introducedWywołujesz go przez /new-feature user-preferences, a Claude buduje całą strukturę funkcji zgodnie z konwencjami zespołu. Po gotowe rzeczy, które napisał ktoś inny, zajrzyj na skills.sh i instaluj uniwersalnym CLI — npx skills add <owner/repo> — działającym w Claude Code, Cursorze i Codeksie.
Serwery MCP, które kończą zgadywanie
Dział zatytułowany „Serwery MCP, które kończą zgadywanie”Po serwer MCP sięgaj wtedy, gdy chcesz żywego, stanowego połączenia z narzędziem, a nie jednorazowego przepisu.
-
Serwer MCP do Postgresa pozwala Claude odpytać żywy schemat, zamiast zgadywać nazwy kolumn przy pisaniu migracji i zapytań:
Okno terminala claude mcp add --transport stdio postgres -- npx -y @modelcontextprotocol/server-postgres "$DATABASE_URL" -
Serwer MCP do GitHuba (
@modelcontextprotocol/server-github) pozwala tej samej sesji założyć repozytorium, wypchnąć szkielet i otworzyć pierwszy PR bez wychodzenia z terminala.
Gdy scaffolding projektu zawodzi
Dział zatytułowany „Gdy scaffolding projektu zawodzi”Claude generuje generyczny szablon zamiast tego, co opisałeś. Prompt był zbyt ogólny. Dopisz konkretne wersje frameworków, dokładny układ katalogów i swoje konwencje. Szczegółowość, którą dokładasz na wejściu, to korekty kursu, których unikasz później.
Wygenerowany projekt ma konflikty zależności. Claude czasem wciąga niekompatybilne wersje pakietów. Właśnie dlatego krok weryfikacji jest nienegocjowalny — “uruchom serwer deweloperski i napraw błędy” stawia przed Claude prawdziwy stderr, a konflikty rozwiązuje dobrze, kiedy widzi faktyczną awarię.
Szkielet odpływa od promptu w długiej sesji. Gdy kontekst się zapełnia, Claude potrafi zapomnieć wczesną instrukcję w rodzaju “tylko named exports”. Przenieś regułę do CLAUDE.md, żeby przetrwała, zamiast powtarzać ją w czacie za każdym razem.
CLAUDE.md jest ignorowany w kolejnych sesjach. Plik jest za długi albo zbyt ogólnikowy. Zejdź poniżej mniej więcej 50 linii i spraw, żeby każda linia była konkretna i wykonalna. “Pisz czysty kod” nie zarabia na siebie; “Warstwa serwisowa między trasami a bazą, trasy zostają cienkie” — zarabia.
/init pomija konwencje projektu. Komenda analizuje strukturę kodu, ale nie przeczyta niepisanych zasad zespołu. Zawsze uzupełniaj jej wynik o rzeczy, które żyją wyłącznie w głowach: nazewnictwo gałęzi, proces PR, procedury wdrożeniowe. Potem zweryfikuj to pytaniem, na które odpowie tylko dobrze skonfigurowany CLAUDE.md.
Dokąd dalej, gdy projekt już działa
Dział zatytułowany „Dokąd dalej, gdy projekt już działa”Projekt ma szkielet, CLAUDE.md jest skonfigurowany, hooki stoją, a serwer deweloperski widziałeś na własne oczy. Następny krok to poruszanie się po kodzie, którego nie napisałeś.