Anthropic wprowadził mods - wtyczki napisane w JavaScript i TypeScript, które działają bezpośrednio wewnątrz procesu Claude Code oraz Claude Desktop. Zamiast ograniczać się do prostych skryptów powłoki czy zewnętrznych integracji, zyskujesz narzędzie do modyfikowania interfejsu terminala, przechwytywania wywołań narzędzi (tool calls) i dodawania własnych komend bez angażowania kolejnych zapytań do modelu.
Claude Code przestał być sztywno zaprogramowanym środowiskiem CLI. Jeśli na co dzień pracujesz z agentami w terminalu - przy refaktoryzacji kodu, budowie scraperów czy automatyzacji skryptów SEO - nowa architektura pozwala dostosować narzędzie dokładnie pod Twój workflow.
Czym są mods i czym różnią się od settings hooks oraz MCP?
Do tej pory Claude Code oferował dwa główne sposoby rozszerzania możliwości: serwery MCP (Model Context Protocol) oraz hooki konfigurowane w plikach ustawień (settings hooks). Obie metody mają tę samą cechę techniczną - działają na zewnątrz procesu głównego agenta. Settings hook odpala zewnętrzny proces powłoki Bash lub zapytanie HTTP w reakcji na zdarzenie. Serwer MCP udostępnia zestaw zewnętrznych narzędzi przez protokół JSON-RPC.
Mod działa inaczej: to kod w JS lub TS wykonywany wewnątrz środowiska wykonawczego Claude Code. Dzięki temu ma bezpośredni dostęp do stanu aplikacji i obiektów sesji.
W praktyce mod potrafi wyrenderować dynamiczny pasek stanu nad wierszem wprowadzania komend, dodać panel podglądu subagentów, zmienić wygląd domyślnego wskaźnika ładowania (spinner) albo całkowicie zablokować niebezpieczną komendę systemową, zanim trafi do powłoki.
Wymagania systemowe i instalacja modów krok po kroku
Obsługa wtyczek wymaga aktualnych wydań narzędzi od Anthropic. Zanim przejdziesz do instalacji, sprawdź wersje swoich aplikacji:
- Claude Code CLI: wymagana wersja to minimum
v2.1.287. - Claude Desktop: wymagana wersja to minimum
v2.1.286(mody działają lokalnie w dedykowanej zakładce Code).
Wersję w terminalu sprawdzisz poleceniem claude --version. Jeśli wersja jest niższa, wykonaj standardową aktualizację pakietu npm. W aplikacji Desktop wpisz polecenie /status w sesji zakładki Code i sprawdź numer kompilacji.
Instalacja moda odbywa się za pośrednictwem systemu wtyczek. Możesz to zrobić na dwa sposoby:
- Z poziomu aktywnej sesji Claude Code:
- Bezpośrednio z poziomu powłoki systemowej:
Po @ podajesz nazwę marketplace'u, z którego pochodzi mod, np. openrouter-balance@krysmalskipl. Marketplace trzeba najpierw dodać poleceniem claude plugin marketplace add, co pokazuję niżej.
Pamiętaj o jednej zasadzie: jeśli instalujesz lub aktualizujesz plugin w terminalu obok otwartej sesji, musisz wpisać w sesji komendę /reload-plugins. Bez tego nowy kod załaduje się dopiero przy ponownym uruchomieniu narzędzia.
Zachowanie modów różni się w zależności od środowiska. W pełnym trybie interaktywnym CLI oraz w Claude Desktop masz dostęp do rysowania UI i pełnych przechwytów zdarzeń. Z kolei w trybie wsadowym (claude -p), rozszerzeniu do VS Code oraz w sesjach chmurowych niektóre elementy graficzne są pomijane, co szczegółowo opisuje oficjalna dokumentacja Claude Code dotycząca wtyczek.
Ekosystem społeczności: repozytorium claude-code-mods
Nie musisz pisać wszystkich rozszerzeń od podstaw. Gotowe mody instalujesz z marketplace'ów, czyli repozytoriów na GitHubie z listą wtyczek. Każdy mod instalujesz osobno, tylko te, których potrzebujesz.
Zacznij od mojego repozytorium krysmalskipl/claude-code-mods. Rejestrujesz je raz jako marketplace, a potem instalujesz wybrane mody:
Będę tam dodawał kolejne mody, przede wszystkim pod pracę SEO. Jak powstał openrouter-balance i jak zbudować podobny samodzielnie, pokazuję w dalszej części artykułu.
Więcej gotowych wtyczek znajdziesz w społecznościowym katalogu hamzafer/claude-code-mods. Dodajesz go tak samo:
Następnie instalujesz wybrane narzędzia:
Możesz także zainstalować cały podstawowy pakiet produktywności jednym poleceniem powłoki:
Przegląd najciekawszych wtyczek w praktyce
W połączeniu z oficjalnymi przykładami od Anthropic z repozytorium claude-code-playground deweloperzy zyskują potężny zestaw ułatwień:
- context-bar & token-weather:
context-barrysuje nad promptem poziomy pasek z dokładnym podziałem tokenów (system prompt, narzędzia MCP, pliki pamięci, wiadomości, bufor kompresji). Z koleitoken-weatherprognozuje stan okna i odlicza czas do wygaśnięcia prompt cache. - cache-clock: integruje się bezpośrednio z paskiem stanu CLI, pokazując w czasie rzeczywistym procent zapytań obsłużonych z cache (
hit rate) oraz ile tokenów trzeba będzie zapisać do cache ponownie, gdy wygaśnie. - blast-radius: strażnik komend terminala. Kiedy agent planuje wykonać polecenie o wysokim ryzyku (np.
rm -rf,git push --forceczy czyszczenie tabel bazy), mod przechwytuje operację, wyświetla podgląd zmienianych plików i wymusza manualne zatwierdzenie. - mission-control: w terminalach obsługujących renderowanie grafiki (Ghostty, kitty, iTerm2) wyświetla interaktywną mapę plików edytowanych przez subagenty z podświetleniem statusu (odczyt, zapis, gotowe).
- replay-theater: dodaje komendę
/replay, umożliwiającą prześledzenie diffów i operacji na plikach krok po kroku po zakończonej turze zapytań.
Jak wygląda anatomia prostego moda?
Mod to moduł TypeScript, który eksportuje funkcję register. Dostaje ona on - funkcję do podpinania się pod zdarzenia sesji (start sesji, wywołanie narzędzia, wysłanie prompta, rysowanie interfejsu). Każdy hook dostaje trzy argumenty: $ (interfejs silnika Claude Code), e (dane zdarzenia) i next (przekazanie zdarzenia dalej). Poniższy przykład w kilku linijkach blokuje agentowi edycję plików .env:
Hook zwraca { deny } i wywołanie narzędzia w ogóle nie dochodzi do skutku, a Claude dostaje powód odmowy. Jeśli plik nie jest chroniony, next(e) przepuszcza zdarzenie dalej. Wszystko dzieje się lokalnie, bez dodatkowego zapytania do modelu i bez zużywania tokenów.
Jak zbudować własny mod: saldo OpenRouter nad promptem?
Przegląd gotowych wtyczek to jedno, ale najwięcej uczy napisanie własnej. Na co dzień korzystam z OpenRouter i brakowało mi jednej rzeczy: żeby bez otwierania przeglądarki widzieć, ile zostało z limitu klucza i ile wydałem dziś. Tak powstał mod openrouter-balance, który zgłosiłem do repozytorium społeczności jako PR #85 w hamzafer/claude-code-mods. Efekt wygląda tak:

Zainstaluj gotowy mod w 2 minuty
Jeśli chcesz po prostu mieć tę linię u siebie, nie musisz niczego pisać. Mod jest w moim repozytorium krysmalskipl/claude-code-mods, które działa jako marketplace. Wpisz w terminalu:
Mod potrzebuje klucza OpenRouter i sam go szuka: w ustawieniach wtyczki, w zmiennych OPENROUTER_MANAGEMENT_KEY i OPENROUTER_API_KEY, w pęku kluczy macOS (Keychain), a na końcu w Twojej powłoce. Jeśli masz już OPENROUTER_API_KEY w ~/.zshrc, nic więcej nie robisz - mod znajdzie go nawet w Claude Desktop uruchomionym z Docka. Komunikat „1 userConfig option not yet set” po instalacji możesz wtedy zignorować.
Który klucz wybrać?
- Zwykły klucz API pokaże wydatki tego klucza dziś i w tym miesiącu oraz ile zostało z jego limitu.
- Klucz management (openrouter.ai → Settings → Management keys) pokaże prawdziwe saldo całego konta i model, na który poszło najwięcej pieniędzy. Nie może wywoływać modeli, więc bezpiecznie go trzymać. Najlepiej w Keychain:
security add-generic-password -a "$USER" -s openrouter-key -w.
Po instalacji uruchom nową sesję Claude Code albo wpisz /reload-plugins. Linia pojawi się nad promptem, a /openrouter-balance pokaże szczegóły. Pełna instrukcja, z rozwiązywaniem problemów i aktualizacją, jest w README repozytorium.
Jak to działa od środka?
Pełna wersja ma ponad 300 linii, ale cały mechanizm zmieści się w około 50. Poniżej zbudujemy wersję mini, która robi najważniejsze: co 5 minut pyta OpenRouter o stan klucza i rysuje jedną linię nad promptem.
Krok 1: struktura folderu
Mod to zwykły folder z czterema plikami:
Krok 2: manifest i lista modułów
.claude-plugin/plugin.json opisuje wtyczkę. Pole types wskazuje kontrakt stanu:
hooks/hooks.json wskazuje plik z kodem:
Krok 3: kontrakt stanu
Mod przechowuje ostatni odczyt z OpenRouter w stanie sesji. Ten stan trzyma Claude Code, a nie sam mod, więc liczby przetrwają nawet przeładowanie pliku w trakcie pracy. Każda wartość musi być zadeklarowana w types/index.d.ts:
Krok 4: kod moda
Cały mod w hooks/register.tsx:
Co tu się dzieje:
session.start- po starcie sesji mod od razu pobiera dane i ustawia zegar, który robi to co 5 minut.next(e)na początku pozwala Claude Code najpierw normalnie wystartować sesję.ui.renderzcomponent: 'AbovePrompt'- za każdym razem, gdy Claude Code rysuje pasek nad promptem, mod dokłada swoją linię.restto linie innych modów, więc nic nie znika.$.ui.resolve(e)- zwraca komponenty (Box,Text) dla aktualnej powierzchni. Ten sam kod narysuje linię w terminalu i w zakładce Code w Claude Desktop.atom,read,update-updatezapisuje nowy odczyt, a Claude Code sam przerysowuje wszystko, co ten stan czyta.$.process.runi$.http.fetch- mod nie ma dostępu do Node.js ani przeglądarki. Wszystko, co wychodzi poza mod (zmienne środowiskowe, sieć, pliki), idzie przez$. Dzięki temuclaude plugin validatemoże pokazać, czego dokładnie mod używa.- Endpoint
/api/v1/keydziała ze zwykłym kluczem API i zwraca m.in.limit,limit_remainingorazusage_daily(wydatki klucza w bieżącym dniu UTC).
Krok 5: uruchom mod i patrz, jak działa
Najprościej załadować folder do jednej sesji:
Jeśli piszesz mod razem z Claude Code, możesz włączyć przeładowywanie na żywo. Przy pierwszym zapisanym pliku moda Claude Code zapyta: Enable hot reloading for this session? Po wybraniu Enable for this session każda zmiana w kodzie ładuje się sama po zakończeniu tury, bez restartu.

Krok 6: walidacja i test
Zanim podzielisz się modem, sprawdź go dwoma poleceniami:
validate czyta kod tak jak Claude Code i wypisuje, na jakie zdarzenia mod reaguje i co wywołuje ($.http.fetch, $.process.run i tak dalej). To ta sama lista, którą warto przejrzeć przed instalacją cudzego moda.
test uruchamia pliki *.test.tsx z folderu tests/. W teście podstawiasz odpowiedzi silnika i API (np. udajesz, że OpenRouter zwrócił limit_remaining: 2.67), a potem sprawdzasz, co mod narysował. Nie wydajesz przy tym ani centa.
Co dodaje pełna wersja openrouter-balance?
Wersja mini wystarczy na start. W pełnej wersji doszło kilka rzeczy, które warto dodać do każdego moda korzystającego z API:
- Saldo całego konta - z kluczem typu management mod pyta endpoint
/creditsi pokazuje prawdziwe saldo, a z/activitymodel, na który poszło najwięcej pieniędzy w ostatnich 30 dniach. - Kolory - zielony od $5, żółty poniżej $5, czerwony poniżej $2 z dopiskiem „top up soon”.
- Komenda
/openrouter-balance- szczegóły: dziś, tydzień, miesiąc, limit klucza, wydatki według modeli. - Bezpieczne trzymanie klucza - kolejno z
/config, zmiennych środowiskowych, pęku kluczy macOS (Keychain) albo z Twojej powłoki, gdy aplikacja nie wczytała~/.zshrc. Klucz jest trzymany tylko w pamięci. - Odporność na błędy - brak sieci nie kasuje ostatnich liczb, tylko oznacza je jako
offline, a odrzucony klucz jest nazwany wprost.
Mody pod SEO: meta-lint i link-check
Skoro mod widzi każdą edycję pliku, może pilnować podstaw SEO, kiedy Claude pisze wpis albo przerabia szablon strony. Do mojego repozytorium dodałem dwa takie mody:
Oba działają bez klucza i bez konfiguracji. Po instalacji uruchom nową sesję albo wpisz /reload-plugins.

meta-lint po każdej edycji pliku Markdown, MDX, Astro albo HTML pokazuje nad promptem jedną linię:
- title - długość tytułu z frontmattera (
seo_title,meta_title,title), z<title>albo z pierwszego H1. Zielony przy 30-60 znakach, czerwony powyżej 60 - description - długość opisu z
seo_description,description,excerptalbo z<meta name="description">. Zielony przy 70-160 znakach - H1 - liczba nagłówków H1 w treści. Komentarz
#w bloku kodu nie liczy się jako nagłówek - obrazki bez alt i liczba słów
Komenda /meta-lint pokazuje szczegóły i podgląd snippetu w wynikach Google, a /meta-lint plik.md sprawdza dowolny plik. Wszystko liczy się lokalnie, nic nie wychodzi z komputera.
link-check sprawdza linki zewnętrzne, które Claude właśnie dodał do wpisu, strony albo szablonu. Tu widać przewagę moda nad zwykłym narzędziem: martwy link (błąd 4xx/5xx albo brak odpowiedzi) wraca do Claude'a razem z wynikiem edycji, więc model poprawia go jeszcze w tej samej turze. Ty widzisz go nad promptem, dopóki jest w pliku, a /links pokazuje listę. Kody 401, 403 i 429 mod traktuje jako działające, bo to zwykle blokady botów, a nie martwe strony.
Jedno ograniczenie warto znać. Link-check rozpozna martwy link tylko wtedy, gdy serwer uczciwie odpowie błędem. Strona, która na nieistniejący adres zwraca kod 200 (tzw. soft 404), dla żadnego narzędzia nie wygląda na zepsutą. To zresztą dobry powód, żeby sprawdzić, jak zachowuje się Twoja własna strona.
Jak system prompt w Claude CLI współpracuje z architekturą modów?
Częstym pytaniem osób konfigurujących środowisko deweloperskie jest to, czy mods zastępują instrukcje systemowe (system prompt). Odpowiedź brzmi: nie, te mechanizmy działają na zupełnie innych warstwach aplikacji.
Instrukcje systemowe w Claude Code konfigurujesz za pomocą pliku konfiguracyjnego CLAUDE.md, zmiennych środowiskowych lub standardowych reguł zachowania modelu. System prompt instruuje model językowy, w jaki sposób ma rozumować, jakich konwencji kodowania w Next.js czy TypeScript używać i jak formułować odpowiedzi.
Mod działa po etapie generowania tekstu przez model lub przed wysłaniem polecenia. Nawet jeśli model postanowi wywołać narzędzie Bash, mod w kodzie JS/TS może zweryfikować to żądanie, zmodyfikować argumenty albo całkowicie odrzucić wywołanie bez pytania modelu o zdanie. System prompt kształtuje intencję AI, a mod kontroluje faktyczne wykonanie w środowisku dewelopera.
Bezpieczeństwo i uprawnienia: o czym musisz pamiętać przed instalacją?
Mod nie działa w izolowanej piaskownicy. Kod wtyczki wykonuje się z Twoimi pełnymi uprawnieniami systemowymi wewnątrz procesu Claude Code.
Oznacza to bezpośrednie konsekwencje dla bezpieczeństwa Twojej stacji roboczej:
- Mod może czytać i modyfikować dowolne pliki, do których Twoje konto ma uprawnienia.
- Ma wgląd w zmienne środowiskowe, w tym klucze API zapisane w systemie czy plikach
.env. - Widzi całą treść promptów, transkrypcję sesji oraz odpowiedzi modelu.
- Może samodzielnie wykonywać zapytania sieciowe fetch/HTTP i zatwierdzać komendy w tle.
Wbudowany w Claude Code sandbox izoluje polecenia uruchamiane w powłoce Bash, ale procesy wystartowane bezpośrednio przez modyfikację JS działają poza nim. Dlatego nigdy nie instaluj wtyczek z niesprawdzonych repozytoriów.
Przed załadowaniem nowego dodatku przeanalizuj jego zawartość poleceniem walidacji:
W sekcjach hooks: i calls: terminal wyświetli pełną listę zdarzeń, na które reaguje plugin, oraz akcji, które zamierza wykonywać. W razie problemów możesz uruchomić sesję w trybie awaryjnym komendą claude --safe-mode, co tymczasowo wyłącza wszystkie mody.
Jeśli chcesz całkowicie wyłączyć ładowanie modyfikacji we wszystkich sesjach, dodaj odpowiedni wpis w konfiguracji ~/.claude/settings.json:
Nowe możliwości automatyzacji w codziennej pracy deweloperskiej
Otwarcie Claude Code na wtyczki w TypeScript zbliża to narzędzie do pełnoprawnego, programowalnego środowiska pracy. Przy złożonych projektach możliwość zablokowania niechcianych operacji na dysku czy stałego monitorowania kosztów tokenów bez opuszczania terminala oszczędza sporo nerwów.
Świetnie łączy się to z innymi rozwiązaniami, które opisuję na blogu: od zaawansowanego routingu modeli, o którym przeczytasz we wpisie o konfiguracji Jev przez OpenRouter w terminalu i Claude Code, po pracę z modelami takimi jak Claude Sonnet 5.5. Jeśli łączysz pracę agentów terminalowych z systemami takimi jak n8n Agents i automatyzacjami opartymi na agentach AI, mody pozwalają spiąć powiadomienia webhook czy webhooki zwrotne bezpośrednio z poziomu interfejsu CLI. Z kolei osoby preferujące w pełni odizolowane środowiska mogą zestawić narzędzia terminalowe z lokalnymi modelami AI z Ollama i Qwen Coder.
Często zadawane pytania (FAQ)
To wtyczki napisane w JavaScript lub TypeScript, które działają bezpośrednio wewnątrz procesu Claude Code. Reagują na zdarzenia, takie jak wysłanie prompta czy wywołanie narzędzia, umożliwiając modyfikowanie interfejsu graficznego i kontrolowanie akcji agenta.
Wymagana jest wersja CLI co najmniej v2.1.287 lub aplikacja Claude Desktop w wersji v2.1.286. Wtyczkę instaluje się poleceniem claude plugin install nazwa@marketplace w konsoli lub /plugin install bezpośrednio w trakcie trwania sesji.
Oficjalne przykłady demonstracyjne znajdują się w repozytorium anthropics/claude-code-playground. Moje mody, w tym openrouter-balance pokazujący saldo OpenRouter, są w repozytorium krysmalskipl/claude-code-mods: dodajesz je komendą claude plugin marketplace add krysmalskipl/claude-code-mods, a potem claude plugin install openrouter-balance@krysmalskipl. Więcej wtyczek społeczności znajdziesz w repozytorium hamzafer/claude-code-mods.
Wystarczy folder z plikiem .claude-plugin/plugin.json, listą modułów w hooks/hooks.json i kodem w hooks/register.tsx, który eksportuje funkcję register. Mod ładujesz poleceniem claude --plugin-dir ./folder-moda, a sprawdzasz przez claude plugin validate i claude plugin test. Przykładowy mod pokazujący saldo OpenRouter ma około 50 linii kodu.
Mody nie zastępują instrukcji systemowych, lecz działają na innym poziomie architektury. System prompt definiuje zachowanie modelu w plikach konfiguracyjnych, natomiast mod przechwytuje zdarzenia i wywołania narzędzi w środowisku wykonawczym po stronie klienta.
Mody zaprojektowano z myślą o pełnym terminalu CLI oraz zakładce Code w Claude Desktop. W rozszerzeniu VS Code, trybie wsadowym claude -p oraz sesjach w chmurze część funkcji interfejsu graficznego zachowuje się inaczej lub jest niedostępna.
Mod wykonuje się z uprawnieniami użytkownika lokalnego i nie jest objęty piaskownicą Bash, ma więc bezpośredni dostęp do plików oraz zmiennych środowiskowych. Przed instalacją należy sprawdzić wtyczkę poleceniem claude plugin validate i pobierać kod wyłącznie z zaufanych źródeł.
Sprawdzę indeksację, robots.txt i renderowanie - dostaniesz listę konkretów do naprawy.




