Kto pisał skrypty ARexxa pod Directory Opusa, zna to uczucie: program przestaje być zamkniętym pudełkiem i zaczyna robić to, czego chce właściciel. Mody w Claude Code działają podobnie. To procedury obsługi zdarzeń w JavaScripcie albo TypeScripcie, ładowane do środka aplikacji. Są włączone domyślnie od wersji 2.1.287 w terminalu i od 2.1.286 w aplikacji Desktop.
Co potrafi mod w Claude Code
Sporo. Mod może narysować własny panel albo pasek, zmienić wygląd interfejsu, przechwycić wywołanie narzędzia albo zapytanie do modelu i dodać nowe polecenie z ukośnikiem. Kompletny przykład z dokumentacji (tu bez komentarzy i z przełamanymi liniami) liczy wywołania narzędzi i dopisuje licznik do spinnera:
let calls = 0
export function register(on) {
on('tool.call', async ($, e, next) => {
calls += 1
$.ui.invalidate('ui.render')
return next(e)
})
on('ui.render', { component: 'Spinner' },
async ($, e, next) => next({ ...e,
props: { ...e.props,
suffix: ' · tool calls: ' + calls + '…' }
}))
}Każdy handler dostaje zdarzenie i funkcję next. Może je przepuścić dalej bez zmian, zmodyfikować albo zatrzymać. Pierwszy handler zwiększa licznik przy każdym wywołaniu narzędzia i każe przerysować interfejs. Drugi łapie renderowanie komponentu Spinner i dokleja do niego sufiks. W efekcie przy kręcącym się wskaźniku widać „Thinking · tool calls: 3…”.
Przykładowe mody: token-weather, blast-radius, replay-theater
Anthropic trzyma przykłady w repozytorium anthropics/claude-code-playground. token-weather rysuje nad promptem prognozę zapełnienia okna kontekstu. blast-radius wstrzymuje ryzykowne polecenie w rodzaju rm -rf albo force push, pokazuje, co by zmieniło, i czeka na decyzję. replay-theater dodaje komendę /replay, która przechodzi krok po kroku przez edycje plików z ostatniej tury. Część funkcji samego Claude Code to też mody, na przykład /diff i obsługa AGENTS.md. Instaluje się je jak wtyczki, poleceniem w rodzaju /plugin install token-chart@your-org.
W ostatnich tygodniach API szybko rośnie. Wersja 2.1.300 z 14 października dodała virtualText, a 2.1.304 z 19 października pozwala przy zdarzeniu tool.check ustawić decider: "person", czyli oddać decyzję człowiekowi.
Czy mody w Claude Code są bezpieczne?
Tu dokumentacja nie zostawia złudzeń. Mod nie ma sandboksa. Działa z uprawnieniami użytkownika: czyta i zapisuje pliki, uruchamia programy, łączy się z siecią, widzi każdy prompt i każde wywołanie narzędzia, czyta klucze API ze zmiennych środowiskowych i potrafi zatwierdzić wywołanie, zanim człowiek zostanie o nie zapytany. Nie zmieni jednego: tego, co pokazuje monit o zgodę. Proces uruchomiony przez mod działa też poza sandboksem Basha, nawet gdy ten jest włączony. Przed instalacją warto więc puścić claude plugin validate ./some-mod. Polecenie wypisze, do jakich zdarzeń mod się podpina (hooks:) i co sam wywołuje (calls:). Gdy coś pójdzie nie tak, Claude Code uruchomiony z --safe-mode albo z ustawieniem disableAllHooks startuje bez modów.
Warto to zestawić z resztą bezpieczeństwa wokół agenta. Kto trzyma całe Claude Code w kontenerze albo w sandboksie, ogranicza też szkody od źle napisanego moda, bo mod nie sięgnie dalej niż ten kontener. Ten sam mechanizm, który w blast-radius blokuje rm -rf, w cudzym modzie mógłby po cichu przepuszczać wszystko. Skrypt ARexxa pod Directory Opusem też mógł zrobić wszystko, na co pozwalał program, który go wołał. Różnica jest taka, że dziś w tym samym procesie siedzą klucze API, a wyciek z OpenCode pokazał, ile kosztuje jedna noc z cudzym kluczem.



