Claude-code ma specjalnego subagenta który ma za zadanie generować kompleksowy plan rozwiązania danego problemu.
Plan mode:
- Używa Sonnet model
- Nie może zagnieżdżać innych subagents
- Działa w osobnym context window (nie „zaśmieca” głównej rozmowy)
Jak przejść do trybu Plan:
- Tworząc nową sesje od razu z ustawiony Plan mode
claude --permission-mode plan2. Domyślna konfiguracja:
// .claude/settings.json
{
"permissions": {
"defaultMode": "plan"
}
}3. Przełączanie trybów z Shift+Tab
Będąc w Normal Mode, naciśnij Shift+Tab DWUKROTNIE:
– Pierwsze Shift+Tab → Auto-Accept Mode (⁵⁵ accept edits on)
– Drugie Shift+Tab → Plan Mode (⸱ plan mode on)
Statusy widoczne na dole terminala.

Ograniczone narzędzia
Tryb planowania ma ograniczone narzędzie, może tylko:
Read– czytanie plikówGlob– znajdowanie plików po wzorcuGrep– przeszukiwanie zawartości- Bash – tylko komendy read-only: ls, git status, git log, git diff, find, cat, head, tail
Co ważne plan mode korzysta z osobnego context window, czyli podczas rozmowy, podczas rozwiązywania jakiego problemy możemy zlecić w głównej rozmowie aby naszkicował nam plan rozwiązania czegoś.
Jak działa plan mode
- Włączam plan mode
- Zadaje pytanie
- Claude code uruchamia Plan subagent
- Ten dokonuje analizy kodu projektu i zwraca findings(czyli podsumowania researchu)
- Główne okno analizuje te findings i generuje plan
Co robić aby otrzymać dobry plan?
- Przygotuj jak najwięcej informacji, przekaż kontekst problemu:
- Tech stack (framework + wersje):
- Backend: Express.js 4.18
- Frontend: React 18 + TypeScript
- Database: PostgreSQL 14
- Kluczowe pliki (używaj @ references):
- @src/api/users.ts
- @lib/db/queries.ts
- Tech stack (framework + wersje):
- Iteruj, dopytuj o rozwiązania
- pytaj o wyjaśnienie dlaczego taka decyzja
- dopytaj o rozwiązanie alternatywne
- dopytuj co się stanie jak…
- Napisz czego oczekujesz po planie
- Zapisuj plany jako dokumenty – mogą służyć jako dokumentacja
- Łącz z thinking – Plan Mode + extended thinking
Przykłady
❌ ZŁY PROMPT
Dodaj walidację do formularza rejestracjiCo się stanie:
Plan Subagent nie wie:
- Jaka technologia/framework?
- Gdzie jest ten formularz, lokalizacja pliku?
- Jakie pola trzeba walidować?
- Czy masz już jakąś walidację?
- Client-side czy server-side?
Plan Subagent będzie musiał przeszukać cały codebase. A rezultat będzie ogólny w którym będą jeszcze zadane pytanie, na które musisz odpowiedzieć
✅ DOBRY PROMPT (z pełnym kontekstem)
Dodaj walidację do formularza rejestracji w aplikacji SaaS.
**Current Stack:**
- Frontend: Next.js 14 (App Router) + React 18 + TypeScript
- Form library: React Hook Form (już używamy w loginie)
- Backend: Next.js API routes w app/api/
- Database: Prisma + PostgreSQL
**Kluczowe pliki:**
- @app/(auth)/register/page.tsx - formularz rejestracji (client component)
- @app/api/auth/register/route.ts - endpoint do rejestracji
- @components/ui/Input.tsx - reużywalny komponent input
- @lib/validations/auth.ts - tam są już walidacje dla loginu (używamy Zod)
**Current state:**
Formularz działa, ale BEZ walidacji:
```tsx
// app/(auth)/register/page.tsx (fragment)
'use client';
export default function RegisterPage() {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [name, setName] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
// Wysyła bez walidacji!
await fetch('/api/auth/register', {
method: 'POST',
body: JSON.stringify({ email, password, name })
});
};
return (
<form onSubmit={handleSubmit}>
<input value={email} onChange={(e) => setEmail(e.target.value)} />
<input value={password} onChange={(e) => setPassword(e.target.value)} />
<input value={name} onChange={(e) => setName(e.target.value)} />
<button>Register</button>
</form>
);
}
```
**Requirements - jakie walidacje:**
Email:
- Required
- Valid email format
- Max 100 znaków
- Check if already exists (real-time, debounced 500ms)
Password:
- Required
- Min 8 znaków
- Musi zawierać: uppercase, lowercase, liczba, znak specjalny
- Show password strength indicator (weak/medium/strong)
Name:
- Required
- Min 2, max 50 znaków
- Only letters, spaces, hyphens
- No numbers, no special chars (except hyphen)
Company name (optional):
- Max 100 znaków
- Alphanumeric + spaces
**UI Requirements:**
- Show errors BELOW każdego pola (red text)
- Show errors ON BLUR, not on every keystroke (lepsze UX)
- Disable submit button jeśli są errory
- Show loading state podczas walidacji email (checking...)
- Password strength bar (red → yellow → green)
**Technical constraints:**
- MUSI używać React Hook Form + Zod (consistency z loginem)
- MUSI być TypeScript (strict mode)
- Walidacja client-side (instant feedback) + server-side (security)
- API endpoint musi zwracać Zod errors w formacie React Hook Form
**Non-functional:**
- Email check API call: debounced 500ms (nie bombardujemy backendu)
- Walidacja nie może spowolnić UI (<50ms client-side)
- Error messages po polsku
**Deliverables w planie:**
1. Implementacja w 3 fazach (każda <3h pracy)
- Phase 1: Setup Zod schema + podstawowa walidacja
- Phase 2: Real-time email check + password strength
- Phase 3: Polish UI (error messages, loading states)
2. Dla każdej fazy:
- Dokładne pliki do modyfikacji (z nazwami funkcji)
- Zod schema definition
- React Hook Form integration code
- API endpoint changes
- Error handling strategy
3. Reużywalność:
- Validation schema exportable (użyjemy w innych formach)
- UI components reusable (Input with error state)
4. Testing approach:
- Jakie edge cases przetestować
- Mock API dla email check
5. Timeline estimate w godzinachPlan Subagent wie dokładnie:
- ✅ Framework: Next.js 14 + React Hook Form
- ✅ Gdzie szukać:
@app/(auth)/register/page.tsx - ✅ Co już istnieje: Login validation w
@lib/validations/auth.ts - ✅ Jakie biblioteki: React Hook Form + Zod (już używane)
- ✅ Wszystkie requirements (dokładne reguły)
Plan mode przeszuka konretne pliki podane w promcie, plan będzie konretny.

