AI Claude Code

Skille, hooki, serwery MCP i subagenty w Claude Code: co wybrać i kiedy

Kiedy w Claude Code sięgnąć po CLAUDE.md, skill, hook, serwer MCP albo subagenta: oficjalna dokumentacja i prawdziwy zestaw, na którym powstała ta strona.

Autor: Mateusz Muszarski Zaktualizowano 7 min czytania In English

CLAUDE.md trzyma to, co Claude ma wiedzieć w każdej sesji, skill to procedura potrzebna tylko czasem, a hook to coś, co musi się wydarzyć za każdym razem. Serwer MCP sięga po dane spoza repozytorium, a subagent bierze poboczną robotę, która zalałaby Ci kontekst. Niżej: każdy element według oficjalnej dokumentacji, a potem zestaw, na którym powstała ta strona.

TL;DR

  • Prośba czy przymus: CLAUDE.md i skille to instrukcje, które Claude interpretuje; hook odpala się na swoim zdarzeniu zawsze.
  • Koszt w kontekście: za CLAUDE.md płacisz przy każdym zapytaniu, skille i narzędzia MCP kosztują niewiele, dopóki ich nie użyjesz, a subagent pracuje we własnym oknie i oddaje podsumowanie.
  • Dokładaj elementy, gdy pojawi się sygnał: powtarzana poprawka, wklejany playbook, kopiowana karta przeglądarki, zalany kontekst, zasada, która musi działać zawsze.

Czym jest każdy z pięciu elementów?

  1. 01 CLAUDE.md Wczytywany w każdej sesji: komendy, konwencje, stałe zasady.
  2. 02 Skille Playbook, który wczytuje się, gdy pasuje do zadania albo gdy wpiszesz /nazwa.
  3. 03 Hooki Twój skrypt, który Claude Code uruchamia przy zdarzeniu, za każdym razem.
  4. 04 Serwery MCP Narzędzia i dane spoza repozytorium, przez otwarty standard.
  5. 05 Subagenty Poboczna robota we własnym kontekście. Wraca tylko podsumowanie.

Z dokumentacji warto wyciągnąć kilka szczegółów. Dokumentacja pamięci radzi trzymać każdy CLAUDE.md poniżej 200 linii. Własne komendy slash zostały scalone ze skillami. Hook może uruchomić komendę powłoki, zapytanie HTTP, narzędzie MCP, prompt albo subagenta.

Są jeszcze pluginy, które pakują to wszystko w jedną instalowalną całość do wielu repozytoriów. To repozytorium żadnego nie ma, więc je pomijam.

Jakie dwa pytania rozstrzygają prawie wszystko?

Kto decyduje, że coś się uruchomi? Dokumentacja mówi wprost: hook zawsze odpala się na swoim zdarzeniu, a skill to instrukcje, które Claude interpretuje, więc wynik może się różnić. CLAUDE.md należy do tej drugiej grupy: według dokumentacji pamięci Claude traktuje go jako kontekst, a nie wymuszoną konfigurację. „Nigdy nie edytuj .env” w CLAUDE.md to więc prośba, a hook PreToolUse, który blokuje edycję, to egzekwowanie.

Ile to kosztuje w kontekście? Według tabeli kosztów z dokumentacji:

Element Kiedy się wczytuje Koszt w kontekście
CLAUDE.md start sesji, cała treść przy każdym zapytaniu
Skill opisy na starcie, treść przy użyciu niski, dopóki nie jest użyty
Serwer MCP nazwy narzędzi na starcie, schematy na żądanie niski, dopóki narzędzie nie jest użyte
Subagent przy uruchomieniu, we własnym oknie odizolowany od głównej sesji
Hook przy zdarzeniu, poza modelem zero, chyba że zwraca kontekst

Dlatego długi CLAUDE.md to złe miejsce na dokumentację referencyjną: płacisz za nią przy każdym zapytaniu, potrzebna czy nie.

Który element do jakiej potrzeby?

Potrzebujesz Wybierz Dlaczego
Żeby Claude zawsze znał komendy i konwencje CLAUDE.md wczytywany zawsze
Procedury ze skutkami ubocznymi, którą odpalasz sam skill z disable-model-invocation: true uruchamiasz go tylko Ty, a jego opis nie zajmuje kontekstu
Wiedzy w tle, z której Claude skorzysta w razie potrzeby skill, user-invocable: false, jeśli to nie komenda wczytywany na żądanie
Czegoś przy każdej edycji, prompcie albo końcu odpowiedzi hook deterministyczny
Zablokowania groźnej akcji hook PreToolUse albo reguły uprawnień egzekwowanie, a nie prośba
Danych z systemu, którego Claude nie widzi serwer MCP połączenie i autoryzacja po stronie serwera
Researchu po wielu plikach albo pracy równoległej subagent wraca tylko podsumowanie
Częstej wymiany zdań nad jednym problemem główna rozmowa tu dokumentacja odradza subagenty

Dokumentacja radzi też dokładać elementy dopiero wtedy, gdy pojawi się konkretny sygnał:

  • Claude drugi raz myli konwencję: wpis do CLAUDE.md.
  • Trzeci raz wklejasz ten sam playbook: skill.
  • Ciągle kopiujesz dane z karty przeglądarki: serwer MCP.
  • Poboczne zadanie zalewa rozmowę: subagent.
  • Coś ma się dziać zawsze, bez proszenia: hook.

Jak wygląda mój zestaw?

Ta strona powstała w Claude Code z wiki projektu w .claude/project-info/. Oto każdy element w tym repozytorium.

CLAUDE.md: rozdzielnik, a nie encyklopedia

Mój CLAUDE.md ma 76 linii. Większość to tabela routingu, która łączy słowa z moich poleceń („locales, translation, hreflang”) ze stronami wiki. Reszta to niezmienniki (budżety wydajności, licencje, „żadnych zmyślonych faktów”) i komendy.

Ścieżki są celowo zwykłym tekstem. @import wczytałby każdą stronę do każdej sesji, a dokumentacja potwierdza, że importy nie zmniejszają kosztu kontekstu. Samo wiki opisuję w osobnym wpisie: LLM wiki, czyli pamięć projektu dla Claude Code.

Trzy hooki

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command",
      "command": "node .claude/hooks/session-start.mjs", "timeout": 10 }] }],
    "UserPromptSubmit": [{ "hooks": [{ "type": "command",
      "command": "node .claude/hooks/wiki-context.mjs", "timeout": 10 }] }],
    "Stop": [{ "hooks": [{ "type": "command",
      "command": "node .claude/hooks/wiki-check.mjs --stop-hook", "timeout": 30 }] }]
  }
}

To wersja skrócona: w prawdziwym .claude/settings.json każda ścieżka zaczyna się od ${CLAUDE_PROJECT_DIR:-.}, a komendy idą przez bash.

  • SessionStart wypisuje „kartę sesji”: odnośnik do zasad współpracy, stan gita (same liczby) i reguły z lessons.md. Odpala się na starcie, przy wznowieniu, po /clear i po kompaktowaniu. Po każdym kompaktowaniu reguły wracają więc słowo w słowo, cokolwiek zgubiło streszczenie.
  • UserPromptSubmit ocenia każdy prompt względem tabeli routingu i wskazuje do pięciu stron do przeczytania. Prompty krótsze niż 25 znaków niczego nie dostają.
  • Stop sprawdza, czy w tej sesji zmienił się kod bez zmiany w wiki. Jeśli tak, zwraca decision: "block" z powodem, raz na dany stan, więc Claude aktualizuje stronę, zanim skończy. Gdy stop_hook_active ma wartość true, hook od razu się kończy: to pole dokumentacja daje właśnie przeciw blokowaniu w kółko.

Wszystkie trzy to zwykłe skrypty Node, które przy własnym błędzie kończą się bez szkody dla sesji. Strażnik, który psuje sesję, jest gorszy niż brak strażnika.

Dziewięć skilli

Skill Kto uruchamia Co robi
code ja albo Claude pętla kodowania: przeczytaj wskazane strony, dopasuj się do kodu, sprawdź przed ogłoszeniem „gotowe”
commit ja albo Claude jeden Conventional Commit, przypięty do małego modelu Haiku, żeby szło szybko
new-blog ja albo Claude planuje, pisze i sprawdza wpis taki jak ten, z lintem czytelności i skryptem do zrzutów ekranu
new-cv ja albo Claude aktualizuje stronę CV i jej PDF-y z jednego pliku danych
lighthouse-qa ja albo Claude puszcza Lighthouse na zbudowanej stronie i poprawia w pętli
wiki-lint ja albo Claude uruchamia mechaniczny lint wiki, a potem czyta strony pod kątem sprzeczności
awwwards tylko Claude ogląda nagradzane strony w prawdziwej przeglądarce, żeby podnieść jedną płaską sekcję
search-registry-items tylko Claude szuka komponentu w publicznych rejestrach shadcn przez serwer MCP
start-project-info tylko ja zakłada wiki, tabelę routingu, lekcje i hooki w nowym projekcie

Skill „tylko Claude” ma user-invocable: false: to wiedza w tle, która nie ma sensu jako komenda. Skill „tylko ja” ma disable-model-invocation: true: zapisuje sporo plików, więc odpalam go sam, a do tego czasu jego opis nic nie kosztuje. Jak new-cv trzyma stronę i PDF w zgodzie, opisuję we wpisie CV jako strona i PDF z jednego źródła.

Trzy serwery MCP

Żaden nie jest skonfigurowany w tym repozytorium. Siedzą na poziomie użytkownika, więc każdy projekt może z nich korzystać.

  • Mobbin, biblioteka prawdziwych ekranów aplikacji i stron. Jej serwer MCP pozwala agentowi szukać w niej zwykłymi słowami i dostawać ekrany. Korzystałem z niego przy researchu sekcji, zanim je projektowałem.
  • Shoogle, wyszukiwarka bloków shadcn/ui w wielu rejestrach. Skill search-registry-items mówi Claude'owi, kiedy po nią sięgnąć.
  • Prawdziwa przeglądarka. Playwright MCP steruje przeglądarką przez snapshoty drzewa dostępności, a Claude in Chrome łączy Claude Code z samym Chrome, razem z jego stanem logowania.
Krok Narzędzia z historii AI na stronie głównej: karty Mobbin, shadcn i Playwright połączone przez wtyczkę MCP z Claude Code
Te same narzędzia co w kroku Narzędzia na stronie głównej: ekrany aplikacji, komponenty i przeglądarka, wszystko przez MCP.

Dokumentacja MCP ma ostrzeżenie, które warto powtórzyć: ufaj każdemu serwerowi, który dodajesz, bo te, które pobierają treści z zewnątrz, narażają Cię na prompt injection.

Subagenty

Nie mam własnych definicji subagentów, wbudowane wystarczyły. Z etapu planowania log wiki odnotowuje jedną partię 8 agentów badawczych i jedną 3, każdy z osobnym tematem. Zapisywały surowe notatki, a ja przenosiłem wnioski do stron, do których prowadzi routing.

Wyszła z tego jedna lekcja: równoległe agenty dzielą jeden budżet wyszukiwania w sieci i potrafią go wyczerpać. Lepiej pobierać adresy, które już znasz.

Jak te elementy się łączą?

Elementy robią się naprawdę przydatne, kiedy łatają nawzajem swoje słabe strony.

  • Skill + MCP. Serwer daje Claude'owi narzędzie, a skill mówi, kiedy warto po nie sięgnąć i co zrobić z wynikiem. Dokumentacja opisuje dokładnie ten wzorzec.
  • CLAUDE.md + hook. Tabela routingu to zwykły markdown, który sam czytam i edytuję. Hook promptu parsuje tę samą tabelę, więc nowy wiersz wystarczy, żeby nowa strona trafiała do właściwych zadań.
  • Hook + skill. wiki-check.mjs to część mechaniczna: ścieżki istnieją, każda strona jest w spisie, wpisy w logu mają właściwy format. Skill wiki-lint to część wymagająca osądu: czy dwie strony sobie przeczą? Skrypt nie oceni sensu, a na modelu nie można polegać, że uruchomi się za każdym razem.
  • Skill + subagent. Skill może działać w osobnym subagencie (context: fork), a subagent może mieć wczytane skille z góry. Nie używam ani jednego, ani drugiego, ale new-blog robi prostszą wersję: w ostatnim kroku daje gotowy wpis świeżemu subagentowi do przeczytania na zimno.

Ograniczenia

  • Hooki z komendami działają z pełnymi uprawnieniami Twojego użytkownika. Dokumentacja hooków mówi to otwarcie. Przeczytaj każdy hook, zanim go dodasz, zwłaszcza skopiowany z cudzego repozytorium.
  • Opisy skilli nie są darmowe. Każdy skill, który Claude może sam wywołać, trzyma opis w kontekście, a lista ma swój budżet. Gdy się przepełni, Claude Code wycina opisy skilli wywoływanych najrzadziej. Mętne albo nakładające się opisy sprawiają też, że Claude wybiera nie ten skill.
  • Routing po słowach kluczowych się myli. Mój hook liczy słowa, a nie znaczenie. Na początku ogólna fraza w jednym wierszu przebiła nazwę projektu w innym i wycięła stronę, która była potrzebna. Poprawka była nudna: wspólne słowa zadań wpisać do każdego wiersza, którego dotyczą, i ponownie uruchomić tryb --test.
  • Subagent zaczyna od zera. Widzi tylko wiadomość z poleceniem, a nie Twoją rozmowę, więc mętne zlecenie wraca mętnym podsumowaniem. Jego zapytania też liczą się do Twojego limitu.
  • Nie zmierzyłem oszczędności. Nie podam liczby tokenów ani minut, które dają te hooki. Mogę powiedzieć tyle: po kompaktowaniu kolejna tura zaczyna się od reguł, a nie od tego, że powtarzam je od nowa.

Od czego zacząć?

Najpierw krótki CLAUDE.md, a każdy kolejny element dopiero wtedy, gdy pojawi się jego sygnał. Jeśli dopiero zaczynasz, zajrzyj do przewodnika Claude Code po polsku. Cały proces, na którym powstała ta strona, opisuję w studium przypadku, a projekty znajdziesz na stronie z pracami.

Źródła

  1. Extend Claude Code (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  2. Extend Claude with skills (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  3. Hooks reference (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  4. Automate actions with hooks (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  5. Connect Claude Code to tools via MCP (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  6. Create custom subagents (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  7. How Claude remembers your project (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  8. Use Claude Code with Chrome (dokumentacja Claude Code) (otwiera się w nowej karcie) (dostęp: )
  9. Playwright MCP (GitHub, Microsoft) (otwiera się w nowej karcie) (dostęp: )
  10. Shoogle: search shadcn/ui blocks across registries (GitHub) (otwiera się w nowej karcie) (dostęp: )
  11. Mobbin (otwiera się w nowej karcie) (dostęp: )

Wszystkie wpisy