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ędzia wbudowane Claude Code
NarzędzieCo robi
ReadOdczyt pliku z numerami linii. Obsługuje obrazy, PDF, Jupyter notebooks
EditPrecyzyjne edycje plików — zamiana string→string, bez nadpisywania całości
WriteTworzenie nowych plików lub pełne nadpisanie istniejących
BashWykonywanie poleceń shell — z timeoutem, możliwością uruchomienia w tle i sandboxem
GrepWyszukiwanie w treści plików — regex, filtry typów plików, tryby wyjścia
GlobWyszukiwanie plików po wzorcu nazwy (np. **/*.tsx)
AgentUruchamianie subagentów do złożonych, wielokrokowych zadań
TodoWriteZarzą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ń:

Poziomy uprawnień w Claude Code
PoziomCo obejmujeJak działa
Automatycznie dozwoloneOdczyt plików, wyszukiwanie, globOperacje read-only — nie zmieniają stanu. Agent wykonuje bez pytania
Wymagające potwierdzeniaEdycja plików, nowe pliki, Bash, gitUżytkownik widzi dokładnie co agent chce zrobić i decyduje: Allow / Deny
KonfigurowalneReguły w settings.jsonMoż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

Cztery typy pamięci w Claude Code
TypCo przechowujePrzykład
userInformacje o użytkowniku — rola, cele, odpowiedzialności, wiedza»Głęboka znajomość Go, pierwszy raz dotyka Reacta w tym repo«
feedbackWskazówki od użytkownika — co powtarzać, czego unikać»Nie commituj samodzielnie«; »tak, bundlowany PR to dobre podejście«
projectFakty o projekcie niedostępne z kodu ani git history — inicjatywy, deadline'y, decyzje»Merge freeze od 5 marca — mobile release«
referenceWskaź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 blame są 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

CLAUDE.md vs pamięć — kiedy co używać
AspektCLAUDE.mdPamięć (~/.claude/memory/)
ZakresProjekt (wersjonowany w git)Użytkownik + projekt (lokalny)
WspółdzielenieCały zespółTylko Ty
TreśćArchitektura; konwencje; workflowRola użytkownika; feedback; kontekst projektu; zewnętrzne zasoby
Kto edytujeCzł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:

Wbudowane skills w Claude Code
SkillCo robi
initInicjalizacja CLAUDE.md dla nowego projektu
reviewPrzegląd pull requestu
security-reviewAudyt bezpieczeństwa pending changes
simplifyPrzegląd zmienionego kodu pod kątem jakości
update-configKonfiguracja 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:

Typy hooków w Claude Code
HookKiedy się odpalaPrzykład zastosowania
PreToolCallPrzed wywołaniem narzędziaZablokuj git push --force
PostToolCallPo wywołaniu narzędziaUruchom linter po każdej edycji pliku
NotificationGdy agent chce coś zakomunikowaćPowiadomienie systemowe o postępie
StopGdy 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 agentCzyta CLAUDE.md, ładuje pamięć, sprawdza PLAN.md. Wie, nad czym pracujesz i jakie są zasady.

Krok 2 — Analiza problemu

RozumowanieCzyta app/contact/blueprint.py, szuka walidacji emaila. Brak walidacji w endpoint /kontakt POST — powinienem dodać walidację Pydantic.
AkcjaTworzy model Pydantic z EmailStr, modyfikuje handler.
ObserwacjaUruchamia testy → przechodzą.

Krok 3 — Raport i vibe check

Raport»Dodałem walidację email przez Pydantic EmailStr w contact blueprint.«
UżytkownikPrzegląda diff. »OK, commituj« lub »zmień podejście — użyj regex zamiast EmailStr«.

Krok 4 — Commit

AkcjaAgent 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 .