W poprzednim wpisie zdefiniowaliśmy, czym jest agent AI. Teraz przyjrzymy się konkretnemu agentowi od środka — Claude Code od Anthropic. To agent terminalowy: działa w Twoim shellu, czyta i edytuje Twoje pliki, uruchamia polecenia, zarządza gitem. Nie jest pluginem do IDE ani chatbotem z doklejonym terminalem — to pełnoprawny agent z pętlą percepcja→rozumowanie→akcja, pamięcią i systemem rozszerzeń.
Architektura Claude Code
Claude Code składa się z kilku warstw, które razem tworzą środowisko agentyczne:
graph TD
U[Użytkownik] -->|prompt| CC[Claude Code CLI]
CC -->|kontekst + narzędzia| M[Model Claude 4.x]
M -->|tool_call| T[Narzędzia wbudowane]
M -->|tool_call| MCP[Serwery MCP]
M -->|tool_call| S[Skills]
T --> FS[System plików]
T --> SH[Shell / Bash]
T --> G[Git]
CC -->|odczyt| CM[CLAUDE.md]
CC -->|odczyt/zapis| MEM[Pamięć]
CC -->|hooks| H[Hooks pre/post]
Narzędzia wbudowane
Claude Code ma zestaw narzędzi dostępnych bez konfiguracji:
| Narzędzie | Co robi |
|---|---|
| Read | Odczyt pliku z numerami linii. Obsługuje obrazy, PDF, Jupyter notebooks |
| Edit | Precyzyjne edycje plików — zamiana string→string, bez nadpisywania całości |
| Write | Tworzenie nowych plików lub pełne nadpisanie istniejących |
| Bash | Wykonywanie poleceń shell — z timeoutem, możliwością uruchomienia w tle i sandboxem |
| Grep | Wyszukiwanie w treści plików — regex, filtry typów plików, tryby wyjścia |
| Glob | Wyszukiwanie plików po wzorcu nazwy (np. **/*.tsx) |
| Agent | Uruchamianie subagentów do złożonych, wielokrokowych zadań |
| TodoWrite | Zarządzanie listą zadań w ramach sesji |
To nie są "komendy" — to narzędzia w sensie MCP . Każde ma schemat JSON z parametrami, opis dla modelu i walidację. Model wybiera narzędzie na podstawie kontekstu zadania i konstruuje parametry wywołania.
System uprawnień
Claude Code implementuje wielopoziomowy system uprawnień:
| Poziom | Co obejmuje | Jak działa |
|---|---|---|
| Automatycznie dozwolone | Odczyt plików, wyszukiwanie, glob | Operacje read-only — nie zmieniają stanu. Agent wykonuje bez pytania |
| Wymagające potwierdzenia | Edycja plików, nowe pliki, Bash, git | Użytkownik widzi dokładnie co agent chce zrobić i decyduje: Allow / Deny |
| Konfigurowalne | Reguły w settings.json | Możesz dodać wyjątki: np. npm test bez pytania, edycja plików w src/ |
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run build)",
"Edit(src/**)"
]
}
}
Możesz ustawić tryb "YOLO" (wszystko dozwolone bez potwierdzeń). Ten tryb jest niebezpieczny i trzeba być świadomym ryzyka — agent z pełnym dostępem do terminala może usunąć pliki, wypchnąć kod na produkcję lub zmodyfikować konfigurację serwera. W praktyce jednak bywa bardzo wygodny, bo eliminuje ciągłe potwierdzanie każdej operacji. Warto wtedy uruchomić agenta na osobnej maszynie wirtualnej, aby odizolować środowisko i ograniczyć potencjalne szkody.
CLAUDE.md — instrukcja obsługi agenta
CLAUDE.md to plik w korzeniu projektu (lub w ~/.claude/), który Claude Code czyta na starcie każdej sesji. To odpowiednik instrukcji systemowej — ale wersjonowany w git, współdzielony z zespołem i ewoluujący z projektem.
Co warto umieścić w CLAUDE.md:
- Stack technologiczny — "Python 3.13, Flask 3.x, uv, pnpm, Vite"
- Konwencje kodu — "angielskie nazwy zmiennych, brak docstringów, Pydantic zamiast dataclass"
- Workflow — "nigdy nie commituj samodzielnie, zawsze czekaj na vibe check"
- Architektura — blueprint'y, wzorzec feature-driven, gdzie co żyje
- Zakazy — "nie edytuj docs/private/, nie używaj Bootstrap grid"
Dobry CLAUDE.md sprawia, że agent zachowuje się jak nowy członek zespołu, który przeczytał onboarding doc. Zły (lub brakujący) oznacza, że agent zgaduje konwencje — i zgaduje źle.
CLAUDE.md ma hierarchię: globalny (~/.claude/CLAUDE.md) → projektowy (CLAUDE.md w korzeniu) → podkatalogowy. Bardziej specyficzny plik nadpisuje ogólniejszy. Dzięki temu możesz mieć globalne preferencje (styl odpowiedzi, język) i per-projekt reguły (stack, konwencje).
Anatomia CLAUDE.md
Praktyczny CLAUDE.md ma kilka sekcji:
# Project — Quick Start (TL;DR)
1. Przeczytaj PLAN.md → znajdź pierwszy [ ] na liście.
2. Zrób PoC → pokaż → czekaj na vibe check.
3. Po akceptacji: smoke test → zaktualizuj PROJECT_STATUS.md.
4. Zapytaj o commit — nigdy nie commituj samodzielnie.
# Architecture
- Entry point: app_entry.py
- Blueprinty w app/<feature>/blueprint.py
- Posty w blog_data/<rok>/<slug>/<slug>.md
# Code Style
- Język kodu: angielski
- Brak docstringów — kod ma być samoopisujący
- Pydantic, nie dataclass
# Zakazy
- NIE edytuj docs/private/
- NIE używaj Bootstrap grid (.row, .col-*)
- NIE commituj samodzielnie
Pamięć — jak agent pamięta między sesjami
Claude Code ma wbudowany system pamięci oparty na plikach w ~/.claude/projects/<projekt>/memory/. Działa bez konfiguracji i bez zewnętrznych serwerów MCP.
Typy pamięci
| Typ | Co przechowuje | Przykład |
|---|---|---|
| user | Informacje o użytkowniku — rola, cele, odpowiedzialności, wiedza | »Głęboka znajomość Go, pierwszy raz dotyka Reacta w tym repo« |
| feedback | Wskazówki od użytkownika — co powtarzać, czego unikać | »Nie commituj samodzielnie«; »tak, bundlowany PR to dobre podejście« |
| project | Fakty o projekcie niedostępne z kodu ani git history — inicjatywy, deadline'y, decyzje | »Merge freeze od 5 marca — mobile release« |
| reference | Wskaźniki do zewnętrznych zasobów | »Bugi w Linear → projekt INGEST«; »Dashboard oncall → grafana.internal/d/api-latency« |
Jak działa
Każda pamięć to osobny plik Markdown z frontmatter:
---
name: no-auto-commit
description: git commit tylko na wyraźną instrukcję użytkownika
metadata:
type: feedback
---
Git commit tylko po jawnym poleceniu użytkownika.
**Why:** użytkownik chce kontrolować treść commitów.
**How to apply:** po zakończeniu pracy pytaj "czy commitować?"
Pole name to slug w kebab-case (nie pełne zdanie), a type jest zagnieżdżony pod metadata:. W treści pamięci można linkować do powiązanych pamięci składnią [[nazwa-slug]].
Plik MEMORY.md w tym samym katalogu działa jako indeks — lista wskaźników do poszczególnych pamięci (max ~150 znaków na wpis, truncation po 200 liniach).
Czego NIE zapisywać
System pamięci ma wyraźne ograniczenia — nie służy do duplikowania informacji dostępnej innymi kanałami:
- Wzorce kodu, konwencje, architektura, ścieżki plików — to można odczytać z bieżącego stanu projektu
- Git history, kto co zmienił —
git log/git blamesą autorytatywne - Rozwiązania debugowania — fix jest w kodzie, kontekst w commit message
- Cokolwiek już udokumentowane w CLAUDE.md
- Efemeryczne detale zadania — bieżący stan pracy, kontekst aktualnej konwersacji
Agent powinien też weryfikować pamięć przed użyciem — jeśli pamięć mówi, że istnieje konkretna funkcja lub plik, agent sprawdza grepem/globem czy to nadal prawda. Pamięć to snapshot z przeszłości, nie stan obecny.
Pamięć vs CLAUDE.md
| Aspekt | CLAUDE.md | Pamięć (~/.claude/memory/) |
|---|---|---|
| Zakres | Projekt (wersjonowany w git) | Użytkownik + projekt (lokalny) |
| Współdzielenie | Cały zespół | Tylko Ty |
| Treść | Architektura; konwencje; workflow | Rola użytkownika; feedback; kontekst projektu; zewnętrzne zasoby |
| Kto edytuje | Człowiek (lub agent na polecenie) | Agent (w reakcji na sygnały z konwersacji) |
| Trwałość | Permanentna (w repo) | Do usunięcia/aktualizacji |
Plan Mode — myślenie przed działaniem
Claude Code ma dedykowany tryb planowania uruchamiany komendą /plan lub przez Skill EnterPlanMode. W tym trybie agent:
- Nie edytuje plików — tylko czyta i analizuje
- Nie uruchamia poleceń — tylko planuje
- Tworzy strukturalny plan — lista kroków z uzasadnieniem
Plan Mode jest szczególnie przydatny przy:
- Refaktoryzacji dużych modułów ("zanim zaczniesz przerabiać, pokaż mi plan")
- Decyzjach architektonicznych ("rozważ opcje A/B/C")
- Debugowaniu skomplikowanych problemów ("przeanalizuj możliwe przyczyny zanim dotkniesz kodu")
Po wyjściu z Plan Mode (/exitplan) agent ma gotowy plan, który może realizować krok po kroku — z Twoją akceptacją na każdym etapie lub autonomicznie.
Skills — rozszerzalny zestaw umiejętności
Skills to predefiniowane instrukcje, które Claude Code może aktywować w odpowiedzi na polecenie użytkownika (np. /review, /init, /security-review). Skill to nie narzędzie — to zestaw instrukcji, który mówi agentowi, jak podejść do konkretnego typu zadania.
Wbudowane skills:
| Skill | Co robi |
|---|---|
| init | Inicjalizacja CLAUDE.md dla nowego projektu |
| review | Przegląd pull requestu |
| security-review | Audyt bezpieczeństwa pending changes |
| simplify | Przegląd zmienionego kodu pod kątem jakości |
| update-config | Konfiguracja Claude Code — hooks, uprawnienia, zmienne środowiskowe |
Skills można pisać samemu — to plik Markdown z instrukcjami, triggerami i opcjonalnymi narzędziami. Szczegóły w poście #5.
Hooks — automatyczna reakcja na zdarzenia
Hooks to skrypty shell, które Claude Code uruchamia w odpowiedzi na zdarzenia agentyczne. Działają jak git hooks, ale dla agenta:
| Hook | Kiedy się odpala | Przykład zastosowania |
|---|---|---|
| PreToolCall | Przed wywołaniem narzędzia | Zablokuj git push --force |
| PostToolCall | Po wywołaniu narzędzia | Uruchom linter po każdej edycji pliku |
| Notification | Gdy agent chce coś zakomunikować | Powiadomienie systemowe o postępie |
| Stop | Gdy agent kończy pracę | Logowanie czasu sesji |
Konfiguracja w settings.json:
{
"hooks": {
"PreToolCall": [
{
"matcher": "Bash(git push --force*)",
"command": "echo 'BLOCKED: force push is not allowed' && exit 1"
}
],
"PostToolCall": [
{
"matcher": "Edit(*)",
"command": "npx prettier --write $CLAUDE_FILE_PATH"
}
]
}
}
Hooks dają Ci programowalną kontrolę nad zachowaniem agenta. Zamiast polegać na instrukcji "nie rób X" w CLAUDE.md (którą agent może zignorować), ustawiasz twardy blok na poziomie runtime.
Subagenci — delegowanie podzadań
Claude Code może uruchamiać subagentów — wyspecjalizowane instancje do konkretnych zadań:
- Explore — szybkie przeszukiwanie codebase'u (pliki, grepping, odpowiadanie na pytania o kod)
- Plan — projektowanie strategii implementacji
- general-purpose — ogólne zadania wielokrokowe
Subagent działa w izolacji: ma własny kontekst, nie widzi historii rozmowy z głównym agentem. Dostaje briefing (prompt) i zwraca wynik. To chroni główne okno kontekstowe przed zaśmieceniem wynikami eksploracji.
Agent główny: "Zbadaj, jak działa moduł autoryzacji"
└─ Subagent (Explore): czyta 15 plików, analizuje flow
└─ Zwraca: "Moduł auth używa JWT z refresh tokenami,
walidacja w middleware auth.py:42, config w .env"
Agent główny: kontynuuje z podsumowaniem, nie z 15 plikami w kontekście
Subagenci mogą też działać w worktree — izolowanej kopii repozytorium. Zmiany subagenta nie wpływają na główną kopię roboczą dopóki nie zostaną jawnie zmergowane.
Praktyczny workflow z Claude Code
Typowa sesja z dobrze skonfigurowanym Claude Code — krok po kroku:
Prompt: Napraw buga: formularz kontaktowy nie waliduje emaila po stronie serwera
Krok 1 — Inicjalizacja sesji
| Co robi agent | Czyta CLAUDE.md, ładuje pamięć, sprawdza PLAN.md. Wie, nad czym pracujesz i jakie są zasady. |
|---|
Krok 2 — Analiza problemu
| Rozumowanie | Czyta app/contact/blueprint.py, szuka walidacji emaila. Brak walidacji w endpoint /kontakt POST — powinienem dodać walidację Pydantic. |
|---|---|
| Akcja | Tworzy model Pydantic z EmailStr, modyfikuje handler. |
| Obserwacja | Uruchamia testy → przechodzą. |
Krok 3 — Raport i vibe check
| Raport | »Dodałem walidację email przez Pydantic EmailStr w contact blueprint.« |
|---|---|
| Użytkownik | Przegląda diff. »OK, commituj« lub »zmień podejście — użyj regex zamiast EmailStr«. |
Krok 4 — Commit
| Akcja | Agent przygotowuje commit message, zaktualizuje docs, commituje — ale dopiero po Twojej akceptacji. |
|---|
Model mentalny: agent jako junior developer
Najlepszy model mentalny dla pracy z Claude Code to doświadczony junior developer. Jest szybki i dokładny w wykonaniu, zna technologie i umie pisać kod — ale potrzebuje kierunku: "co robimy" i "dlaczego". Czasem popełnia błędy — dlatego robisz code review. Im lepszy onboarding (CLAUDE.md), tym lepsze wyniki. Im precyzyjniejsze instrukcje, tym mniej iteracji.
Nie traktuj agenta jak magiczną czarną skrzynkę. Traktuj go jak współpracownika, który potrzebuje kontekstu i feedbacku.
Co dalej
W tym wpisie zobaczyliśmy, jak Claude Code działa od środka. W następnym poście wejdziemy w szczegóły protokołu, który łączy agenta z narzędziami — MCP (Model Context Protocol). Jeśli interesują Cię konkretne serwery MCP (wyszukiwanie, scraping, generowanie obrazków, narzędzia deweloperskie), zajrzyj do serii o MCP .