Hooks w Claude Code: Automatyczny linting, powiadomienia i walidacja przy każdej zmianie

Hooks w Claude Code: Automatyczny linting, powiadomienia i walidacja przy każdej zmianie

Claude Code edytuje plik. Automatycznie odpala się Prettier. Zapisuje zmiany. Automatycznie uruchamia się lint. Próbuje wykonać rm -rf. Hook blokuje komendę i informuje, że to zabronione.

To Hooks – automatyczne reakcje na zdarzenia w Claude Code. Bez pisania ani jednej linijki kodu AI.

  1. Czym są Hooks
  2. Dostępne eventy
  3. Przykład 1: Lint po każdej edycji pliku
  4. Przykład 2: Blokowanie niebezpiecznych komend
  5. Przykład 3: Powiadomienie gdy Claude czeka
  6. Gdzie skonfigurować Hooks
## Czym są Hooks

Hooks to komendy shell, które wykonują się automatycznie w określonych momentach sesji Claude Code. Możesz reagować na:

  • Edycję pliku (i uruchomić formatowanie)
  • Wykonanie komendy (i zablokować niebezpieczne)
  • Zakończenie odpowiedzi (i wysłać powiadomienie)
  • Rozpoczęcie sesji (i załadować kontekst)

Hook składa się z trzech elementów:

  1. Event – kiedy się odpala (np. PostToolUse)
  2. Matcher – na jakie narzędzie reaguje (np. Write)
  3. Handler – co wykonać (np. prettier --write)

Hooks działają bez udziału AI. To Ty definiujesz logikę w prostych skryptach shell. Claude Code tylko je wywołuje w odpowiednich momentach.

Dostępne eventy

Claude Code oferuje kilkanaście eventów, na które możesz reagować:

Najważniejsze eventy Hooks
EventKiedy się odpalaZastosowanie
SessionStartPoczątek sesjiZaładowanie kontekstu, logi
PreToolUsePrzed użyciem narzędziaBlokowanie niebezpiecznych operacji
PostToolUsePo użyciu narzędziaLint, formatowanie, walidacja
StopClaude kończy odpowiadaćPodsumowanie, commit
NotificationClaude wysyła powiadomieniePush, Slack, macOS alert

Eventy typu Pre mogą blokować akcje. Eventy typu Post reagują na już wykonane operacje.

## Przykład 1: Lint po każdej edycji pliku

Chcesz, żeby każdy plik edytowany przez Claude Code przechodził przez ESLint? Dodaj hook w .claude/settings.json:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx eslint --fix \"$FILE_PATH\""
          }
        ]
      }
    ]
  }
}

Ten hook odpala się po każdym użyciu narzędzia Write (edycja pliku). Zmienna $FILE_PATH zawiera ścieżkę do edytowanego pliku.

Efekt: Claude edytuje kod → ESLint automatycznie poprawia styl → plik jest od razu zgodny ze standardami.

## Przykład 2: Blokowanie niebezpiecznych komend

Nie chcesz, żeby Claude przypadkowo uruchomił rm -rf? Stwórz skrypt .claude/hooks/block-rm.sh:

bash
#!/bin/bash
COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destrukcyjna komenda zablokowana"
    }
  }'
else
  exit 0
fi

I dodaj hook w settings:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/block-rm.sh"
          }
        ]
      }
    ]
  }
}

Efekt: Claude próbuje uruchomić rm -rf /tmp/build → hook zwraca deny → komenda nie zostaje wykonana → Claude dostaje informację o powodzie blokady.

Hooki PreToolUse mogą zwracać permissionDecision: allow, deny lub ask. To pozwala budować własne polityki bezpieczeństwa.

## Przykład 3: Powiadomienie gdy Claude czeka

Claude Code może działać minutami. Chcesz dostać powiadomienie macOS gdy skończy? Użyj eventu Notification:

json
{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude czeka na Twój input\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

Efekt: Claude kończy zadanie i czeka na Twój input → macOS wyświetla powiadomienie → wracasz do terminala.

Możesz też wysyłać powiadomienia na Slack, Discord czy przez Pushover.

## Gdzie skonfigurować Hooks

Lokalizacja pliku settings decyduje o zakresie:

Lokalizacje konfiguracji Hooks
PlikZakresDzielony z zespołem
~/.claude/settings.jsonWszystkie projektyNie
.claude/settings.jsonTen projektTak (przez git)
.claude/settings.local.jsonTen projektNie (gitignore)

Typowa konfiguracja:

  • Hooki bezpieczeństwa (blokowanie rm -rf) → ~/.claude/settings.json
  • Hooki projektowe (lint, format) → .claude/settings.json
  • Hooki osobiste (powiadomienia) → .claude/settings.local.json

Podsumowanie

Hooks to automatyzacja bez AI. Ty definiujesz logikę, Claude Code wywołuje ją w odpowiednich momentach. To idealne narzędzie do:

  • Wymuszania standardów kodu (lint, format)
  • Ochrony przed niebezpiecznymi operacjami
  • Integracji z zewnętrznymi systemami (powiadomienia, logi)

Jeśli chcesz stworzyć bardziej złożone workflow, sprawdź poprzedni wpis: Skills w Claude Code: własne komendy slash.

Więcej o agentach AI i ich automatyzacji znajdziesz w artykule Agentic AI: przyszłość automatyzacji.

Hooks w Claude Code: Automatyczny linting, powiadomienia i walidacja przy każdej zmianie