Сообщение «Login expired · Please run /login» означает, что Claude Code попытался автоматически продлить сохранённый вход, получил отказ и удалил сохранённые учётные данные. В таком состоянии запросы не уходят в API и останавливаются на вашем компьютере. Помогает повторный вход через /login, а если просто повторять запрос, сообщение не изменится.
Login expired · Please run /login
В неинтерактивном режиме (claude -p) и в Agent SDK то же состояние отображается другим текстом (структурированный код ошибки — authentication_failed).
Failed to authenticate: OAuth session expired and could not be refreshed
Сначала посмотрите на точный текст сообщения
Сообщений с просьбой выполнить /login несколько
Продление сохранённого входа отклонено, учётные данные уже удалены
В этой сессии вообще нет пригодных учётных данных
API отклонил отправленный запрос
Приостановлен сам аккаунт, а не вход
Повторный вход не поможет
Содержание
- 1. Что именно истекло при Login expired
- 2. Чем это отличается от Not logged in и OAuth token expired
- 3. Как войти заново через /login
- 4. Как убедиться, что всё исправлено
- 5. Что проверить, если сообщение повторяется
- 6. Случаи из отчётов, причина которых не установлена
- 7. Какие сведения собрать, если ничего не помогает
- 8. Итоги
- FAQ
1. Что именно истекло при Login expired
Согласно официальному справочнику ошибок Claude Code, к этому сообщению приводит следующая цепочка. Истёк сохранённый на компьютере через /login вход в claude.ai или Claude Console (учётные данные OAuth).
Когда продление не удалось, сохранённых учётных данных уже нет
① Сохранённый вход
Вход в claude.ai или Claude Console, сохранённый через /login
② Попытка автоматического продления
Claude Code запрашивает продление с помощью сохранённого refresh-токена
③ Отказ и удаление
Служба авторизации OAuth отказывает, и Claude Code удаляет сохранённые учётные данные
④ Остановка до отправки
Дальнейшие запросы останавливаются на компьютере с сообщением Login expired. Создать новые учётные данные может только /login
Главное здесь — шаг ④. Claude Code уже удалил учётные данные, поэтому вообще не отправляет запрос в API. Именно поэтому сколько ни отправляй запрос повторно, сообщение будет тем же; в документации прямо сказано, что повтор без входа каждый раз приводит к тому же сообщению. Официальное описание ограничивается фактом «продление отклонено» и не раскрывает, по каким причинам. Зато там явно указано: если причина не в устаревшем входе, а в блокировке самого аккаунта, появится другое сообщение — «Your account is on hold».
Такое сообщение появилось в v2.1.206
По данным официального справочника ошибок, Claude Code до версии v2.1.206, не сумев продлить вход, продолжал отправлять запросы с учётными данными, оставшимися в окружении. В результате при любой выбранной модели появлялись «There's an issue with the selected model» или ошибка 401, а подсказки войти заново не было. В официальном CHANGELOG в записи v2.1.206 также сказано, что исправлена ошибка, из-за которой истёкший вход приводил к вводящей в заблуждение ошибке модели вместо подсказки выполнить /login (публикация в npm — 9 июля 2026 года, UTC). Если у вас старая версия и ошибка модели появляется для всех моделей, сначала попробуйте /login.
Способы аутентификации, при которых сообщения не бывает
В сессиях с API-ключом (ANTHROPIC_API_KEY), с долгосрочным токеном из claude setup-token (CLAUDE_CODE_OAUTH_TOKEN) или с аутентификацией через облачного провайдера вроде Amazon Bedrock сохранённый вход не используется, и это сообщение не появляется. Иначе говоря, если вы увидели Login expired, эта сессия использовала сохранённый вход как действующие учётные данные.
Предупреждение за 3 дня
Согласно официальной документации по аутентификации, начиная с v2.1.203 при запуске показывается следующее предупреждение, если до истечения сохранённого входа осталось меньше 3 дней (до v2.1.217 — за 5 дней). Предупреждение носит информационный характер: до истечения срока аутентификация работает.
Your login expires in 3 days · run /login to renew
Заранее обновлять вход особенно полезно для сессий, которые работают без присмотра. Если фоновая сессия в agent view или сессия Remote Control переживёт момент истечения входа, она остановится, как только учётные данные станут недействительными, и не продолжит работу, пока вы не войдёте снова.
2. Чем это отличается от Not logged in и OAuth token expired
Все эти сообщения в конце просят выполнить /login, но различаются тем, что произошло и дошёл ли запрос до API. Вот как их описывает официальный справочник ошибок.
| Сообщение | Что произошло | Отправка в API | Как исправить |
|---|---|---|---|
| Login expired · Please run /login | Продление сохранённого входа отклонено, учётные данные удалены | Не отправляется (остановка на компьютере) | /login |
| Not logged in · Please run /login | В этой сессии нет пригодных учётных данных | ― | /login или проверить, загружена ли нужная переменная окружения |
| OAuth token revoked · Please run /login / …401 OAuth token has expired… | API отклонил отправленный запрос (выход на всех устройствах, удаление администратором, сбой автоматического продления во время сессии) | Отправлен, получен 401 | /login. Если в той же сессии ошибка возвращается — /logout→/login |
| Please run /login · API Error: 401 Invalid authentication credentials | Формат учётных данных корректен, но их отклонил аккаунт или организация | Отправлен, получен 401 | Проверить через /status, какие учётные данные действуют, и затем решать |
| Your account is on hold… | Аккаунт приостановлен (до v2.1.235 показывалось как Login expired) | ― | Узнать подробности или подать апелляцию по ссылке в сообщении |
| Remote Control disconnected — Claude.ai login expired — … | Прервалось только подключение Remote Control, локальная сессия продолжает работать | ― | /login, а в зависимости от сообщения затем /remote-control |
Запомнить разницу просто: Not logged in — «учётных данных не было с самого начала», Login expired — «они были, но их не удалось продлить, и они удалены». При Not logged in бывает, что нужный вам ANTHROPIC_API_KEY просто не загружен в оболочке, из которой запущен Claude Code. Причины Not logged in и то, почему переменная окружения с API-ключом имеет приоритет над входом по подписке, разобраны в статье об ошибках аутентификации и входа в Claude Code (Not logged in / Invalid API key).
От OAuth token has expired сообщение отличается тем, до или после отправки в API оно возникает. В документации сказано: если после неудачного продления сохранённый вход уже удалён, вместо этого показывается Login expired. Похожее по названию Anthropic profile login expired появляется только при использовании профиля учётных данных Anthropic, выбранного через ANTHROPIC_PROFILE и подобные параметры, и не возникает в сессиях со входом через claude.ai.
3. Как войти заново через /login
Сам запрос, на котором появилось сообщение, до API не дошёл. Но если это случилось посреди хода, более ранние правки файлов и команды могли уже выполниться, и повторная отправка того же запроса рискует выполнить их дважды. Прежде чем отправлять запрос снова, проверьте, докуда дошла работа.
Выясните, у какого аккаунта истёк вход
Откройте /status в поле ввода. Согласно официальной документации, начиная с v2.1.210 в строке Login показывается Expired — log in again, а также организация и адрес почты, которые были сохранены в истёкшем входе. Эта строка появляется только тогда, когда действующими учётными данными является сохранённый вход. Если вы пользуетесь несколькими аккаунтами, запишите здесь, в какой из них нужно войти.
Выполните /login и войдите в тот же аккаунт
Откроется браузер: при подписке войдите в аккаунт claude.ai, при оплате через API — в аккаунт Claude Console. Если браузер не открылся, нажмите c, чтобы скопировать URL, и вставьте его в браузер. В WSL2, по SSH и в контейнерах после входа браузер может показать код входа — вставьте его в терминале в поле Paste code here if prompted. Когда появится Login successful, нажмите Enter, чтобы вернуться.
Если вставка кода не срабатывает, войдите из оболочки
В терминалах, где вставка в поле ввода не доходит, попробуйте другой способ: правый клик в Windows Terminal или Shift+Insert. Если и это не помогает, выполните в оболочке claude auth login. Эта команда читает вставленный код из стандартного ввода, поэтому, как указывает документация, работает и в нативной Windows.
Проверьте ответ коротким запросом и вернитесь к работе
Не отправляйте сразу исходный большой запрос — сначала один короткий проверочный, без работы с файлами. Когда ответ придёт, проверьте, докуда дошла работа, и отправьте сохранённый запрос заново.
# В поле ввода Claude Code
/status
/login
# Если вставка в поле ввода не работает (выполнить в оболочке)
claude auth login
Если сообщение появилось в claude -p или CI
В неинтерактивном режиме войти через браузер нельзя. Официальный порядок действий: в том же окружении один раз запустить claude в интерактивном режиме, выполнить /login и затем повторить исходную команду. Для автоматизации, где интерактивный вход невозможен, используйте API-ключ Console (ANTHROPIC_API_KEY, оплачивается как использование API) или долгосрочный токен из claude setup-token.
claude setup-token
# После подтверждения в браузере токен выводится в терминал (нигде не сохраняется)
export CLAUDE_CODE_OAUTH_TOKEN=показанный_токен
Согласно официальной документации по аутентификации, этот токен действует 1 год и требует одного из планов Pro, Max, Team или Enterprise. Он подходит только для запросов к модели и не работает для Remote Control и коннекторов claude.ai. При запуске с --bare эта переменная не читается, поэтому используйте API-ключ или apiKeyHelper. Если истечёт или станет недействительным сам этот токен, вы увидите не Login expired, а сообщение OAuth token revoked / expired.
Если не удаётся сам вход
Официальное руководство по устранению неполадок на случай, когда причина неясна, предлагает сброс: /logout → закрыть Claude Code → снова запустить claude и войти. /logout также сбрасывает состояние первоначальной настройки, поэтому при следующем запуске придётся заново пройти вход и начальную настройку. Все сохранённые учётные данные удаляются, так что вход в MCP-серверы и секреты плагинов тоже придётся ввести заново. Если появилось OAuth error: Invalid code, значит, код входа истёк или скопировался не полностью: завершите вход сразу после открытия браузера и копируйте URL целиком клавишей c.
4. Как убедиться, что всё исправлено
Не считайте проблему решённой только потому, что ошибка один раз не появилась. Проверьте три вещи.
Вывод /status
Исчезло ли Expired — log in again в строке Login и совпадают ли организация и почта с нужным аккаунтом. Если есть и вход, и API-ключ, неиспользуемый вариант помечается
Код завершения claude auth status
По официальному справочнику CLI команда завершается с кодом 0, если вход выполнен, и с кодом 1, если нет. Удобно для предварительной проверки в скриптах
Приходит ли короткий ответ
Проходят ли запросы к модели на самом деле, становится ясно только после ответа. Проверочный запрос расходует лимит как обычно
# Вывод в удобочитаемом виде
claude auth status --text
# Код завершения (macOS, Linux)
claude auth status; echo $?
# Код завершения (PowerShell)
claude auth status; $LASTEXITCODE
Для проверки ответа можно отправить, например, такой текст.
Это проверка связи. Не читай и не изменяй файлы, не вызывай инструменты —
просто ответь «Ответ получен».
5. Что проверить, если сообщение повторяется
Если сообщение появилось один раз, достаточно /login. Если оно возвращается раз в несколько дней или почти каждый день, проверьте пункты ниже по порядку. Всё это взято из официальной документации или CHANGELOG — пунктов, добавленных по догадке, здесь нет. Прежде всего убедитесь, что версия не устарела.
claude --version
claude update
Параллельные сессии и выход из сна
По данным документации, параллельные сессии на одном компьютере используют общий сохранённый вход, а продление выполняет один процесс за раз. До v2.1.211 при выходе из сна две сессии могли продлевать вход одним и тем же токеном, из-за чего сохранённый вход аннулировался и все сессии разом просили войти
На том же компьютере работает старая сборка
В CHANGELOG для v2.1.277 указано исправление неожиданного выхода из аккаунта, когда на том же компьютере работает старая сборка, например CLI, встроенный в расширение IDE. Какой текст сообщения при этом появлялся, не сказано. Обновите и CLI, и расширение IDE
Связка ключей macOS
Если связка ключей заблокирована или её пароль не совпадает с паролем учётной записи, запись отклоняется, и вход сохраняется открытым текстом в ~/.claude/.credentials.json. Верните возможность записи по шагам ниже. Дополнение от 26 сентября 2026 года: в CHANGELOG для v2.1.281 указано исправление ошибки, из-за которой запись в заблокированную связку ключей (например, сразу после выхода из сна) могла удалить её элемент
Системные часы
Официальное руководство по устранению неполадок указывает, что проверка токенов зависит от правильного времени, и советует, если вход запрашивается часто, убедиться в точности часов. Включите автоматическую синхронизацию времени в ОС
Несколько аккаунтов и CLAUDE_CONFIG_DIR
Если задан CLAUDE_CONFIG_DIR, учётные данные хранятся в этой папке, и элементы связки ключей macOS тоже разделяются по папкам. Если выполнить /login с другим значением, чем в сессии с сообщением, вход попадёт в другое хранилище
Сообщение не исчезает после повторного входа
До v2.1.235 приостановка аккаунта тоже показывалась как Login expired. Если в старой версии /login не помогает, обновитесь и посмотрите на сообщение ещё раз
Как вернуть возможность записи в связку ключей macOS
Это шаги из официального руководства по устранению неполадок. Если в отчёте claude doctor нет предупреждения, начинающегося с macOS Keychain is not writable, запись в связку ключей возможна — выполните только шаг 4.
- Проверьте доступ к связке ключей через
claude doctor - Если есть предупреждение, снимите блокировку командой ниже и снова выполните
claude doctor - Если после разблокировки предупреждение осталось, выберите в «Связке ключей» (Keychain Access) связку
loginи через пункт из официальной инструкцииEdit > Change Password for Keychain "login"(название пункта в английском интерфейсе) приведите её пароль в соответствие с паролем учётной записи - Когда предупреждение исчезнет, выполните
/logout→/login. Вход снова сохранится в связку ключей
claude doctor
security unlock-keychain ~/Library/Keychains/login.keychain-db
Исчезнет ли сообщение, если перейти на API-ключ
Исчезнет, но изменится схема оплаты. По официальному порядку приоритета ANTHROPIC_API_KEY после одобрения имеет приоритет над входом через /login, а в неинтерактивном режиме -p используется всегда, если задан. В это время оплата идёт не из подписки, а как использование API в Console. Заводить API-ключ только ради того, чтобы избежать Login expired, мы не советуем. Если цель — запуск без присмотра, лучше подойдёт claude setup-token, который работает с подпиской.
6. Случаи из отчётов, причина которых не установлена
В репозитории Claude Code на GitHub есть отчёты об ошибках, содержащие именно это сообщение. 22 сентября 2026 года мы открыли и прочитали следующие 6. Все они — сообщения и предположения пользователей; в прочитанной части публичного ответа Anthropic нет. Одинаковые симптомы не обязательно означают одну причину, поэтому не повторяйте описанное как инструкцию, а используйте для сравнения со своей ситуацией.
- #94464 (macOS, CLI 2.1.270): в окружении, где Claude Code, встроенный в десктопное приложение Claude, и CLI в терминале используют один
~/.claude, в терминале почти ежедневно появляется Login expired. Автор предполагает, что встроенная версия записывает продлённый токен только в файл, а в связке ключей остаётся старый. В дополнении сообщается о тех же симптомах в 2.1.273 - #88583 (macOS, 2.1.229 из комплекта десктопного приложения): параллельные сессии конкурируют за продление, и учётные данные в связке ключей обнуляются. В дополнении есть пример с Windows 2.1.251, где появилось
Failed to authenticate: OAuth session expired and could not be refreshed - #88947 (Linux, 2.1.228–2.1.240): в окружении, где 10–24 интерактивные сессии используют один
~/.claude, все сессии получают Login expired с интервалом не больше недели - #95822 (macOS): короткоживущие команды вроде
claude auth statusначинают продление при запуске и завершаются, не сохранив результат, так что остаётся уже использованный refresh-токен. Инструмент мониторинга запускал такую команду каждые несколько минут (наблюдалось в 2.1.259). Запускатьclaude auth statusиз раздела 4 с коротким интервалом лучше не стоит - #83834 (Windows, 2.1.221): Login expired появляется даже сразу после входа, а срок действия в файле учётных данных был равен 0. В дополнении то же самое сообщается для Linux 2.1.241
- #80605 (macOS, 2.1.218): сообщение не исчезало даже после удаления учётных данных и связки ключей и переустановки, а
/loginне открывал экран входа. На следующий день войти удалось, но автор пишет, что не знает, что именно помогло (закрыт)
Первые четыре случая объединяет одно: на одном компьютере несколько процессов используют один и тот же сохранённый вход. Если сообщение повторяется, запишите, сколько экземпляров Claude Code работает одновременно (CLI в терминале, расширение IDE, десктопное приложение, фоновые сессии), — это поможет точно описать ситуацию в отчёте.
7. Какие сведения собрать, если ничего не помогает
Официальное руководство по устранению неполадок называет четыре пути на случай, если проблема не решается.
- Получить отчёт автоматической диагностики через
claude doctor - Если сессия открывается, сообщить о проблеме через
/feedbackв поле ввода - Поискать известную проблему в Issues на GitHub, а если её нет — создать новый отчёт с ОС, способом установки и полным текстом ошибки
- При проблемах на стороне аккаунта, например бесконечном цикле входа, войти в claude.ai (пользователям Console — в platform.claude.com) и обратиться в поддержку через инициалы в левом нижнем углу → «Get help»
Шаблон заметки для отчёта
- Окружение
- Вывод
claude --version/ ОС / способ установки (нативный, npm, встроенный в десктопное приложение и т. п.) - Сообщение
- Полный текст ошибки / время возникновения и часовой пояс / строка Login из
/status(почту скройте) - Обстоятельства
- Сколько и каких экземпляров Claude Code работало одновременно / было ли это сразу после выхода из сна или обновления
- Что пробовали
- Что изменилось до и после
/login,/logout, проверки связки ключей и т. п.
8. Итоги
«Login expired · Please run /login» появляется после того, как продление сохранённого входа отклонено и Claude Code удалил учётные данные. Запрос останавливается на компьютере, поэтому повтор не помогает: если вы хотите и дальше пользоваться сохранённым входом, остаётся только войти заново через /login. Проверьте через /status, у какого аккаунта истёк вход, войдите в тот же аккаунт и убедитесь, что пришёл короткий ответ, — на этом всё.
Если сообщение повторяется, проверяйте по порядку: обновление версии, старые сборки и расширения IDE на том же компьютере, связку ключей macOS, часы и CLAUDE_CONFIG_DIR. С Not logged in, когда учётных данных нет вообще, и с OAuth token has expired, когда запрос отклонил API, действия другие, поэтому сначала сверьте текст сообщения. Другие ошибки собраны в статье «Частые ошибки Claude Code и способы их исправить».
FAQ
В. Что означает «Login expired · Please run /login»?
О. Claude Code попытался автоматически продлить сохранённый вход, получил отказ и удалил сохранённые учётные данные. Дальнейшие запросы не отправляются в API и останавливаются на компьютере. Помогает повторный вход через /login.
В. Поможет ли несколько повторных попыток?
О. Нет. Учётные данные уже удалены, и в документации сказано, что повтор без входа каждый раз приводит к тому же сообщению. Создать новые учётные данные может только /login.
В. Значит, закончилась подписка?
О. По одному этому сообщению сказать нельзя. Официальное описание говорит лишь о том, что продление сохранённого входа отклонено. Если приостановлен сам аккаунт, появляется другое сообщение — «Your account is on hold». Состояние плана проверьте после повторного входа через /status или в настройках claude.ai.
В. Чем это отличается от Not logged in?
О. Not logged in означает, что в этой сессии изначально нет пригодных учётных данных. Login expired — сохранённый вход был, но его не удалось продлить, и он удалён. В обоих случаях помогает /login, но при Not logged in стоит ещё проверить, загружена ли нужная переменная окружения.
Первоисточники
- Claude Code — Error reference (официальная документация): определения сообщений Login expired, Not logged in, OAuth token revoked or expired, Your account is on hold и Remote Control, изменения в v2.1.206 и v2.1.235
- Claude Code — Authentication (официальная документация): где хранятся учётные данные, предупреждение за 3 дня до истечения, строка Login в
/status, приоритет способов аутентификации,claude setup-token - Claude Code — Troubleshoot installation and login (официальная документация): сброс входа, вставка кода в WSL2 и по SSH, продление в параллельных сессиях, восстановление связки ключей macOS, каналы поддержки
- Claude Code — CLI reference (официальная документация):
claude auth login, коды завершенияclaude auth status - anthropics/claude-code — CHANGELOG (официальный): v2.1.203 (предупреждение до истечения), v2.1.206 (подсказка /login вместо ошибки модели), v2.1.211 (массовый выход при выходе из сна), v2.1.217 (предупреждение за 3 дня), v2.1.277 (выход из-за соседства старой сборки), v2.1.281 (запись в заблокированную связку ключей)
- GitHub Issues: #94464, #88583, #88947, #95822, #83834, #80605 (все — сообщения пользователей; проверено 22 сентября 2026 года)