Blog

Odzyskiwanie Claude Code: Safe Mode, /cd i modele awaryjne

Markdown

Diagnozowanie Claude Code za pomocą safe mode, polecenia /cd, modeli awaryjnych i odzyskiwania ustawień. Kolejność sprawdzania i pierwotne ograniczenia.

Przeczytaj cały artykuł

Praktyczne materiały o pracy z agentami: dokumentacja Ailoot.

Co zmieniło się w Claude Code w czerwcu 2026 roku?

Najważniejsze informacje

8 czerwca 2026 roku, w Claude Code v2.1.169, Anthropic dodał flagę --safe-mode i polecenie /cd. Dwa dni wcześniej, w v2.1.166, wprowadzono modele awaryjne, maksymalnie 3 w łańcuchu. Te trzy funkcje rozwiązują najczęstszy problem vibe coderów: „wszystko się posypało, nie wiem, kogo winić, i nie chcę tracić godziny na ponowną instalację”.

Wcześniej, gdy Claude Code zaczynał dziwnie działać — niekończący się spinner, awaria przy uruchamianiu, agent ignorujący reguły w CLAUDE.md albo hook, który po cichu się nie uruchamiał — było tylko jedno wyjście: ręcznie zakomentować część pliku .claude/settings.json, po kolei wyłączać serwery MCP albo w najgorszym razie usunąć ~/.claude i zainstalować wszystko ponownie. W jednym z opisanych przypadków usunięto ~/.claude, przez co przepadła konfiguracja serwerów MCP, której przygotowanie zajęło półtorej godziny. Później okazało się, że winna była jedna linijka w CLAUDE.md, którą można było znaleźć w 10 sekund — ale wyszło to na jaw dopiero po pełnym odzyskaniu środowiska.

W czerwcu 2026 roku Anthropic wprowadził trzy mechanizmy, które zmieniają ten scenariusz. Oto krótkie zestawienie tego, co i kiedy dodano:

WersjaDataNowość
2.1.1666 czerwca 2026Ustawienie fallbackModel i flaga --fallback-model dla sesji interaktywnych
2.1.1698 czerwca 2026Flaga --safe-mode, zmienna środowiskowa CLAUDE_CODE_SAFE_MODE oraz polecenie /cd
2.1.17612 czerwca 2026Poprawka: po użyciu /cd i przełączeniu worktree nie wyświetla się już stara gałąź git

Poniżej wyjaśniam krok po kroku każdy mechanizm i kolejność ich stosowania, gdy sesja Claude Code zaczyna działać nieprawidłowo.

Co najczęściej psuje Claude Code?

Najważniejsze informacje

Z opisanych doświadczeń wynika, że Claude Code najczęściej sprawia problemy vibe coderom z czterech powodów: rozrośniętego CLAUDE.md z sprzecznymi regułami, hooka z nieprawidłowym kodem zakończenia, serwera MCP, który po cichu zawodzi, oraz nakładających się ustawień w trzech poziomach settings.json. Zwykle winowajca jest jeden, diagnoza zajmuje kilka minut, ale panika skłania do natychmiastowego użycia rm -rf.

W opisanym przykładzie plik CLAUDE.md początkowo liczył 80 wierszy i działał przez miesiąc. W drugim miesiącu zaczęto zauważać, że raz w tygodniu Claude łamie wszystkie ustalone reguły: dotyka .env, uruchamia git push --force, zagląda do node_modules. Nie ze złośliwości — po prostu zapomina. Pewnego razu usunięto .gitignore i początkowo nie było jasne dlaczego. Ten scenariusz szerzej opisuje poradnik o CLAUDE.md.

Gdy CLAUDE.md rozrasta się do ponad 400 wierszy, zaczyna po cichu sprawiać kłopoty: zajmuje znaczną część okna kontekstu przy uruchamianiu sesji, a ważne instrukcje giną wśród drugorzędnych. Claude nadal formalnie odczytuje plik, więc z zewnątrz wygląda to tak: „reguły są, ale nie działają” — to typowy objaw nadmiernie rozbudowanego kontraktu.

Drugim częstym źródłem problemów są hooki. Claude Code hooks mają pewien szczegół, którego Anthropic nie podkreśla.

Oznacza to, że sys.exit(1) w hooku Pythonowym (lub dowolny zgodny z konwencją Unix kod oznaczający „niepowodzenie z błędem”) nie zatrzyma Claude. Blokuje tylko kod 2. W opisanym przypadku hook miał stanowić „bezwzględny zakaz”, ale w praktyce zapisywał ostrzeżenie i zezwalał na działanie.

Trzecią warstwą są serwery MCP, które również mogą zawodzić na swój sposób.

Objawy często wyglądają tak samo: polecenia MCP są dostępne, ale zwracają failed bez śladu stosu. Więcej o konfiguracji MCP i dodawaniu serwerów za pomocą claude mcp add znajdziesz w osobnym poradniku.

Czwartym źródłem problemów jest trójwarstwowa hierarchia settings.json. Masz ~/.claude/settings.json (poziom użytkownika), .claude/settings.json w katalogu głównym projektu (poziom projektu), .claude/settings.local.json (ustawienia lokalne), a opcjonalnie także ustawienia zarządzane przez administratora firmy. Są one łączone zgodnie z regułami priorytetu. Jeśli ktoś doda serwer MCP na poziomie projektu, a na poziomie użytkownika masz podobny wpis z inną konfiguracją uruchamiania, powstaje niewidoczny konflikt, który wygląda jak „Claude Code jest zepsuty”.

Jak działa --safe-mode i co wyłącza?

Najważniejsze informacje

Polecenie claude --safe-mode uruchamia Claude Code z całkowicie wyłączonymi modyfikacjami: CLAUDE.md, wtyczkami, skills, hookami, serwerami MCP, poleceniami użytkownika, agentami, stylami wyjściowymi, workflow i mapowaniami klawiszy. Autoryzacja, wybór modelu, wbudowane narzędzia i uprawnienia pozostają aktywne. To narzędzie diagnostyczne: jeśli problem znika w safe mode, winna jest jedna z dodanych przez Ciebie warstw.

Oryginalny zapis Anthropic w changelogu v2.1.169 brzmi:

Dodano flagę --safe-mode (oraz CLAUDE_CODE_SAFE_MODE), która uruchamia Claude Code z wyłączonymi modyfikacjami (CLAUDE.md, wtyczkami, skills, hookami, serwerami MCP) na potrzeby diagnostyki.

— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog

Anthropic wyjaśnia w dokumentacji konfiguracji modeli:

Aby sprawdzić, czy winne są modyfikacje, uruchom sesję poleceniem claude --safe-mode. Wyłącza ono CLAUDE.md, skills, serwery MCP i hooki. Stan Git i nazwy katalogów nie są uznawane za modyfikacje i pozostają dostępne.

— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config

To narzędzie diagnostyczne, a nie „czyste środowisko”. Safe mode pomaga odpowiedzieć na jedno pytanie: czy problem tkwi w domyślnym działaniu Claude Code, czy w dodanych modyfikacjach? To element inżynierii kontekstu — zarządzania tym, co Claude widzi, a czego nie widzi w danym momencie. Jeśli w safe mode wszystko działa, należy sprawdzić warstwy metodą bisekcji. Jeśli nie działa, problem dotyczy samej instalacji, autoryzacji, sieci albo infrastruktury; wtedy warto sprawdzić claude doctor i dzienniki.

Co wyłącza safe mode (5 głównych warstw z oficjalnej listy Anthropic):

  • CLAUDE.md na wszystkich poziomach (użytkownika / projektu)
  • Wtyczki
  • Skills
  • Hooki
  • Serwery MCP

Co nadal działa:

  • Autoryzacja (sesja OAuth lub klucz API)
  • Wybór modelu (--model sonnet, --model opus)
  • Wbudowane narzędzia (Read, Write, Bash, Grep i inne)
  • Uprawnienia
  • Stan Git
  • Nazwy katalogów

Ważny szczegół: safe mode nie wyłącza ustawień zarządzanych ani zasad narzuconych przez administratora firmy. Jeśli pracujesz w zespole, w którym Bedrock GovCloud lub konfiguracja MDM ustawia availableModels, te ograniczenia pozostają aktywne — safe mode wyłącza tylko Twoje modyfikacje, a nie polityki firmowe.

Jak odizolować warstwę i znaleźć winowajcę w 60 sekund?

Najważniejsze informacje

Krok 1: uruchom claude --safe-mode w tym samym folderze, w którym występował problem. Jeśli działa, problem tkwi w modyfikacjach; następnie włączaj je po kolei: CLAUDE.md -> hooki -> MCP -> skills. Jeśli problem występuje także w safe mode, dotyczy uwierzytelniania, wersji, sieci lub systemu operacyjnego. W takim przypadku uruchom claude doctor, aby przeprowadzić automatyczną diagnostykę — bez używania rm -rf.

Oto procedura diagnostyczna na wypadek, gdy Claude Code „przestał słuchać”. Wszystkie poniższe polecenia wymagają co najmniej Claude Code v2.1.169. Jeśli masz starszą wersję, najpierw ją zaktualizuj (npm update -g @anthropic-ai/claude-code lub użyj natywnego instalatora Anthropic).

  1. Otwórz ten sam folder, w którym występował problem.
  2. Uruchom claude --safe-mode.
  3. Jeśli program uruchomi się bez problemów, sprawdź pierwotne polecenie. Zadziałało? W takim razie winna jest jedna z warstw. Przejdź do kroku 4.
  4. Jeśli w safe mode nadal występuje problem, nie ruszaj konfiguracji. Najpierw uruchom claude doctor; sprawdź autoryzację, wersję i konflikty instalacji.

Gdy safe mode uruchamia się prawidłowo, włączaj warstwy pojedynczo, zaczynając od najbardziej prawdopodobnego winowajcy. Kolejność oparta na opisanych doświadczeniach:

  1. CLAUDE.md. Uruchom claude bez safe mode, ale tymczasowo zmień nazwę pliku: mv CLAUDE.md CLAUDE.md.bak. Jeśli zadziała, przyczyną jest ten plik. Następnie możesz przeprowadzić bisekcję: pozostawić połowę wierszy i sprawdzić.
  2. Hooki. Otwórz .claude/settings.json i tymczasowo ustaw [] w sekcji hooks. Uruchom ponownie claude. Działa? W takim razie winny jest jeden z hooków. Włączaj je po kolei.
  3. Serwery MCP. Podobnie tymczasowo ustaw pusty obiekt w sekcji mcpServers w ~/.claude.json albo .claude/settings.json, uruchom ponownie program i sprawdź działanie.
  4. Skills. Przenieś .claude/skills/ do folderu tymczasowego. Uruchom program i sprawdź działanie.

„Tymczasowa zmiana nazwy” oznacza, że podczas diagnozy pliki nie są usuwane. Polecenia mv lub git stash umożliwiają przywrócenie wszystkiego jednym poleceniem, jeśli okaże się, że dana warstwa nie była winna.

Jak przełączyć folder roboczy za pomocą /cd bez utraty kontekstu?

Najważniejsze informacje

Polecenie /cd <path> w Claude Code 2.1.169+ zmienia folder roboczy aktywnej sesji bez utraty pamięci podręcznej promptu. Jest przydatne, gdy konfiguracja bieżącego projektu jest zepsuta: możesz przejść do czystego folderu, sprawdzić, czy Claude działa, i wrócić. Wcześniej trzeba było zamknąć sesję i uruchomić ją ponownie.

W changelogu v2.1.169 z 8 czerwca zapisano:

Dodano polecenie `/cd`, które przełącza sesję do nowego folderu roboczego bez resetowania pamięci podręcznej promptu w trakcie sesji.

— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog

Oto dlaczego ta funkcja jest przydatna przy naprawianiu problemów. Załóżmy, że pracujesz w folderze projektu ~/work/myapp, a Claude Code zachowuje się dziwnie. Wcześniej jedynym sposobem sprawdzenia, „czy w ogóle działa?”, było zamknięcie sesji, przejście do innego folderu i ponowne uruchomienie. Traciło się kontekst, historię i rozgrzaną pamięć podręczną promptu. Teraz można użyć polecenia:

# W tej samej sesji:
/cd ~/sandbox/test

Claude przechodzi do nowego folderu i odczytuje znajdujący się w nim CLAUDE.md (jeśli istnieje) jako wiadomość, a nie zamiennik promptu systemowego — pamięć podręczna zostaje więc zachowana. Jeśli wszystko działa w ~/sandbox/test, wiadomo już, że problem tkwił w konfiguracji ~/work/myapp.

12 czerwca w v2.1.176 naprawiono nieprzyjemną regresję — po użyciu /cd wyświetlała się stara gałąź git aż do pełnego restartu. Jeśli używasz starszej wersji, zaktualizuj ją albo po prostu ignoruj git status przez kilka pierwszych wiadomości po przełączeniu — później stan się zaktualizuje.

Jak skonfigurować modele awaryjne na wypadek błędu 529?

Najważniejsze informacje

W v2.1.166 Anthropic dodał fallbackModel — łańcuch maksymalnie 3 modeli wypróbowywanych po kolei, gdy model główny jest przeciążony lub niedostępny. Łańcuch uruchamiają tylko przeciążenie i niemożliwe do ponowienia błędy serwera. Błędy autoryzacji, rozliczeń, limitu liczby żądań i transportu nie uruchamiają łańcucha awaryjnego — podlegają zwykłej logice ponawiania.

W opisanej sytuacji raz w tygodniu w projekcie uruchamiane jest długie zadanie w Opusie; po 10 minutach API zwraca 529 Overloaded, a sesja ulega awarii. Wcześniej trzeba było czekać albo ręcznie przełączyć się na Sonnet poleceniem --model sonnet, tracąc cały rozgrzany kontekst. W dużym folderze business/ z konfiguracją second brain zajmuje to około 20 minut pracy. Teraz istnieje właściwy mechanizm.

Dokładny cytat z oficjalnej dokumentacji:

Gdy model główny jest przeciążony, niedostępny lub zwraca inny niemożliwy do ponowienia błąd serwera, Claude Code może przełączyć się na model awaryjny zamiast kończyć żądanie niepowodzeniem. Błędy autoryzacji, rozliczeń, limitu liczby żądań, rozmiaru żądania i transportu nigdy nie uruchamiają przełączenia — podlegają zwykłej ścieżce ponawiania i obsługi błędów.

— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config

Osobno opisano działanie łańcucha:

Skonfiguruj jeden lub więcej modeli awaryjnych, a Claude Code będzie próbować użyć ich w podanej kolejności i wyświetli powiadomienie podczas przełączania. Zmiana dotyczy tylko bieżącej tury — przy następnej wiadomości ponownie zostanie wypróbowany model główny. Po usunięciu duplikatów łańcuch może zawierać maksymalnie trzy modele; kolejne wpisy są ignorowane.

— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config

Można skonfigurować to na dwa sposoby. Z poziomu CLI:

claude --fallback-model sonnet,haiku

Za pomocą ~/.claude/settings.json:

{
  "fallbackModel": ["claude-sonnet-4-6", "claude-haiku-4-5"]
}

Limit liczby żądań ma dodatkowy szczegół. Anthropic celowo nie przekazuje błędu 429 do łańcucha, aby nie można było omijać limitu żądań przez przełączenie na następny model. Fallback działa tylko wtedy, gdy model główny jest przeciążony, niedostępny lub zwraca niemożliwy do ponowienia błąd serwera (na przykład 529 Overloaded). Limity liczby żądań podlegają zwykłej logice ponawiania i opóźnień.

Jeszcze jedna kwestia: 12 czerwca w v2.1.174 naprawiono regresję, przez którą kompaktowanie nie respektowało --fallback-model. Jeśli podczas przeciążenia długa sesja uległa kompaktowaniu, przed tą poprawką nie wywoływano modelu awaryjnego. Jeśli pracujesz z długimi sesjami (/compact, /loop przez noc), zaktualizuj Claude Code co najmniej do v2.1.174.

Co naprawić, gdy winny jest CLAUDE.md, hook, MCP lub skill?

Najważniejsze informacje

Gdy safe mode wskaże warstwę odpowiedzialną za problem, sposób naprawy zależy od tej warstwy. W przypadku CLAUDE.md użyj bisekcji albo wróć do gotowego szablonu krótszego niż 200 wierszy. W przypadku hooka sprawdź kod zakończenia (2 blokuje, 1 nie) i logikę. W przypadku MCP usuń jeden serwer i sprawdź działanie. W przypadku skill sprawdź, czy SKILL.md nie zawiera sprzeczności z CLAUDE.md.

Konkretne strategie dla każdej warstwy.

Jeśli winny jest CLAUDE.md

Otwórz plik i sprawdź jego rozmiar. Zgodnie z opisanymi doświadczeniami aktywny CLAUDE.md powinien mieć nie więcej niż 200 wierszy; resztę przenieś do routerów i dokumentów pomocniczych obok projektu (pełną strukturę second brain opisuje poradnik o second brain). Jeśli plik ma ponad 400 wierszy, niemal na pewno jest winny. Kroki:

  1. Utwórz kopię zapasową: cp CLAUDE.md CLAUDE.md.full.
  2. Przywróć krótki, sprawdzony szablon. Gotowy szablon znajduje się w poradniku „Jak skonfigurować CLAUDE.md”.
  3. Uruchom ponownie Claude Code. Sprawdź działanie.
  4. Jeśli działa, przywracaj reguły małymi blokami po 10–20 wierszy, sprawdzając działanie po każdym bloku.
  5. Znajdź blok, który psuje zachowanie. Przepisz go jako hook z prawidłowym kodem zakończenia (kody zakończenia hooków opisano w następnej podsekcji tego H2).

Jeśli winny jest hook

Najważniejsze pytanie brzmi: czy kod zakończenia jest prawidłowy? Hooki Claude Code używają następujących kodów:

  • Zakończenie 0 — wszystko w porządku; działanie jest kontynuowane.
  • Zakończenie 1 — błąd, ale nie blokuje. Claude kontynuuje, jak gdyby nic się nie stało.
  • Zakończenie 2 — błąd blokujący. Tylko ten kod faktycznie zatrzymuje działanie.

Jeśli w hooku shellowym użyto sys.exit(1) lub exit 1, sądząc, że blokuje to działanie, w Claude Code taki kod działa jak wpis ostrzegawczy — nie zatrzymuje działania. Zmień go na 2. Szczegółowe informacje o hookach i ich konfiguracji z pominięciem tej pułapki znajdziesz w osobnym poradniku.

Drugim częstym przypadkiem jest hook zwracający nieprawidłowy JSON na standardowym wyjściu. Claude Code analizuje odpowiedź hooka jako JSON; jeśli zawiera ona dodatkowe treści (log, znacznik postępu, emoji), hook zostaje uznany za nieudany, a działanie jest kontynuowane. Zasada: na stdout trafia wyłącznie JSON, wszystko inne należy wysyłać na stderr.

Trzeci przypadek to hook odczytujący coś z ~/.claude/, co safe mode ukrył. To normalna sytuacja; zamiast łatać hook, sprawdź na początku os.environ.get('CLAUDE_CODE_SAFE_MODE') i zakończ działanie kodem 0.

Jeśli winny jest serwer MCP

Objawy: polecenia MCP są dostępne, ale zwracają failed bez czytelnego śladu stosu. Kroki:

  1. Uruchom claude mcp list — które serwery są zdefiniowane?
  2. Wyłączaj serwery pojedynczo w ~/.claude.json: zmień nazwę klucza claude-server-A na _claude-server-A (to go wyłącza, nie usuwając).
  3. Uruchom ponownie claude. Sprawdź, które wywołania działają.
  4. Gdy znajdziesz winny serwer, sprawdź jego log: claude mcp logs <name>.
  5. Jeśli jest to serwer zewnętrzny (@modelcontextprotocol/server-postgres i podobne), sprawdź, czy ma niedawne wydanie. Ekosystem MCP nadal jest niestabilny; aktualizacje Claude Code regularnie powodują problemy z serwerami.

Jeśli napotkasz „awarię przy uruchamianiu tylko wtedy, gdy są dwa MCP”, porównaj działanie w safe mode bez MCP.

Jeśli winny jest skill

Skill składa się z pliku SKILL.md i kodu w .claude/skills/<name>/. Objawy: Claude ignoruje skill, stosuje go w niewłaściwym momencie albo stosuje go, ale tworzy bezwartościowy wynik. Kroki:

  1. Otwórz SKILL.md. Sprawdź opis — powinien mieć 1–2 zdania i konkretnie wyjaśniać, kiedy używać skill. Jeśli zawiera stwierdzenie „uniwersalny pomocnik do wszystkiego”, Claude nie wie, kiedy go wywołać.
  2. Sprawdź, czy opis nie jest sprzeczny z CLAUDE.md. Jeśli CLAUDE.md mówi „zawsze pisz testy”, a opis skill mówi „używaj do szybkiego prototypowania bez testów”, występuje konflikt.
  3. Jeśli skill korzysta z zewnętrznych poleceń (npm, python, git), sprawdź, czy są dostępne w systemowej zmiennej PATH. Skill ma własne, minimalne środowisko.

Co zrobić, jeśli safe mode nie pomógł: diagnoza i zachowanie stanu przed naprawą

Najważniejsze informacje

Gdy safe mode też zawodzi, możliwe są instalacja, autoryzacja, sieć lub infrastruktura. Uruchom claude doctor i oceń dowody. Niejasny raport nie uzasadnia usuwania ustawień ani sesji: najpierw zachowaj i sprawdź pełny stan, a potem napraw wyłącznie zdiagnozowaną instalację.

Usuwanie stanu użytkownika nie jest skrótem diagnostycznym. Poniższe kontrole mają wskazać błąd; przy braku rozstrzygnięcia zachowaj dowody i badaj dalej. Naprawa zaczyna się od sprawdzonej kopii i zachowuje istniejące konto oraz tożsamość magazynu poświadczeń. Kolejność:

  1. claude doctor — automatyczna diagnostyka. Anthropic pisze w dokumentacji:

Jeśli `claude --version` działa, ale coś innego nie działa prawidłowo, uruchom `claude doctor`, aby wygenerować automatyczny raport diagnostyczny.

— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install
  1. Sprawdź, czy nie ma konfliktujących instalacji. Wiele osób ma jednocześnie zainstalowaną globalną wersję npm i wersję z natywnego instalatora:

Wiele instalacji Claude Code może powodować niezgodność wersji lub nieoczekiwane zachowanie.

— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install
  1. Sprawdź, czy ANTHROPIC_API_KEY nie przechwytuje sesji OAuth. To częsta przyczyna problemu „nic nie działa, klucz wygasł”:

Jeśli zmienna `ANTHROPIC_API_KEY` jest ustawiona i została potwierdzona, Claude Code używa tego klucza zamiast danych uwierzytelniających OAuth z subskrypcji.

— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install

Rozwiązanie: uruchom unset ANTHROPIC_API_KEY w bieżącej sesji shell albo usuń tę zmienną z ~/.zshrc / ~/.bashrc.

  1. Napraw tylko instalację wskazaną przez diagnostykę; najpierw zachowaj cały stan użytkownika. Awaria safe mode ani niejasny doctor nie dowodzą konieczności usuwania danych. Zatrzymaj sesje Claude i innych zapisujących przed spójną kopią. Zachowaj to samo konto Unix, HOME, magazyn poświadczeń systemu i konto Anthropic; nie rotuj kluczy ani nie twórz nowej tożsamości.

Przykład kopii dotyczy Linuksa z GNU tar. W macOS lub Windows użyj narzędzia zachowującego ACL, rozszerzone atrybuty, dowiązania i metadane tej platformy oraz sprawdź odtworzenie; nie zakładaj działania flag GNU. Archiwum zawiera poświadczenia i transkrypcje: trzymaj je prywatnie poza repozytoriami.

# Run as the same user who owns the Claude state, after stopping writers.
set -eu
umask 077
backup_dir=$(mktemp -d "$HOME/.claude-recovery-XXXXXXXX")
set --
if [ -e "$HOME/.claude" ] || [ -L "$HOME/.claude" ]; then
  set -- "$@" .claude
fi
if [ -e "$HOME/.claude.json" ] || [ -L "$HOME/.claude.json" ]; then
  set -- "$@" .claude.json
fi
[ "$#" -gt 0 ] || exit 1
tar --acls --xattrs --numeric-owner -cpf "$backup_dir/claude-state.tar" -C "$HOME" "$@"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$HOME"
sha256sum "$backup_dir/claude-state.tar" > "$backup_dir/claude-state.sha256"
(cd "$backup_dir" && sha256sum -c claude-state.sha256)
mkdir "$backup_dir/restore-check"
tar --acls --xattrs -xpf "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
printf 'Verified recovery directory: %s\n' "$backup_dir"

Wszystkie polecenia muszą się udać. Kopia obejmuje całe istniejące .claude, również ignorowane i nieśledzone sesje i wtyczki, oraz .claude.json, nie tylko ustawienia Git. Jeśli ścieżka jest dowiązaniem lub dane leżą w innej skonfigurowanej lokalizacji, zatrzymaj się i uwzględnij rzeczywisty cel w tej samej sprawdzonej kopii; samo dowiązanie nie kopiuje celu. Archiwum nie obejmuje macOS Keychain ani innego zewnętrznego magazynu poświadczeń, więc zachowaj jego tożsamości.

Jeśli diagnostyka wskazuje konkretnie starszą instalację lokalną jako konflikt, przenieś tylko ją do prywatnego katalogu odzyskiwania zamiast usuwać konfigurację i sesje:

# Use the verified backup_dir from the previous block.
if [ -d "$HOME/.claude/local" ]; then
  mv "$HOME/.claude/local" "$backup_dir/legacy-local"
fi

Odinstaluj npm tylko, jeśli diagnostyka wskazała go jako konflikt i zamierzasz zachować wersję natywną. Następnie użyj udokumentowanego instalatora bez usuwania .claude lub .claude.json:

curl -fsSL https://claude.ai/install.sh | bash
claude --version
claude doctor

W Windows polecenie instalacji natywnej pozostaje następujące:

irm https://claude.ai/install.ps1 | iex

Odtwarzaj osobno. Znów zatrzymaj zapisujących. Sprawdź sumę archiwum, wypakuj do pustego katalogu jak wyżej i pomyślnie porównaj przed użyciem. Przed przywróceniem przeniesionej instalacji sprawdź nieistnienie $HOME/.claude/local, potem przenieś $backup_dir/legacy-local do tej dokładnej ścieżki. Ustawienie odtwarzaj ze sprawdzonego wypakowania tylko po zachowaniu obecnego zamiennika; nie nakładaj całego drzewa bez kontroli. Sesje, MCP i pierwotna tożsamość pozostają zachowane. Sam Git nie obejmuje ignorowanych transkrypcji, poświadczeń ani metadanych systemu plików.

Czego NIE robić, gdy Claude Code nie działa?

Najważniejsze informacje

W opisanych przypadkach pomocy technicznej pojawiło się sześć antywzorców: zmiana kluczy przed diagnozą, pełny reset jako pierwszy krok, panika z powodu błędu UI hooka, podnoszenie kodu zakończenia hooka przed naprawą logiki, edytowanie CLAUDE.md bez zabezpieczenia w postaci safe mode oraz wiara, że „Claude sam naprawi MCP”. Każdy z nich kosztuje godziny i żaden nie jest konieczny.

Nie zmieniaj kluczy przed diagnozą

W 90% przypadków problem „autoryzacja nie działa” wynika z przechwycenia subskrypcji przez ANTHROPIC_API_KEY, błędu UI hooka lub awarii MCP. Rotacja kluczy niczego z tego nie naprawi, a spowoduje kolejną godzinę przestoju: trzeba unieważnić stary klucz, wydać nowy, ponownie podpisać CI i zaktualizować zmienne w środowisku produkcyjnym. Najpierw uruchom claude --safe-mode. Działa? Problem tkwi w modyfikacjach i nie ma potrzeby ruszać kluczy.

Nie wykonuj pełnego resetu przed użyciem safe mode

Safe mode zapewnia odizolowane środowisko w 1 sekundę. Usunięcie .claude może zniszczyć sesje, konfigurację MCP i inny nieśledzony stan. Najpierw diagnozuj i sprawdź prywatną kopię, a odwracalne przeniesienie stosuj wyłącznie do wskazanej warstwy instalacji lub konfiguracji.

Nie panikuj z powodu błędu UI hooka

Zanim cokolwiek naprawisz, sprawdź, czy hook rzeczywiście się uruchomił (na przykład przez zapis do stderr lub jawny print), zamiast polegać na wskaźniku wizualnym.

Nie podnoś kodu zakończenia hooka przed naprawą logiki

Gdy hook, który ma blokować, tego nie robi, kusi, by ustawić exit 2 i uznać sprawę za zamkniętą. To skuteczna łatka, ale ukrywa inny problem: jeśli blokada nie działała przez miesiąc, wszystko, czego hook miał zakazać, zdążyło przejść. Najpierw przejrzyj dziennik git i dokładnie ustal, co się przedostało. Dopiero potem dodaj blokadę. W przeciwnym razie zablokowanie działania teraz nie cofnie tego, co stało się wcześniej.

Nie edytuj produkcyjnego CLAUDE.md bez zabezpieczenia w postaci safe mode

W opisanym przypadku: edytujesz CLAUDE.md, Claude zaczyna zachowywać się dziwnie, uruchamiasz git diff i widzisz, że tego wieczoru ktoś dodał do repozytorium również serwer MCP i hook. Obwiniasz swoją zmianę, cofasz ją, a Claude nadal zachowuje się dziwnie. Zasada: przed git revert uruchom claude --safe-mode. Jeśli problem utrzymuje się w safe mode, Twoja zmiana nie miała z nim nic wspólnego — nie trzeba jej cofać.

Nie wierz, że „Claude sam naprawi MCP”

Typowa sytuacja: prosisz Claude, by „dodał określone narzędzie do serwera MCP”, Claude przepisuje działającą konfigurację, wszystko przestaje działać, a następnie przez kilka tur diagnozuje szkody, które sam spowodował — zużywając przy tym limit sesji. Gdy MCP nie działa, uzyskaj konfigurację ręcznie; nie zostawiaj tego agentowi. Część jego zestawu narzędzi również opiera się na MCP, a zepsute MCP oznacza zepsutego diagnostę.

Co zrobić po naprawie?

Najważniejsze informacje

Po przywróceniu Claude Code dodaj zabezpieczenia, aby problem się nie powtórzył. Co najmniej: ustaw disableBypassPermissionsMode: "disable" w ustawieniach użytkownika, dodaj hooki blokujące .env i git push --force oraz skonfiguruj sandbox dla długich autonomicznych uruchomień. Poradnik dotyczący zapobiegania problemom jest uzupełnieniem tego materiału.

Po przeanalizowaniu incydentu nie wracaj od razu do pracy. Najpierw dodaj zabezpieczenia, aby sytuacja się nie powtórzyła. Budowanie second brain (folderu business/ ze strukturą projektu) oraz CLAUDE.md może zająć wiele godzin, a ich ręczne przywracanie jest trudne — to dobry powód, by się zabezpieczyć. Minimalny zestaw:

  1. ~/.claude/settings.json z permissions.disableBypassPermissionsMode: "disable" — architekcyjny zakaz trybu bypass, dzięki któremu przypadkowo uruchomione --dangerously-skip-permissions po prostu nie zadziała.
  2. Hooki dla Read(./env*), Bash(git push --force), Write(./node_modules/**) — działania, które muszą być blokowane regułami, a nie samymi życzeniami.
  3. Konfiguracja sandboxa dla długich autonomicznych uruchomień (/loop, /schedule).
  4. /compact z własnymi regułami określającymi, co usuwać z kontekstu, żeby Claude się nie wyczerpał.

Pełny schemat czterowarstwowej ochrony opisano w poradniku „Jak skonfigurować Claude Code, aby nie zepsuł projektu przez noc”. Jeden poradnik dotyczy zapobiegania problemom przed uruchomieniem /loop, drugi — odzyskiwania po tym, jak /loop już coś zepsuł. To logiczna para.

Źródła

Praktyczne materiały: dokumentacja Ailoot.

Więcej materiałów i narzędzi: Ailoot.

Więcej szczegółów

Pytania i odpowiedzi

Czy awaria safe mode oznacza konieczność usunięcia ~/.claude?

Nie. Nadal trzeba zbadać instalację, autoryzację, sieć i infrastrukturę. Niejasny raport doctor nie dowodzi potrzeby usuwania ustawień lub sesji; napraw tylko zdiagnozowaną warstwę.

Co zachować przed naprawą instalacji?

Zatrzymaj zapisujących i skopiuj pełny stan Claude, w tym sesje, wtyczki/MCP, pliki ignorowane i metadane. Przed dalszą pracą sprawdź sumę i wypakowanie, zachowaj konto i magazyn poświadczeń oraz odtwarzaj tylko zdiagnozowaną warstwę bez ślepego nadpisywania.

Wszystkie artykuły