401 token expired / Settings Error / rm -rf / claude-code-router
Перед сбросом убедись что это действительно поломка авторизации, а не VPN или истёкший токен Z.AI.
| Симптом | Документ | Действие |
|---|---|---|
401 token expired or invalidIP error 401Authentication failed: invalid tokenClaude запускается, но любой запрос → красная ошибка |
Этот документ | Разделы 2 (Mac) или 3 (Win) |
ECONNREFUSED / network error |
Не этот | VPN отвалился — проверь страну (США/Канада/EU) |
command not found: claude |
Не этот | Нода / npm сломаны — смотри troubleshooting.md |
403 Forbidden |
Не этот | IP заблокирован у Z.AI — переключи страну в VPN |
| Settings Error / Invalid or malformed JSON при старте Claude | Раздел 6 | Прокрути до слайда «Settings Error» |
Уже снёс через rm -rf / Remove-Item |
Раздел 7 | Прокрути до слайда «Полный сброс с нуля» |
Видел упоминания claude-code-router (musistudio) |
Раздел 8 | Прокрути до слайда «Что НЕ ставить» |
Документ применяется только к установкам через Z.AI (api.z.ai/api/anthropic). Для оригинального Anthropic API — claude /login.
Все команды копируй в Терминал (Applications → Utilities → Terminal или Cmd+Space → «Терминал»). Если терминал спросит пароль — это пароль от Mac, набирай не глядя (точки не отображаются), Enter.
pkill -f claude 2>/dev/null; sleep 1
Тихо закрывает все процессы claude. Если процесса нет — никакого вывода, это норма.
mkdir -p ~/.claude-backup && \ cp ~/.claude/settings.json ~/.claude-backup/settings.json.$(date +%Y%m%d-%H%M%S) 2>/dev/null; \ cp ~/.claude.json ~/.claude-backup/.claude.json.$(date +%Y%m%d-%H%M%S) 2>/dev/null; \ echo "Бэкап сделан в ~/.claude-backup/"
Бэкап сделан в ~/.claude-backup/
Бэкап создаёт копию с датой/временем — если что-то пойдёт не так, можно откатить. Смотри шаг ~/.claude-backup/.
Деструктивная команда. rm -f удаляет файл без корзины. Убедись что шаг 2.2 (бэкап) выполнен.
rm -f ~/.claude.json
mkdir -p ~/.claude && open -t ~/.claude/settings.json
~/.claude.json хранит OAuth-сессию. Memory-плагин мог его создать или модифицировать — Claude думает что есть валидная OAuth-сессия и игнорирует Z.AI ключ. Не путать с ~/.claude/settings.json (конфиг) и ~/.claude/ (папка со скиллами).
В TextEdit замени содержимое файла на:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "ТВОЙ_КЛЮЧ_Z.AI",
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"API_TIMEOUT_MS": "3000000"
}
}
ТВОЙ_КЛЮЧ_Z.AI — Z.AI ключ из чата курса. Если добавлял другие поля (model, permissions...) — сохрани их, дописав через запятую. Сохрани файл Cmd+S и закрой TextEdit.
python3 -c "import json; json.load(open('$HOME/.claude/settings.json')); print('OK — JSON валиден')"
OK — JSON валиден
cd ~ && claude
Должен запуститься без 401. Напиши: Привет — если в ответ пришёл нормальный текст, значит починилось.
Если проверка выдала ошибку (SyntaxError, Expecting) — в файле где-то лишняя запятая или кавычка. Открой ещё раз open -t ~/.claude/settings.json и проверь визуально.
Все команды копируй в PowerShell от администратора (правой кнопкой по иконке PowerShell → «Запуск от имени администратора»). Это важно: обычный PowerShell не сможет переписать переменные среды.
Get-Process | Where-Object { $_.ProcessName -like "*claude*" } | Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 1
Если процесса нет — никакой ошибки, это норма.
$backupDir = "$env:USERPROFILE\.claude-backup"
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
$ts = Get-Date -Format "yyyyMMdd-HHmmss"
if (Test-Path "$env:USERPROFILE\.claude\settings.json") {
Copy-Item "$env:USERPROFILE\.claude\settings.json" "$backupDir\settings.json.$ts"
}
if (Test-Path "$env:USERPROFILE\.claude.json") {
Copy-Item "$env:USERPROFILE\.claude.json" "$backupDir\.claude.json.$ts"
}
Write-Host "Бэкап в $backupDir"
Деструктивная команда. Remove-Item удаляет файл без корзины. Убедись что шаг 3.2 (бэкап) выполнен.
Remove-Item "$env:USERPROFILE\.claude.json" -ErrorAction SilentlyContinue
Write-Host "AUTH_TOKEN: $([System.Environment]::GetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN','User'))"
Write-Host "BASE_URL: $([System.Environment]::GetEnvironmentVariable('ANTHROPIC_BASE_URL','User'))"
Если обе строки пустые после AUTH_TOKEN: / BASE_URL: — переменные слетели. Поставь заново командой ниже.
[System.Environment]::SetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN', 'ТВОЙ_КЛЮЧ_Z.AI', 'User')
[System.Environment]::SetEnvironmentVariable('ANTHROPIC_BASE_URL', 'https://api.z.ai/api/anthropic', 'User')
[System.Environment]::SetEnvironmentVariable('API_TIMEOUT_MS', '3000000', 'User')
Write-Host "Готово. Перезапусти PowerShell."
Переменные среды подхватываются только новыми процессами. Закрой текущий PowerShell и открой свежий (тоже от администратора).
echo $env:ANTHROPIC_AUTH_TOKEN echo $env:ANTHROPIC_BASE_URL
Твой ключ и https://api.z.ai/api/anthropic
cd $env:USERPROFILE claude
Напиши «Привет» — если ответ нормальный, починилось.
Возможно, memory-плагин остался активным и переписывает settings.json при каждом запуске Claude. Проверь список плагинов:
ls ~/.claude/plugins/ 2>/dev/null
mkdir -p ~/.claude-disabled-plugins mv ~/.claude/plugins/memory-architect ~/.claude-disabled-plugins/ 2>/dev/null mv ~/.claude/plugins/memory-systems ~/.claude-disabled-plugins/ 2>/dev/null
Get-ChildItem "$env:USERPROFILE\.claude\plugins\" -ErrorAction SilentlyContinue
$d = "$env:USERPROFILE\.claude-disabled-plugins" New-Item -ItemType Directory -Force -Path $d | Out-Null Move-Item "$env:USERPROFILE\.claude\plugins\memory-architect" $d -ErrorAction SilentlyContinue Move-Item "$env:USERPROFILE\.claude\plugins\memory-systems" $d -ErrorAction SilentlyContinue
Повтори с шага 2.3 (Mac) или 3.3 (Win). Memory-плагины поставим обратно позже — когда добавим в курс инструкцию «сначала Z.AI, потом memory».
Если после восстановления Claude всё равно ругается — возможно, твой ключ Z.AI был временным и истёк. Напиши в Telegram-чат курса, организатор пришлёт новый.
Бэкап в ~/.claude-backup/ (Mac) или %USERPROFILE%\.claude-backup\ (Win). Если из старого settings.json нужно что-то выдернуть — открой бэкап-файл и скопируй нужное поле.
Применять когда при запуске claude ты видишь диалог: Settings Error / Invalid or malformed JSON с пунктами «Fix with Claude / Exit and fix manually / Continue without these settings».
Claude Code читает три файла настроек: ~/.claude/settings.json → ~/.claude/settings.local.json → ~/.claude.json. Если любой из них содержит битый JSON (лишняя запятая, незакрытая скобка) — Claude пропускает весь файл. Z.AI-блок не подгружается.
Деструктивные команды. Решения ниже содержат rm -f и Remove-Item — они удаляют settings.local.json без корзины. Шаг «Бэкап» внутри скриптов делает копию перед удалением — не пропускай его.
Вариант А: выбрать «Fix with Claude» — обычно срабатывает.
Вариант Б (надёжнее):
# 1. Exit and fix manually в диалоге # 2. Бэкап mkdir -p ~/.claude-backup cp ~/.claude/settings.local.json \ ~/.claude-backup/settings.local.json.$(date +%Y%m%d-%H%M%S) 2>/dev/null # 3. Удалить сломанный rm -f ~/.claude/settings.local.json # 4. Запустить claude
python3 -c "import json; json.load(open('$HOME/.claude/settings.json')); print('settings.json: OK')"
python3 -c "import json; json.load(open('$HOME/.claude/settings.local.json')); print('settings.local.json: OK')" 2>/dev/null || echo "settings.local.json: не существует или сломан"
# 1. Exit and fix manually в диалоге
# 2. Бэкап
$backupDir = "$env:USERPROFILE\.claude-backup"
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
$ts = Get-Date -Format "yyyyMMdd-HHmmss"
if (Test-Path "$env:USERPROFILE\.claude\settings.local.json") {
Copy-Item "$env:USERPROFILE\.claude\settings.local.json" "$backupDir\settings.local.json.$ts"
}
# 3. Удалить сломанный
Remove-Item "$env:USERPROFILE\.claude\settings.local.json" -ErrorAction SilentlyContinue
# 4. Запустить
claude
try { Get-Content "$env:USERPROFILE\.claude\settings.json" | ConvertFrom-Json | Out-Null; "settings.json: OK" } catch { "settings.json: СЛОМАН" }
try { Get-Content "$env:USERPROFILE\.claude\settings.local.json" | ConvertFrom-Json | Out-Null; "settings.local.json: OK" } catch { "settings.local.json: не существует или сломан" }
Применять когда уже снёс ~/.claude/settings.json + ~/.claude.json командой rm -rf (или похожей) и не помнишь что было — нужно собрать заново.
Деструктивные команды. Разделы ниже содержат rm -f и Remove-Item — они удаляют файлы без корзины. Убедись что на предыдущих слайдах бэкап был сделан, прежде чем идти дальше.
# 1. Закрыть claude
pkill -f claude 2>/dev/null; sleep 1
# 2. Удалить всё что осталось
rm -f ~/.claude/settings.json
rm -f ~/.claude/settings.local.json
rm -f ~/.claude.json
# 3. Создать минимальный settings.json
mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "СЮДА_КЛЮЧ_Z_AI",
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"API_TIMEOUT_MS": "3000000"
}
}
EOF
# 4. Открыть файл — заменить СЮДА_КЛЮЧ_Z_AI
open -t ~/.claude/settings.json
# Сохрани Cmd+S, закрой TextEdit
# 5. Проверить JSON
python3 -c "import json; json.load(open('$HOME/.claude/settings.json')); print('OK')"
# 6. Запустить
cd ~ && claude
# 1. Закрыть claude
Get-Process | Where-Object { $_.ProcessName -like "*claude*" } | Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 1
# 2. Удалить всё что осталось
Remove-Item "$env:USERPROFILE\.claude\settings.json" -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.claude\settings.local.json" -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.claude.json" -ErrorAction SilentlyContinue
# 3. Создать папку .claude если нет
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.claude" | Out-Null
# 4. Установить переменные среды Z.AI
[System.Environment]::SetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN', 'СЮДА_КЛЮЧ_Z_AI', 'User')
[System.Environment]::SetEnvironmentVariable('ANTHROPIC_BASE_URL', 'https://api.z.ai/api/anthropic', 'User')
[System.Environment]::SetEnvironmentVariable('API_TIMEOUT_MS', '3000000', 'User')
# 5. ЗАКРЫТЬ текущий PowerShell, открыть НОВЫЙ (от админа)
# 6. В новом: echo $env:ANTHROPIC_AUTH_TOKEN
# 7. Запустить: cd $env:USERPROFILE && claude
После полного сброса — не ставь сразу memory-плагины. Сначала прогони хотя бы одну задачу, убедись что всё ок. Только потом — по одному плагину, проверяя после каждого что 401 не появилось.
claude-code-router (musistudio) — не ставь, даже если в чате кто-то советует.
Установочный URL уже 404 на 2026-05-15 (raw.githubusercontent.com/musistudio/claude-code-router/main/scripts/install.sh не существует).
Делает то же что наш settings.json с блоком env, только сложнее — и конфликтует с уже сделанными настройками.
~/.claude/settings.json (Mac) или User Environment Variables (Win) — так как в macos-install.html / windows-install.html. Это поддерживаемый, проверенный путь.
Любые сторонние «улучшители» Claude Code. Если в каком-то чате/блоге говорят «поставь X чтобы было лучше» — сначала спроси у организатора в чате курса. Курс работает по одному поддерживаемому стеку — отклонения ломают совместимость пакетов и инструкций.
Если уже пытался поставить claude-code-router и теперь странности — пройди раздел 7. Полный сброс с нуля (предыдущий слайд).
3 правила, которые предотвращают 95% инцидентов с авторизацией Z.AI.
/plugin install ...) — после установки сразу проверь claude --version и попробуй любой запрос. Если упало — этот документ.
claude /login — это OAuth-логин в оригинальный Anthropic, который конфликтует с Z.AI. У нас всегда Z.AI, всегда через переменные среды / settings.json.
npm install -g @anthropic-ai/claude-code) — settings.json не трогается, но кэш OAuth (~/.claude.json) может перезаписаться. Если после апдейта 401 — этот документ.
Всё готово. Если этот документ не помог — напиши в Telegram-чат курса с описанием: что видишь на экране + скриншот ошибки.
TODO организатору: Если в чате курса рассылались точные команды восстановления, отличающиеся от этого документа — сверь и обнови. Документ собран на основе архитектуры Claude Code + Z.AI; разумный baseline, но не дословные команды из чата.
01-install/macos-install.html (шаг «Настройка Z.AI»), 01-install/windows-install.html (шаг «Переменные среды»)
logs/SUMMARY.md — «Проблемы которые возникли», строка про memory-плагины
logs/transcript-full.md — инцидент «401 token expired»
Создан: 2026-05-15 · Канон: UNIVERSAL/ (Приоритет 1) · VIBE JOBING