A few days ago, an automated task that had been running all night suddenly stopped.
There was no familiar 429 in the terminal, and no network timeout either, just one short line:
Login expired · Please run /login
My first reaction was that the model service had flaked out again. But the logs showed dozens of rounds had run fine before it broke in the small hours. After more digging, I found Claude Code hadn’t crashed. The saved claude.ai login on that machine had simply expired.
This one is sneaky. When you’re sitting at your computer during the day, a reminder pops up as the login nears expiry, and you just type /login to renew it. But once Claude Code is running in a background session, Remote Control, a scheduled task or claude -p, nobody is there to confirm, and at some point it quietly loses the ability to work.



