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

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

Source: https://ailoot.ai/blog/pl/claude-code-safe-mode-recovery/
Canonical: https://ailoot.ai/blog/pl/claude-code-safe-mode-recovery/
Language: pl
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-140
Revision: sha256-b95ab210bf5b77e42886f283964aeab22c418bccc6005669c621498beacc9707


Praktyczne materiały o pracy z agentami: [dokumentacja Ailoot](https://ailoot.ai/docs/).



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

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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ę”.

</div>

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:

| Wersja | Data | Nowość |
|----|----|----|
| **2.1.166** | 6 czerwca 2026 | Ustawienie `fallbackModel` i flaga `--fallback-model` dla sesji interaktywnych |
| **2.1.169** | 8 czerwca 2026 | Flaga `--safe-mode`, zmienna środowiskowa `CLAUDE_CODE_SAFE_MODE` oraz polecenie `/cd` |
| **2.1.176** | 12 czerwca 2026 | Poprawka: 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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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`.

</div>

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`](https://ailoot.ai/blog/pl/claude-md-template/).

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](https://ailoot.ai/blog/pl/mcp-servers-claude-code/).

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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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.

</div>

Oryginalny zapis Anthropic w changelogu v2.1.169 brzmi:

<figure>
<blockquote>
<p>Dodano flagę <code>--safe-mode</code> (oraz <code>CLAUDE_CODE_SAFE_MODE</code>), która uruchamia Claude Code z wyłączonymi modyfikacjami (<code>CLAUDE.md</code>, wtyczkami, skills, hookami, serwerami MCP) na potrzeby diagnostyki.</p>
</blockquote>
<figcaption>— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog</figcaption>
</figure>

Anthropic wyjaśnia w dokumentacji konfiguracji modeli:

<figure>
<blockquote>
<p>Aby sprawdzić, czy winne są modyfikacje, uruchom sesję poleceniem <code>claude --safe-mode</code>. Wyłącza ono <code>CLAUDE.md</code>, skills, serwery MCP i hooki. Stan Git i nazwy katalogów nie są uznawane za modyfikacje i pozostają dostępne.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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`.

</div>

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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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.

</div>

W changelogu v2.1.169 z 8 czerwca zapisano:

<figure>
<blockquote>
<p>Dodano polecenie `/cd`, które przełącza sesję do nowego folderu roboczego bez resetowania pamięci podręcznej promptu w trakcie sesji.</p>
</blockquote>
<figcaption>— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog</figcaption>
</figure>

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:

```bash
# 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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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.

</div>

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:

<figure>
<blockquote>
<p>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.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

Osobno opisano działanie łańcucha:

<figure>
<blockquote>
<p>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.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — konfiguracja modeli, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

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

```bash
claude --fallback-model sonnet,haiku
```

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

```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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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`.

</div>

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](https://ailoot.ai/blog/pl/claude-code-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”](https://ailoot.ai/blog/pl/claude-md-template/).
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](https://ailoot.ai/blog/pl/claude-code-hooks/).

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ą

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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ę.

</div>

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:

<figure>
<blockquote>
<p>Jeśli `claude --version` działa, ale coś innego nie działa prawidłowo, uruchom `claude doctor`, aby wygenerować automatyczny raport diagnostyczny.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

2.  **Sprawdź, czy nie ma konfliktujących instalacji.** Wiele osób ma jednocześnie zainstalowaną globalną wersję npm i wersję z natywnego instalatora:

<figure>
<blockquote>
<p>Wiele instalacji Claude Code może powodować niezgodność wersji lub nieoczekiwane zachowanie.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

3.  **Sprawdź, czy `ANTHROPIC_API_KEY` nie przechwytuje sesji OAuth.** To częsta przyczyna problemu „nic nie działa, klucz wygasł”:

<figure>
<blockquote>
<p>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.</p>
</blockquote>
<figcaption>— Dokumentacja Anthropic — rozwiązywanie problemów z instalacją, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

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

4. **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.

```bash
# 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:

```bash
# 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](https://code.claude.com/docs/en/setup) bez usuwania `.claude` lub `.claude.json`:

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

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

```powershell
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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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.

</div>

### 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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

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.

</div>

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”](https://ailoot.ai/blog/pl/claude-code-safe-overnight-setup/). Jeden poradnik dotyczy zapobiegania problemom przed uruchomieniem `/loop`, drugi — odzyskiwania po tym, jak `/loop` już coś zepsuł. To logiczna para.

<div class="section" role="doc-bibliography" aria-label="Sources">

### Źródła

- [Anthropic Claude Code Changelog](https://code.claude.com/docs/en/changelog) — oficjalny changelog opisujący v2.1.166 (`fallbackModel`), v2.1.169 (safe mode, /cd), v2.1.174 (poprawkę kompaktowania) i v2.1.176 (poprawkę gałęzi git w /cd).
- [Dokumentacja Anthropic — konfiguracja modeli](https://code.claude.com/docs/en/model-config) — sekcje „Fallback model chains”, „Check what triggered fallback” i „Setting your model”.
- [Dokumentacja Anthropic — rozwiązywanie problemów z instalacją i logowaniem](https://code.claude.com/docs/en/troubleshoot-install) — konfliktujące instalacje, `claude doctor`, przechwycenie przez `ANTHROPIC_API_KEY`.

</div>

Praktyczne materiały: [dokumentacja Ailoot](https://ailoot.ai/docs/).





Więcej materiałów i narzędzi: [Ailoot](https://ailoot.ai/).

## 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.


## Ailoot · Firma i jej portfel projektów

Ailoot opiera się na zgromadzonym doświadczeniu operacyjnym, szerokiej bazie klientów, stabilnej usłudze i stałej kontroli KPI.

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Ailoot wykorzystuje to doświadczenie operacyjne, zapewniając dostęp przez API do funkcji AI w produktach klientów, agentach, aplikacjach i automatyzacjach.
