TL;DR
- Zostaw trzy z dziesięciu modów: collision-guard, model-router i auto-handoff. Każdy miał w przybliżeniu zerowy zmierzony narzut w zadaniu odczytu w trybie headless i każdy rozwiązuje problem, który potrafisz nazwać.
- Usuń next-steps. Forkuje sesję po każdej kwalifikującej się odpowiedzi i w naszym teście kosztował +250 tokenów wyjściowych oraz +2850 ms na turę, także na powierzchniach, które nigdy nie wyświetlają jego podpowiedzi.
- Usuń cache-keeper (+1589 ms, płatne pingi do modelu), recording-mode (maskuje wyświetlanie, a nie zapisaną historię) i session-bookmarks (zakładka, która może wywoływać model, uruchamiać procesy i zapisywać pliki).
- Usuń goal-meter, repo-heatmap i flight-recorder, chyba że chcesz mieć te wizualizacje. Kosztują prawie nic i nie dały żadnej mierzalnej korzyści.
- Każdy mod typu guard domyślnie zawodzi otwarcie (fail open). Bez handlera
.catchguard, który rzuci wyjątek, jest pomijany, a polecenie się wykonuje. - Mody nie działają w sandboxie. Przeczytaj wynik
claude plugin validate, zanim jakiś zainstalujesz.
Co mówią pomiary
Szum i skala. Tweet z premiery miał 4 138 918 wyświetleń, 20 021 polubień i 13 440 zakładek, gdy zrobiliśmy jego zrzut 2026-10-03 s11. Katalog społeczności zawiera 1018 modów w 873 repozytoriach kandydujących, przeskanowanych 2026-10-03 względem Claude Code 2.1.288 s9.
Mod to funkcja podpięta do zdarzenia. Może się wykonać przed zdarzeniem, po nim, zamiast niego albo je opakować s1. Mody wymagają Claude Code v2.1.287 lub nowszego i są domyślnie włączone s2.
Najpierw bezpieczeństwo. Słowa samego Anthropic: "Mods run with the same access to your machine as Claude Code itself. They aren't sandboxed" s1. Proces uruchomiony przez mod działa poza sandboxem, nawet gdy sandboxing jest włączony s2. Przy zablokowanym Read(.env) mod nadal może odczytać ten plik przez $.fs.read albo uruchomić program, który to zrobi s6. W skanie katalogu 409 modów uruchamia procesy hosta, 167 zapisuje pliki, 150 łączy się z siecią, a 28 nie przechodzi walidacji w tej wersji s9.
Zasięg kontra obietnica. W naszym audycie statycznym session-bookmarks wywołuje $.model.complete, $.process.run i $.fs.write, czyli największy zasięg w całym zestawie jak na funkcję zakładek. next-steps miał najmniejszy ślad: bez fs, bez procesów, bez env. claude plugin validate wypisuje linie calls: i env reads:, na których oparliśmy ten audyt s6.
Flagowy mod ma koszt na turę. next-steps forkuje sesję przez $.model.fork przy turn.complete, a README mówi, że fork "costs about one short reply" s10. Podpowiedzi rysują się tylko w terminalu, inne powierzchnie nie pokazują nic s10. Forka nie da się wyłączyć żadną opcją. W naszym teście headless dodał +250 tokenów wyjściowych i +2850 ms, a fork trafiał do zużycia sesji, mimo że nic nie było wyświetlane s10.
Udokumentowane limity. Czas wykonania hooka jest ograniczony do 10 sekund na zdarzenie, odczyty i zapisy $.fs do 4 MiB na plik, a $.store do 4 MiB JSON łącznie s3.
Guardy zawodzą otwarcie. Dokumentacja mówi, że hook bez handlera .catch, który rzuci wyjątek, przekroczy czas albo zwróci zły kształt danych, jest pomijany, a w jego miejsce wykonuje się następny handler s7. Odtworzyliśmy to: guard Bash, który rzuca wyjątek, bez .catch, pozwolił touch ./marker-failopen.txt utworzyć plik. Ten sam guard z .catch zwracającym {deny} nie utworzył żadnego pliku. Raport z praktyki opisał guard, który był włączony i działał, ale nic nie robił, podczas gdy plugin list nadal pokazywał "enabled" s8.
Otwarty błąd w 2.1.288: deny zwrócone po await next(e) nie zatrzymuje narzędzia, a plik został zapisany 3 razy na 3, podczas gdy modelowi powiedziano, że zapis się nie udał s5.
Mody kontra hooki w ustawieniach. Hook w ustawieniach uruchamia proces przy każdym wywołaniu. Zmierzyliśmy koszt uruchomienia: 2,2 ms dla binarki true, 8,3 ms dla bash -c 'exit 0', 26,1 ms dla python3 -c 'pass' i 43,1 ms dla node -e ''. Przy 5993 wywołaniach narzędzi tygodniowo hook w node kosztuje 258 s. Mod działający w procesie nie płaci tego wcale. Dokumentacja zaleca hook w ustawieniach, gdy masz już skrypt, który blokuje, przepuszcza lub loguje zdarzenie s2. Jeden raport o migracji opisuje przejście z 27 hooków shellowych na 5 modów s8.
Maskowanie działa tylko na wyświetlaniu. recording-mode przepisuje to, co rysuje ui.render. ~/.claude/history.jsonl zachowuje prompt tak, jak został wpisany, a jeden z testerów znalazł swój ciąg kontrolny 7 razy we wpisach queue-operation w transkrypcie s5.
Gdzie mody nie działają. Headless claude -p i Agent SDK uruchamiają hooki, ale niczego nie rysują; sesja Desktop WSL nie uruchamia żadnych s2.
Zaufanie do katalogu. Tester opublikował mod, którego przycisk uruchamiał program przez $.process.run i zapisywał plik w jego katalogu domowym. Zainstalował się jak każdy inny mod, bez żadnego ostrzeżenia s5. To był samodzielnie opublikowany proof of concept, a nie atak zaobserwowany w praktyce.
Pomiary
Korpus: ostatnie 7 dni prawdziwej konfiguracji, 85 sesji, 4 projekty, 882 prompty użytkownika, 11 010 tur asystenta, 5993 wywołania narzędzi. Benchmark uruchomiony na Claude Code 2.1.288 (macOS).
| konfiguracja | czas ms | Δczas | tok. wyjścia | Δwyjście | zadanie ok |
|---|---|---|---|---|---|
| baseline | 3980 | 0 | 247 | 0 | 3/3 |
| next-steps | 6830 | +2850 | 497 | +250 | 3/3 |
| cache-keeper | 5569 | +1589 | 367 | +120 | 3/3 |
| recording-mode | 8240 | +4260* | 598 | +351* | 3/3 |
| goal-meter | 3722 | -258 | 244 | -3 | 3/3 |
| collision-guard | 4565 | +585 | 376 | +129* | 3/3 |
| repo-heatmap | 4119 | +139 | 257 | +10 | 3/3 |
| flight-recorder | 3949 | -31 | 261 | +14 | 3/3 |
| model-router | 3698 | -282 | 238 | -9 | 3/3 |
| session-bookmarks | 4152 | +172 | 235 | -12 | 3/3 |
| auto-handoff | 4051 | +71 | 248 | +1 | 3/3 |
Wiersze oznaczone * to prawdopodobnie zmienność odpowiedzi. recording-mode był podczas testu wyłączony i po wyłączeniu niczego nie wstrzykuje.
Protokół do powtórzenia pomiaru:
- Instaluj po jednym modzie i sprawdź, że przechodzi
claude plugin validate. - Uruchom to samo zadanie tylko do odczytu w trybie headless przez
claude -pna haiku, 3 powtórzenia na konfigurację, i weź medianę czasu oraz tokenów wyjściowych. - Cytuj tylko różnice czasu i tokenów wyjściowych. Koszt w USD zmienia się z kolejnością cache między konfiguracjami, więc go ignoruj.
- Dla kosztu uruchomienia zmierz 30 uruchomień każdego ciała hooka, weź medianę i pomnóż przez swoją tygodniową liczbę wywołań narzędzi.
Zrób to w poniedziałek
- Uruchom
claude plugin validatedla każdego zainstalowanego moda i przeczytaj liniecalls:ienv reads:. - Wyłącz każdy mod, którego zasięg (proces, zapis do fs, wywołanie modelu) jest większy niż jego zadanie.
- Wyłącz next-steps, jeśli pracujesz głównie w uruchomieniach headless, panelu VS Code lub SDK, gdzie jego podpowiedzi nigdy się nie rysują.
- Dodaj handler
.catchzwracający{ deny: ... }do każdego moda typu guard, na którym polegasz. - Udowodnij, że każdy guard zawodzi zamknięcie: spraw, by rzucił wyjątek, uruchom polecenie tworzące plik znacznika i sprawdź, że plik się nie pojawia.
- Nie polegaj na modzie maskującym, żeby sekrety nie trafiły do
~/.claude/history.jsonlani do transkryptu. Sprawdź oba na dysku. - Zastąp hooki shellowe uruchamiane przy każdym wywołaniu, które odpalają node lub python, modem działającym w procesie albo skompilowaną binarką, jeśli koszt uruchomień sumuje się przy twojej tygodniowej liczbie wywołań narzędzi.
- Poznaj wyłączniki: wyłącz jeden mod w
/plugin,--safe-modena jedną sesję,"disableAllHooks": truew~/.claude/settings.jsondla całości.
Idź dalej
- Zbuduj własny: praktyczny przewodnik po modzie na ~80 linii, z pułapkami, które mają znaczenie (stan na poziomie modułu resetuje się przy hot reload, więc trzymaj dane w
$.state) s4. - Zdecyduj między modem, hookiem, skillem a ustawieniami na podstawie własnej historii: jeden praktyk radzi najpierw przekopać logi sesji w poszukiwaniu powtarzających się problemów s12.
- Przeczytaj pełną listę zdarzeń i limity, zanim napiszesz guarda s3.
- Zarządzanie na poziomie organizacji wykracza poza ten materiał. Jedna rzecz dla solo developera:
sec-defaultładuje się, gdy maszyna ma zarządzane ustawienia albo jesteś zalogowany na planie Team lub Enterprise, i nie dodaje żadnych innych ograniczeń s6. - Geneza projektu, w tym błąd izolacji worktree naprawiony w 2.1.288 i wnętrze runtime'u, znajduje się w otwartym wątku s5.
- Przykładowe mody od Anthropic (token-weather, blast-radius, replay-theater) są wymienione jako udostępnione bez wsparcia s2.
Sources
- Customize Claude Code with mods, Anthropic blog. Dlaczego warto przeczytać: oficjalna definicja i ostrzeżenie o braku sandboxa słowami samego Anthropic.
- Mods overview, docs. Dlaczego warto przeczytać: porównanie modów z hookami, macierz powierzchni i wyłączniki.
- Mods reference, docs. Dlaczego warto przeczytać: pełna lista zdarzeń i udokumentowane limity.
- Getting started with Claude Code mods, claude.dev (Addy Osmani). Dlaczego warto przeczytać: najlepszy praktyczny przewodnik budowania, z pułapkami, o których nie pisze żadne inne źródło.
- Mods issue #91870, GitHub. Dlaczego warto przeczytać: raporty z praktyki o izolacji, zachowaniu fail closed i wyciekach do historii.
- Manage mods for your organization, docs. Dlaczego warto przeczytać: audyt przez validate i granice każdej kontroli bezpieczeństwa.
- React to events with a mod, docs. Dlaczego warto przeczytać: kolejność łańcucha middleware i domyślne fail open.
- The Guard I Installed Was Enabled, Running, and Doing Nothing, blog. Dlaczego warto przeczytać: jedyny raport z migracji, z 27 hooków shellowych na 5 modów.
- awesome-claude-code-mods, GitHub. Dlaczego warto przeczytać: skala ekosystemu i gotowa metoda audytu.
- next-steps plugin source, GitHub. Dlaczego warto przeczytać: prawdziwa mechanika flagowego moda, w tym fork na każdą turę.
- ClaudeDevs release tweet, X. Dlaczego warto przeczytać: ogłoszenie premiery i jego zasięg.
- Avid's session-log mining workflow, X. Dlaczego warto przeczytać: metoda ustalania, co zbudować lub zainstalować, zanim cokolwiek zainstalujesz.
FAQ
Czy mody działają w sandboxie?
Nie. Anthropic mówi, że mody działają z takim samym dostępem do twojej maszyny jak sam Claude Code s1. Programy uruchamiane przez mod także działają poza sandboxem s2.
Co się stanie, jeśli mój mod typu guard się wywali?
Bez handlera .catch jest pomijany, a polecenie się wykonuje s7. Dodaj .catch zwracający { deny: ... }, żeby zawodził zamknięcie (fail closed).
Czy mod kosztuje tokeny?
Tylko jeśli wywołuje model. Z dziesięciu uruchomionych modów mierzalny koszt pokazały next-steps i cache-keeper; pozostałe nie wykazały w naszym teście wiarygodnego narzutu.
Jak szybko wyłączyć mody?
Wyłącz jeden w /plugin, uruchom sesję z --safe-mode albo ustaw "disableAllHooks": true w ~/.claude/settings.json s2. Żadna z tych metod nie zatrzymuje wbudowanych modów.
Czy mogę sprawdzić, co robi mod, zanim go zainstaluję?
Tak. claude plugin validate wypisuje hooki, wywołania API i zmienne środowiskowe, które mod czyta s6.
AIDive