로그인 만료로 밤샘 작업이 멈출 때
아침에 보니 Claude Code가 "Login expired · Please run /login"이나 "Authentication failed"에서 몇 시간째 멈춰 있었다면, 밤사이 로그인이 끝난 것입니다. 작업은 오류로 끝났지만 아무도 알려 주지 않았습니다.
왜 생기나요
Claude 구독으로 로그인한 Claude Code는 짧게 사는 접근 토큰을 쓰고, 만료되면 저장된 갱신 토큰으로 새로 받습니다. 갱신이 실패하면(세션이 너무 오래됐다고 거절되거나, 여러 세션·데스크톱 앱이 같은 갱신 토큰을 동시에 쓰다 꼬이거나) 다음 요청이 인증 오류로 끝나고, 그 턴은 거기서 멈춥니다. 사람이 앞에 있으면 /login 한 번이면 되지만, 밤새 맡겨 둔 작업은 그대로 아침까지 서 있습니다.
같은 일을 겪은 사람이 많습니다: 새벽 로그인 만료로 서브에이전트가 8.5시간 멈춤(#104806), 데스크톱 앱이 "Authentication failed - sign in again"에서 원격으로 되살릴 수 없음(#106089), 동시 세션이 갱신 토큰을 덮어써 키체인 로그인이 지워짐(#88583), 무인 작업용 토큰 갱신 요청(#12447).
직접 대비하는 법
① 멈추면 바로 알림 받기: Claude Code는 API 오류로 턴이 끝나면 StopFailure 훅을 부르고, 입력 JSON의 error에 authentication_failed 같은 값을 넣습니다. ~/.claude/settings.json에 이렇게 등록하고 스크립트에서 osascript -e 'display notification "run /login" with title "Claude Code stopped"'로 알리면 됩니다. 휴대폰으로 받으려면 같은 스크립트에서 curl -d "run /login" https://ntfy.sh/<내-토픽>을 더하세요. 그대로 쓸 수 있는 스크립트: stop-failure-alert.sh.
{ "hooks": { "StopFailure": [ { "matcher": "authentication_failed",
"hooks": [ { "type": "command", "command": "~/.claude/hooks/stop-failure-alert.sh" } ] } ] } }한계: Claude Code 2.1.317에서 잘못된 키로 authentication_failed가 훅에 들어오는 것까지 확인했고, 실제 구독 로그인이 한밤중에 끝나는 경우와 서브에이전트만 실패하는 경우는 직접 재현하지 못했습니다. 알림은 알려 줄 뿐 다시 로그인해 주지는 않습니다.
② 만료 자체를 줄이기: 무인 작업이 잦다면 claude setup-token으로 장기 인증 토큰을 만들 수 있습니다(Claude 구독 필요). 만든 토큰은 비밀번호처럼 다루고, 셸 기록·저장소에 남기지 마세요. 여러 세션과 데스크톱 앱을 동시에 띄우면 갱신이 꼬일 수 있으니(#88583) 밤새 돌릴 세션 수를 줄이는 것도 도움이 됩니다.
Lidnight로
Lidnight는 설치할 때 Claude Code에 StopFailure 훅을 함께 넣어, 로그인 오류로 끝난 세션을 알아봅니다. 그러면 "로그인이 끝나 멈췄어요: <프로젝트>" Mac 알림을 바로 띄웁니다(무료, 설정의 '멈춘 것 같을 때' 알림, 기본 켬). 훅이 없는 옛 세션·Codex는 대화 기록의 오류 문구(/login, 401 등)로 판단합니다. Pro에서는 같은 알림이 휴대폰(ntfy)으로도 갑니다. 한도 대기와는 구분해서, 한도에 걸린 세션을 로그인 문제로 알리지 않습니다. 다시 로그인은 직접 하셔야 합니다. 자리 비운 사이 Claude Code가 한 일 확인하기
Lidnight 무료로 써 보기
Apple Silicon Mac · macOS 13 이상. 받으면 뚜껑 닫기 5회(최대 14일)까지 Pro 기능을 모두 써 볼 수 있고 결제 정보는 필요 없습니다. Pro는 한 번 결제(1대 $9.99 · 3대 $14.99), 14일 안 환불.