Как починить Claude Code в 2026: safe mode, /cd и восстановление за 5 шагов

Опубликовано 17.06.202616 мин чтенияСредний
Рассыпающийся голографический код ловят три светящиеся сети, предотвращая крах системы.
Что узнаешь
  • Как за 1 секунду понять, виноват ли твой CLAUDE.md, hook, MCP или skill через `--safe-mode`
  • Как переключить рабочую папку командой `/cd` без потери контекста и prompt cache
  • Как настроить цепочку fallback-моделей до 3 штук, чтобы Claude не падал на 529 Overloaded
  • Что чинить в каждом слое (CLAUDE.md, hooks, MCP, skills) и в каком порядке
  • Когда переустанавливать Claude Code и почему это последний шаг, не первый
Применить за 15 мин
Сэкономит 60 ч
Средний
5просмотров

Каждый день в Telegram-канале - что нового в вайб-кодинге: инструменты, примеры, ошибки. Подпишись, чтобы быть в курсе.

Что меняется в Claude Code в июне 2026?

Раньше когда Claude Code начинал странно себя вести - бесконечный спиннер, краш на старте, агент игнорирует правила из CLAUDE.md, hook молча не срабатывает - выход был один: вручную комментировать секции .claude/settings.json, отключать MCP-серверы по одному, в крайнем случае сносить ~/.claude и ставить заново. У меня в проекте Piratix я как-то снёс ~/.claude и потерял настройку MCP-серверов, которую полтора часа собирал. На второй раз я уже знал, что виновата была одна строка в CLAUDE.md, которую можно было найти за 10 секунд - но я об этом узнал только когда восстановил всё заново.

В июне 2026 Anthropic выкатил три механизма, которые меняют этот сценарий. Кратко - что и когда:

ВерсияДатаЧто приехало
2.1.1666 июня 2026Настройка fallbackModel + флаг --fallback-model для интерактивных сессий
2.1.1698 июня 2026Флаг --safe-mode и env-переменная CLAUDE_CODE_SAFE_MODE, команда /cd
2.1.17612 июня 2026Фикс: /cd и worktree-переключение перестали показывать старую git-ветку

Дальше я разбираю каждый механизм по шагам и показываю, в каком порядке их применять, когда сессия Claude Code пошла не туда.

Что ломает Claude Code чаще всего?

CLAUDE.md я первым проходом собирал на 80 строк - и месяц это работало. На второй месяц заметил, что раз в неделю Claude нарушал каждое из моих правил: трогал .env, делал git push --force, лез в node_modules. Не злонамеренно - просто забывал. Один раз снёс мой .gitignore, и я не сразу понял, что произошло. Подробнее этот сценарий разобран в гайде про CLAUDE.md.

Когда CLAUDE.md разрастается до 400+ строк, он начинает молча гадить: занимает значительную часть контекстного окна на старте сессии и размывает важные инструкции среди второстепенных. При этом Claude всё ещё формально читает файл, поэтому со стороны кажется, что «правила есть, а не работают» - типичный признак раздутого контракта.

Hooks - второй частый источник. У Claude Code hooks есть тонкость, которую Anthropic не выделяет жирным:

Exit code 1 - это ошибка. В хуках Claude Code она не блокирующая.

- Thinking Through Code, https://thinkingthroughcode.medium.com/the-silent-failure-mode-in-claude-code-hook-every-dev-should-know-about-0466f139c19f

То есть sys.exit(1) в Python-хуке (или любой Unix-конвенциональный «упал с ошибкой») не остановит Claude. Блокирующий код - только 2. Я сам ловил это: думал, что hook «жёстко запрещает», а на деле он логировал жалобу и пропускал действие.

MCP-серверы - третий слой, и ломаются тоже по-своему. В GitHub-issue #28211 от 24 февраля 2026 описан конкретный сценарий:

Claude Desktop v1.1.4088 крашится на запуске когда в claude_desktop_config.json настроены 2 и более MCP-сервера.

- GitHub Issue #28211, https://github.com/anthropics/claude-code/issues/28211

Этот баг был в Desktop, но CLI-версии тоже ловят похожие регрессии - в issue #1611 пользователь жалуется, что MCP-серверы не подключаются на macOS, при этом тот же конфиг работает в Claude Desktop. Симптом снаружи у всех этих случаев одинаковый: MCP-команды доступны, но возвращают failed без traceback. Подробнее про настройку MCP и как добавить серверы через claude mcp add - в отдельном гайде.

Четвёртый источник - тройная иерархия settings.json. У тебя есть ~/.claude/settings.json (user-уровень), .claude/settings.json в корне проекта (project), .claude/settings.local.json (local) и, опционально, managed-настройки от корпоративного админа. Они складываются по правилам приоритета. Когда кто-то добавляет MCP-сервер на project-уровне, а у тебя в user-уровне аналогичная запись с другим вариантом запуска - получается тихий конфликт, который выглядит как «Claude Code сломался».

Как работает --safe-mode и что в нём отключается?

Исходная формулировка Anthropic из changelog v2.1.169 звучит так:

Добавлен флаг --safe-modeCLAUDE_CODE_SAFE_MODE) для запуска Claude Code с отключёнными кастомизациями (CLAUDE.md, плагины, skills, hooks, MCP-серверы) для диагностики.

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

В документации по model-config Anthropic уточняет:

Чтобы проверить, виноваты ли кастомизации, запусти сессию через claude --safe-mode, который отключает CLAUDE.md, skills, MCP-серверы и hooks. Git-статус и имена директорий не считаются кастомизациями и остаются доступны.

- Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config

Это диагностический инструмент, а не «чистая среда». Я хожу в safe mode когда нужно ответить на один вопрос: проблема в коробочном поведении Claude Code или в моих надстройках. Это часть контекст-инжиниринга - управления тем, что Claude видит и не видит в каждый момент. Если в safe mode всё работает - дальше я знаю, что нужно бинарным поиском перебирать слои. Если не работает - проблема в самой установке, в авторизации, в сети, в инфраструктуре, и тогда уже имеет смысл смотреть claude doctor и логи.

Что отключается в safe mode (официальный список Anthropic - 5 основных слоёв):

  • CLAUDE.md на всех уровнях (user / project)
  • Плагины
  • Skills
  • Hooks
  • MCP-серверы

Сторонние разборы фичи (например, Digital Applied) перечисляют ещё пользовательские команды, subagents, output styles, workflows, themes и keybindings - но это эмпирическое наблюдение, не часть changelog.

Что остаётся работать:

  • Авторизация (твоя OAuth-сессия или API-ключ)
  • Выбор модели (--model sonnet, --model opus)
  • Встроенные tools (Read, Write, Bash, Grep и так далее)
  • Permissions
  • Git-статус
  • Имена директорий

Важная деталь: safe mode не отключает managed/policy settings от корпоративного админа. Если ты работаешь в команде, где Bedrock GovCloud или MDM-конфиг задаёт availableModels, эти ограничения сохранятся - safe mode выключает только твои кастомизации, не корпоративные политики.

Как изолировать слой и найти виновника за 60 секунд?

Сценарий, который я отрабатываю когда Claude Code «перестал слушаться». Минимальная версия для всех команд ниже - Claude Code v2.1.169. Если у тебя старее - сначала обнови (npm update -g @anthropic-ai/claude-code или нативный installer Anthropic).

  1. Открой ту же папку, в которой было плохо.
  2. Запусти claude --safe-mode.
  3. Если стартует чисто - проверь свой исходный запрос. Сработал? Значит, виноват один из слоёв. Переходи к пункту 4.
  4. Если в safe mode тоже плохо - не трогай конфиги. Сначала claude doctor, посмотри на auth, версию, конфликтующие установки.

Когда safe mode стартанул чисто, дальше я включаю слои по одному, начиная с самого вероятного виновника. Порядок по моему опыту:

  1. CLAUDE.md. Запусти claude без safe-mode, но временно переименуй файл: mv CLAUDE.md CLAUDE.md.bak. Если работает - дело в нём. Дальше можно делать бинарный поиск: оставлять половину строк, проверять.
  2. Hooks. Открой .claude/settings.json и в секции hooks временно поставь []. Перезапусти claude. Работает? Значит, виноват один из хуков. Включай по одному.
  3. MCP-серверы. Аналогично: в ~/.claude.json или .claude/settings.json секция mcpServers -> временно пустой объект, перезапуск, проверка.
  4. Skills. Перенеси .claude/skills/ во временную папку. Запуск, проверка.

Что считать «временным переименованием»: я никогда не удаляю файлы при диагностике. mv или git stash дают возможность вернуть всё одной командой, если виноват оказался не этот слой.

Практикум по вайб-кодингу
+Твой второй мозг
3 вечера - стек, метод, первый проект
Старт 23–25 июня  ·  2 000 ₽
Записаться →

Как переключить рабочую папку через /cd без потери контекста?

Долго это была одна из самых востребованных фич. В январе 2026 пользователь Zycroft открыл issue #19903 с прямой формулировкой проблемы:

Сейчас рабочая папка Claude Code (workspace.current_dir) задаётся при старте сессии и не может быть изменена в процессе.

- GitHub Issue #19903, https://github.com/anthropics/claude-code/issues/19903

Anthropic тогда закрыл issue как «not planned», но через пять месяцев фича всё-таки приехала. В changelog v2.1.169 от 8 июня:

Добавлена команда /cd для переключения сессии в новую рабочую папку без сброса prompt cache в середине сессии.

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

Зачем это нужно при починке. Допустим, ты в папке проекта ~/work/myapp, и Claude Code ведёт себя странно. Раньше единственный способ проверить «а вообще он рабочий?» - закрыть сессию, перейти в другую папку, запустить заново. Терялся контекст, history, прогретый prompt cache. Сейчас:

bash
# Прямо в той же сессии:
/cd ~/sandbox/test

Claude переключается в новую папку, дочитывает её CLAUDE.md (если есть) как сообщение, а не заменой system prompt - то есть кеш сохраняется. Если в ~/sandbox/test всё работает, понятно, что проблема была в конфиге ~/work/myapp.

12 июня в v2.1.176 закрыли одну неприятную регрессию - /cd показывал старую git-ветку до полного перезапуска. Если у тебя версия младше, либо обнови, либо просто игнорируй git status в первые несколько сообщений после переключения - он догонит.

Как настроить fallback-модели на случай 529?

Сценарий, который у меня случается раз в неделю: я запускаю долгую задачу на Opus в проекте smyslokod.ru (тот, на котором этот гайд написан), через 10 минут API возвращает 529 Overloaded, сессия падает. Раньше приходилось либо ждать, либо вручную переключаться на Sonnet через --model sonnet и терять весь прогретый контекст. На большом business/ со связкой второго мозга это стоит мне минут двадцати работы. Сейчас есть нормальный механизм.

Точная цитата из официальной документации:

Когда основная модель перегружена, недоступна или возвращает другую non-retryable серверную ошибку, Claude Code может переключиться на fallback-модель вместо падения запроса. Ошибки авторизации, биллинга, rate-limit, размера запроса и транспорта никогда не триггерят переключение - они идут через обычные retry и обработку ошибок.

- Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config

И отдельно про устройство цепочки:

Настрой одну или несколько fallback-моделей, и Claude Code пробует их по порядку, показывая уведомление при переключении. Переключение действует только на текущий ход - следующее сообщение снова попробует основную модель. Цепочки ограничены тремя моделями после дедупликации, дополнительные записи игнорируются.

- Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config

Два способа настройки. Через CLI:

bash
claude --fallback-model sonnet,haiku

Через ~/.claude/settings.json:

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

Отдельная тонкость про rate limits. Anthropic специально не пускает 429-ошибку через цепочку - чтобы ты не обходил лимит запросов переключением на следующую модель. Fallback работает только когда основная модель перегружена, недоступна или возвращает non-retryable серверную ошибку (например, 529 Overloaded). Для рейтлимита есть обычная retry-логика и backoff.

И ещё одна тонкость - 12 июня в v2.1.174 закрыли регрессию: compaction раньше не уважал --fallback-model. Если у тебя длинная сессия и она компактуется на overloaded, до этого фикса fallback-модель не вызывалась. Если работаешь с длинными сессиями (/compact, /loop на ночь) - обновись хотя бы до v2.1.174.

Что чинить когда виноват CLAUDE.md, hook, MCP или skill?

Конкретные стратегии для каждого слоя.

Если виноват CLAUDE.md

Открой файл и посмотри размер. По моему опыту - в активном CLAUDE.md держи не больше 200 строк, остальное выноси в маршрутизаторы и под-документы рядом с проектом (полная схема второго мозга - в гайде про второй мозг). Если у тебя 400+ строк - почти гарантировано виноват он. Шаги:

  1. Сделай бэкап: cp CLAUDE.md CLAUDE.md.full.
  2. Откати на короткий рабочий шаблон. Готовый - в гайде «Как настроить CLAUDE.md».
  3. Перезапусти Claude Code. Проверь.
  4. Если работает - возвращай правила маленькими блоками по 10-20 строк, после каждого блока проверяй.
  5. Найди блок, который ломает поведение. Перепиши его как hook с правильным exit-кодом (про exit-коды хуков - в следующем подразделе этого H2).

Если виноват hook

Главный вопрос - правильный ли exit-код. У хуков в Claude Code:

  • Exit 0 - всё ок, действие пропускается.
  • Exit 1 - ошибка, но не блокирующая. Claude продолжит как ни в чём не бывало.
  • Exit 2 - блокирующая ошибка. Только она реально останавливает действие.

Если ты писал sys.exit(1) или exit 1 в shell-хуке, думая что блокируешь - такой код в Claude Code работает как warning-лог, без остановки действия. Поменяй на 2. Подробно про хуки и как настроить их без этой ловушки - в отдельном гайде.

Второй частый случай - hook возвращает невалидный JSON в stdout. Claude Code парсит ответ хука как JSON, и если там мусор (лог, прогресс-маркер, эмодзи) - hook считается упавшим, действие пропускается. Правило: stdout - только JSON, всё остальное в stderr.

Третий - hook читает что-то из ~/.claude/, которое safe mode скрыл. Это нормальный сценарий, и его лечат не патчем хука, а проверкой os.environ.get('CLAUDE_CODE_SAFE_MODE') в начале и выходом с 0.

Если виноват MCP-сервер

Симптомы: MCP-команды доступны, но возвращают failed без понятного traceback. Шаги:

  1. Запусти claude mcp list - какие серверы определены.
  2. По одному выключи серверы в ~/.claude.json: переименуй ключ claude-server-A в _claude-server-A (это деактивирует, не удаляя).
  3. Перезапусти claude. Проверь, какие вызовы работают.
  4. Когда нашёл виноватый сервер - смотри его лог: claude mcp logs <name>.
  5. Если сервер чужой (@modelcontextprotocol/server-postgres и подобные) - проверь, что у него есть свежий релиз. MCP-экосистема пока в шторме, серверы регулярно ломаются с обновлениями Claude Code.

Известная регрессия - issue #28211 (24 февраля 2026): Claude Desktop падал на старте при 2+ MCP-серверов. В CLI этот баг закрыт, но похожие повторяются - если ты словил «падает на старте, и только с двумя MCP» - сравни поведение в safe mode без MCP.

Если виноват skill

Skill - это SKILL.md + код в .claude/skills/<name>/. Симптомы: Claude игнорирует skill, или применяет не вовремя, или применяет, но даёт мусор. Шаги:

  1. Открой SKILL.md. Проверь description - он должен быть на 1-2 предложения, конкретно описывать когда применять. Если там «универсальный помощник для всего» - Claude не понимает, когда вызывать.
  2. Проверь противоречия с CLAUDE.md. Если в CLAUDE.md написано «всегда пиши тесты», а в skill description есть «применять для быстрого прототипа без тестов» - конфликт.
  3. Если skill использует внешние команды (npm, python, git) - проверь, что в systemwide PATH они доступны. У skill своя минимальная среда.

Что делать если safe mode не помог: полный сброс за 5 минут

Полный сброс - финальный шаг, который запускают только когда claude doctor и safe mode не дали ответа. Он стоит времени: 5-15 минут плюс новая авторизация плюс потеря всех сессий. Безопасный порядок:

  1. claude doctor - автодиагностика. Anthropic пишет в документации:

Если claude --version работает, но что-то ещё идёт не так, запусти claude doctor для автоматического диагностического отчёта.

- Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install
  1. Проверь конфликтующие установки. У многих стоит и npm-глобальная версия, и нативный installer одновременно:

Несколько установок Claude Code могут привести к несовпадению версий или неожиданному поведению.

- Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install
  1. Проверь, не перехватывает ли ANTHROPIC_API_KEY твою OAuth-сессию. Это частая причина «ничего не работает, ключ протух»:

Когда ANTHROPIC_API_KEY установлена и ты её подтвердил, Claude Code использует этот ключ вместо OAuth-учёток твоей подписки.

- Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install

Решение: unset ANTHROPIC_API_KEY в текущей сессии шелла или удалить из ~/.zshrc / ~/.bashrc.

  1. Если ничего из выше не помогло - полный сброс:
bash
# 1. Снести legacy local-инсталляцию (если была)
rm -rf ~/.claude/local

# 2. Удалить npm-инсталляцию
npm uninstall -g @anthropic-ai/claude-code

# 3. Снести конфиг и сессии
rm ~/.claude.json
rm -rf ~/.claude

# 4. Поставить заново через нативный installer
curl -fsSL https://claude.ai/install.sh | bash

На Windows последний шаг другой:

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

После этого - заново авторизоваться (claude -> вход), восстановить CLAUDE.md, settings.json, mcpServers руками из бэкапов. Поэтому я никогда не делаю полный сброс до того, как у меня есть актуальный git-снимок конфигов.

Чего НЕ делать когда Claude Code сломан?

Не меняй ключи до диагностики

«Авторизация не работает» в 90% случаев - это либо ANTHROPIC_API_KEY перехватил подписку, либо UI-баг хука, либо упавший MCP. Ротация ключей не починит ничего из этого, но создаст простой ещё на час: нужно отозвать старый, выпустить новый, переподписать им CI, обновить переменные на проде. Сначала claude --safe-mode. Работает? Значит, дело в надстройках, ключи трогать не надо.

Не делай полный сброс до safe mode

Safe mode даёт изолированную среду за 1 секунду. Полный сброс (rm -rf ~/.claude + переустановка) - это 5-15 минут плюс новая авторизация плюс потеря всех сессий. Делать его сразу - значит платить часом времени за минуту экономии на проверке кастомизаций.

Не реагируй паникой на UI-ошибку в хуке

В issue #21643 от 29 января 2026 описан UI-баг: статус SessionStart:startup hook error показывается даже когда hook отработал с exit 0. Прежде чем чинить - проверь сам факт работы хука (через лог в stderr или явный print), а не визуальный индикатор.

Не повышай exit-код хука до фикса логики

Когда твой блокирующий hook не блокирует, очень хочется поставить exit 2 и закрыть тему. Это рабочий патч, но он маскирует другую проблему: если до этого блок не работал месяц - всё, что hook должен был запрещать, прошло. Сначала пройди по git-логу и узнай, что именно проскочило. Потом ставь блок. Иначе закрытый блок не отменяет того, что произошло до него.

Не правь production CLAUDE.md без safe-mode-страховки

Я ловил такое: вносишь правку в CLAUDE.md, Claude начинает себя странно вести, ты лезешь git diff - и видишь, что в репо параллельно вечером кто-то добавил ещё MCP-сервер и hook. Винишь свою правку, откатываешь, а Claude всё равно ведёт себя странно. Правило: перед git revert запусти claude --safe-mode. Если в safe mode проблема осталась - твоя правка ни при чём, откат не нужен.

Не верь «Claude сам чинит свой MCP»

В issue #52015 описан конкретный сценарий: пользователь просит Claude «добавить такую-то tool в MCP-сервер», Claude переписывает работающий конфиг, всё ломается, дальше Claude несколько ходов пытается отладить свой же ущерб - и в процессе сжигает квоту сессии. Когда сломан MCP - доставай конфиг руками, не оставляй на агенте. Часть его tool-arsenal'а тоже на MCP, и сломанный MCP - это сломанный диагност.

Куда возвращаться когда починил?

Когда я разбираюсь в инциденте до конца, я не возвращаюсь к работе сразу. Сначала ставлю превенцию, чтобы инцидент не повторился. На второй мозг (папка business/ со структурой проекта) и CLAUDE.md теряешь часы, восстановить руками сложно - и это весомый аргумент. Минимум-набор:

  1. ~/.claude/settings.json с permissions.disableBypassPermissionsMode: "disable" - архитектурный запрет на bypass-режим. Чтобы случайно запущенный --dangerously-skip-permissions просто не сработал.
  2. Hooks для Read(./env*), Bash(git push --force), Write(./node_modules/**) - то, что должно ловиться на уровне закона, не пожелания.
  3. Sandbox-конфиг для долгих автономных запусков (/loop, /schedule).
  4. /compact со своими правилами что выбрасывать из контекста, чтобы Claude не съел самого себя.

Полная схема четырёхслойной защиты - в гайде «Как настроить Claude Code, чтобы он не сломал твой проект ночью». Один гайд закрывает превенцию до запуска /loop, другой - восстановление, когда /loop уже что-то сломал. Логичная пара.

Источники

Полная схема по вайб-кодингу за вечер: ИИ-клон + Второй мозг + контекст-инжиниринг. 3 эфира, 2000 ₽. Записи остаются у тебя.

Практикум по вайб-кодингу
+Твой второй мозг
3 вечера - стек, метод, первый проект
Старт 23–25 июня  ·  2 000 ₽
Записаться →

Новые материалы - дайджестом, без спама

Гайды выходят регулярно. Подпишись, чтобы не пропускать: пришлю подборку в Telegram или на email. Раз в неделю или каждый день - выбираешь сам.

Была инструкция полезна?
Артемий Миллер
Автор
Артемий Миллер
Предприниматель и вайб-кодер

Артемий Миллер - предприниматель и вайб-кодер. Бывший программист, собирает продукты исключительно вместе с ИИ-агентами, без найма разработчиков.